DR-054 — Client-CV-overlay contract: reserved additive JSON, fail-loud composition
Refines DR-027. The client ontology overlay is a reserved ontology-overlay.json at the
client bundle-repo root: a closed, additive-only JSON schema that may WIDEN legality
but never remove or redefine base entries; unknown keys and parse/validation failures
FAIL-LOUD and abort the producer run — deliberately contra DR-047, whose degrade
is scoped to memo DeserializationError; ontology composition gates legality and must not
fall open. The platform bundle stays overlay-less; an overlay file in the platform repo
hard-rejects. Schema mechanics + provenance shape:
specs/id-132-okf-concept-producer/OVERLAY-CV.md (OQ-OV-1..6 owner-ratified S464).
Re-affirmed (S546)
Section titled “Re-affirmed (S546)”Re-examined under DR-141 via id-430’s F6 ruling: the reserved additive overlay contract
is the surviving purpose of ontology.json after DR-027’s S546 amendment retires the
bundle-shipped base snapshot. Contract unchanged — additive-only, fail-loud, platform
bundle overlay-less.
Amendment (S550) — the concept_types dimension retires; the contract’s shape is unchanged
Section titled “Amendment (S550) — the concept_types dimension retires; the contract’s shape is unchanged”DR-141 named this amendment itself. Its Consequences record that “DR-027, DR-054 and
DR-082 are in scope for amendment”, and this is DR-054’s share of that: the overlay’s
three permitted dimensions become two — entity_types and relationship_types.
The ground is the contract’s own purpose, not the absence of a reader. DR-054 exists so
a client may WIDEN legality. DR-141 withdrew the closed, validator-enforced concept-type
taxonomy, so there is no concept-type legality left to widen — EffectiveOntology.compose
had already been saying exactly that since {427.5}: the key “composes nothing and gates
nothing”. A dimension that cannot widen anything is not an additive contract; it is a slot
for the inversion DR-141 retired.
“Nothing reads it” was deliberately NOT the ground, and appears nowhere in the executing
change. That reading is forbidden by DR-123, and more pointedly by DR-027’s own S548
amendment, which exists because a “no consumer” claim was measured false on this same
artefact family. The backwards-compatibility argument was separately measured false
rather than assumed: zero ontology-overlay.json files exist in any checkout and zero
.json files carry concept_types outside node_modules, so the “a client shipping one
must not be rejected” requirement had no client and nothing to be compatible with. Owner,
S550: “the platform isn’t live yet, so we shouldn’t retain functionality if it’s no longer
required” — DR-139 applied.
Everything else in this contract stands, and each was verified rather than assumed:
additive-only; fail-loud on unknown keys and parse failures; the platform bundle
overlay-less with a stray overlay hard-rejecting; and overlay: null still emitted, which
is OV-10’s “no overlay shipped yet” signal and the key the bundle-class styling reads.
One transitional mechanism, with its own retirement condition already recorded. An
overlay declaring concept_types now fails with a targeted message naming DR-141
rather than the generic unknown-key text, because specs/id-132-okf-concept-producer/OVERLAY-CV.md
§OV-2 was still ratified at three keys when the code landed — a client following the
document they were handed would otherwise be told their key is “unknown”, a false diagnosis
that defeats the fail-loud this contract has for their benefit. §OV-2, §OV-6 and §OV-8
were amended later the same session ({427.13}), so that message is now retirable; the
condition is recorded in _validate_overlay_schema’s docstring rather than the branch being
removed in an audit pass.
Executed: canonical 20b644468. Retirement pinned by mutation — re-adding the dimension
fails five tests, and deleting only the named-error branch fails the one asserting its
content.