Repository navigation
docs(planning): Compiler Spine × Runtime min runner interface for nat_semiring rungs 3–4 - #3947
Conversation
…face Record file:line verification for spine/T-38 claims and surface roster/CI nuances before manager sign-off on PR #3938 §11.4. Co-authored-by: Cursor <cursoragent@cursor.com>
Joint manager sign-off on PR #3938 §11.4 min-runner interface; incorporate quick-tern-735 host harness typing, falsification receipts, and independent rung 3/4 CI gates. Compiler Spine ack with A4 Verdict attachment note. Co-authored-by: Cursor <cursoragent@cursor.com>
Both managers agree: optional FalsificationReceipt beside Fail.actual; cache-receipt route only if verdict_combine blocks at implementation. Co-authored-by: Cursor <cursoragent@cursor.com>
Both managers settled Verdict.Fail extension as A4 attachment default. Co-authored-by: Cursor <cursoragent@cursor.com>
…a ci_pipeline interpreter Unified TestClaimRun<S,A>/Verdict<A>/VerdictTally surface for both lanes feeding Close/Receipt. Forbids parallel CI-only verdict carriers. Spine review fixes (PR #3961 round 1): - FalsificationReceipt parameterized as <S, A> (subject: TestClaimEvalSubject<S>), not Node-only — Phase 1a S=CiPipeline path now compatible. - Receipt attaches at TestClaimRun<S,A> level, not Verdict.Fail — keeps Verdict<T> monomorphic so verdict_combine/monoid stay untouched. - Branch rebased off main to drop bundled joint-runner doc (stale vs #3947). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
b33ede59· Trigger:schedule - Thinking:
383s wall
BLOCKING (2)
Root Cause
docs/planning/compiler-spine-runtime-rung34-min-runner-interface-2026-05-30.mdHost runner surface bypasses the existing v4.extdeps.posix termination carrier → make EmitHostRunReceipt carry the typed termination/setup outcome rather than Outcome<Witness>.docs/planning/compiler-spine-runtime-rung34-min-runner-interface-2026-05-30.mdThe rung-4 receipt requirement is modeled as prose over the generic verdict algebra → introduce a required emit-vs-eval fail payload/result type or a non-optional receipt-bearing variant consumed by run_test_claim_emit_vs_eval.
|
|
||
| | Symbol | Responsibility | | ||
| | ------ | -------------- | | ||
| | `HostExit` | `Outcome<Witness<ExitOk>>` — typed exit, not raw int (A2) | |
There was a problem hiding this comment.
BLOCKING: HostExit drops the canonical POSIX Termination/ExitCode/SignalNum facts into an ok-only witness, violating P2 facts-flow-forward and host-process boundary discipline for nonzero or signaled runs.
| - **A3 (Rust-only W2 scope).** §4.3 places rustc/cargo invocation in Runtime, but the rung 5 cross-target gate is Phase 3, not Phase 2. W2 ships Rust only; Python/Go `run_emit_host` rows are pre-allocated symbols, not implementations, until Phase 3 dispatches. | ||
| - **A4 (falsification receipt).** PR #3938 §11.1 row 6 names "falsification verdict receipts" as Runtime/TestClaim authority. A bare `Fail` verdict is not a receipt — `FalsificationReceipt<A>` makes the wrong emit auditable post-hoc and is the artifact Self-host/Release will demand at rung 4 close. | ||
|
|
||
| **A4 attachment (W2-kickoff default, both managers).** Extend `Verdict.Fail` with an optional `falsification: FalsificationReceipt<A>` beside `actual` (`std/verdict.dag` — spine lands the carrier; Runtime owns `FalsificationReceipt` typing). Rationale: verdict and receipt stay co-located; `TestClaimCacheReceipt` stays IRT-4/cache-only and avoids coupling host artifacts into the cache layer. Revisit only if `verdict_combine` monoid constraints block the extension at implementation time. |
There was a problem hiding this comment.
BLOCKING: Making falsification optional on Verdict.Fail leaves a rung-4 Fail without a FalsificationReceipt representable, violating API-level enforcement of the line-88 receipt invariant.
- HostExit: Outcome<Termination> from v4.extdeps.posix (ExitCode/SignalNum facts) - Verdict.Fail: required FalsificationReceipt<S,T> per #3961; run_test_claim_emit_vs_eval gates rung 4 - Drop optional falsification / ExitOk witness per P2 facts-flow-forward Co-authored-by: Cursor <cursoragent@cursor.com>
api-review BLOCKING resolution (
|
§5 algorithm now requires empty intersection AND valid projected cache_digest for Skip; invalid projection fail-closes to Run per §1 and v4-ci-overhaul structural criterion (cursor api-review). Co-authored-by: Cursor <cursoragent@cursor.com>
api-review REQUEST_CHANGES resolution (
|
Use landed Verdict<A> / Verdict<RuntimeValue>; subject typing on FalsificationReceipt<S,A> and TestClaimRun — not Verdict<S,T> (P1/P2). Co-authored-by: Cursor <cursoragent@cursor.com>
api-review REQUEST_CHANGES resolution (Verdict generic)Finding (cursor/composer-2.5): §4.2 used non-landed Fix: Valid — pushed on
Shadow doc §1/§5 — sent from smart-stag-871 |
Line 102 cannot bind S on Verdict<A>; rung-4 W2 extends Verdict<RuntimeValue>.Fail + FalsificationReceipt<Node, RuntimeValue>; S≠A cases stay on TestClaimRun / receipt pairing per P2. Co-authored-by: Cursor <cursoragent@cursor.com>
api-review resolutions (
|
|
Review metadata
1. Story of the diffThis PR adds two planning contracts. The first defines a shadow-mode The load-bearing mechanism is good overall: the CI doc keeps “always run” as tracked carveout data rather than a permanent policy enum, and the runner doc separates Spine-owned eval/roundtrip work from Runtime-owned host execution and Target Realization-owned parsing rows. The main problem is one bad carrier shape in the CI receipt: invalid cache projection is still forced into a 2. Invariant categories
The fix is to carry the failed projection as typed receipt evidence, not a fake
2.5. Top-down PM intent reviewFinding — authority mismatch against the PR’s own structural intent. The PR says the CI receipt is correct only when 3. VerdictREQUEST_CHANGES. The PR’s direction is strong and most of the runner/CI split is faithful to the project intent, but the mandatory |
Remove sentinel_for_audit — invalid projection is Rejected on the receipt carrier; Skip only when Accepted (openai-pro P3/P2 review). Co-authored-by: Cursor <cursoragent@cursor.com>
api-review REQUEST_CHANGES resolution (openai-pro —
|
Remove sentinel_for_audit — invalid projection is Rejected on the receipt carrier; Skip only when Accepted (openai-pro P3/P2 review). Co-authored-by: Cursor <cursoragent@cursor.com>
|
Review metadata
1. Story of the diffThis PR adds two planning contracts for the next compiler-spine/runtime work, not implementation code. The first document defines a shadow-mode chatgpt-review-6eb16e07-9fc6-41… 2. Invariant categories1. LAYER MODEL (substrate vs implementation)Finding — 2. INVARIANTS.md + modeling-discipline.mdFinding — same line, 3. CODING.mdCompliant — no Rust implementation is changed. The planning APIs are named as data + functions ( 4. TESTING.mdFinding — chatgpt-review-6eb16e07-9fc6-41… 5. LOCKED DESIGN DECISIONSCompliant — the runtime runner doc explicitly treats the spine carriers as frozen in §2, keeps 6. TRACKED vs UNTRACKED DEBTCompliant — the new scaffolds are bounded and named: 2.5. Top-down PM intent reviewFinding — 3. VerdictREQUEST_CHANGES The PR is directionally sound, but the host-exit carrier wording, the vacuous rung-gate predicates, and the |
api-review REQUEST_CHANGES resolution (openai-pro @
|
Parent CiStepSelection used bare ContentHash while the shadow receipt contract required Outcome<ContentHash> for P3 fail-closed Skip gating. Amend parent §5 and note the amendment in the shadow doc so one authority remains for the carrier field. Co-authored-by: Cursor <cursoragent@cursor.com>
api-review REQUEST_CHANGES resolution (cursor @
|
|
Review metadata
1. Story of the diffThis PR adds two planning contracts and amends one existing CI planning doc. The CI-side document defines a shadow-mode The runtime/TestClaim-side document freezes the rung 3–4 runner interface for 2. Invariant categories
Finding — P2 single-authority / fail-closed receipt completeness:
Finding — Boundary Discipline / single authority: same issue as above. The doc has two authorities for carveout step existence: the registry drives emitted selections (
N/A — no Rust implementation code or helper structure is changed; this is planning-doc substrate/interface work.
Compliant — no executable code lands here, and the plan correctly pushes testable artifacts into later modeled claims: Phase 2.1 calls for unit claims on fixture
Compliant — the runtime runner doc explicitly freezes
Compliant — with the registry omission above still blocking under P2. The intended scaffolds are mostly bounded: 2.5. Top-down PM intent reviewFinding — worker brief would cause the wrong receipt shape: The PM-level intent in this PR is that active Phase 2.5 gates on 3. VerdictREQUEST_CHANGES The runtime/TestClaim runner interface looks directionally solid, especially the typed host exit, typed stdout parse, and rung-split gates. The CI receipt shadow contract needs one blocking fix before merge: make the Always-gate carveout step IDs part of the selection-producing surface, or the doc’s own algorithm cannot produce the |
Carveout gate step IDs were listed in ci_always_run_carveouts but absent from the registry the selection algorithm iterates, so they could not appear in receipt.selected. Register every ci_pipeline job and gate; clarify registry as the sole CiStepSelection emission surface. Co-authored-by: Cursor <cursoragent@cursor.com>
api-review REQUEST_CHANGES resolution (openai-pro @
|
…a ci_pipeline interpreter (#3961) * docs(planning): verdict surface contract — T-38 corpus eval × Phase 1a ci_pipeline interpreter Unified TestClaimRun<S,A>/Verdict<A>/VerdictTally surface for both lanes feeding Close/Receipt. Forbids parallel CI-only verdict carriers. Spine review fixes (PR #3961 round 1): - FalsificationReceipt parameterized as <S, A> (subject: TestClaimEvalSubject<S>), not Node-only — Phase 1a S=CiPipeline path now compatible. - Receipt attaches at TestClaimRun<S,A> level, not Verdict.Fail — keeps Verdict<T> monomorphic so verdict_combine/monoid stay untouched. - Branch rebased off main to drop bundled joint-runner doc (stale vs #3947). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(planning): fix P2 violation in verdict surface contract — lift falsification into Verdict.Fail Two BLOCKING reviews on PR #3961 (claude + codex, sha 91ed193) flagged the same root cause: TestClaimRun { verdict, falsification } as a product made Pass+Some and Fail+None representable — INVARIANTS P2 violation (illegal states unrepresentable). Fix: parameterize Verdict<S, T> and bind falsification *inside* Fail. The receipt is now structurally reachable only via Fail; both illegal pairings are ruled out at the type level. S is phantom on Pass/Deferred. Side effects: - verdict_combine / verdict_monoid generalize from <T> to <S, T>; shape (Pass identity, Fail absorbs, Deferred sticky) unchanged. - TestClaimRun<S, A>.verdict widens from Verdict<A> to Verdict<S, A> — mechanical follow-on; no new slot on TestClaimRun itself. - §4 lane table updated: carrier change is back in std/verdict.dag (spine). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(planning): clarify P2 rationale — Pass+Some unrepresentable, Fail+None legal openai-pro review on #3961 flagged a contradiction in §2.2: claimed the new shape "rules out both illegal pairings" while preserving Option to encode the structural-no-receipt Fail case. Both statements can't be true. Truth: the carrier-relocation deletes Pass+Some (Pass has no slot). Fail+None is legal and meaningful — it's the intended encoding for the evidence:None arm in §2.3 (structural DiagnosticClaim rejects that didn't perform host execution or walk the interpreter). The P2 win is single-axis. Per-roster predicates (e.g. rung-4 host roster must have Some) can later require richer constraints, but those are not global type-level invariants. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(planning): resolve §2.2-vs-§2.3 None ambiguity flagged by cursor cursor REQUEST_CHANGES on #3961: structural DiagnosticClaim-style fails were assigned two incompatible encodings — §2.2 said Fail+None, §2.3 said Some(receipt with evidence=EvidenceNone). Two different Nones for one case (modeling-discipline.md Practice 2). Canonical answer: structural rejects ALWAYS produce a Some(receipt) carrying expected/actual/divergence with evidence=EvidenceNone. The receipt has a diff to report even when no execution trace exists. Plain Fail+None is reserved for un-instrumented/legacy Fail sites and treated as a tightening candidate. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * WIP: Runtime/TestClaim Manager — authority over T-22 eval execution, T-38 str * docs(planning): collapse Fail to receipt-as-payload (single observed-outcome authority) Both blocking reviews on PR #3961 acc5789/086d6a91 (claude inline + codex schedule) flagged the dual-authority remaining after the prior fix: - Fail.actual: Outcome<T> AND - FalsificationReceipt.actual: A (when Fail.falsification = Some) were two declarations of the same observed value, violating INVARIANTS P2 single-authority. The Option also admitted Fail+None as a silent un-instrumented state, which codex flagged separately. Fix: collapse Fail to `Fail { receipt: FalsificationReceipt<S, T> }`. The receipt is now the sole payload; the receipt's `actual: A` is the sole authority for the observed outcome; structural rejects construct a receipt with evidence=EvidenceNone; there is no Option, no Fail+None state, no duplicated actual. Deferred keeps actual: Outcome<T> (single authority within Deferred). Side effects: - §2.2-vs-§2.3 None-meaning ambiguity becomes moot (no None at verdict layer). - verdict_combine join semantics unchanged; receipt is the single field Fail-absorbs carries forward. - §4 lane table updated. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(planning): add §3.1 migration note — PR #3958 ships Draft B, collapse follows W2 worker keen-raven-290 already shipped PR #3958 against the prior Fail {actual, Option<receipt>} shape and is at full review criteria. Per manual-merge policy that branch can land as-is; the receipt-as-payload collapse is the target shape and lands as a small follow-up tightening (mechanical: rename Fail.actual reads to receipt.actual, drop the Option wrap, update SG-0 census row). No live consumer outside the W2 substrate, so the follow-up is bounded. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(planning): correct §3.1 consumer census — Fail pattern-match is in 8 files, not W2-only cursor REQUEST_CHANGES on #3961 0923160 flagged that §3.1 understated the migration blast radius. Verified against main HEAD: 36 'Fail {' match sites across 8 files including the spine lane (05_eval.dag, 8+ sites) and the Phase 1a CI workflow (ci.dag, 3 sites), not just W2 substrate + tests. Updated §3.1 with the verified file:count table and reframed the follow-up as a small multi-file PR requiring Compiler Spine coordination, not a single-file W2-only change. The per-site change is still mechanical, but the file count is wider than the earlier wording claimed. Honest census restored. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(planning): receipt.expected / receipt.actual become Outcome<A> — preserve rejection-shaped failures cursor REQUEST_CHANGES on #3961 60e3cdc flagged that receipt.actual: A (bare) drops the rejection-shaped (Rejected{diagnostics}) failures live Fail.actual: Outcome<T> carries today — e.g. workflow_pipeline CI diagnostics at ci.dag:1094 and the ~36 'Fail {' sites the §3.1 census itself counted. Fix: receipt.expected and receipt.actual become Outcome<A>, matching the current Fail.actual Outcome wrap. Single observed-outcome authority is preserved (now at receipt.actual); rejection-shaped failures keep their diagnostics; the §3.1 follow-up is genuinely mechanical (Outcome flows through as-is, no extraction). ValueDiff stays well-defined only on Accepted/Accepted divergence; Rejected/Accepted divergence is encoded by the outcome shapes themselves. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
Manager-lane artifact per PR #3938 §11.4 item 4: joint minimum executable runner interface for rung 3 (round-trip) and rung 4 (emit-run vs
.dageval) on the Phase 1nat_semiringfixture.Defines frozen spine carriers (
InferredTree,TestClaimRun), T-22/T-38 verdict surface, spine vs Runtime authority split, and worker dispatch order (W1–W3) — blocked on §8 operator sign-off before implementation workers dispatch.Tree verification
Appendix A in the doc lists file:line spot-checks against the current v4 tree (RoundTripClaim
Deferredat05_eval.dag:1793, CI structural-only gate atci.yml:342, etc.).Test plan
Review readiness
gh pr ready 3947 --repo gunb-ai/gunbcRelated
quick-tern-735(dashboard graph)