Repository navigation
docs(planning): rung-3 acceptance predicate spec — phase1/nat_semiring (dag W1 / W1b staged) - #4003
Conversation
…g (dag W1 / W1b staged) Ladder/Fixture Manager third artifact. Cites #3960 (RoundTripClaim eval path landed on main) per joint runner spec §3 row "rung 3" + §4.4 rung-split. Mirrors PR #3990 (rung 4) shape; additive to companion specs. R3 binding: - single .dag cell on rung 3 row (no rust/python/go — that's rung 5) - staged predicates: R3-dag-roundtrip-wave1-ready (W1, landed substrate) + R3-dag-roundtrip-fidelity (W1b, T-36 unlanded — explicit SKIP cell) - sole Pass constructor: run_test_claim_round_trip_verdict (P2 single- authority per 05_eval.dag:1723-1742); eval re-derives lex/grammar/C5 from dag.dag, never trusts embedded ready atoms in claim input - row aggregate stays FAIL until W1b lands — honest staging against the THESIS rung-3 standard ("round-trip preserved"), not a regression - aux fixture phase1-aux/dag_round_trip_mvp1 rendered in parallel as diagnostic (the only currently executable RoundTripClaim row binds there, not to the ladder fixture; migration gated on module-loader per joint spec §5) Out of scope (named in §1, §7): - leaf-model verification (PR #3972) — orthogonal lane, NOT rung 3 - R3 for emitted rust/python/go (rung 5 cross-target territory) - rung-4 predicate (companion spec) §5 spot-checks against origin/main @ 0ace5f8 confirm landed substrate: 05_eval.dag W1 verdict + runtime variant, dag.dag wave-1 authorities readiness gate (lex + grammar + C5 trivia), claim file W1/W1b split, aux fixture committed, no RoundTripClaim row on nat_semiring yet (wedge per §2.3 — gated on module-loader). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Review metadata
1. Story of the diffThis PR adds a new planning authority for rung 3 of the v4 ladder on 2. Invariant categories
N/A — the diff adds a planning doc only; it does not change Dag substrate types, compiler passes,
Finding — P2 Boundary Discipline / single reporting authority:
N/A — no Rust implementation code, APIs, helpers, error shapes, or comments in code are changed; the prose planning artifact itself is the intended deliverable.
Compliant — for a planning-only PR, it does not need to add executable tests. It does name the future executable receipt anchor, requiring the first
Compliant aside from the reporting finding above — the doc preserves the high-level “round-trip preserved” standard by explicitly refusing to close rung 3 until W1b bit-identical fidelity lands, rather than treating W1 readiness as the final proof.
Compliant — the temporary gaps are named and bounded: module-loader-blocked migration of the RoundTripClaim row, W1b/T-36 fidelity comparator, and host gate script/CI extension are all listed as pending with concrete triggers at 2.5. Top-down PM intent reviewFinding — brief could cause a worker to report the wrong rung state: the PM-level intent of this spec is “honest staging”: rung 3 is not actually closed until round-trip preservation is proven, and the doc’s own authority says W1 readiness does not prove bit-identical emit→ingest fidelity at 3. VerdictREQUEST_CHANGES. The spec is otherwise careful and well-scoped, but the contradictory required headline is load-bearing because this PR is itself a worker-facing planning authority. Fixing that one reporting example should align the doc with its own staged aggregate rule. |
…tion + line anchors Addresses cursor/composer-2.5 REQUEST_CHANGES + openai-pro REQUEST_CHANGES on PR #4003. Three findings, all valid: 1. §4.2 required-headline example claimed `aux: rung3 PASS (dag=PASS — W1 wave-1)` for W1-only readiness, contradicting §2.2 row-aggregate rule (PASS requires BOTH W1 + W1b). Workers following §4.2 could falsely close rung 3 on W1 alone. Fixed: all aux/post-migration headline examples now show row aggregate FAIL with named W1b blocking receipt. 2. §6 baseline for aux row rendered `dag=SKIP` while substrate is executable today (W1 verdict path landed). Violates companion §2.4 (SKIP only when predicate did not run). Fixed: aux baseline now shows `dag=PASS` for executed W1 stage, row aggregate FAIL on unlanded W1b. 3. Line anchors at §2.2 / §1 / §2.6 / §5 cited `05_eval.dag:1729,1741`, `:1723-1742`, `:1707-1716`, `:1745-1768` — wrong by 2-4 lines on origin/main @ 0ace5f8. Fixed: precondition diagnostic at :1733; invalid_node at :1711; verdict fn at :1721-1739; runtime variant at :1741-1763; input admission at :1705-1717. Added §2.2 cell-render clarification: the single `dag` cell reports the W1 stage status alone (PASS/FAIL/SKIP based on whether W1 executed); W1b status surfaces only as blocking receipt and row-aggregate gate. Keeps the one-cell-per-target convention while preserving W1/W1b honesty. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…rification Addresses cursor/composer-2.5 REQUEST_CHANGES on PR #4003: 1. §1 out-of-scope bullet said W1b carries an "explicit SKIP cell", contradicting §2.2 which states W1b does NOT get its own matrix cell (surfaces only as blocking receipt). Could lead workers to add a W1b column. Fixed: bullet now says W1b is the row's named blocking receipt (dag_roundtrip_fidelity_w1b_unlanded), not its own cell. 2. §5 spot-check claimed `git grep -l RoundTripClaim` on algebra_laws/ returns nothing — actually returns nat_semiring.dag (import only). Wedge claim still correct (no RoundTripClaim row exists), but cited verification step was wrong. Fixed: tightened to `grep -nE 'RoundTripClaim *\{'` which correctly returns empty, with note that only an import exists. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…#4003) Updates header to link the rung-3 companion spec (landed via PR #4003, c1e4d12) and clarifies that rung-3's out-of-scope note here points to the dedicated rung-3 doc citing #3960 (RoundTripClaim eval path), not the prior brief's #3972 (leaf-model verification — orthogonal lane). Also picks up the merge of main into session/zesty-bat-510 to align with current substrate state. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…rences post-#4003 Addresses cursor/composer-2.5 REQUEST_CHANGES on PR #3990 — three stale references the header update missed: 1. §1 out-of-scope (:25): "Rung 3 round-trip predicate (W1 — Compiler Spine, PR #3972 pending)" → now points to the rung-3 companion spec citing PR #3960; notes #3972 is leaf-model verification, orthogonal. 2. §2.4 conjunction-line comment (:103): "until rung 3 spec lands (gated on PR #3972)" → spec landed via #4003; real gate is fixture row renderability (claim authoring + W1b), not spec existence. 3. §7 sign-off (:228): "Rung 3 acceptance predicate | DEFERRED — gated on PR #3972" → now LANDED, points to companion + #3960 citation. All three contradicted the header's already-corrected statement that the rung-3 companion landed via #4003 and that #3972 is a separate lane. No semantic surface change beyond reference correction. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…g (Rust W2) (#3990) * docs(planning): rung-4 acceptance predicate spec — phase1/nat_semiring (Rust W2) Ladder/Fixture Manager second artifact. Mirrors PR #3946 (rungs 0-2) shape; additive to the companion spec — cites §2.4 cell vocabulary, §3 acceptance rule, §4 headline rule rather than restating them. R4 binding: - single executed predicate R4-rust-emit-equals-eval (Rust only in W2 per joint runner spec §4.2 A3; python/go = SKIP, Phase 3 unallocated) - atomic conjunction (host-exit-ok ∧ stdout-parsable ∧ value-equals-eval) expressed via run_test_claim_emit_vs_eval -> Verdict.Pass on a Host evidence row; sub-failures surface in the blocking receipt, not the matrix - prerequisite chain: R4-rust runs only when R2-rust=PASS AND emit_host transport wired AND nat_semiring_rung34_runtime_value_rows populated; empty-roster wedge reads as SKIP (upstream_blocked:…), never FAIL - independent gating from rung 3 per joint spec §4.4 rung-split (rung 3 spec deferred — gated on PR #3972 W1 RoundTripClaim verdict shape) §5 spot-checks against origin/main @ 7facb19 confirm landed substrate: host_run.dag, test_claim_falsification.dag, verdict.dag, emit_host.dag, nat_semiring_rung34_eval.dag, tools/emit_host_runner. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(planning): fix rung-4 spec line anchors to origin/main @ 7facb19 Addresses cursor/composer-2.5 review on PR #3990: empty-roster anchor is :23 not :21; gate is :56-63 not :54-61; aggregator is :26-32 not :23-28; report_has_evidence is :36-42 not :34-40. Symbols and semantics unchanged — pure line-number alignment with the pinned commit. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(planning): rung-4 spec — cross-reference landed rung-3 companion (#4003) Updates header to link the rung-3 companion spec (landed via PR #4003, c1e4d12) and clarifies that rung-3's out-of-scope note here points to the dedicated rung-3 doc citing #3960 (RoundTripClaim eval path), not the prior brief's #3972 (leaf-model verification — orthogonal lane). Also picks up the merge of main into session/zesty-bat-510 to align with current substrate state. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * WIP: Ladder/Fixture Manager — authority over 9-rung correctness ladder, fixtu * docs(planning): rung-4 spec — clear remaining stale rung-3/#3972 references post-#4003 Addresses cursor/composer-2.5 REQUEST_CHANGES on PR #3990 — three stale references the header update missed: 1. §1 out-of-scope (:25): "Rung 3 round-trip predicate (W1 — Compiler Spine, PR #3972 pending)" → now points to the rung-3 companion spec citing PR #3960; notes #3972 is leaf-model verification, orthogonal. 2. §2.4 conjunction-line comment (:103): "until rung 3 spec lands (gated on PR #3972)" → spec landed via #4003; real gate is fixture row renderability (claim authoring + W1b), not spec existence. 3. §7 sign-off (:228): "Rung 3 acceptance predicate | DEFERRED — gated on PR #3972" → now LANDED, points to companion + #3960 citation. All three contradicted the header's already-corrected statement that the rung-3 companion landed via #4003 and that #3972 is a separate lane. No semantic surface change beyond reference correction. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…anch-using)
Ratifies the Phase 4 Branch-using fixture (W2.5 widening per
docs/planning/v4-merge-wave-and-next-waves-2026-05-30.md §5).
Promotes the already-landed claim module
src/v4/test/claim/algebra_laws/field_patch_monoid.dag (179 lines, 10
CompilesClaim rows) as the Branch-using fixture rather than authoring fresh.
Primary control shape: if/else (line 33 fp_ok) + coproduct discrimination over
FieldPatch { Inherit | Override }.
Rung gate shape (§2) is NOT duplicated — inherited verbatim from
docs/planning/v4-ladder-rung-specs-2026-05-30.md §2 per CLAUDE.md ledger
standing principle. Only fixture subject + Phase 4 specifics in this doc.
Rungs 3-4 specs follow in separate PRs mirroring #4003 / #3990. Wiring
(roster .dag + CI gate + host script) is a follow-up PR; this doc is the
ratification authority only.
Predecessor structure:
- #3946 (rungs 0-2 spec on phase1/nat_semiring)
- #4003 (rung-3 spec template)
- #3990 (rung-4 spec template)
- #4015 (post-script-alignment receipt shape)
Not blocking Jun 1 v0.1.0 tag; v0.1.1 maturation narrative.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…anch-using) (#4028) * WIP: Ladder/Fixture Manager — authority over 9-rung correctness ladder, fixtu * fix(ci): drop dead if/else around R2-rust upstream_blocked note Review nit from claude/claude-opus-4-7 on PR #4015: both branches called note_blocking with the same receipt id. Collapse to a single call. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(ci): drop -l from R0-go-parse gofmt, discard formatted stdout Review finding from cursor/composer-2.5 on PR #4015: `gofmt -e -l` exits non-zero when emitted Go is syntactically valid but not gofmt-formatted, which would record R0-go-parse=FAIL with `go_emit_parse_rejected` for a formatting delta — violating §2.1 parse-only authority. Use plain `gofmt -e` (exits non-zero only on parse/syntax errors) and discard the formatted stdout, keeping stderr as the log. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(ci): bound R0 parse probes under per-toolchain timeout Review finding from openai-pro/gpt-5.5-pro on PR #4015: the three new parse-only host-process invocations (rustc -Z parse-only nightly probe, per-file rustc parse, xargs gofmt -e) bypassed V4_PHASE1_NAT_SEMIRING_TIMEOUT_SECS, breaking the declared per-toolchain timeout contract (INVARIANTS P3 fail-closed). Adds a `timed` command-prefix array (`timeout --preserve-status $secs` when set, empty otherwise) and routes the three callsites through it. run_step is still used for full compile/build checks where tee logging is desired; the prefix form is for cases that pipe through xargs or discard stdout. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(planning): rung 0-2 fixture spec — phase4/field_patch_monoid (Branch-using) Ratifies the Phase 4 Branch-using fixture (W2.5 widening per docs/planning/v4-merge-wave-and-next-waves-2026-05-30.md §5). Promotes the already-landed claim module src/v4/test/claim/algebra_laws/field_patch_monoid.dag (179 lines, 10 CompilesClaim rows) as the Branch-using fixture rather than authoring fresh. Primary control shape: if/else (line 33 fp_ok) + coproduct discrimination over FieldPatch { Inherit | Override }. Rung gate shape (§2) is NOT duplicated — inherited verbatim from docs/planning/v4-ladder-rung-specs-2026-05-30.md §2 per CLAUDE.md ledger standing principle. Only fixture subject + Phase 4 specifics in this doc. Rungs 3-4 specs follow in separate PRs mirroring #4003 / #3990. Wiring (roster .dag + CI gate + host script) is a follow-up PR; this doc is the ratification authority only. Predecessor structure: - #3946 (rungs 0-2 spec on phase1/nat_semiring) - #4003 (rung-3 spec template) - #3990 (rung-4 spec template) - #4015 (post-script-alignment receipt shape) Not blocking Jun 1 v0.1.0 tag; v0.1.1 maturation narrative. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Additive fixture-particular doc; gate vocabulary cites v4-ladder-rung-specs §2 and PR #4003 rung-3 companion (W1/W1b staged predicates). No §2 duplication. Co-authored-by: Cursor <cursoragent@cursor.com>
…1/W1b inherited) Binds rung-3 acceptance predicate to phase4/field_patch_monoid (ratified #4028). Additive per-fixture doc — does NOT restate the W1/W1b predicate shape, prerequisite chain, SG rule, or headline rule; those inherit verbatim from #4003 (rung-3 spec on phase1/nat_semiring) per CLAUDE.md ledger standing principle. Fixture-particular content only: - Scope binding (§1): predicate ids namespaced phase4/field_patch_monoid/rung3/* - Note on Branch-using shape: round-trip predicate is shape-agnostic; if/else and FieldPatch coproduct discrimination are surface for algebraic laws, not new rung-3 predicates. - Spot-check receipts (§6): fixture module on main, no RoundTripClaim row bound to field_patch_monoid → wedge per inherited #4003 §2.3. - Baseline (§7): rung3=FAIL (dag=SKIP), blocking_receipt upstream_blocked:claim_field_patch_monoid_module_roundtrip_not_authored. Mirrors phase1/nat_semiring wedge per #4003 §6; same W3 module-loader unblock path. Wave alignment: W2.5 maturation for v0.1.1; not Jun 1 gating. Coordinates with royal-wolf-898 who is authoring rung-3/4 specs for phase4/branch_dispatch + phase4/loop_linear_bound in parallel (no overlap). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…1/W1b inherited) (#4036) * WIP: Ladder/Fixture Manager — authority over 9-rung correctness ladder, fixtu * fix(ci): drop dead if/else around R2-rust upstream_blocked note Review nit from claude/claude-opus-4-7 on PR #4015: both branches called note_blocking with the same receipt id. Collapse to a single call. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(ci): drop -l from R0-go-parse gofmt, discard formatted stdout Review finding from cursor/composer-2.5 on PR #4015: `gofmt -e -l` exits non-zero when emitted Go is syntactically valid but not gofmt-formatted, which would record R0-go-parse=FAIL with `go_emit_parse_rejected` for a formatting delta — violating §2.1 parse-only authority. Use plain `gofmt -e` (exits non-zero only on parse/syntax errors) and discard the formatted stdout, keeping stderr as the log. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(ci): bound R0 parse probes under per-toolchain timeout Review finding from openai-pro/gpt-5.5-pro on PR #4015: the three new parse-only host-process invocations (rustc -Z parse-only nightly probe, per-file rustc parse, xargs gofmt -e) bypassed V4_PHASE1_NAT_SEMIRING_TIMEOUT_SECS, breaking the declared per-toolchain timeout contract (INVARIANTS P3 fail-closed). Adds a `timed` command-prefix array (`timeout --preserve-status $secs` when set, empty otherwise) and routes the three callsites through it. run_step is still used for full compile/build checks where tee logging is desired; the prefix form is for cases that pipe through xargs or discard stdout. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(planning): rung 0-2 fixture spec — phase4/field_patch_monoid (Branch-using) Ratifies the Phase 4 Branch-using fixture (W2.5 widening per docs/planning/v4-merge-wave-and-next-waves-2026-05-30.md §5). Promotes the already-landed claim module src/v4/test/claim/algebra_laws/field_patch_monoid.dag (179 lines, 10 CompilesClaim rows) as the Branch-using fixture rather than authoring fresh. Primary control shape: if/else (line 33 fp_ok) + coproduct discrimination over FieldPatch { Inherit | Override }. Rung gate shape (§2) is NOT duplicated — inherited verbatim from docs/planning/v4-ladder-rung-specs-2026-05-30.md §2 per CLAUDE.md ledger standing principle. Only fixture subject + Phase 4 specifics in this doc. Rungs 3-4 specs follow in separate PRs mirroring #4003 / #3990. Wiring (roster .dag + CI gate + host script) is a follow-up PR; this doc is the ratification authority only. Predecessor structure: - #3946 (rungs 0-2 spec on phase1/nat_semiring) - #4003 (rung-3 spec template) - #3990 (rung-4 spec template) - #4015 (post-script-alignment receipt shape) Not blocking Jun 1 v0.1.0 tag; v0.1.1 maturation narrative. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(planning): rung-3 acceptance spec — phase4/field_patch_monoid (W1/W1b inherited) Binds rung-3 acceptance predicate to phase4/field_patch_monoid (ratified #4028). Additive per-fixture doc — does NOT restate the W1/W1b predicate shape, prerequisite chain, SG rule, or headline rule; those inherit verbatim from #4003 (rung-3 spec on phase1/nat_semiring) per CLAUDE.md ledger standing principle. Fixture-particular content only: - Scope binding (§1): predicate ids namespaced phase4/field_patch_monoid/rung3/* - Note on Branch-using shape: round-trip predicate is shape-agnostic; if/else and FieldPatch coproduct discrimination are surface for algebraic laws, not new rung-3 predicates. - Spot-check receipts (§6): fixture module on main, no RoundTripClaim row bound to field_patch_monoid → wedge per inherited #4003 §2.3. - Baseline (§7): rung3=FAIL (dag=SKIP), blocking_receipt upstream_blocked:claim_field_patch_monoid_module_roundtrip_not_authored. Mirrors phase1/nat_semiring wedge per #4003 §6; same W3 module-loader unblock path. Wave alignment: W2.5 maturation for v0.1.1; not Jun 1 gating. Coordinates with royal-wolf-898 who is authoring rung-3/4 specs for phase4/branch_dispatch + phase4/loop_linear_bound in parallel (no overlap). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* docs(planning): rung-3 acceptance spec — phase4/branch_dispatch Additive fixture-particular doc; gate vocabulary cites v4-ladder-rung-specs §2 and PR #4003 rung-3 companion (W1/W1b staged predicates). No §2 duplication. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(planning): fix roster link path from docs/planning (#4034) Use ../../src/v4/... (proactive; same fix as #4035 openai-pro RC). Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com>
) * docs(planning): rung-3 acceptance spec — phase4/loop_linear_bound Additive fixture-particular doc; cites v4-ladder-rung-specs §2 and #4003 rung-3 companion. Loop + loop_bound_edge subject; no §2 duplication. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(planning): fix roster link path from docs/planning (#4035) Use ../../src/v4/... so the scope link resolves to repo-root src/v4, not docs/src/v4 (openai-pro RC). Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com>
…4039) * WIP: Ladder/Fixture Manager — authority over 9-rung correctness ladder, fixtu * fix(ci): drop dead if/else around R2-rust upstream_blocked note Review nit from claude/claude-opus-4-7 on PR #4015: both branches called note_blocking with the same receipt id. Collapse to a single call. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(ci): drop -l from R0-go-parse gofmt, discard formatted stdout Review finding from cursor/composer-2.5 on PR #4015: `gofmt -e -l` exits non-zero when emitted Go is syntactically valid but not gofmt-formatted, which would record R0-go-parse=FAIL with `go_emit_parse_rejected` for a formatting delta — violating §2.1 parse-only authority. Use plain `gofmt -e` (exits non-zero only on parse/syntax errors) and discard the formatted stdout, keeping stderr as the log. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(ci): bound R0 parse probes under per-toolchain timeout Review finding from openai-pro/gpt-5.5-pro on PR #4015: the three new parse-only host-process invocations (rustc -Z parse-only nightly probe, per-file rustc parse, xargs gofmt -e) bypassed V4_PHASE1_NAT_SEMIRING_TIMEOUT_SECS, breaking the declared per-toolchain timeout contract (INVARIANTS P3 fail-closed). Adds a `timed` command-prefix array (`timeout --preserve-status $secs` when set, empty otherwise) and routes the three callsites through it. run_step is still used for full compile/build checks where tee logging is desired; the prefix form is for cases that pipe through xargs or discard stdout. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(planning): rung 0-2 fixture spec — phase4/field_patch_monoid (Branch-using) Ratifies the Phase 4 Branch-using fixture (W2.5 widening per docs/planning/v4-merge-wave-and-next-waves-2026-05-30.md §5). Promotes the already-landed claim module src/v4/test/claim/algebra_laws/field_patch_monoid.dag (179 lines, 10 CompilesClaim rows) as the Branch-using fixture rather than authoring fresh. Primary control shape: if/else (line 33 fp_ok) + coproduct discrimination over FieldPatch { Inherit | Override }. Rung gate shape (§2) is NOT duplicated — inherited verbatim from docs/planning/v4-ladder-rung-specs-2026-05-30.md §2 per CLAUDE.md ledger standing principle. Only fixture subject + Phase 4 specifics in this doc. Rungs 3-4 specs follow in separate PRs mirroring #4003 / #3990. Wiring (roster .dag + CI gate + host script) is a follow-up PR; this doc is the ratification authority only. Predecessor structure: - #3946 (rungs 0-2 spec on phase1/nat_semiring) - #4003 (rung-3 spec template) - #3990 (rung-4 spec template) - #4015 (post-script-alignment receipt shape) Not blocking Jun 1 v0.1.0 tag; v0.1.1 maturation narrative. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(planning): rung-3 acceptance spec — phase4/field_patch_monoid (W1/W1b inherited) Binds rung-3 acceptance predicate to phase4/field_patch_monoid (ratified #4028). Additive per-fixture doc — does NOT restate the W1/W1b predicate shape, prerequisite chain, SG rule, or headline rule; those inherit verbatim from #4003 (rung-3 spec on phase1/nat_semiring) per CLAUDE.md ledger standing principle. Fixture-particular content only: - Scope binding (§1): predicate ids namespaced phase4/field_patch_monoid/rung3/* - Note on Branch-using shape: round-trip predicate is shape-agnostic; if/else and FieldPatch coproduct discrimination are surface for algebraic laws, not new rung-3 predicates. - Spot-check receipts (§6): fixture module on main, no RoundTripClaim row bound to field_patch_monoid → wedge per inherited #4003 §2.3. - Baseline (§7): rung3=FAIL (dag=SKIP), blocking_receipt upstream_blocked:claim_field_patch_monoid_module_roundtrip_not_authored. Mirrors phase1/nat_semiring wedge per #4003 §6; same W3 module-loader unblock path. Wave alignment: W2.5 maturation for v0.1.1; not Jun 1 gating. Coordinates with royal-wolf-898 who is authoring rung-3/4 specs for phase4/branch_dispatch + phase4/loop_linear_bound in parallel (no overlap). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * WIP: Ladder/Fixture Manager — authority over 9-rung correctness ladder, fixtu --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
phase1/nat_semiringper PR docs(planning): v4 correctness ladder + current-state audit (operator sign-off) #3938 §11.1 lane 2 and joint runner spec (compiler-spine-runtime-rung34-min-runner-interface-2026-05-30.md) §3 row "rung 3" + §4.4 rung-split.RoundTripClaimeval path; ingest⁻¹ on .dag target —run_test_claim_round_trip_verdict+dag_round_trip_wave1_authorities_ready) as the landed substrate. NOT Phase 1 dispatch (PR #3959 §11.4 step 4): R1 fixture generator + runner against rustc for rust.dag per merged leaf-model verification doc. Phase 1 scope: R1 (i32 surface spelling) — emit Rust source 'pub fn r1_test() -> i32 { 0i32 }' as fixture; invoke rustc; capture verdict; falsification probe = e #3972 (that's leaf-model verification, orthogonal lane — explicit out-of-scope §1).Staging — W1 vs W1b honesty
The landed W1 substrate proves wave-1 lex/grammar/C5-trivia authorities are present and re-derivable from
dag.dag(dag_round_trip_wave1_authorities_ready). It does not yet prove emit→ingest bit-identical fidelity on the fixture — that's W1b/T-36, called out verbatim in the landed claim label and indag_ingest_round_trip.dag:3.Spec accordingly stages two predicates:
R3-dag-roundtrip-wave1-ready(W1, landed) —run_test_claim_round_trip_verdictreturnsPass.R3-dag-roundtrip-fidelity(W1b, T-36 unlanded) — explicitSKIPcell withupstream_blocked:w1b_emit_ingest_comparator_unlanded.Row aggregate stays
FAILuntil W1b lands. That's the honest reading of the THESIS rung-3 standard ("round-trip preserved"), not a regression.Aux-fixture handling
The committed
claim_dag_ingest_round_tripbinds todag_round_trip_mvp1, not the ladder fixture. Spec renders that as a parallel diagnostic rowphase1-aux/dag_round_trip_mvp1, with the ladder fixture rung-3 row showingdag=SKIP upstream_blocked:claim_nat_semiring_module_roundtrip_not_authoreduntil the migration (joint spec §5 module-loader landing) closes the wedge.§5 spot-checks (vs
origin/main@0ace5f8b7)Confirmed:
05_eval.dagW1 verdict path (:1723-1742) + runtime variant (:1745-1768),dag.dagwave-1 authorities readiness gate (:3168+), C5 trivia DeclaredNormalized (:3160-3166), claim W1/W1b split (dag_ingest_round_trip.dag:3,80), noRoundTripClaimrow onnat_semiring(wedge confirmed).Out of scope (named in §1, §7)
Coordination
nimble-dove-733) flagged a brief conflation (R1 leaf-model vs rung-3 RoundTrip); STOP-and-clarify escalation resolved with PM confirming option (b): cite W1: RoundTripClaim eval path (ingest⁻¹ on dag target) — PR #3938 §11.4 / joint runner spec §6 #3960, not Phase 1 dispatch (PR #3959 §11.4 step 4): R1 fixture generator + runner against rustc for rust.dag per merged leaf-model verification doc. Phase 1 scope: R1 (i32 surface spelling) — emit Rust source 'pub fn r1_test() -> i32 { 0i32 }' as fixture; invoke rustc; capture verdict; falsification probe = e #3972. This PR ships per the corrected brief.run_test_claim_round_trip_verdictsemantics.Test plan
origin/main(re-pin if main advances past0ace5f8b7).🤖 Generated with Claude Code