Phase A of the curriculum-license-loop arc. Design only; no production code, no flag, no default changed. Rules R1-R9: polarity is a row-level field (absent => affirmative), negatives compile to the sentential-not form and MUST reuse the affirmative connective (atom identity), contradiction is rejected at ratification, premise compilation becomes query-scoped, an empty scope is UNKNOWN, premise_count keeps reporting family size, the oracle learns polarity independently, and a band's honest ceiling must be reported before anyone authors for it. Three findings, each measured in-tree and each reversing something: 1. `polarity` is read by nothing. A row authored to refute a question today serves a confident wrong "Yes" -- and the independent oracle ignores the field for the same reason, so gold agrees and wrong=0 stays green. This is the silent-failure class Phase A existed to prevent, now demonstrated. 2. The 16-premise honesty cap holds a family to <=16 chains; at 17 the band declines everything, including the taught positive that works today. So ADR-0262 §5.1's own remedy (author ~219 relations) destroys the capability at row 17, tripping the fix §6 deferred as a future contingency. Jointly: a band has <=16 entailed cases against a 657-committed threshold, so no curriculum band can earn SERVE until scoping lands. The blocker is engineering, not content -- inverting the conclusion two arcs closed on. 3. Honest volume is bounded by taught vocabulary, not corpus size. 8 of 11 bands cannot reach 657 at all, including the plan's chosen first target physics·modal (ceiling 480, counting every possible question). Retargets Phase F to philosophy_theology·modal (ceiling 44,104, same 8-chain start). R5 is the only rule that could change an existing answer, so it is the only one carrying evidence: 8,520 routable questions, 0 verdict mismatches for both candidate scopes. Verdict-identity holds for any scope that is a superset of the query-atom rows, since each premise mints one independent atom. That is stronger than ADR-0262 §6's soundness argument, and it is why this narrowing is not the ADR-0261 §5.1 premise-dropping failure. ADR-0262 §5.1/§5.2/§6 carry forward-pointers; original text preserved. [Verification]: uv sync --locked on canonical CPython 3.12.13; in-worktree `core test --suite smoke -q` 556 passed (555 baseline + 1: the derived ratify-on-merge pin picked up ADR-0264 and discharged it), `--suite deductive -q` 285 passed. Four probes reproducible from docs/research/curriculum-premise-scope-2026-07-25.md; the corpus-mutating one restores the file and asserts byte-identity.
9.4 KiB
ADR index, keyed by domain
docs/adr/ holds 312 files under a flat, purely sequential numbering. Sequence
records when a decision was made and nothing about what it governs, so
answering "which ADRs constrain the serving flag contract?" or "what governs
the register axis?" currently means grepping. Past ~300 files that is how a
decision corpus becomes a write-only archive.
This index is the lightweight fix: a maintained table keyed by capability
domain and cross-referenced by the files each ADR actually governs. It is not
a renumbering, and it does not replace README.md (which owns the
Master-Blueprint collision reconciliation and the binding non-ADR notes).
Scope, stated honestly
This index covers the live serving, telemetry, and governance surfaces — the domains a Phase 5 / next-arc session needs to query. It is not a complete index of all 312 ADRs, and it does not pretend to be: an index asserting coverage it does not have is worse than none, because it converts "I should grep" into "I already checked."
Maintenance rule: index on mint. Adding a row when you write an ADR is cheap; back-filling 300 is not. Rows below carry the files each ADR governs so a reader can jump from a decision to its enforcement site.
Deduction serving (the deduction-serve arc)
| ADR | Decision | Governs |
|---|---|---|
| 0256 | Deduction serving governed by an earned reliability license; flag ratified ON 2026-07-24 | chat/deduction_serve_license.py, chat/data/deduction_serve_ledger.json, core/config.py::deduction_serving_enabled |
| 0257 | Band v2-EN — English-clause opaque-atom propositional serving; realizer-guard exemption for quoted templates | generate/proof_chain/english.py, chat/runtime.py (guard exemption sites) |
| 0258 | Band v3-MEM — singular membership + universal premises | generate/proof_chain/categorical.py |
| 0259 | Band v4-CM — conditional-membership fusion | generate/proof_chain/cond_member.py |
| 0260 | Band v5-VP — verb-predicate arguments | generate/proof_chain/verb.py |
| 0261 | Band v6-EX — existential witnesses; anonymous witness never transfers to a named individual | generate/proof_chain/exist.py |
Engine underneath all six: generate/proof_chain/entail.py (ROBDD tautology
check). Surfaces: generate/proof_chain/render.py, chat/deduction_surface.py.
Curriculum serving
| ADR | Decision | Governs |
|---|---|---|
| 0262 | Exams answered from the ratified curriculum, read OPEN-world; §5 records that curriculum volume is the binding constraint (~25× gap) — conclusion amended by 0264 §4.1 | chat/curriculum_surface.py, chat/curriculum_serve_license.py, evals/curriculum_serve/runner.py |
| 0264 | Negatives via a row-level polarity field reusing the affirmative connective; premise compilation is query-scoped (superset of the query-atom rows ⇒ verdict-identical). §4.1: the 16-premise cap holds a band to ≤16 entailed cases, so no curriculum band can earn SERVE until scoping lands — the blocker is engineering, not content |
teaching/curriculum_premises.py, teaching/ratification.py, evals/curriculum_serve/oracle.py, teaching/domain_chains/*.jsonl |
Reliability licensing and the ledger bridge
| ADR | Decision | Governs |
|---|---|---|
| 0175 | Two regimes under wrong=0; θ_SERVE Wilson floor; an engine cannot raise its own bar | core/reliability_gate.py, generate/determine/estimation_license.py |
| 0263 | Seal → ratify → SHA-verify → serve-gate, extracted from three instances. Rule 5 (2026-07-25): absence policy is declared in CAPABILITY_LEDGERS, not passed at the call site |
core/ratified_ledger.py, all three license adapters |
| 0206 | Response governance bridge (govern_response / shape_surface) |
generate/determine/ |
Grounding sources and the epistemic taxonomy
| ADR | Decision | Governs |
|---|---|---|
| 0142 | Epistemic state as first-class vocabulary | core/epistemic_state.py |
| 0048 / 0050 | Pack-grounded cold-start DEFINITION / RECALL / COMPARISON | chat/pack_grounding.py |
| 0052 | Teaching-grounded cold-start CAUSE / VERIFICATION | chat/teaching_grounding.py |
| 0064 | Cross-pack residency + cross-corpus chain lookup for the discovery gate | teaching/discovery.py |
The closed set itself lives at core/epistemic_state.py::GroundingSource.
Registration is a three-part cross-stack change — see
docs/specs/runtime_contracts.md § "Grounding-source registration".
Register axis and the realizer guard
| ADR | Decision | Governs |
|---|---|---|
| 0069 | Realizer register parameter; invariant C — register must not move trace_hash |
core/cognition/surface_resolution.py, core/cognition/pipeline.py |
| 0071 | Seeded surface variation + discourse markers; pre_decoration_surface |
chat/register_variation.py |
| 0075 | Realizer slot-type guard (C1 coherence floor). Deduction surfaces are exempt — quoted templates are not slot-composed articulations (rationale documented at both guard sites) | chat/runtime.py (stub + main guard sites) |
| 0077 | Substantive register knobs (R6); register_canonical_surface |
chat/register_substantive.py |
Telemetry, trace, and audit
| ADR | Decision | Governs |
|---|---|---|
| 0039 | TurnVerdicts bundle, stub-path TurnEvent, hedge_injected |
chat/runtime.py |
| 0153 | TurnEvent trace_hash back-stamp (W-020a) |
core/cognition/pipeline.py, chat/runtime.py |
| 0255 | Discovery-yield-per-served-turn baseline; fail-closed on a missing baseline | teaching/discovery_yield.py |
| 0018 | Typed deterministic operators folded into trace_hash |
core/cognition/trace.py |
trace_hash is not reconstructable from TurnEvent — see
docs/specs/runtime_contracts.md. Audit-ledger R7 (telemetry sink receives
the pre-override event) is open and recorded there.
Workbench and the cross-stack UI contract
| ADR | Decision | Governs |
|---|---|---|
| 0160 | Operator/auditor UI before public chat | workbench/ |
| 0161 | HITL async queue | teaching/proposals.py, core proposal-queue CLI |
| 0162 | Design system v1; §3d — engine enums bind to UI badges, enforced by a build-time coverage test | workbench-ui/src/design/, workbench-ui/enum-snapshot.json |
Teaching, proposals, and review
| ADR | Decision | Governs |
|---|---|---|
| 0057 | Teaching-chain proposal + review + replay-equivalence gate | teaching/proposals.py, teaching/review.py, teaching/store.py |
| 0254 | Grounded-open hedge arm for the shadow-coherence gate | chat/runtime.py |
Reader arc / math capability
| ADR | Decision | Governs |
|---|---|---|
| 0251 | Halt bespoke per-case regex work; clean-base reset. The prohibition that governs every math reader increment | generate/math_roundtrip.py, generate/math_candidate_parser.py |
Companion evidence: docs/research/reader-arc-overfit-inventory-2026-07-19.md,
docs/research/math-reader-phase-4-1-status-2026-07-24.md (Phase 4.1 =
complete-with-null-yield).
Substrate, field, and packs
| ADR | Decision | Governs |
|---|---|---|
| 0180 | Delta-CRDT sharded substrate | core-rs/src/vault.rs, engine_state/ |
| 0243 | Wave-field cognitive lifecycle | field/ |
| 0244 | Wave-field identity manifold | persona/, chat/runtime.py |
| 0253 | Blueprint collision resolution + dual-pack serve boundary (INV-33) | packs/ |
Numbering note
The corpus is at ADR-0263 and minted eight ADRs in roughly 48 hours during the generalization arc. Sequential numbering is fine and should stay — the cost it imposes is discoverability, which is what this file pays down. ADR-0300 is a near-term milestone with no structural meaning; do not treat it as one.
The ADR-0206/ADR-0256 numbering collision that had to be resolved in doc form is the concrete failure this index is meant to make less likely: a domain-keyed view shows an in-flight number before it is minted twice.