ADR-0002 — The gate is domain-neutral; specialisation lives in the adapter¶
Status: Ratified 2026-07-01 (proposed and ratified same day; independent confirmation that
worlds/rtopacks/ and worlds/usa_for_later/ still live inside the engine repo confirms the
violation this targets).
Series: Canon decisions (project-constitutional — distinct from the infrastructure ADR series
adr-001…adr-005).
Lifecycle class (per UCCA-ADR-LIFECYCLE-01): F+F. The violation it names is
Class F — minted (verified 2026-07-01: worlds/ inside the engine). The remedy it commits is now
also MINTED (F — verified 2026-07-03): the deployed input path (ucca-gate → ucca-reasoner
container) is gate-neutral and worlds-free — the container image ships only engine//generator//
reasoner/; run_engine reaches contextualisation via the per-job payload (contextualisation_brief),
never worlds/. Proof job 0dda7509 ran a conformer against the live gate → engine → signed envelope
to terminal. The gate did structural checks only (three verdicts; malformed bounced whole). The known
course-shape of the v1 content payload is located outside the gate by ADR-0005 (ADAPTER, NOT GATE) —
so it is not a neutrality violation. Remaining (not a mint condition — Tier-2 cleanup): the physical
engine/ucca-engine/worlds/ directory (course-era CLI + fossil) still exists in the repo; the runtime
severance the remedy names is proven, its deletion is the build brief's Step-5 reviewed diff.
Proof vehicle: UCCA-CONTRACT-PACK-01 (docs-site/docs/strategy/ucca-input-path-contract-pack-v0.1.md)
— its §10 Definition of Done is this remedy's mint event (input path live + a job exercised
gate→engine→envelope + worlds/ severed). Flip the register to minted on that day.
Context¶
The SEED found the live engine sources its own TGA data internally (a neutrality violation) — a RTOpacks-shaped tool wearing a UCCA badge. We are about to build for RTOpacks and must not repeat this.
Origin (founder testimony, Tim, 2026-07-01): the engine was built flat, pre-boundary, single-purpose — ingestion lived in-engine because no world layer existed yet. The violation is pre-boundary construction residue, not an error against known rules. The engine no longer ingests anything; ingestion is world-side (RTOPACKS-CORRECTION-01, received).
Decision¶
The single-throat gate checks only that input conforms to the triumvirate contract. It carries
no domain knowledge. Per-client/per-domain translation lives in the adapter, outside the
throat. The engine never sees raw client corpus. (This ratifies the March adapter design doc,
docs-site/docs/strategy/triumvirate-adapter-design-v1.md, as the target architecture.)
Consequences¶
- "Make it functional" for RTOpacks is a bounded build against the contract, not a reactivation of the internal-sourcing path.
- The receive-across-API input path is both the RTOpacks build and the neutrality fix — same work.
- Drift-check for every build decision: "Does this only work because the client is VET?" If yes, it belongs in the adapter, not the gate.
Provenance¶
Ruled in the 2026-07-01 north-star session. Source of record: UCCA-CAPTURE-01 §2.3, §2.4, §5.
On-disk evidence: worlds/rtopacks/ and worlds/usa_for_later/ present inside engine/ucca-engine/.
Mint annotation, 2026-07-04 (Class B)¶
Previously minted on the generation proof (ORDER-03). Now additionally proven in the backward
direction: the same domain-neutral gate accepted diagnosis jobs on structural checks only
(runGateChecks branches by job_type, never by domain), and the diagnosis path ran VET material
through the neutral throat with no domain knowledge entering the gate. One throat, two directions,
zero narrowing. Proof: 4c8cf211 · 8502f007 · fd0b10dd. The two directions' scopes are distinct
proofs of the same ruling — this annotation records the second, it does not re-mint the first.
Disposition annotation, 2026-07-04 — the corollary rule¶
This ADR's boundary (the world owns domain ingestion; the engine stays neutral) has a housekeeping
corollary, ruled by Tim during the disk-archaeology sweep (UCCA-DISK-CENSUS-01): engine-side copies of
client-domain material discard by default. First application: tools/tga-mirror.js — a TGA-API mirror
(DATA-03) that wrote parsed TGA content to 334ac8fb… = rtopacks-db (the world DB). It lived engine-side,
nothing wired imported it, and TGA ingestion is world-owned — so it was discarded (2026-07-04) rather
than kept or relocated. The rule stands for future engine-side finds of client-domain shape.