Skip to content

Ladder/Fixture Manager — authority over 9-rung correctness ladder, fixture set, rung gate shape (acceptance predicates per rung), 'no rustc-clean as headline' enforcement per PR #3938 §11.1. First artifact: nat_semiring × rungs 0-2 acceptance predicate spec; ratify nat_semiring as Phase 1 fixture; d - #3946

Merged
briansrls merged 20 commits into
mainfrom
session/keen-crab-361
May 30, 2026

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Auto-opened by session-dashboard for session keen-crab-361.
Pushing to session/keen-crab-361 advances this PR.

Worker attestation

Before flipping this PR to ready for review, confirm each item:

  • Title describes the change (not the session id or branch).
  • PR body summarises what and why (replace the TODO below).
  • Tests run: name the command (e.g. npm test, cargo test) and the result.
  • If this closes a work item, the body contains a Closes #N directive.
  • No commits on this branch are surprises (no fork/cherry-pick I did not make).
  • No secrets / credentials / large binaries staged.

Summary

TODO: replace this paragraph with one or two sentences naming the change and its motivation. Reviewers read this first.

Test plan

  • TODO: list the commands that ran (or "no tests changed; relied on CI") and the outcome.

briansrls and others added 2 commits May 30, 2026 02:17
…ates

Manager-lane artifact for PR #3938 §11.1: fixture identity, per-rung pass/fail
predicates (dag/rust/python/go), verdict matrix shape, and no-rustc-clean-headline
enforcement. Unblocks worker to wire rung_0_to_2_three_targets.dag + CI.

Co-authored-by: Cursor <cursoragent@cursor.com>
…checks

PM-requested filename; §2.5 cites claim/CI templates, worker triple, and
operator §8 HOLD. §5 spot-checks planning claims against main HEAD.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Remove Go/Python copy-paste on the Python target row; cite py_compile
equivalent per §2.1 R0-python-parse.

Co-authored-by: Cursor <cursoragent@cursor.com>
@briansrls

Copy link
Copy Markdown
Contributor Author

Addressed cursor/composer-2.5 finding on R2-python-compile (:117):

  • Before: "per project Go/Python gate policy" on the Python row (copy-paste from Go).
  • After: "per project Python gate policy (python3 -m py_compile or equivalent)" — aligned with §2.1 R0-python-parse.

Fix: 397630dbb.

— sent from keen-crab-361

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review metadata

  • Provider / model: codex / unknown
  • Commit: 397630db · Trigger: schedule
  • Thinking: 260s wall

BLOCKING (2)

Root Cause

  • docs/planning/v4-ladder-rung-specs-2026-05-30.md Receipt paths and line numbers were copied from a different tree -> regenerate every spot-check/template reference against origin/main plus the PR diff, then remove or correct anything that has not landed.
  • docs/planning/v4-ladder-rung-specs-2026-05-30.md The claim-shape guidance mixed TestClaim coproduct arms with TestClassification.layer -> state rung 2 as CompilesClaim rows classified with layer Integration, or add a real target-axis claim shape before workers wire it.

⚠️ The ratified acceptance spec needs live-tree receipts and a corrected TestClaim shape contract before it can safely unblock wiring work.


| Pattern | File | Use for |
| ------- | ---- | ------- |
| Fixture import + claim binding | `src/v4/test/claim/round_trip/dag_ingest_round_trip.dag:57-62` | `import v4.test.claim.algebra_laws.nat_semiring { … }` |

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BLOCKING: The worker-facing references are not live: git ls-tree origin/main returned no blob for src/v4/test/claim/round_trip/dag_ingest_round_trip.dag and src/v4/test/claim/workflow/testclaim_corpus_runner.dag, and 05_eval.dag has only 1119 lines while this doc cites 1732, so the ratification violates P1 documentation describes live state.

| Rung | Suggested claim variant | Notes |
| ---- | ----------------------- | ----- |
| 0–1 | `CompilesClaim` per target slice | `input` = fixture law-subject or module anchor node; label must encode `fixture=phase1/nat_semiring` + `rung` + `target`. |
| 2 | `CompilesClaim` × 3 targets OR one `Integration` row | Name `rust` / `python` / `go` in label until target axis is first-class. |

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BLOCKING: This lists one Integration row under existing v4.std.verification claim variants, but Integration is only TestgenLayer while TestClaim variants are CompilesClaim, DiagnosticClaim, EqualsClaim, and RoundTripClaim, so the worker spec violates P2 by conflating assertion shape with classification.

briansrls and others added 3 commits May 30, 2026 04:02
Re-verify §2.5 templates and §5 spot-checks against origin/main @ 9cc2392.
Correct rung-2 guidance: CompilesClaim rows with TestgenLayer Integration,
not an Integration claim variant. Fix line ranges and full 05_eval path.

Co-authored-by: Cursor <cursoragent@cursor.com>
…side rung spec

Per review: PR branch should carry parent planning doc already on main so
§0/§3–§4 cross-refs resolve in-tree at merge time.
Co-authored-by: Cursor <cursoragent@cursor.com>
@briansrls

Copy link
Copy Markdown
Contributor Author

Addressed cursor/composer-2.5 operational note (review artifact 21568, APPROVE @ fd8a6ebb):

HEAD: 711fb20ab. Prior codex BLOCKING items were fixed on fd8a6ebbf (live-tree receipts + CompilesClaim/TestgenLayer guidance).

— sent from keen-crab-361

@briansrls

Copy link
Copy Markdown
Contributor Author

Verified dashboard APPROVEs (artifacts 21576 cursor, 21579 claude) on HEAD 711fb20ab:

Both verdicts match the tree — no code or spec changes required.

Reviewer claim Local check (origin/main@edc8cba73)
nat_semiring.dag, templates, §2.5 paths Present; §5 table unchanged
05_eval.dag:1732-1736 RoundTripClaim => Deferred CONFIRMED (1869-line file at src/v4/compiler/05_eval.dag)
ci.dag M1 probe / no fixture matrix CONFIRMED :254-257 m1_rust_emit_probe_execution + M1RustEmitProbeCommand (spec §5 cites :256-257)
§4 headline / rung-2 smoke / SG gating Unchanged in docs/planning/v4-ladder-rung-specs-2026-05-30.md
Parent ladder doc in-tree docs/planning/v4-correctness-ladder-2026-05-30.md via merge aa61d3b6e

Prior codex BLOCKING (sha 397630d) was addressed on fd8a6ebb; GitHub review state is COMMENTED only (not REQUEST_CHANGES).

Merge readiness: 2× APPROVE (cursor + claude), mergeable=CLEAN, CI green on 711fb20ab. Holding for operator merge per policy.

— sent from keen-crab-361

briansrls and others added 3 commits May 30, 2026 05:09
Receipt from jolly-bee-506 @ 27054dd (CI 26673521649): dag-parse PASS,
emit rungs FAIL, blocking_receipt R1-rust-typecheck — matches ratified §6
expectation under STRICT=1.

Co-authored-by: Cursor <cursoragent@cursor.com>
@briansrls

Copy link
Copy Markdown
Contributor Author

Verified claude/claude-opus-4-7 APPROVE (artifact 21808) on HEAD d367217a8:

Finding holds — docs-only PR (docs/planning/v4-ladder-rung-specs-2026-05-30.md); no src/v3/ or substrate code; aligns with PR #3938 §11.1 and ledger principle (planning artifact, not parallel code ledger).

Spot-checks at origin/main@9cc2392cc (§5 table) remain valid on current main (993e9e3d): nat_semiring.dag, 05_eval.dag:1732-1736 RoundTripClaim => Deferred, ci.dag:256-257 M1 probe. §6 executable baseline (27054dd31 matrix) is additive receipt, not a gate-shape change.

No commit required for this review item.

— sent from keen-crab-361

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: openai-pro / gpt-5-5-thinking
  • Commit: d367217a · Trigger: manual
  • Comparison: main @ 993e9e3d ... session/keen-crab-361 @ d367217a
  • Conversation: View conversation

1. Story of the diff

This PR adds a new planning authority, docs/planning/v4-ladder-rung-specs-2026-05-30.md, that turns the post-#3938 correctness ladder into an executable Phase 1 dispatch contract for phase1/nat_semiring. It ratifies src/v4/test/claim/algebra_laws/nat_semiring.dag as the Phase 1 fixture, scopes Phase 1 to rungs 0–2, defines target/predicate matrices for dag/Rust/Python/Go, and explicitly demotes corpus-wide rustc error counts to diagnostic-only signal rather than headline gate. It also gives worker-facing wiring guidance for the future TestClaim module, CI job, GHA projection, and optional interim script, then records a first baseline from #3955. chatgpt-review-1e8b4c65-3ab0-46…

The load-bearing mechanism is good in intent: replace “rustc-clean” as a progress proxy with fixture×rung receipts. The one blocking problem is that the proposed rung-0 parse contract is not kept separate from compile/typecheck failure, so the matrix can report parse failures when the only concrete receipt is a later Rust typecheck failure.

2. Invariant categories

  1. LAYER MODEL (substrate vs implementation).

Compliant — this PR is a planning/documentation authority only; it does not introduce substrate types, Dag mutation, std primitives, or reusable algebraic helpers.

  1. INVARIANTS.md + modeling-discipline.md.

Finding — docs/planning/v4-ladder-rung-specs-2026-05-30.md:101, :166, :274-280: Boundary Discipline / Fail-Closed. Rung 0 is defined as “parses in target,” but the Rust predicate allows “parse-only or full compile,” the worker TestClaim shape tells workers to use CompilesClaim for rungs 0–1, and the baseline reports R0-rust/python/go-parse failures while naming the first blocking receipt as phase1/nat_semiring/rung1/rust_typecheck_failed. That collapses distinct facts — “artifact did not parse,” “artifact did not typecheck,” and “downstream artifact unavailable because an earlier check failed” — into one matrix cell. The ladder’s whole value is a single-authority, rung-specific receipt; this shape lets a later rung failure masquerade as a rung-0 parse failure, so workers can chase the wrong predicate.

  1. CODING.md.

N/A — no Rust implementation code or helper API changes are introduced.

  1. TESTING.md.

Finding — docs/planning/v4-ladder-rung-specs-2026-05-30.md:162-167, :274-280: behavior-driven boundary claims. The doc asks for CompilesClaim rows for rungs 0–1, but rung 0’s behavior is parse-only. That makes the future .dag test surface assert a broader behavior than the rung promises. The baseline then demonstrates the ambiguity by reporting rung-0 target parse failures even though the named blocker is the rung-1 Rust typecheck receipt. A parse rung needs a parse-shaped predicate or an explicit “artifact unavailable / upstream blocker” carrier; using compile-shaped claims for parse acceptance is not a behavior-driven test contract.

  1. LOCKED DESIGN DECISIONS.

Compliant — the PR does not alter locked substrate or pure-bootstrap decisions. It preserves the fixture/rung framing and correctly keeps rungs 3–9 out of scope.

  1. TRACKED vs UNTRACKED DEBT.

Compliant — the doc names the major gaps: rungs 3–9 blocked on Compiler Spine + Runtime/TestClaim definitions, TestClaim verdicts deferred behind T-38, future Phase 4 fixture widening, and CI wiring as follow-on work. The debt is bounded and has named follow-up surfaces.

2.5. Top-down PM intent review

Finding — docs/planning/v4-ladder-rung-specs-2026-05-30.md:94-105, :162-167, :274-280: semantic dilution of the ladder. The PM-level intent is to replace vague “rustc clean” progress with precise fixture×rung acceptance predicates. Rung 0 asks “Did the fixture parse in each required target’s surface?” but the implementation guidance and baseline allow compile/typecheck failure to drive rung-0 failures. A worker following this doc faithfully could implement a gate that reports “parse failed” when the target source parsed but failed later, or when the target artifact was never produced because another target’s toolchain failed first. That undermines the ladder’s purpose as an operator-facing truth surface.

3. Verdict

REQUEST_CHANGES. The PR’s direction is right, but the rung-0 contract needs to be repaired before this becomes a manager-ratified dispatch authority. Separate parse receipts from compile/typecheck receipts, and represent upstream artifact unavailability as its own blocking state rather than as R0-*-parse failure.

…ai-pro)

- R0 rust: parse-only (rustc --emit=metadata); cargo check is R1 only
- §2.4: PASS|FAIL|SKIP cells; blocking_receipt names earliest executed failure
- §2.5: rung 0 emit targets use host parse receipts, not CompilesClaim authority
- §6: document collapsed baseline vs honest matrix under new rules

Co-authored-by: Cursor <cursoragent@cursor.com>
@briansrls

Copy link
Copy Markdown
Contributor Author

Addressed openai-pro REQUEST_CHANGES @ d367217a (commit 86484b040):

  1. R0 vs R1 boundary — §2.1: R0-rust-parse is parse-only (rustc --emit=metadata); cargo check is R1 only. Emit-missing → *_emit_unavailable + matrix SKIP, not R0-*-parse FAIL.
  2. §2.4 matrix — cells are PASS | FAIL | SKIP; blocking_receipt = lowest executed failure (example: rung0 rust=PASS, rung1 rust=FAIL, receipt R1-rust-typecheck — not R0 FAIL).
  3. §2.5 TestClaim — rung 0 emit targets: host parse receipts, not CompilesClaim as parse authority; CompilesClaim scoped to rung 1 (rust) + rung 2 (three targets).
  4. §6 baseline — documents script @ 27054dd31 collapsed matrix vs honest §2.4 rendering; script alignment is worker follow-up, not a blocker on this planning PR.

Verified cursor/composer-2.5 APPROVE (21806) on same scope — still holds; above clarifications strengthen dispatch authority without changing Phase 1 intent.

— sent from keen-crab-361

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: openai-pro / gpt-5-5-thinking
  • Commit: 86484b04 · Trigger: manual
  • Comparison: main @ 993e9e3d ... session/keen-crab-361 @ 86484b04
  • Conversation: View conversation

1. Story of the diff

This PR adds a new planning authority, docs/planning/v4-ladder-rung-specs-2026-05-30.md, that turns the broader 9-rung correctness ladder into a Phase 1 executable contract for exactly one fixture: phase1/nat_semiring. The document ratifies the fixture, defines rungs 0–2 as target/toolchain predicates, narrows Phase 1 away from corpus-wide rustc-clean metrics, and gives downstream workers concrete TestClaim/CI wiring targets. The strongest parts are the separation between parse/typecheck/compile receipts, the explicit SKIP handling for unavailable emit artifacts, and the rule that SG/emit work only counts when it moves the fixture×rung matrix rather than the global error histogram. chatgpt-review-09f1cf15-8294-43…

2. Invariant categories

  1. LAYER MODEL (substrate vs implementation).

N/A — this diff is a planning/spec document only; it does not introduce substrate types, Dag-resident data, reusable std primitives, or implementation code.

  1. INVARIANTS.md + modeling-discipline.md.

Finding — docs/planning/v4-ladder-rung-specs-2026-05-30.md:295: single-authority / fail-closed verdict vocabulary is contradicted by an unmodeled aggregate state. The spec says each rung is a binary gate that “passes only when every predicate in its row holds; otherwise it fails” at line 75, and its required matrix vocabulary is only PASS | FAIL | SKIP at lines 137–149. But the baseline then calls the “honest §2.4 rendering” rung0: PARTIAL at line 295. That creates a fourth state with no semantics, no receipt rule, and no worker implementation contract. Because this file is the authority that downstream CI and scripts will implement, the fix needs to either define PARTIAL everywhere it is part of the contract or remove it and render the baseline using only the ratified row/cell vocabulary.

  1. CODING.md.

N/A — no Rust implementation code, functions, APIs, helpers, or code comments are changed. The document’s prose is doing planning-authority work rather than substituting for code structure.

  1. TESTING.md.

Compliant, modulo the finding above — the diff correctly keeps the Phase 1 boundary tests executable and fixture-scoped: parse/typecheck/compile checks are toolchain receipts, TestClaimRun may remain deferred only for substrate claims, and CI must still invoke direct checks until the TestClaim verdict surface is proven at lines 174–185. That matches the testing trajectory where external-toolchain boundary intent migrates toward .dag/ExecuteCommand claims but remains allowed as a practical boundary receipt during transition. chatgpt-review-60bdc09f-9805-4a…

  1. LOCKED DESIGN DECISIONS.

Compliant — the PR does not alter the locked substrate shape, target-grounding model, or Pure Bootstrap zero-floor direction. It preserves the high-level thesis split: fixture-scoped executable smoke for Phase 1 now, while explicitly not claiming L6/all-target closure or post-emit law verification at lines 86 and 125–129. This avoids diluting the THESIS claims that L5/L6/L7 are distinct verification tiers. chatgpt-review-576c5d58-1c44-49…

  1. TRACKED vs UNTRACKED DEBT.

Compliant — the staged pieces are bounded: rungs 3–9 are blocked on named Compiler Spine + Runtime/TestClaim interface definitions at line 7, Phase 1 target widening is deferred to Phase 4 at line 40, and the interim host script is explicitly bounded as fixture-scoped until TestClaimRun verdicts are proven at lines 179–187. The one exception is not “debt” but the finding above: PARTIAL is not a tracked bridge because it is introduced as if already part of the matrix contract.

2.5. Top-down PM intent review

Finding — the current baseline introduces a reporting shape that could cause downstream workers to implement the wrong gate. The PM-level intent of this PR is to give workers a crisp fixture×rung matrix, replacing rustc-clean headlines with executable predicate receipts. The diff itself establishes that CI/PR summaries “must use this matrix” with PASS | FAIL | SKIP at lines 133–149, but line 295 introduces PARTIAL as the “honest §2.4 rendering.” That is semantic dilution: a worker following the spec faithfully could add a PARTIAL row state even though the ratified gate vocabulary does not define it.

3. Verdict

REQUEST_CHANGES. The planning direction is strong and mostly aligned with the ladder/fixture-manager intent, but the undefined PARTIAL state in the baseline contradicts the gate vocabulary this PR is trying to ratify. Fixing that now is cheap; letting it land would seed downstream CI/script ambiguity in the exact contract this document is meant to stabilize.

§6 honest baseline and §2 gate intro now use per-cell vocabulary only;
rung rows FAIL when any cell is not PASS (openai-pro 21856).

Co-authored-by: Cursor <cursoragent@cursor.com>
@briansrls

Copy link
Copy Markdown
Contributor Author

Addressed openai-pro REQUEST_CHANGES (21856 @ 86484b04) — commit pending push SHA:

  rung0: FAIL  (dag=PASS rust=SKIP python=SKIP go=SKIP)
  rung1: FAIL  (rust=FAIL)
  rung2: FAIL  (rust=SKIP python=SKIP go=SKIP)
blocking_receipt: phase1/nat_semiring/rung1/rust_typecheck_failed

cursor APPROVE (21860): still valid — PARTIAL was explanatory drift; contract is now strictly §2.4.

— sent from keen-crab-361

@briansrls

Copy link
Copy Markdown
Contributor Author

Verified claude/claude-opus-4-7 APPROVE (21864) on HEAD 1b26bcb45:

Finding holds — docs-only; §2.4 PASS/FAIL/SKIP + blocking-receipt rules internally consistent; §6 honest baseline uses only ratified cell vocabulary (openai-pro PARTIAL finding fixed in 1b26bcb45).

Prior openai-pro R0/parse-boundary fixes remain in 86484b040. No further spec edits for this review item.

— sent from keen-crab-361

Fix single-authority contradiction with §7 LANDED row (cursor 21870).

Co-authored-by: Cursor <cursoragent@cursor.com>
@briansrls

Copy link
Copy Markdown
Contributor Author

Addressed cursor REQUEST_CHANGES (21870 @ 1b26bcb45) — 2bad8dea6:

§2.5 no longer claims rung_0_to_2_three_targets.dag is net-new; documents landed on origin/main via #3953 (305c63817) with follow-up = align to §2.1/§2.4 (not recreate). §7 split into roster LANDED vs #3955 CI LANDED rows — single authority.

Verified claude APPROVE (21872) on same scope — holds after this factual fix.

— sent from keen-crab-361

…eate

Minor single-authority fix noted in cursor APPROVE 21883.

Co-authored-by: Cursor <cursoragent@cursor.com>
@briansrls

Copy link
Copy Markdown
Contributor Author

Verified dashboard APPROVEs on HEAD 2bad8dea6 (+ nit 4598aead0):

No other changes required for these review items.

— sent from keen-crab-361

@briansrls

Copy link
Copy Markdown
Contributor Author

Verified dashboard APPROVEs on HEAD 4598aead0:

No commit required.

— sent from keen-crab-361

openai-pro 21947: --emit=metadata is typecheck-shaped (R1), not frontend
parse. Allow -Z parse-only or interim rustfmt --check; forbid cargo check
and metadata/LLVM emit for R0.

Co-authored-by: Cursor <cursoragent@cursor.com>
@briansrls

Copy link
Copy Markdown
Contributor Author

Addressed openai-pro REQUEST_CHANGES (21947 @ 4598aead) — 2f3a3639f:

R0-rust-parse no longer cites rustc --emit=metadata (typecheck/metadata path → R1 only).

  • R0 allowed: rustc -Z parse-only when toolchain supports it; else interim rustfmt --check (syntax surface) until Compiler Spine ratifies a stable parse driver.
  • R0 forbidden: cargo check/build, --emit=metadata, --emit=llvm-ir, or any success that implies semantic analysis.
  • R1 explicitly owns cargo check / --emit=metadata fast-check.

— sent from keen-crab-361

@briansrls

Copy link
Copy Markdown
Contributor Author

Verified dashboard APPROVEs on HEAD 2f3a3639f:

  • claude 21952 / cursor 21953: findings hold — docs-only; §4 fixture×rung; §6 script gap documented as non-blocking follow-up; spot-checks match origin/main.
  • openai-pro 21947 (same SHA): R0-rust-parse no longer cites --emit=metadata; parse-only vs R1 typecheck split explicit.

No commit required for these review items.

— sent from keen-crab-361

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: openai-pro / gpt-5-5-pro
  • Commit: 2f3a3639 · Trigger: manual
  • Comparison: main @ 993e9e3d ... session/keen-crab-361 @ 2f3a3639
  • Conversation: View conversation

1. Story of the diff

This PR adds a new planning authority, docs/planning/v4-ladder-rung-specs-2026-05-30.md, that turns the parent v4 correctness ladder into an operator-facing Phase 1 gate for exactly one fixture: phase1/nat_semiring. The doc ratifies nat_semiring as the first fixture, scopes Phase 1 to rungs 0–2, rejects corpus-wide rustc-clean as the primary progress signal, and defines the fixture×rung×target matrix that later wiring PRs and worker briefs are supposed to implement. The load-bearing contract is the acceptance-predicate table in §2: R0 is parse-only per target, R1 is Rust typecheck, R2 is Rust/Python/Go compile smoke, with PASS/FAIL/SKIP cell semantics and lowest-failing receipt rules. The rest of the document gives worker templates, CI landing points, “no rustc-clean headline” enforcement, spot-check receipts, and a current baseline from #3955. chatgpt-review-1abf9b64-7cbc-4f…

chatgpt-review-1abf9b64-7cbc-4f…

2. Invariant categories

  1. LAYER MODEL — N/A. The diff is a planning/spec document only; it does not add substrate types, Dag mutation, .dag variants, or Rust implementation shapes.
  2. INVARIANTS.md + modeling-discipline.md — Finding. docs/planning/v4-ladder-rung-specs-2026-05-30.md:95 says R0 Rust parse may use “interim rustfmt --check … (syntax surface only),” but rustfmt --check is not syntax-only: rustfmt documents that --check exits 1 when formatting changes would be made, even if the input parses. That can turn a formatting delta into R0-rust-parse failure, violating fail-closed / boundary sufficiency because the receipt no longer proves exactly the predicate it names. chatgpt-review-1abf9b64-7cbc-4f…

GitHub

Same finding, Go side: docs/planning/v4-ladder-rung-specs-2026-05-30.md:97 permits “go build -n or go test -c parse-phase success.” go build -n is documented as printing commands but not running them, so it is too weak as an executable parse receipt; go test -c is documented as compiling a test binary, so it is too strong for R0 and can conflate compile/link failures with parse failures. This directly contradicts the doc’s own R0 requirement that later-rung failures must not downgrade earlier parse cells. chatgpt-review-1abf9b64-7cbc-4f…

Go Packages Go Packages

  1. CODING.md — N/A. No Rust code or helper implementation is added; CODING.md’s data/free-function, method, error-shape, and comment-discipline rules do not materially apply to this docs-only diff.
  2. TESTING.md — Finding. docs/planning/v4-ladder-rung-specs-2026-05-30.md:175 correctly warns that R0 emit rows must not use compile/typecheck success as parse proof, but the R0 predicate table still permits go test -c at :97, which is a compile-binary receipt, and rustfmt --check at :95, which is a format-check receipt. The testing contract is supposed to be behavior-driven — each gate proves the named behavior — and these receipts would let the Phase 1 CI gate fail or pass R0 for reasons other than “target surface parsed.” chatgpt-review-1abf9b64-7cbc-4f…

chatgpt-review-1abf9b64-7cbc-4f…

  1. LOCKED DESIGN DECISIONS — N/A. The diff references the parent ladder and locked/high-level authorities, but it does not modify a locked design doc or introduce a declared divergence from one.
  2. TRACKED vs UNTRACKED DEBT — Finding. docs/planning/v4-ladder-rung-specs-2026-05-30.md:316 marks “CI authority + host gate script (DRAFT: phase1/nat_semiring rung gate — ci.dag authority wiring + GHA projection (follow-up to #3953) #3955)” as LANDED while the same row says “operator merge of DRAFT: phase1/nat_semiring rung gate — ci.dag authority wiring + GHA projection (follow-up to #3953) #3955 pending.” Earlier, the doc says src/v4/workflow/ci.dag still has no phase1_nat_semiring job and that the CI authority “lands via DRAFT: phase1/nat_semiring rung gate — ci.dag authority wiring + GHA projection (follow-up to #3953) #3955,” and §6 says the operator may merge DRAFT: phase1/nat_semiring rung gate — ci.dag authority wiring + GHA projection (follow-up to #3953) #3955 when review criteria are met. That is an untracked live-state/status split in the manager sign-off: the host script from DRAFT: phase1/nat_semiring rungs 0-2 gate — TestClaim roster + host transport #3953 may be landed, but the DRAFT: phase1/nat_semiring rung gate — ci.dag authority wiring + GHA projection (follow-up to #3953) #3955 CI authority is still pending, so the row should split those facts or mark DRAFT: phase1/nat_semiring rung gate — ci.dag authority wiring + GHA projection (follow-up to #3953) #3955 as pending/baselined rather than landed. chatgpt-review-1abf9b64-7cbc-4f…

chatgpt-review-1abf9b64-7cbc-4f…

2.5. Top-down PM intent review

Finding. The PM intent of this PR is to give workers an acceptance-predicate spec they can implement faithfully. The doc itself states R0 asks whether the fixture “parse[d] in each required target’s surface,” and later states R0 emit rows must not use compile/typecheck success as parse proof; but the predicate table authorizes non-parse receipts for Rust and Go. A worker following this spec exactly could implement a R0 gate that fails valid Rust for formatting or treats go test -c compile/link failure as parse failure, which changes the meaning of rung 0. chatgpt-review-1abf9b64-7cbc-4f…

chatgpt-review-1abf9b64-7cbc-4f…

Finding. The same PM-intent issue appears in the sign-off state: the doc’s CI wiring section says the authority work is to add a new CiJob + CiGate, the spot-check says no phase1_nat_semiring job exists on main and lands via #3955, but the final sign-off marks “CI authority + host gate script (#3955)” as LANDED while saying #3955 merge is pending. That would cause a worker to treat pending CI authority as already live. chatgpt-review-1abf9b64-7cbc-4f…

chatgpt-review-1abf9b64-7cbc-4f…

chatgpt-review-1abf9b64-7cbc-4f…

3. Verdict

REQUEST_CHANGES. The PR’s central artifact is the acceptance-predicate authority, and R0 currently admits receipts that do not prove parse-only success. The #3955 landed/pending status also needs to be corrected before this can safely serve as a manager dispatch document.

openai-pro 21957: drop rustfmt --check (format not parse); drop go build -n
(too weak) and go test -c (compile); use gofmt -e for Go R0; R0-rust GAP
until -Z parse-only or Spine driver; CI authority pending vs script landed.

Co-authored-by: Cursor <cursoragent@cursor.com>
@briansrls

Copy link
Copy Markdown
Contributor Author

Addressed openai-pro REQUEST_CHANGES (21957 @ 2f3a3639) — 70e9fc72b:

  1. R0-rust-parse: removed rustfmt --check (format receipt, not parse). Only rustc -Z parse-only when supported; else cell stays GAP until Compiler Spine ratifies a parse driver.
  2. R0-go-parse: removed go build -n (dry-run, too weak) and go test -c (compile, R2-owned). Allowed: gofmt -e (parse/syntax errors only).
  3. §7 sign-off: split host script LANDED (DRAFT: phase1/nat_semiring rungs 0-2 gate — TestClaim roster + host transport #3953 on main) vs CI authority PENDING (DRAFT: phase1/nat_semiring rung gate — ci.dag authority wiring + GHA projection (follow-up to #3953) #3955 merge) — no longer marks DRAFT: phase1/nat_semiring rung gate — ci.dag authority wiring + GHA projection (follow-up to #3953) #3955 ci.dag+GHA as landed while merge is pending.

— sent from keen-crab-361

cursor 21976: R1 executes only when R0-rust-parse PASS; otherwise R1 SKIP
(not FAIL). §6 honest matrix: rung1 rust=SKIP; blocking_receipt on R0 chain.

Co-authored-by: Cursor <cursoragent@cursor.com>
@briansrls

Copy link
Copy Markdown
Contributor Author

Addressed cursor REQUEST_CHANGES (21976 @ 70e9fc72b) — $(git rev-parse --short HEAD):

Reconciled §2.2 / §2.4 / §6: R1-rust-typecheck executes only when R0-rust-parse = PASS; otherwise R1 = SKIP (upstream_blocked:R0-rust-parse), never FAIL. Added §2.4 prerequisite table (R1←R0, R2←R1). §6 honest matrix now rung1 rust=SKIP with blocking_receipt on the R0 chain; script’s illicit cargo check noted in substrate appendix only.

Verified claude APPROVE (21977) on same scope after fix.

— sent from keen-crab-361

cursor 21982: do not emit parse_rejected when rust R0 was not executed;
align §2.4 blocking_receipt vocabulary with SKIP prerequisites.

Co-authored-by: Cursor <cursoragent@cursor.com>
@briansrls

Copy link
Copy Markdown
Contributor Author

Addressed cursor REQUEST_CHANGES (21982 @ a4433f465) — $(cd /home/briansrls/.worktrees/keen-crab-361 && git rev-parse --short HEAD):

§6 honest matrix blocking_receipt is now upstream_blocked:R0-rust-parse when rust=SKIP / rung1=SKIP (R0 parse not executed) — not rust_emit_parse_rejected. §2.4 :160 updated: *_parse_rejected / *_failed ids only when that predicate actually ran.

Verified claude APPROVE (21983) on same scope.

— sent from keen-crab-361

cursor 21987: parallel upstream_blocked contract for R2-go-compile and
R2-python-compile; same fail-closed story as rust chain.

Co-authored-by: Cursor <cursoragent@cursor.com>
@briansrls

Copy link
Copy Markdown
Contributor Author

Addressed cursor REQUEST_CHANGES (21987 @ 50296bb1d) — 50296bb1d→ see HEAD after push:

Extended §2.3–§2.4 with explicit prerequisite rows: R2-python-compile ← R0-python-parse PASS; R2-go-compile ← R0-go-parse PASS (R0 gofmt -e vs R2 go build are distinct probes). Dependent cells SKIP when prerequisite not PASS — same contract as rust.

Verified claude APPROVE (21986) on same scope.

— sent from keen-crab-361

@briansrls

Copy link
Copy Markdown
Contributor Author

Follow-up: fix landed in cc281990a (prior comment referenced pre-push SHA).

@briansrls

Copy link
Copy Markdown
Contributor Author

Verified dashboard APPROVEs on HEAD cc281990a:

  • claude 21988 / cursor 21989: findings hold — docs-only; §2.4 prerequisite/SKIP semantics coherent; §6 self-correction consistent; spot-check paths present on origin/main. Prior items (R0 parse receipts, §7 landed/pending split, Go/Python R2 prerequisites, upstream_blocked blocking_receipt) all on this SHA.

Item 2 (self follow-up comment re cc281990a SHA): already correct — no further action.

No commit required.

— sent from keen-crab-361

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: openai-pro / gpt-5-5-thinking
  • Commit: cc281990 · Trigger: manual
  • Comparison: main @ 993e9e3d ... session/keen-crab-361 @ cc281990
  • Conversation: View conversation

1. Story of the diff

This PR adds a new planning authority, docs/planning/v4-ladder-rung-specs-2026-05-30.md, to pin Phase 1 progress to a concrete fixture/rung matrix instead of corpus-wide Rust error counts. It ratifies phase1/nat_semiring as the fixture, defines rungs 0–2 over dag/rust/python/go, separates parse-only receipts from typecheck/compile receipts, and gives worker-facing guidance for TestClaim wiring, CI wiring, and acceptable PR success headlines. The strongest parts are the explicit rejection of “rustc clean” as the headline metric and the per-target prerequisite rules that prevent later toolchain failures from being misreported as earlier parse failures. chatgpt-review-8c7ca85e-ae4a-4c…

2. Invariant categories

  1. LAYER MODEL (substrate vs implementation).

Compliant — this is a planning/spec PR, not a substrate mutation: it defines fixture/rung acceptance authority but does not add Dag-resident types, cross-pass substrate fields, or reusable .dag carriers.

  1. INVARIANTS.md + modeling-discipline.md.

Finding — docs/planning/v4-ladder-rung-specs-2026-05-30.md:75, :306-312: Boundary Discipline / fail-closed reporting contract is internally inconsistent. Line 75 says any FAIL or SKIP cell makes the rung row a FAIL aggregate, and line 312 repeats “Rung rows are FAIL when any cell is not PASS;” but the “honest §2.4 rendering” immediately above reports rung1: SKIP and rung2: SKIP at lines 307–308. That makes the spec’s authoritative output shape ambiguous: an implementer can render the same upstream-blocked state as either row-level FAIL or row-level SKIP while still pointing at this document. For a CI gate/manager dispatch authority, that violates the single-authority reporting contract; clarify whether rung labels are aggregate row verdicts or per-cell execution summaries, and make §2.4/§6 use the same vocabulary. chatgpt-review-8c7ca85e-ae4a-4c…

  1. CODING.md.

N/A — no Rust implementation code, helpers, methods, or error/result shapes are introduced.

  1. TESTING.md.

Compliant — no executable code is added, and the doc deliberately routes Phase 1 boundary checks through fixture-scoped host/toolchain receipts until TestClaim execution is proven, while preserving .dag TestClaim wiring as the target shape.

  1. LOCKED DESIGN DECISIONS.

Compliant — the diff preserves the locked high-level direction: tests/verification remain structurally declared over TestClaim, host toolchain execution is treated as a boundary receipt, and “rustc clean” is explicitly demoted from primary progress signal.

  1. TRACKED vs UNTRACKED DEBT.

Compliant except for the reporting ambiguity above — the doc names the current script/roster misalignment and bounds the follow-up to §2.1 parse-only plus §2.4 SKIP semantics at docs/planning/v4-ladder-rung-specs-2026-05-30.md:170, :198, and :327. The debt is documented and scoped, but the row-aggregate contradiction must be resolved before this can serve as a stable authority.

2.5. Top-down PM intent review

Finding — same blocking issue as above. The PM intent is to give workers a crisp Phase 1 gate: fixture × rung × predicate, with no “rustc clean” headline and no mislabeling skipped predicates as failures. The diff mostly preserves that intent, especially at docs/planning/v4-ladder-rung-specs-2026-05-30.md:47, :99-103, and :231-250; however, the row-level FAIL vs SKIP contradiction at :75 and :306-312 would cause faithful workers to implement divergent matrix summaries. That is exactly the kind of planning artifact ambiguity that can send downstream CI/worker PRs in the wrong direction.

3. Verdict

REQUEST_CHANGES. The chosen fixture, target set, and no-rustc-clean discipline look right, but the new authority must not contain two incompatible row-verdict semantics. Fix the row aggregate/reporting vocabulary so §2.4 and §6 produce one mechanically implementable matrix shape.

openai-pro 21999: no rung-row SKIP; row FAIL when any cell not PASS;
§2.4 template and §6 honest matrix aligned.

Co-authored-by: Cursor <cursoragent@cursor.com>
@briansrls

Copy link
Copy Markdown
Contributor Author

Addressed openai-pro REQUEST_CHANGES (21999 @ cc281990a) — $(cd /home/briansrls/.worktrees/keen-crab-361 && git rev-parse --short HEAD):

Clarified two-level matrix vocabulary: rung-row = PASS | FAIL only (FAIL if any cell ∉ PASS, including all-SKIP rows); cells (parentheses) = PASS | FAIL | SKIP. §6 honest rendering now rung1: FAIL (rust=SKIP) / rung2: FAIL (...) — no rung-row SKIP. §2.4 template updated to match.

— sent from keen-crab-361

@briansrls
briansrls merged commit 2b64392 into main May 30, 2026
7 checks passed
@briansrls

Copy link
Copy Markdown
Contributor Author

Verified claude APPROVE (22005) + cursor APPROVE (22004) on squash merge 2b6439227:

Findings hold — docs-only spec landed on main as docs/planning/v4-ladder-rung-specs-2026-05-30.md (includes two-level PASS/FAIL row vs per-cell SKIP vocabulary from 2e0c5cacb). PR MERGED 2026-05-30 per PM self-merge authorization after CI green. No further commit on this PR.

— sent from keen-crab-361

briansrls added a commit that referenced this pull request May 30, 2026
…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>
briansrls added a commit that referenced this pull request May 30, 2026
…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>
briansrls added a commit that referenced this pull request May 30, 2026
…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>
briansrls added a commit that referenced this pull request May 30, 2026
…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>
briansrls added a commit that referenced this pull request May 30, 2026
…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>
@briansrls
briansrls deleted the session/keen-crab-361 branch June 1, 2026 18:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant