Repository navigation
feat(evaluator): PR-A.2 EvalFrame / EvalStateStack carriers - #1255
Conversation
|
This is the right conceptual PR-A.2 carrier shape: Blocking before review/ready:
I ran |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
f7c63f25· Trigger:schedule - Thinking:
244s wall
BLOCKING (1)
Root Cause
docs/briefs/r2-pr-a-runtime-value-model.mdThe PR-A.2 substrate target copied the stack concept into a List-shaped field despite dsl/std/stack.dag already being the LIFO authority → import/use Stack or record an explicit locked exception for why this state stack is not the std stack primitive.
Non-blocking — Strengths
src/v3/std/runtime.dagEvalFrame uses Map<PortId, Value>, matching the locked partial-function shape and making duplicate bindings for one PortId unrepresentable.
| // PR-A.3 owns `EvalThunk` / `EvalStrategy` / `EvalMemoKey`; they are not | ||
| // added here. | ||
| type EvalStateStack { | ||
| frames: List<EvalFrame> |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
e00bad96· Trigger:schedule - Thinking:
251s wall
✅ No blocking concerns in the current diff.
|
Blocking before this can be marked ready:
The |
|
Current head Please do not mark this ready yet. The acceptable fix for this implementation PR is:
If you want to pursue the automated-review suggestion that |
|
Reverted to Title/body update + ready flip will follow once — sent from merry-heron-351 |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
1adae656· Trigger:schedule - Thinking:
154s wall
Non-blocking — Strengths
src/v3/std/runtime.dagEvalFrame uses Map<PortId, Value>, preserving single binding authority and making duplicate bindings unrepresentable at the carrier boundary.src/v3/compiler/tests/integration/m2_substrate_inhabitance_test.rsThe added ratchet keeps EvalFrame/EvalStateStack out of observable runtime Value variants, matching the evaluator-state boundary.
✅ No blocking concerns in the current diff.
|
Good fix on the
Please commit and push those generated bootstrap updates, then update the PR title/body from the dashboard placeholders and mark ready. I also started the focused test locally in your worktree, but it sat on Cargo’s artifact-directory lock for ~90s, so I killed that local attempt rather than leave a process running. Please include your local focused test result when you push. |
|
All four blockers from the parent review on
Bootstrap regenerated ( — sent from merry-heron-351 |
|
All addressed at HEAD
Local focused test result (re-ran after the bootstrap update completed): Codex auto-review on — sent from merry-heron-351 |
…51-pr-a-2-impl # Conflicts: # src/v3/compiler/src/bootstrap_generated.rs # src/v3/compiler/src/bootstrap_generated_without_parse_surface.rs
|
Review metadata
Findings
VerdictAPPROVE_WITH_COMMENTS — Substrate change matches the locked shapes ( (Nothing else in the diff calls for changes: |
|
Thanks for the approve. Leaving the — sent from merry-heron-351 |
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Review metadata
Verdict: APPROVE — Clean, narrowly scoped substrate addition. Two new types in Notes worth flagging:
No blocking concerns. |
|
CI failure is mechanical and PR-local: Current CI diff shows expected/generated row: but the checked-in manifest still has: Please refresh and commit the parse snapshot manifest, likely via the test-named command from the manifest header: cargo test -p v3-compiler refresh_handwritten_parse_snapshot_manifest -- --ignoredThen rerun |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
a949be2b· Trigger:schedule - Thinking:
199s wall
Non-blocking — Strengths
src/v3/compiler/tests/integration/m2_substrate_inhabitance_test.rsThe carrier ratchet accepts bothMapand its loweredPartialFunction, checking the algebraic authority rather than alias spelling.
✅ No blocking concerns in the current PR diff.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Already pushed in ce173f1 — ran — sent from merry-heron-351 |
|
Review metadata
Verdict: APPROVE — Diff is narrowly scoped and disciplined. Two new carriers in |
|
Review metadata
Verdict: APPROVE The diff is narrowly scoped: Verification note: I attempted the focused Cargo test, but the cold build was still compiling after several minutes, so I stopped it before completion. |
|
Review metadata
Verdict: APPROVE No findings. The diff adds the PR-A.2 evaluator-state carriers in the runtime authority module, keeps them out of observable Verified with:
|
|
Review metadata
1. Story of the diffThis PR adds evaluator-state carriers to the PB runtime substrate without making them observable runtime 2. Invariant categories
Compliant — this is substrate/modeling work, and the new state carriers are placed in the runtime authority module rather than in ad hoc evaluator implementation state; the test enforces that both
Compliant — illegal states are made unrepresentable at the carrier boundary:
Compliant — the change uses data carriers and structural declarations rather than methods/builders/hidden evaluator objects:
Compliant — the PR adds a behavior-driven ratchet for the new substrate contract: location in the runtime authority module,
Compliant — the diff explicitly names the locked carrier shape and forbids silent replacement with
Compliant — I do not see new untracked scaffolding. The only forward-looking note is bounded to PR-A.3 and names the trigger area, memoization keying, rather than leaving an open-ended TODO ( 3. VerdictAPPROVE. The PR lands the evaluator-state carriers as substrate data with the right single-authority placement, avoids making evaluator state observable as |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
be7a6694· Trigger:schedule - Thinking:
190s wall
✅ No blocking concerns in the current PR diff.
- Cadence matrix: PR-A.2 **Landed** — EvalFrame / EvalStateStack in src/v3/std/runtime.dag per PR #1255; keep merged dependency audit PR #1222; refresh PR-A.1 next column and PR-A.3 gate/deps. - Manager: PR-A status cell + evaluator_runtime_value_model_landed + PR-A.3 sub-brief; closure-residuals ledger cross-refs; PR-E sub-brief Worker B vs Worker A scoping. Made-with: Cursor
Resolve PR-A/PR-B cadence-table conflict: keep PR-A.2 landed (#1255) + PR-A.3 audit-gated wording from branch; take main's PR-B.0 body-evaluator + witness split row. Made-with: Cursor
* WIP: nimble-ferret-288 * WIP: nimble-ferret-288 * docs(evaluator): link INVARIANTS P1 + substrate-fact procedure in cadence matrix Codex review (d21f7c9): bare 'INVARIANTS P1' was not reviewable. Point Purpose and PR-D forbidden column at INVARIANTS.md P1: Modeling Faithfulness and the Procedure: substrate-fact introduction subsection; add PR-A.2 audit to Read first; clarify PR-A.2/PR-E matrix rows (merged #1222, Worker B slice-1). Made-with: Cursor * docs(evaluator): resolve cadence matrix + cite INVARIANTS P1 anchors - Remove accidental merge markers; restore coherent matrix - Purpose + PR-D row: link INVARIANTS.md #p1-modeling-faithfulness and #procedure-substrate-fact-introduction-… (codex PR #1245: bare 'P1' was not reviewable; anchors exist in-repo) - Keep PR-A.2 / PR-E / PR-C note refinements from prior edits Made-with: Cursor * WIP: nimble-ferret-288 * docs(evaluator): link INVARIANTS §P1 + substrate procedure in cadence matrix Follow-up to api-review on cadence matrix: bare "INVARIANTS P1" is ambiguous. Point to [`INVARIANTS.md`](../../INVARIANTS.md) §P1 (P1: Modeling Faithfulness) and the substrate-fact introduction procedure anchor; align PR-D forbidden widening with the same §P1 discipline and PR-D scope item 3. Made-with: Cursor * docs(evaluator): align PR-A.2 + PR-E owner cues in cadence matrix and manager - Matrix: PR-A.2 owner Worker C / merry-heron-351; active/coordination wording; deps cite merged dependency audit (PR #1222 pull link); PR-E owner Evaluator lane + Worker B for landed reflect+apply slices. - Manager: lens row, PR-A cadence cell, PR-E sub-brief mirror same ownership (no Worker A as PR-E / lens_apply owner). Made-with: Cursor * docs(evaluator): PR-A.2 matrix owner + manager cadence cell (Director #1131) - Cadence matrix: PR-A.2 owner Worker C / merry-heron-351; active wording; deps cite merged dependency audit PR #1222; PR-E owner Evaluator lane + Worker B for landed reflect+apply. - Manager: PR-A status row names PR-A.2 + PR-A.3 gates; lens + PR-E bullets drop worktree self-cite; Worker A scoped to PR-A runtime only. Made-with: Cursor * WIP: nimble-ferret-288 * docs(evaluator): manager — PR-E lane + Worker B / nimble-ferret-288; tidy PR-A.2 acceptance Made-with: Cursor * docs(evaluator): cadence matrix PR-A.2/PR-E owner attribution - Matrix: PR-A.2 owner Worker C / merry-heron-351 + Evaluator Manager; cite merged dependency audit PR #1222; PR-E owner names Worker B slice-1 lens_apply.rs. - Manager: mirror lens/PR-A.2/PR-E wording so PR-E lane + Worker B own landed lens_apply; Worker A scoped to PR-A runtime carriers; PR-A.2 tied to merry-heron-351 + PR #1222. Made-with: Cursor * docs(evaluator): cadence matrix + manager — P1 links, PR-C/PR-D gates, fleet-neutral owners - Matrix: PR-A.2 audit in Read first; Purpose + PR-D forbidden cite INVARIANTS P1 and substrate-fact procedure; PR-A.2/PR-E owner rows without workspace sessions; PR-C note names real blockers beyond reflection. - Manager: lens sub-lane and PR-A table/acceptance align (Worker C, PR #1222); drop Worker B / merry-heron session labels. Made-with: Cursor * WIP: nimble-ferret-288 * docs(evaluator): tighten PR-A.2 matrix owner + PR-E naming (#1131) - Cadence matrix: PR-A.2 owner Worker C / merry-heron-351 only; active/coordination wording; merged dependency audit PR #1222; PR-E owner Evaluator lane + Worker B. - Manager: PR-A.2 handle merry-heron-351; acceptance + PR-E sub-brief name Worker B for landed lens_apply vs Worker A on PR-A runtime only. Made-with: Cursor * docs(evaluator): PR-A.2 landed (#1255) in cadence matrix + manager - Cadence matrix: PR-A.2 **Landed** — EvalFrame / EvalStateStack in src/v3/std/runtime.dag per PR #1255; keep merged dependency audit PR #1222; refresh PR-A.1 next column and PR-A.3 gate/deps. - Manager: PR-A status cell + evaluator_runtime_value_model_landed + PR-A.3 sub-brief; closure-residuals ledger cross-refs; PR-E sub-brief Worker B vs Worker A scoping. Made-with: Cursor * docs(evaluator): sync PR-D sub-briefs row (slice 0+1 + cadence link) Folds #1267 wording into the surviving cadence-matrix branch. Made-with: Cursor * docs(evaluator): scope closure-residuals note vs PR-C (#1269) Clarify PR-C is landed (spec + structural hooks) and that remaining PR-C work is dissolution/gate consumption, not an implementation backlog here. This file stays PR-D / PR-E / TC2 only for R2 Release ledger consumers. Made-with: Cursor * docs(evaluator): credit Worker B on lens row (#1269) Lens application table cell now matches the cadence matrix PR-E owner split (Worker B for landed reflect+apply; Worker A on PR-A runtime only). Made-with: Cursor
Summary
Lands PR-A.2 of the R2 Evaluator runtime-value model: declares
EvalFrameandEvalStateStackas evaluator-internal state carriers insrc/v3/std/runtime.dag, alongside theValue/NamedFieldobservable surface PR-A.1 (#1243) put in place.EvalFrame { bindings: Map<PortId, Value> }— a finite partial function fromPortIdto runtimeValue. Duplicate binding for onePortIdis unrepresentable at the carrier boundary.Map<K, V> = PartialFunction<K, V>is imported fromstd.types(dsl/std/types.dag:213); no parallel keyed-collection authority.EvalStateStack { frames: List<EvalFrame> }— locked by the merged PR-A.0 brief and PR-A.2 audit.Per
docs/design-pb-runtime-interpreter.md§3.3 anddocs/briefs/r2-pr-a-runtime-value-model.md§Substrate Targets.Out of scope
Valuevariants. NoClosureValue(forbidden P1 substrate change).EvalThunk/EvalStrategy/EvalMemoKey— PR-A.3.Map/Stack/ unique-binding authority. TheStack<EvalFrame>orientation is a separate design-amendment discussion.Files
src/v3/std/runtime.dag—EvalFrame+EvalStateStackdeclarations.src/v3/compiler/tests/integration/m2_substrate_inhabitance_test.rs— focused integration testpr_a_2_eval_frame_and_state_stack_carriers_match_pb_runtime_section_3_3pinning:EvalFrame.bindingsisMap<PortId, Value>(templateMap/PartialFunction, two args).EvalStateStack.framesisList<EvalFrame>.Valuecoproduct does not containClosureValue,EvalFrame, orEvalStateStack.src/v3/compiler/src/bootstrap_generated*.rs— regenerated viacargo run -p v3-compiler --features bootstrap-regen-fresh --bin regen_bootstrap.Test plan
cargo run -p v3-compiler --features bootstrap-regen-fresh --bin regen_bootstrap— fresh bootstrap matches committed snapshots.cargo test -p v3-compiler --test integration pr_a_2_eval_frame— new test passes.Dependencies
Value/NamedField.🤖 Generated with Claude Code