Skip to content

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-001adr-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.