core/docs/plans/generalization-arc-2026-07-24.md
Shay f95ac26ec0 fix(cognition): restore register axis on pipeline-served turns + Phase 0 of generalization arc
Plan of record for the generalization arc lands here
(docs/plans/generalization-arc-2026-07-24.md) with the risk-tiered
handoff pack (docs/handoff/generalization-2026-07/); Phase 0.1 executed.

Root-caused the three stale lane pins (docs/research/lane-drift-
investigation-2026-07-24.md):
- miner/curriculum: 5c69b741 (ADR-0244 §2.7) widened content digests
  16→64 hex; intentional, pins were simply never updated. Re-pinned
  surgically; SHAs triple-run deterministic.
- demo_composition: a REAL serving regression. #76's canonical-first
  base precedence in resolve_surface, activated when #96 routed pipeline
  turns through the resolver, served the pre-R6 canonical — the register
  axis (ADR-0077 R6 substantive + ADR-0071 R4 decoration) was silently
  stripped from every pipeline-served turn. T13's back-stamp then made
  telemetry mirror the stripped bytes; register-tour claims went red and
  the e2e tests pinning the axis (outside smoke) were failing on main.

Fix: response-first base precedence (served bytes = post-guard, post-R6,
post-R4) + new SurfaceResolution.hash_surface carrying the truth-path
canonical-precedence bytes through substrate overrides, folds, hedge,
logos-morph, and the speculative marker. compute_trace_hash folds
hash_surface, so the register axis varies the served surface ONLY and
trace_hash stays register-invariant (ADR-0069 inv C). _prior_surface
(correction binding) stays on the truth path. Dead FailureClass import
and _assessment_residual removed.

Also: generate_claims.py had raised on every run since the
deduction_serve_v1 pin landed without a _LANE_ADR entry — mapping added
(ADR-0256), CLAIMS.md regenerated, --check green.

[Verification]: register tour 6/6 claims (substantive-differs restored,
all_trace_hashes_identical held); 88 tests green in-worktree
(test_surface_resolution incl. 2 new fallback tests,
test_register_substantive_consumption incl. previously-red e2e tests,
test_grounded_open_hedge_arm, test_cognitive_turn_pipeline,
test_warmed_session_lane 10/10 T13 consistency); miner/curriculum lane
SHAs byte-identical across three runs; deduction_serve + deductive_logic
lane reports byte-identical to their unchanged pins; smoke suite via
pre-push gate.
2026-07-24 12:28:32 -07:00

238 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Generalization Arc — GSM8K-Level Capability Across Core Subjects
**Date:** 2026-07-24 · **Status:** ACTIVE · **Base:** main @ `5224b5e0` (post ADR-0259 / Band v4-CM)
This is the ratified plan of record for the arc that takes CORE from "one
fully-closed cognitive lifecycle (deduction-serve)" to "the same lifecycle
running across core subjects at GSM8K-exam level" — articulated answers,
problem solving, comprehension, all under wrong=0 discipline.
Execution is **risk-tiered across three operators** (§6): Fable 5 does the
high-risk design + build, Opus 5 the medium tier, Sonnet 5 the low tier.
Handoff briefs live in `docs/handoff/generalization-2026-07/`.
---
## 1. Ground truth at arc start
- Exactly one lifecycle is closed end-to-end: **deduction-serve**
(comprehend → 5 band readers → ROBDD decide → sealed practice arena,
17 bands × 720, θ_SERVE=0.99 → SHA-verified ratified ledger → license
gate → render → register chain). Dark behind
`deduction_serving_enabled=False`, awaiting ratification.
- Cross-subject substrate exists but is idle: 16 unmounted domain seed
packs, 5 domain chain corpora, 6 OOD fluency lanes, five-layer
teaching-order doctrine (`docs/teaching_order.md`), capability index.
- Learning-loop organs exist but are write-only or dark: 19 default-off
flags; proposal/contemplation/promotion paths emit into review sinks
with no runtime consumer. Three real ratified-artifact consumers exist
(deduction ledger, estimation license, recognizer registry) — the
pattern to generalize.
- Math is reader-gated, not solver-gated: compiler holds 50/50 wrong=0 on
dev-1 but the reader parses ~1% of real GSM8K; the ~30-band bet was
falsified; standing ruling #77 selects **seeding-sentence injection**
as the next math move.
- ADR-0246 §3.7 identity calibration is explicitly OFF this critical
path (blocked on §11 research evidence; doctrine order:
capability → practice → calibration → serve).
## 2. Phases
### Phase 0 — Truth-substrate hygiene + first live serve *(Small)*
- **0.1** Root-cause the 3-lane pin drift (`miner_loop_closure`,
`curriculum_loop_closure`, `demo_composition`). Classify: determinism
bug (stop-the-line) vs stale pins vs local/CI byte divergence.
Re-pin surgically only after root-cause. Findings doc in
`docs/research/`.
- **0.2** Ratification packet for `deduction_serving_enabled` (evidence
collation only; the flip is Shay's decision).
**Done when:** drift explained + resolved; packet delivered.
### Phase 1 — Reading generalization: verb predicates + existentials *(Large)*
The band cascade reads only copula sentences; every other subject states
facts as verb sentences. Ordered by leverage:
- **1.1 Band v5-VP — verb predicates**: predicate atoms keyed by
(verb lemma, argument tuple); intransitive + transitive with
named/classed arguments ONLY; closed morphology; typed refusal for
everything else (voice, tense shifts, ditransitives, PP-arguments).
This band gates Phase 2.
- **1.2 Band v6-EX — existential (`some`) witnesses**: completes the
all/no/some square; witness-based lowering.
- Deferred (unchanged from ADR-0259 §5): universal-nested-in-connective
(bound-variable tracking), identity/co-reference, tense.
Recipe per band (proven 3×): reader module → shape bands → arena
templates (≥720/band) → hand-authored lane split (content-disjoint from
practice lexicon) → ledger reseal → tests → ADR → research doc.
**Done when:** verb-predicate and existential arguments decided at SERVE
wrong=0; ledger resealed; promotion sweep of previously-declined cases
done honestly (promotion = *decided correctly*, not *decided favorably*).
### Phase 2 — Port the lifecycle to two non-math subjects *(Medium-Large)*
Physics and biology first (OOD lanes, seed packs, and domain chains
already exist). Implemented strictly to the **curriculum-entailment gold
contract** (§4 — the load-bearing design of this arc):
- Mount subject packs; wire domain chains through the teaching corridor
per the five-layer order.
- Exam-shaped serve lanes: question → read (v5-VP reading) → decide
**from ratified curriculum premises only** → licensed articulated
answer.
- Per-subject band ledgers via the same arena; capability-index
coverage entries; 3-domain anti-overfit panel discipline
(independence must be in the READING).
**Done when:** two subjects serve wrong=0 on hand-authored exam-shaped
lanes with earned licenses, zero subject-specific engine code.
### Phase 3 — Close the discovery→learning loop *(Medium)*
- **3.1** Vocab-expansion trigger as code (the COMPREHENSION-READER-AUDIT
§measurable-test, made a standing instrument: refusal histogram split
mechanism-vs-coverage; admissions-per-lexicon-batch).
- **3.2** HITL proposal-queue surface (review CLI over the existing
sinks).
- **3.3** Generic consumption bridge: extract the seal → ratify →
SHA-verified license → serve-gate pattern (deduction ledger is the
model; estimation license the second instance) into the ADR-0175
Phase-5 bridge so each subject arena plugs in without bespoke wiring.
- **3.4** Feed discovery-yield with real traffic (post 0.2 flip).
**Done when:** a serve-time gap flows discovery → proposal →
ratification → runtime consumption with no manual file surgery.
### Phase 4 — Math problem-solving reader *(Medium-Large, parallel lane)*
Independent of Phases 13 (no shared files; production-line pattern):
- **4.1** Seeding-sentence injection (ruling #77; the 75% "no injection"
wall).
- **4.2** Compare unblock (summation-question reader + inverse compare),
queued behind 4.1 per the same ruling.
- **4.3** q:complex decomposition study (increment-1 band plan §9; 101
cases behind one label).
- Guardrails pinned: `docs/research/reader-arc-overfit-inventory-2026-07-19.md`,
ADR-0251 recalibration (no bespoke-per-case regex growth),
ADR-0252.
**Done when:** real-GSM8K parse floor materially above ~1% with wrong=0
held on the full 500; ceiling revised with evidence.
### Phase 5 — Articulation depth (`generate/` "core_logos") *(trigger-gated)*
Not queued by order. Trigger: Phases 12 produce multi-step decided
content (proof chains, multi-fact answers) — the evidence of where
articulation quality binds that the intelligence-loop plan's Phase 6
deferral was waiting for. Scope the arc from that evidence.
## 3. Dependencies
- Phase 1.1 gates Phase 2. Phase 0 first.
- Phase 3.3 lands before the *second* subject arena (avoid copy-paste
wiring). 3.1/3.2 interleave freely.
- Phase 4 fully parallel. Phase 5 trigger-gated on 12.
- §3.7 identity calibration stays downstream of the whole arc (its
calibration data comes *from* this arc's practice volume).
## 4. Curriculum-entailment gold contract (Phase-2 design, decided here)
This section is the HIGH-risk design, fixed now so the medium tier can
implement without re-litigating epistemology.
1. **Verdict domain** — every exam item resolves to
{entailed, refuted, unknown, declined}, identical to deduction-serve.
UNKNOWN is the honest verdict for untaught facts. No open-world
recall, ever.
2. **Two question shapes** — (a) self-contained arguments (premises in
the text): already owned by bands v2v6; (b) **curriculum-grounded
questions** (the new Phase-2 shape): question text supplies only the
query; the premise set is compiled from the RATIFIED domain chain
corpus for that subject. Gold is a function of (curriculum, question)
— never of case-local hidden text. This is the decoding-not-generating
line in mechanical form.
3. **Premise provenance** — each lane case pins the chain IDs it draws
on; the runner reconstructs premises from the ratified corpus and
MUST fail the case if a pinned chain is absent or unratified.
4. **Independent oracle** — per subject, a closed-world reachability
oracle over the chain corpus (sharing no code with the serving path)
validates every gold verdict; the lane asserts corpus soundness
before any case runs (the `assert_corpus_sound()` pattern).
5. **License granularity** — bands keyed by (subject × relation family ×
chain depth), earned in the ADR-0199 arena: θ_SERVE=0.99, n≥720,
wrong=0, sealed + SHA-verified ledger per subject.
6. **Typed refusals, lifecycle-mapped**`untaught_vocabulary`,
`unratified_chain`, `out_of_curriculum`, `ambiguous_reading`; the
OOV refusal feeds the Phase-3 proposal queue (refusals become
discovery, not dead ends).
7. **Anti-recall probes (mandatory per lane)** — cases whose answer is
true in the world but absent from the curriculum; gold = UNKNOWN.
A lane without these probes cannot prove the system decodes rather
than recalls, and MUST NOT ship.
## 5. Risks
- **HIGH — subject-gold epistemology drift**: mitigated by §4 (contract
fixed before implementation; anti-recall probes mandatory).
- **HIGH — v5-VP scope creep**: argument structure/voice/agreement are a
real jump from copula. Mitigation: two argument shapes only, closed
morphology, typed refusal for the rest — the same discipline that made
v2v4 land clean.
- **MEDIUM — arena scale**: 720/band × growing band count on local
hardware; linear sealing time; watch, don't block.
- **MEDIUM — synthetic-overfit trap**: practice templates and lane cases
stay content-disjoint per subject (standing doctrine).
- **MEDIUM — q:complex may not decompose**: nothing gates on Phase 4.
- **LOW — drift root-cause escalates**: if Phase 0.1 finds a determinism
bug, the arc pauses until it is fixed (stop-the-line).
## 6. Risk-tiered operator assignment
Constraint set for every tier: wrong=0; flags stay default-off (flips
are Shay's ratification only); Forgejo-primary, no GitHub/`gh`; local
smoke + warmed_session gate before every push (pre-push hook); `uv`
always; branch + worktree per unit; no merge automation; one PR per
coherent solution; attribution disabled.
### Tier F — Fable 5 (HIGH risk; this session)
- F1: Phase 0.1 drift root-cause (+ surgical re-pin if benign).
- F2: this plan doc + handoff briefs.
- F3: §4 gold contract (done — it is this document).
- F4: Band v5-VP (Phase 1.1), full recipe, PR.
**Checkpoint F→O:** F1/F2/F4 PRs pushed with compare URLs; memory
updated; briefs current. Opus starts at O1 with no open design
questions.
### Tier O — Opus 5 (MEDIUM risk)
- O1: Band v6-EX existentials (Phase 1.2) — recipe + ADR-0257/0258/0259
as references.
- O2: Phase 2 physics + biology serve lanes per §4 (mount packs, wire
chains, arena, ledgers, lanes). Physics first; biology second only
after the generic bridge (O3) lands.
- O3: Phase 3.3 generic consumption bridge.
- O4: Phase 4.1 seeding-sentence injection, then 4.2; 4.3 as analysis.
Guardrail docs pinned in §2/Phase 4.
**Checkpoint O→S:** v6-EX merged; ≥1 subject lane serving wrong=0 with
earned licenses; bridge merged; math increment measured + documented
(whatever its outcome — a null result is a valid checkpoint).
### Tier S — Sonnet 5 (LOW risk)
- S1: Phase 0.2 ratification packet (evidence collation).
- S2: Post-fix lane re-pins; public_demo flake documentation.
- S3: Phase 3.1 vocab-trigger instrument (spec is pinned in
`docs/handoffs/COMPREHENSION-READER-AUDIT.md` §measurable-test).
- S4: Phase 3.2 HITL proposal-queue CLI surface.
- S5: Promotion sweeps, capability-index entries, docs/memory
housekeeping.
**Arc close:** all three tiers merged; Phase 5 trigger evaluated with
evidence in hand; next arc scoped from it.
## 7. Non-goals (this arc)
- ADR-0246 §3.7 / identity-gate calibration (evidence-blocked).
- `core/ports/` Ring-2/3 consumption (own future flag-gated units).
- Universal-nested-in-connective, co-reference, tense bands.
- Any serving-flag flip without explicit ratification.
- Zig substrate work.