diff --git a/.specify/feature.json b/.specify/feature.json index 8d967cd..f4afef9 100644 --- a/.specify/feature.json +++ b/.specify/feature.json @@ -1 +1 @@ -{"feature_directory":"specs/006-compile"} +{"feature_directory":"specs/009-relaxation"} diff --git a/CLAUDE.md b/CLAUDE.md index c0a15a8..b13a68f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -32,4 +32,4 @@ The oracle cases (vignette §9, `O-1…O-4`) are hand-computed and must never be ## Current phase (update this line when it changes) -Stage 0 complete; PR #8 merged to `main`. Register batch 3 ratified (ASSAY-DEC-22…27, closing concept §6.6–6.11) — walkthrough and findings ledger now canonical, G6 a standing invariant. Stage 1 built (issue #10): research note `01-knowledge.md` (DEC-16 floor); SPEC-05 implemented (`src/{seam,deltas,encoding,lint,knowledge}.ts` + `components/{refusalBanner,s1Table}.ts`); all four Stage-1 exits demonstrated on Meridian. Stage 2 built: research note `docs/research/02-compile.md` (DEC-11 gate — decides the **sparse channel representation** from the Stage-0 dense-world numbers + ATP 2-01.3 MCOO doctrine, retiring dense `Channel.cells`); SPEC-06 specified via spec-kit (`specs/006-compile/`) and **implemented** (`src/compile.ts` + `components/channelTrace.ts`; `fixtures/vignette-config.json`; sparse-channel schema regen; 107 tests, typecheck clean; compile demo moment renders in the gallery). All three Stage-2 exits demonstrated on Meridian (K12 contested ⇒ compile refuses `contested_knowledge`, resolve⇒recompile; byte-identical stamp; every channel traces back to named knowledge via `compiled_into` + `source`). The sparse-channel schema change is recorded as a flagged register candidate (concept §6, item 12), built under seam open item 2's delegated authority pending batch ratification. Stage 3 scorer built: research note `docs/research/03-score-plan.md` (DEC-11 gate — **decides the four-stop verdict mapping as signed margin bands, signs-only**: robust iff m_lo>0, marginal iff m_lo=0, tight iff m_lo<0≤m_hi, violated iff m_hi<0 — the unique O-3-satisfying rule with no interior cut; also settles `(cell,time)` route evaluation over a time-expanded graph, closing note 02 §3's forward flag, and reserves ε-dominance for SPEC-08 plan comparison); SPEC-07 specified via spec-kit (`specs/007-score/`) and **implemented** (`src/{interval,materialise,metrics,score}.ts` + `components/s2Matrix.ts`; `fixtures/plans.json` canned handful; no schema change — verdict/score/plan shapes already exist; 139 tests, typecheck clean; the honest-matrix demo moment renders in the gallery). The correctness leg holds on Meridian: oracle O-1 (`[9,13]`), O-2 (robust, margin `[15,19]`), O-3 (four-stop sweep changes only at band edges 9/13) reproduced exactly, and O-4 propagation-honesty (G6) under property-based testing (`fast-check`). SPEC-07 asserts no new register decision (the mapping is decided in the research note under the latitude vignette §9/O-3 delegated to Stage-3). Stage 3 handful built: SPEC-08 specified via spec-kit (`specs/008-handful/`) and **implemented** (`src/{dominance,generate,handful}.ts` + `components/handfulStrip.ts`; new seam types; no schema change) over the same `03-score-plan.md` note (§5 — the DEC-11 gate, deciding **banded ε-non-domination** and Meridian's **four generation axes**). `/plan/handful` = generate (seeded fan-out over approach × suppression × causeway × extraction) → score (reuses the SPEC-07 scorer) → organise (ε-non-domination on the conservative interval order, ε defaults to 0, diversity cap by axis Hamming — never a scalar, DEC-19). Both Stage-3 handful exits demonstrated on Meridian: `/plan/handful` returns **4 genuinely distinct plans** for the base world (each pair mutually non-dominated; the survivors split cleanly along the two trade axes — approach trades C1↔C2, suppression trades C3↔C4), and **same stamp + seed ⇒ identical handful** (G1); 163 tests, typecheck clean; the honest-matrix demo moment now renders the *generated* handful plus a derived `distinct_because` strip (organised, not authored). SPEC-08 asserts no new register decision (the concept §6.2 handful-axes open question is closed by the research note §5.2 under Stage-3 latitude). **Next: Stage 4 SPEC-09 — relaxation / least-worst (`/relax`, `sacrificed` populated, invariant G4), over research note `04-relaxation.md` (DEC-11 gate — to author); then the Stage 4–6 depth fan-out.** +Stage 0 complete; PR #8 merged to `main`. Register batch 3 ratified (ASSAY-DEC-22…27, closing concept §6.6–6.11) — walkthrough and findings ledger now canonical, G6 a standing invariant. Stage 1 built (issue #10): research note `01-knowledge.md` (DEC-16 floor); SPEC-05 implemented (`src/{seam,deltas,encoding,lint,knowledge}.ts` + `components/{refusalBanner,s1Table}.ts`); all four Stage-1 exits demonstrated on Meridian. Stage 2 built: research note `docs/research/02-compile.md` (DEC-11 gate — decides the **sparse channel representation** from the Stage-0 dense-world numbers + ATP 2-01.3 MCOO doctrine, retiring dense `Channel.cells`); SPEC-06 specified via spec-kit (`specs/006-compile/`) and **implemented** (`src/compile.ts` + `components/channelTrace.ts`; `fixtures/vignette-config.json`; sparse-channel schema regen; 107 tests, typecheck clean; compile demo moment renders in the gallery). All three Stage-2 exits demonstrated on Meridian (K12 contested ⇒ compile refuses `contested_knowledge`, resolve⇒recompile; byte-identical stamp; every channel traces back to named knowledge via `compiled_into` + `source`). The sparse-channel schema change is recorded as a flagged register candidate (concept §6, item 12), built under seam open item 2's delegated authority pending batch ratification. Stage 3 scorer built: research note `docs/research/03-score-plan.md` (DEC-11 gate — **decides the four-stop verdict mapping as signed margin bands, signs-only**: robust iff m_lo>0, marginal iff m_lo=0, tight iff m_lo<0≤m_hi, violated iff m_hi<0 — the unique O-3-satisfying rule with no interior cut; also settles `(cell,time)` route evaluation over a time-expanded graph, closing note 02 §3's forward flag, and reserves ε-dominance for SPEC-08 plan comparison); SPEC-07 specified via spec-kit (`specs/007-score/`) and **implemented** (`src/{interval,materialise,metrics,score}.ts` + `components/s2Matrix.ts`; `fixtures/plans.json` canned handful; no schema change — verdict/score/plan shapes already exist; 139 tests, typecheck clean; the honest-matrix demo moment renders in the gallery). The correctness leg holds on Meridian: oracle O-1 (`[9,13]`), O-2 (robust, margin `[15,19]`), O-3 (four-stop sweep changes only at band edges 9/13) reproduced exactly, and O-4 propagation-honesty (G6) under property-based testing (`fast-check`). SPEC-07 asserts no new register decision (the mapping is decided in the research note under the latitude vignette §9/O-3 delegated to Stage-3). Stage 3 handful built: SPEC-08 specified via spec-kit (`specs/008-handful/`) and **implemented** (`src/{dominance,generate,handful}.ts` + `components/handfulStrip.ts`; new seam types; no schema change) over the same `03-score-plan.md` note (§5 — the DEC-11 gate, deciding **banded ε-non-domination** and Meridian's **four generation axes**). `/plan/handful` = generate (seeded fan-out over approach × suppression × causeway × extraction) → score (reuses the SPEC-07 scorer) → organise (ε-non-domination on the conservative interval order, ε defaults to 0, diversity cap by axis Hamming — never a scalar, DEC-19). Both Stage-3 handful exits demonstrated on Meridian: `/plan/handful` returns **4 genuinely distinct plans** for the base world (each pair mutually non-dominated; the survivors split cleanly along the two trade axes — approach trades C1↔C2, suppression trades C3↔C4), and **same stamp + seed ⇒ identical handful** (G1); 163 tests, typecheck clean; the honest-matrix demo moment now renders the *generated* handful plus a derived `distinct_because` strip (organised, not authored). SPEC-08 asserts no new register decision (the concept §6.2 handful-axes open question is closed by the research note §5.2 under Stage-3 latitude). Stage 4 built (thesis B live): research note `docs/research/04-relaxation.md` (DEC-11 gate — **decides the formalism as preemptive lexicographic priority over the `must/should/prefer` tiers with NO weights**: weighted CSP / MAX-SAT / Archimedean goal programming rejected on honesty grounds by DEC-19, lexicographic goal programming chosen; returns the **inclusion-minimal correction-set frontier** not one optimum, ranked least-worst-first with the must-sacrifice kept-but-last; `sacrificed` = exactly the `violated` commitments; a **content-neutral, stated tie-break** for same-tier sacrifices because encoding a civil-harm-vs-force-protection ranking is the value judgement DEC-19 forbids; command-language narratives per MDMP/JP 5-0; the note also corrects course honestly — the SPEC-08 BASE generator routes clear of the banded regions and cannot enter the mined water, so SPEC-09 authors an R3m-responsive candidate set while the **sacrifices stay computed** by the reused scorer); SPEC-09 specified via spec-kit (`specs/009-relaxation/`) and **implemented** (`src/{tiers,relaxCandidates,relax}.ts` + `components/s3Cards.ts`; new seam types; no schema change — `RelaxationReport`/`RelaxationCandidate`/`Plan` already exist; 187 tests, typecheck clean; the "least-worst, never silence" demo moment renders in the gallery). The Stage-4 exit holds on Meridian: `/relax` over R3m returns **three inclusion-minimal least-worst candidates sacrificing C4, C3, C2** (each `sacrificed` non-empty, computed by the scorer — re-scoring each plan violates exactly its `sacrificed` set; the `{C2,C4}`/`{C3,C4}` supersets are inclusion-dropped), ranked least-worst-first (the C2 `must`-sacrifice last but present), the same-tier C3/C4 tie stated in `tie_break`, every card in command language and traced back via `cited_in`/`sacrificed_in` (G3), never empty and never a silent drop (G4). SPEC-09 asserts no new register decision (the formalism is decided *by* DEC-19; the report shape *by* knowledge model §5/§8 and seam §7/§G; latitude is Stage-4-delegated under vignette §6/§9). **Next: the Stage 4–6 depth fan-out — SPEC-10 (scenario robustness, thesis C), SPEC-11/12/13 (analysis: sensitivity / discrimination / staleness), SPEC-14 (gallery/site), all opening on the landed scorer + relax.** diff --git a/docs/assay-delivery-plan.md b/docs/assay-delivery-plan.md index a92a4e3..47b3993 100644 --- a/docs/assay-delivery-plan.md +++ b/docs/assay-delivery-plan.md @@ -63,7 +63,7 @@ Stage column maps to `assay-build-plan.md`. Research note is the DEC-11 prerequi | **SPEC-15** | Spine-complete gate harness — asserts content-addressing, stamp determinism, and invariants G2–G5 end-to-end on Meridian; re-asserts the vignette §9 oracle cases and the O-4 propagation-honesty property (candidate G6) | gate | SPEC-05…13 | — | | **SPEC-16** | Surfaces S1–S4 as config-declared bundles + five narrative scripts + banded-honesty polish pass | 7 | SPEC-14, SPEC-15, services | `07-narratives.md` | -> **Status (2026-07-13, spine through Stage 3):** SPEC-01…04 (Stage 0) and SPEC-05/06/07/08 (Stages 1–3) built and merged/branch-open. The spine `δ` (SPEC-05 → SPEC-06 → SPEC-07 → SPEC-08) is complete: the scorer stands and the honest generator organises a computed handful over it. SPEC-08's *sacrificial-scope* latitude was spent — the canned fallback (`fixtures/plans.json`) is retained for the SPEC-07 suite; the gallery's honest matrix now runs the generated handful. **Next: the depth fan-out `ε` (SPEC-09…13) opens on the landed scorer.** +> **Status (2026-07-13, spine through Stage 3 + first depth slice):** SPEC-01…04 (Stage 0), SPEC-05/06/07/08 (Stages 1–3), and SPEC-09 (Stage 4) built and merged/branch-open. The spine `δ` (SPEC-05 → SPEC-06 → SPEC-07 → SPEC-08) is complete: the scorer stands and the honest generator organises a computed handful over it. SPEC-08's *sacrificial-scope* latitude was spent — the canned fallback (`fixtures/plans.json`) is retained for the SPEC-07 suite; the gallery's honest matrix now runs the generated handful. The depth fan-out `ε` has opened: **SPEC-09 (relaxation / least-worst, thesis B) is built** over research note `04-relaxation.md` — `/relax` returns the inclusion-minimal least-worst frontier (three candidates sacrificing C4/C3/C2 on R3m), ranked by ordinal tier with a stated tie-break, `sacrificed` computed by the reused scorer, never empty and never a silent drop (G4); the "least-worst, never silence" demo moment renders in the gallery. **Next: the rest of the depth fan-out `ε` (SPEC-10 scenario robustness ∥ SPEC-11/12/13 analysis) opens on the landed scorer + relax.** ## 3. Dependency graph & critical path diff --git a/docs/assets/gallery/index.html b/docs/assets/gallery/index.html index 11455b8..b19527c 100644 --- a/docs/assets/gallery/index.html +++ b/docs/assets/gallery/index.html @@ -614,7 +614,56 @@
Generated from fixtures/ by npm run gallery · identifiers frozen per assay-vignette.md §8 · compile per research note docs/research/02-compile.md · score per docs/research/03-score-plan.md
The Stage-4 demo moment, run end-to-end by the actual machinery. Against the R3m world (both approaches mined, the causeway dropped) no plan satisfies C2, C3 and C4 together — by construction (vignette §6). /relax does not pick one compromise and hide the trade: it returns every inclusion-minimal way forward, each naming what it gives up in command language. The sacrifices are computed — a commitment is sacrificed only when the SPEC-07 scorer returns violated for it — not authored. Ranked least-worst first by the commander's ordinal tiers (must / should / prefer, no numeric weight — DEC-19): the two should-sacrifices lead, the must-sacrifice (C2, "the strait opens two days late") is ranked last but present — never dropped, never silent (G4). Plans that give up more — {C2,C4}, {C3,C4} — are inclusion-dominated and never shown as separate options. relax stamp 69fd05662fc5b616… · 3 least-worst candidates over R3m, computed not authored · never empty, never a silent drop (G4) · tie-break stated (DEC-19) · each candidate cited_in the report back to named knowledge (G3)
Tie-break — Same-tier sacrifices were ordered by commitment id (C3 vs C4) — a stated, commander-owned placeholder for within-tier priority, not a claim that one sacrifice outranks the other (ASSAY-DEC-19: no numeric weight; ties stated, never silent).
+Generated from fixtures/ by npm run gallery · identifiers frozen per assay-vignette.md §8 · compile per research note docs/research/02-compile.md · score per docs/research/03-score-plan.md · relax per docs/research/04-relaxation.md