DR-027 — Ontology CV medium: effective ontology ships in the bundle; base source-of-truth in the platform repo
Base system CVs — scope: the OKF concept/entity/relationship vocabulary — move out of the docs-site into the canonical repo (they version with the linter that enforces them — platform functionality must not couple to the docs-site); client overlay CVs are client-owned. The 37-CV Layer-1 markdown register in the docs-site is a human-contract mirror, out of this ruling’s scope (clarified S499). Every bundle repo carries the materialised effective ontology (pinned base snapshot + client overlay) so a bundle is self-describing and portable (vault-ld precedent: ontology/vocab/instances co-located under one composed context — which also makes later RDF/JSON-LD export mechanical). Evidence: S441 ratification board R6 + https://github.com/The-Knowledge-Graph-Guys/vault-ld.
Amendment (owner, S546) — the bundle-shipped base snapshot retires; the overlay carrier stays
Section titled “Amendment (owner, S546) — the bundle-shipped base snapshot retires; the overlay carrier stays”F6 ruling (id-430), determined against the owner’s two planes — a zero-data-strategy
client’s scaffolding, and organic growth valuable to humans and agents — and confirmed by
the owner: ontology.json reduces to the client-overlay carrier (DR-054’s slot,
corpus-reframe R6’s requirement). The base half — the pinned bundle-shipped snapshot of
the platform vocabulary — retires from the bundle: measured S546, nothing consumes it
(zero repo readers of base; the shipped artefact had already drifted stale against the
writer, 2 dimensions on disk vs 3 emitted), and under DR-141’s open concept vocabulary a
closed declaration would assert something false. The bundle self-describes the OKF-native
way — through its concepts and the id-429 per-directory indexes — rather than by shipping
a schema registry alongside them (“there is no schema registry, no central authority, and
no required tooling”, OKF §1). The platform-repo half of this ruling is UNCHANGED: base
CVs still live in the canonical repo and version with the linter that enforces them; they
are simply no longer asserted to bundle consumers. Implementation rides id-427’s wave
(write_ontology_artefact, _base_ontology_snapshot, the iri_projection/
context.jsonld interplay). Executed by: id-430 (ruling), id-427 (code).
Extended (S546, owner-delegated ruling TQ-1): context.jsonld’s base-only projection
retires on the same ground — overlay-driven emission only; the entity/relationship
vocabulary is no longer asserted to bundle consumers through either artefact.
Amendment (S548) — TQ-1’s stated ground was measured false; the ruling stands on the other one
Section titled “Amendment (S548) — TQ-1’s stated ground was measured false; the ruling stands on the other one”The S546 TQ-1 extension above retires context.jsonld’s base-only projection on the
stated ground that “a consumer-asserted vocabulary artefact with no consumer and no
requirement source is not emitted.” That premise is false, and was measured false at
S548 before any code executed it.
context.jsonld has a consumer, and a rendered one: lib/okf/bundle-graph.ts reads its
@context to derive each node’s iriScope, lib/okf/concept-type-tokens.ts
(resolveIriScopeBorderColor) maps that to a colour, and
components/okf/concept-graph.tsx applies it as the node border colour — one of the
four documented {132.49} visual channels (shape = bundleClass, border = iriScope,
opacity = confidence, edge colour = relationship).
The retirement stands, on this decision’s other and stronger ground: the base CV should not be asserted to bundle consumers at all. But it must not be re-derived from the “no consumer” claim later, which is why this amendment exists.
Two further facts measured at S548, both of which change the cost calculus rather than the ruling:
- The channel has been broken since {427.5}, silently.
context.jsonldmints 22 terms acrossentity_types+relationship_typesonly — {427.5} correctly dropped theconcept_typesrow, since an open label (DR-141) has no base register to classify against. Butbundle-graph.tsstill resolves a concepttypeagainst that map. Of the 13 concept types the producer emits, exactly 2 resolve —certificationandproduct— and only by accidental term collision with the ENTITY vocabulary. Today’s border colour is a coincidence, not a signal. Executing TQ-1 therefore costs nothing real: an accidental 2/13 becomes a clean 0/13. - The vendored OKF SPEC contains zero occurrences of
context.jsonld. The artefact is our own bl-457/DR-082 extension, not a format requirement.
Owner ruling (S548): retire the vocabulary, keep the channel. The base projection
retires as this decision says, and the iriScope channel is re-sourced rather than
left vestigial — a rendered channel that means nothing is the defect, not the fix.
Executed by tasks/id-427.md {427.14}, which also resolves TQ-1a (which of the two
emission readings is meant) in the doing rather than in the abstract, and carries the
candidate re-source: ontology.json’s surviving overlay key, which changes what the
channel MEANS (client-declared vs not, rather than base vs client) and is therefore a
product call to surface, not to ship silently.
Execution record (S550) — {427.14} landed; TQ-1a did NOT resolve
Section titled “Execution record (S550) — {427.14} landed; TQ-1a did NOT resolve”The base projection is retired: iri_projection.project_context mints client-overlay terms
only, the base namespace-prefix key is gone, and a bundle composing no overlay emits
{"@context": {}}. The iriScope channel was re-sourced onto ontology.json’s
overlay.concept_types echo (now typeDeclaration: 'client-declared' | 'undeclared'),
its two retired border tokens replaced by one, and the {132.49} legend collapsed to a
single entry — so nothing vestigial renders. Two corrections to this decision’s own S548
amendment, both measured: the producer emits 10 distinct concept-type labels, not 13
(the 2/13 figure above should read 2/10); and the overlay’s concept_types never
reaches context.jsonld at all, because EffectiveOntology.compose ignores that key — the
structural reason the channel had to move to ontology.json.
TQ-1a remains OPEN. {427.14} could not name a requirement whose current source
discriminates the two emission readings: both satisfy “declare the client’s overlay
vocabulary” vacuously on a no-overlay run, and the only discriminator is whether a consumer
can observe the difference — which is the consumer-counting ground this amendment exists to
stop being re-derived. OV-10 does not settle it by analogy: measured, ontology.json’s
present-and-null overlay IS observably different from an absent file to its consumer,
while an empty @context and a missing context.jsonld are not distinguishable to any
reader. Reading (b) — always written — shipped as the reversible default, not as a ruling.
Open product call for the owner. The re-sourced channel answers a different question, so
a platform-baseline bundle’s nodes now render the NEUTRAL border rather than a positive one,
and the channel is partly collinear with bundleClass (already the node shape) since only a
client bundle can declare anything. If that collinearity is judged fatal the honest outcome
is retiring the channel outright; its token and legend entry are each a single site now.