Skip to content

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-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 twoentity_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.