ONP-2000
Open News Protocol (ONP): Companion Framework
Abstract
This document is the entry point to the ONP Companion series
(ONP-2100-2800). It does not define any specific Companion — not
Article, not Media, not Rights — but fixes the scaffolding every
Companion specification MUST share: the content_type namespace
registration process, mandatory additions to the universal
specification template (ONP-0000 Section 3.2) that every Companion
document MUST include, and the Object Reference mechanism by which
one News Object points to another by OID. That last piece closes a
gap: the informal architecture draft this series formalizes
(draft-onp-architecture-00) had a Relationship Model section that
ONP-0001's formalization did not carry forward. This document is
where it is restored, in the place it actually belongs — the
Companion series is where cross-Object relationships (an Article
referencing Media, an Event referencing Sources) will be used
constantly.
Status of This Document
This document is part of the ONP Companion series (ONP-2000-2999) and is its framework document, numbered 2000 per the roadmap (ONP-0000 Section 4.1). It is normative and binding on every future Companion specification. It is a Working Draft.
Normative Language
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174], per the interpretation established in ONP-0000.
1. Introduction
Core (ONP-1000-1005) is now complete, small, and — per Principle P6 (Core Immutability Bias, ONP-0003) — meant to stay that way. Every domain-specific concept the roadmap names (Article, Media, Identity, Rights, Payments, Sources, Corrections, Comments) belongs in a Companion instead. Before any of those are written, this document fixes what they all have in common, so that each individual Companion specification can focus entirely on its own domain content rather than re-deriving registration process, template structure, or cross-referencing mechanics independently.
2. Scope
2.1 In Scope
- the
content_typenamespace registration process; - mandatory additions every Companion specification MUST make to the universal template (ONP-0000 Section 3.2);
- the Object Reference mechanism: how a field within
content(or within an Extension namespace) points to another News Object by OID, and what that reference does and does not imply.
2.2 Out of Scope
This document does NOT define:
- any specific Companion's content schema (ONP-2100 onward);
- the Companion-vs-Extension decision test itself, which remains normatively owned by ONP-0001 Section 4.4 — this document only requires that test be explicitly reapplied and its result stated in every new Companion's own Scope section (Section 4.2);
- Extension namespace registration, which is ONP-3000's concern, not this document's, though the registration mechanics (Section 4.1) are deliberately similar so both series stay consistent.
3. Terminology
This document is the owning specification for the following terms.
Companion Namespace
: A registered content_type identifier of the form
onp:companion:<name>, unique across the entire ONP series.
Object Reference
: A field value, within content or within an Extension namespace,
consisting of another News Object's OID (lineage reference) or VID
(exact-version reference), used to relate one Object to another
without transferring ownership, custody, or control (Section 4.3).
Reference Target : The News Object (or, for a VID-form reference, the exact Version) an Object Reference identifies. A Reference Target's existence, reachability, or validity is never a precondition for the referencing Object's own Core validity (Section 4.4).
4. Requirements
4.1 Companion Namespace Registration
- Every Companion specification MUST register a unique
content_typeidentifier of the formonp:companion:<name>, where<name>matches the grammar1*32( ALPHA-LOWER / DIGIT / "-" ), mirroring the algorithm-identifier grammar already fixed in ONP-1001 Appendix A for consistency across the series. - This registration MUST occur in ONP-0002, alongside that
Companion's other new terms, as part of its own publication — no
separate registry is introduced; a
content_typeidentifier is registered exactly like any other ONP term (ONP-0002 Section 4.1), with its exact wire-form string stated in the gloss. - A
content_typeidentifier, once registered, MUST NOT be reused for a different Companion, consistent with the general non-reuse discipline already established for Specification numbers (ONP-0000 Section 3.1) and Local Identifiers (ONP-1001 Section 4.2).
4.2 Mandatory Companion Document Additions
Every Companion specification (ONP-2100 through ONP-2800) MUST, in addition to the universal template (ONP-0000 Section 3.2), include:
- An explicit statement of its registered
content_typeidentifier, in its Scope section. - An explicit reapplication of the Companion-vs-Extension decision test (ONP-0001 Section 4.4 / Appendix B), with its result stated and justified — even where the classification seems obvious, the test MUST be shown applied, not merely asserted, consistent with how ONP-0001 Section 7.2 modeled this for the Rights Companion as a worked, non-obvious example.
- Its
contentschema: required and optional fields, following the same Minimal Required Surface discipline (Principle P2, ONP-0003) Core itself follows. - An explicit statement of its relationship to
onp:metadata(ONP-1005 Section 4.3): which of its owncontentfields, if any, are the "more specific equivalent" that takes precedence over a genericonp:metadatafield for a Companion-aware Node.
4.3 Object Reference Mechanism
- A field that relates one News Object to another MUST express that relationship as the Reference Target's identifier, given as a plain string in one of two forms: * an OID (ONP-1001 Appendix A), referencing the lineage as a whole — a Node resolving it follows ONP-0006 Section 6.1 to find whatever is currently the Current Version; * a VID (ONP-1001 Appendix A), referencing one exact, immutable Version — a Node resolving it MUST NOT substitute any other Version in the same lineage, even a later one, since pinning to a specific, unchanging Version is the entire purpose of using VID form instead of OID form.
- A Companion or Extension specification introducing a new reference field MUST state explicitly, in its own Requirements section, which form (OID or VID) that field uses and why — "whatever is current" (OID) and "this exact version, permanently" (VID) are different guarantees, and a reader MUST NOT be left to guess which one a given field provides.
- A Companion or Extension specification MUST NOT embed a full Reference Target Object inline as a substitute for a proper Object Reference. Doing so would let one Object absorb another's independent identity, which contradicts a Companion Object's own Core-owned identity (every News Object has its own OID/VID/ signature by construction, ONP-1000) and the general principle that a reference relates independent things rather than merging them.
- An Object Reference MUST NOT be interpreted as transferring ownership, custody, editorial control, or trust from the Reference Target to the referencing Object, or vice versa. The Reference Target remains independently owned, signed, and versioned by whichever publisher actually controls it.
Correction note (v0.2.0): version 0.1.0 of this document supported OID form only. While designing ONP-2700 (Corrections), it became clear that pinning precisely to "this exact version was wrong, this exact version fixed it" requires referencing an immutable Version, not a lineage that may have moved on since. VID form is added here rather than inventing a separate mechanism, since the underlying pattern — a plain string identifier resolved per ONP-0006 or held exact — is otherwise identical.
4.4 Reference Integrity Is Not a Core Concern
- A Node MAY verify a Reference Target if it can locate it, but a
referencing Object's own Core validation (ONP-1004) MUST NOT
depend on whether any Object Reference within its
contentcan be located, dereferenced, or independently verified. - An unreachable or even entirely fictitious Object Reference is a
content-quality concern for the referencing Companion (and,
ultimately, Application-level policy, per ONP-1004 Section 4.6)
to handle, never a Core-level validation failure. This preserves
content opacity (ONP-1000 Section 4.4; ONP-1002 Section 4.7):
Core does not, and must not, reach into
contentto check whether a reference resolves.
4.5 Cross-Companion Reference Direction
Any Companion MAY reference any other Companion's Objects by OID (for example, a future Article referencing a Media Object, or an Event referencing a Source). This document does not restrict which Companions may reference which others; an individual Companion specification MAY impose its own restrictions if its domain requires them, but MUST NOT assume such a restriction is implied by this document.
5. Object Model
5.1 Companion Namespace Registry Entry
Registered in ONP-0002 per Section 4.1, using the existing
Terminology Registry Entry structure (ONP-0002 Section 5.1), with
the gloss stating the exact content_type wire string, e.g.:
term: Article (Companion)
owning_document: ONP-2100
gloss: content_type = "onp:companion:article" — [description]
status: active
5.2 Object Reference (Illustrative Field Convention)
{
"content": {
"...": "Companion-specific fields",
"media_refs": [
"onp:oid:regiopurmerend.nl:foto-fusie-bijeenkomst-01"
]
}
}
media_refs here is illustrative of the convention, not a
normatively fixed field name — each Companion names its own
reference fields; this document only fixes that whatever such a
field is called, its values MUST be OID strings (Section 4.3).
6. Processing Model
6.1 Companion Registration Process
1. Apply the Companion-vs-Extension decision test (ONP-0001
Section 4.4). Document the result.
2. Choose a content_type name; confirm it is not already
registered (ONP-0002).
3. Draft the Companion specification per ONP-0000's universal
template plus this document's Section 4.2 additions.
4. Register the content_type and every new term the specification
introduces in ONP-0002, per that document's Section 4.1.
5. Undergo Principles Review (ONP-0003 Section 6.1) and Security
Review (ONP-0005 Section 6.3) before Candidate status, per
ONP-0007 Section 4.5.
6.2 Reference Resolution
A Node encountering an Object Reference MAY attempt to locate the Reference Target via whatever channel it has available — the publisher's own site, a feed, a cache — subject to the same "no global resolver" rule already established for OID lookups generally (ONP-1001 Section 4.6). If located, the Node MAY verify the Reference Target through the ordinary Core validation pipeline (ONP-1003 Section 6.1) like any other Object. If not located, the referencing Object's own validity is unaffected (Section 4.4).
6.3 Interoperability, and Its Honest Limit
A Node implementing only Core (ONP-1000-1005), with no Companion
support, cannot discover or follow Object References at all — they
live inside content, which is opaque to such a Node by design
(ONP-1000 Section 4.4). This is a deliberate, accepted limit, not an
oversight: Object References are a Companion-level concept, visible
only to Nodes that implement the specific Companion whose schema
defines them. A Core-only Node's inability to see them is the
correct behavior, not a gap this document needs to close.
7. Examples
7.1 An Illustrative Cross-Companion Reference
{
"oid": "onp:oid:regiopurmerend.nl:fusie-onderzoek-necker-van-naem",
"content_type": "onp:companion:article",
"content": {
"headline": "Fusie-onderzoek Purmerend gepubliceerd",
"media_refs": [
"onp:oid:regiopurmerend.nl:foto-fusie-bijeenkomst-01"
]
}
}
A Node implementing the (future) Article Companion recognizes
media_refs as an array of Object References and MAY fetch and
verify the referenced Media Object independently. A Core-only Node
sees only an opaque content blob and has no way to know a
reference exists inside it (Section 6.3) — both behaviors are
correct for what each Node implements.
8. Security Considerations
An Object Reference carries no inherent trust. A syntactically valid
OID appearing inside content proves nothing about the Reference
Target's actual existence, authenticity, or relationship to the
referencing Object beyond what the referencing Companion's own
publisher asserts. A Node MUST independently run full Core validation
(ONP-1003 Section 6.1) on any Reference Target it chooses to
dereference, exactly as it would for any other Object; it MUST NOT
treat a referenced Object as pre-verified or more trustworthy merely
because a Core-authenticated Object referenced it. Trust does not
propagate across an Object Reference in either direction (Section
4.3, rule 3).
9. Privacy Considerations
Object References can expose relationship graphs a publisher may not intend to make fully explicit — most notably, a future Sources Companion (ONP-2600) referenced from an Article could reveal which sources contributed to a story, a genuinely sensitive category in investigative journalism where source protection is a professional and sometimes legal obligation. This document does not mandate any specific mitigation, but publishers and the Sources Companion specification itself SHOULD consider whether, and how, a Reference Target's identity can be selectively withheld, aggregated, or anonymized when the referenced Source has a legitimate interest in not being explicitly linked, rather than assuming every relationship worth modeling is safe to make an explicit, publicly verifiable Object Reference.
10. References
10.1 Normative References
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119.
- [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174.
- ONP-0000, Introduction — Section 3.2 (universal template, extended
here) and Section 3.1 (non-reuse discipline, applied to
content_typein Section 4.1). - ONP-0001, Architecture — Section 4.2 (Companion Requirements) and Section 4.4 (the decision test this document requires every Companion to reapply explicitly).
- ONP-0002, Terminology — Section 4.1 (registration process),
applied here to
content_typeidentifiers. - ONP-0003, Design Principles — Principle P2 (Minimal Required Surface) and Principle P6 (Core Immutability Bias), both motivating why domain content belongs here, not in Core.
- ONP-0007, Versioning Policy — Section 4.5 (Status Transition preconditions), applied to Companion publication in Section 6.1.
- ONP-1000, News Object — Section 4.4 (
content_typemechanism, content opacity). - ONP-1001, Identifiers — the OID grammar (Appendix A) Object References MUST match, and Section 4.6 (no global resolver requirement).
- ONP-1002, Serialization; ONP-1004, Validation — content opacity restated at the canonicalization and validation levels, underpinning Section 4.4 of this document.
- ONP-1005, Core Metadata — Section 4.3 (precedence rule), which Section 4.2, rule 4 of this document requires every Companion to address explicitly.
10.2 Historical Reference
draft-onp-architecture-00, Section 12 ("Relationship Model") — the informal precedent for the Object Reference mechanism formalized in this document. ONP-0001's formalization of that draft did not carry this section forward; this document is where the gap is closed, in the series location where it is actually used.
10.3 Informative References
- ONP-2100, Article (forward reference — the first Companion expected to use Object References in practice, per Section 7.1).
- ONP-2600, Sources (forward reference — the Companion whose privacy considerations, Section 9, most directly motivate caution around Object References).
Appendix A: Companion Namespace Registry
This table is updated as each Companion specification is published.
As of onp:companion:comments (ONP-2800), every Companion named in
ONP-0000 Section 4.1's original roadmap (2000-2800) has been
published. Future Companions beyond this original set remain
possible and follow the same registration process (Section 4.1).
| content_type | Owning Document | Status |
|---|---|---|
onp:companion:article |
ONP-2100 | active |
onp:companion:media |
ONP-2200 | active |
onp:companion:identity |
ONP-2300 | active |
onp:companion:rights |
ONP-2400 | active |
onp:companion:payments |
ONP-2500 | active |
onp:companion:sources |
ONP-2600 | active |
onp:companion:corrections |
ONP-2700 | active |
onp:companion:comments |
ONP-2800 | active |
Appendix B: Companion Publication Checklist
[ ] Companion-vs-Extension decision test applied and documented
(ONP-0001 Section 4.4)
[ ] content_type chosen, checked against ONP-0002 for collisions
[ ] Universal template followed (ONP-0000 Section 3.2)
[ ] content_type registered in ONP-0002
[ ] Every new term registered in ONP-0002
[ ] content schema follows Minimal Required Surface (ONP-0003 P2)
[ ] onp:metadata precedence relationship stated explicitly
(ONP-1005 Section 4.3)
[ ] Any Object Reference fields use OID or VID strings only (with
the choice of form stated and justified), no inline
embedding (Section 4.3 of this document)
[ ] Principles Review passed (ONP-0003 Section 6.1)
[ ] Security Review passed (ONP-0005 Section 6.3)
End of Document