Repository navigation
fix(ci): align phase1 nat_semiring rung gate to §2.1 parse-only + §2.4 SKIP - #4015
Conversation
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>
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>
|
Review metadata
1. Story of the diffThis PR reworks 2. Invariant categories
2.5. Top-down PM intent reviewCompliant. The highest-level intent here is to make the Phase 1 nat_semiring gate report the true acceptance state without overclaiming success: parse-only cells must be separated from compile/typecheck, SKIP must remain visible, and row success must require all cells to pass. The diff preserves that intent by making all verdict slots default to 3. VerdictREQUEST_CHANGES. The semantic shape is directionally correct, but the newly introduced parse-only host-process invocations bypass the declared per-toolchain timeout contract. Fixing those three calls to run through the same bounded |
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>
…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>
…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>
…4030) * WIP: v4-done predicate burn-down — Jun 1 push: update tracker per Wave 2 disp * docs(planning): Wave 2 maintenance burn-down — post-#4021 landings Maturation tracker refresh: #4014 SG-7, #4022 W2.6 python R1, #4015 rung gate, #4023 ship-disposition. Adds Wave 2 landing log + Jun 1 state-at-tag courtesy note. D-REL-1 flavor (iv) framing retained. 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
Aligns
scripts/v4-phase1-nat-semiring-rung-gate.shto the §6 follow-up calledout in
docs/planning/v4-ladder-rung-specs-2026-05-30.md— the spec ratifiedrungs 0–2 acceptance predicates but the gate script (landed via #3953) still
used
cargo checkfor R0-rust-parse andgo buildfor R0-go-parse, both ofwhich the spec §2.1 explicitly forbids, and lacked the §2.4
SKIPcellvocabulary.
§2.1 parse-only receipts:
R0-rust-parsenow probesrustc -Z parse-onlyper emitted.rs. When thepinned toolchain rejects
-Z(stable rustc), the cell isSKIPwith receiptphase1/nat_semiring/rung0/rust_parse_driver_unavailableper the spec'sship_disposition: GAPcarve-out ("until Compiler Spine ratifies a stableparse driver").
R0-go-parseusesgofmt -e -l(the §2.1 allowed parse-only receipt). Theprevious
go buildproxy is removed.§2.4
PASS|FAIL|SKIPcell vocabulary:SKIP(notFAIL) until a receipt-bearing commandactually runs.
R1-rust-typecheckexecutes only whenR0-rust-parse=PASS; otherwiseSKIPwith
blocking_receipt: upstream_blocked:R0-rust-parse. The spec forbidsmarking R1
FAILwhen R0 did not execute.R2-rust-compileexecutes only whenR1=PASS(rung 2 Rust ⊇ rung 1, §2.3).R2-go-compileexecutes only whenR0-go-parse=PASS.Cargo.toml/ no.rs/ no.py/ no.go) yieldsSKIPwith*_emit_unavailableper §2.1, notFAIL.Row aggregate:
PASSiff every cell isPASS, otherwiseFAIL. All-SKIProws are
FAIL(there is no row-levelSKIP), per §2.4 single-authorityvocabulary.
No headline-aggregate surprise is expected: §6 baseline already ratified
all-rung
FAILunderSTRICT=1as expected substrate gap signaling; this PRmakes the per-cell receipts honest under the spec contract.
Test plan
bash -n scripts/v4-phase1-nat-semiring-rung-gate.sh(syntax check) — local PASS.STRICT=1; per §6 baseline the expected outcomeis rung0/rung1/rung2
FAILwithblocking_receipt: upstream_blocked:R0-rust-parseon stable rustc (no
-Z parse-onlysupport) — substrate gap, not a regression.docs/planning/v4-ladder-rung-specs-2026-05-30.md§2.1 (parse-only receipts), §2.4 (cell vocabulary + prerequisites), §6
(script follow-up scope).
Authority:
docs/planning/v4-ladder-rung-specs-2026-05-30.md§2.1, §2.4, §6(Ladder/Fixture Manager, this session).
🤖 Generated with Claude Code