Repository navigation
feat(evaluator): PR-A.3 structural memo-key carriers - #1544
Conversation
|
Manager feedback on draft #1544: The carrier additions in Before marking ready, please complete the dispatched acceptance surface:
No request to broaden scope. This should remain a PR-A.3 carrier/test/docs slice only. |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
1c559a69· Trigger:schedule - Thinking:
181s wall
BLOCKING (1)
Root Cause
src/v3/std/runtime.dagPR-A.3 carrier declarations were authored without regenerating the generated full-bootstrap authority → run regen_bootstrap and commit the updated bootstrap snapshot containing EvalStateKey and EvalMemoKey.
| // later evaluator memo table without implementing caching behavior. `state_key` | ||
| // is structural evaluator state and `strategy` is the closed strategy carrier; | ||
| // neither may be replaced by strings, names, or host-only labels. | ||
| type EvalMemoKey { |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
There was a problem hiding this comment.
Verified against current PR head f7b4b08d62c5b479c4bfaa728d627b6d898cf919: this is already addressed in the current tree. Both committed bootstrap snapshots now contain the memo-key facts:
src/v3/compiler/src/bootstrap_generated.rshasname: Some("EvalStateKey".to_string())andname: Some("EvalMemoKey".to_string()).src/v3/compiler/src/bootstrap_generated_without_parse_surface.rshas the same two declarations.
I also reran cargo run -p v3-compiler --features bootstrap-regen-fresh --bin regen_bootstrap -- --verify, and it reports committed snapshots match fresh compile. No additional patch is needed for this finding.
— sent from nimble-tern-266
|
Review metadata
Verdict: APPROVE The diff cleanly adds structural |
|
CI triage note: latest head Current status:
Please inspect the failed logs once available and patch only the focused PR-A.3 carrier/test issue. The PR body currently lists only a targeted local test plus bootstrap verify; before returning this to review, please also run or account for the full v3 test failure path that CI uses. Diff scope otherwise looks aligned with the dispatch: |
|
Verified against current PR head Local verification:
— sent from nimble-tern-266 |
|
Review metadata
Findings: None. The substrate additions declare memo identity structurally ( Verdict: APPROVE — The diff matches the PR title: structural memo-key carriers in Exploratory (optional): |
|
Addressed the Local verification after the patch:
Current GitHub checks on the fresh run: — sent from nimble-tern-266 |
|
Review metadata
FindingsNone that tie a rubric violation to a concrete diff hunk. The substrate change adds VerdictAPPROVE — Scoped substrate carriers plus bootstrap regen and manifest refresh; aligned with single-authority runtime modeling and the documented PR-A.3 plan. No fail-closed, modeling-discipline, CODING, or TESTING issues identified in the reviewed hunks. Exploratory observations (optional)
src/v3/std/induction.dag 56 88794 e405e1549cf2fe08 |
|
Verified the optional
This is not a malformed row; the file still has the expected tab-separated — sent from nimble-tern-266 |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
948dcb2c· Trigger:schedule - Thinking:
171s wall
BLOCKING (1)
Root Cause
src/v3/compiler/tests/integration/parse_corpus_manifest.txtUnrelated corpus hash drift was committed with the runtime.dag refresh → regenerate the manifest from exactly the changed corpus state or include the corresponding induction.dag source change.
| src/v3/std/go_method_template_contracts.dag 5 110898 7eb5c9f1296f4a45 | ||
| src/v3/std/induction.dag 56 88794 546f74c63c189c50 | ||
| src/v3/std/induction.dag 56 88794 e405e1549cf2fe08 | ||
| src/v3/std/integer_diagnostic_order.dag 6 8124 5d7b31594a5b3d5c |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
There was a problem hiding this comment.
Verified against current PR head 948dcb2c: src/v3/std/induction.dag is byte-identical to origin/main, but this manifest row is not hand-authored independently. It was produced by the repo helper cargo test -p v3-compiler refresh_handwritten_parse_snapshot_manifest -- --ignored, and the current manifest test requires it.
Evidence:
sha256sum src/v3/std/induction.dag <(git show origin/main:src/v3/std/induction.dag)gives the same source hash for both files.- The manifest row remains well-formed:
src/v3/std/induction.dag<TAB>56<TAB>88794<TAB>e405e1549cf2fe08. - Reverting only this row to the
origin/mainvalue is the same class of mismatch that failedv3earlier inparse_stage4_prep::handwritten_parse_snapshot_matches_manifest. - Current GitHub checks on head
948dcb2care all green:fmt,ci,v3, andself_host_ratchet.
So this is not a stray manual artifact; it is part of keeping the checked-in parse snapshot manifest aligned with the current parser/debug snapshot authority after running the manifest refresh helper.
— sent from nimble-tern-266
|
Verified the top-level Facts checked:
So the manifest is regenerated from the current corpus/parser state. There is no corresponding — sent from nimble-tern-266 |
|
Review metadata
FindingsNone. The diff adds substrate carriers with explicit 🟢 TERMINAL scope notes and ledger-style rationale in VerdictAPPROVE — Narrowly scoped: declares Exploratory observations (optional)Embedding full |
|
Review metadata
FindingsNone. The substantive change is substrate declarations in VerdictAPPROVE — Exploratory observations (optional)The renamed test |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
538ad964· Trigger:schedule - Thinking:
142s wall
Non-blocking — Strengths
src/v3/std/runtime.dagThe new memo-key carriers are structural, single-authority, and avoid string/name-only fingerprints per INVARIANTS P1/P2.src/v3/compiler/tests/integration/m2_substrate_inhabitance_test.rsThe generated-full-bootstrap ratchet pins the carrier home module and all EvalMemoKey field types.
✅ No blocking concerns after the prior bootstrap and manifest issues were corrected.
|
Review metadata
Verdict: APPROVE — Adds |
…y-carriers # Conflicts: # src/v3/compiler/src/bootstrap_generated.rs # src/v3/compiler/src/bootstrap_generated_without_parse_surface.rs
|
Review metadata
Verdict: APPROVE The diff is narrowly scoped: it adds structural Per instruction, I did not run builds or tests. |
|
Review metadata
Verdict: APPROVE — small, narrowly-scoped substrate addition that closes the PR-A.3 memo-key gap cleanly. The new
Nothing in this diff implements caching behavior, so the TC2 / partial-diagnostics concerns from the PR-A.3 audit don't get tripped here. |
|
Review metadata
Findings: None tied to the rubric. The substrate change adds Verdict: APPROVE — Narrow, coherent PR-A.3 slice: declare memo-key carriers, regen bootstrap fixtures, refresh briefs/manifest, and extend the existing full-bootstrap substrate test. No concrete violations of Exploratory (optional): |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
8e5b4c47· Trigger:schedule - Thinking:
225s wall
BLOCKING (2)
Root Cause
docs/briefs/r2-pr-b-body-evaluator-eager-baseline.mdCarrier status was updated only in the R3 residual section → update or remove the stale carrier-authority, live-prerequisite, and still-needed-prerequisite framing so PR-B.1 has one live gate.docs/briefs/r3-v-l4-l7-direct-readiness-reaudit-post-e5.mdMemo-carrier status was updated in fire criteria and trigger text only → update the Implementation Dispatch Decision paragraph to remove the stale no-memo carve-out requirement.
| without `EvalMemoKey` the memoization boundary is undeclared. The | ||
| PR-A.3 audit explicitly lists these as the implementation-side gap. | ||
| 2. **Execution semantics for non-eager strategies undeclared.** `NormalOrder` | ||
| The former PR-A.3 carrier absence is closed: `EvalStrategy`, |
There was a problem hiding this comment.
BLOCKING: The new "carrier absence is closed" statement leaves this same brief's carrier-authority and still-needed-prerequisite sections saying strategy/memo carriers are undeclared, creating duplicate PR-B.1 gate authority contrary to INVARIANTS P1/P2.
| 3. **Memo gap closed or explicitly deferred:** **Still open.** No | ||
| `EvalStateKey` / `EvalMemoKey` declarations exist; an eager no-memo carve-out | ||
| is plausible but not sufficient without W1 producer wiring. | ||
| 3. **Memo gap closed or explicitly deferred:** **Closed.** `EvalStateKey` / |
There was a problem hiding this comment.
BLOCKING: Marking the memo gap closed while the dispatch paragraph still requires an explicit no-memo eager scope leaves incompatible W1 gates in one readiness audit, violating live-state documentation and boundary discipline.
|
The late doc-authority finding is valid. #1544 had already merged at That PR removes the stale PR-B.1 carrier-blocking language and makes — sent from nimble-tern-266 |
|
The second late doc finding is also valid. I added it to follow-up PR #1565 in — sent from nimble-tern-266 |
Summary
src/v3/std/runtime.dag:EvalStateKey { state: EvalStateStack }andEvalMemoKey { program, node, state_key, strategy }m2_substrate_inhabitance_test.rscoverage for full-bootstrap memo-key shape, structural state identity, and closedEvalStrategyruntime.dagafter the carrier additionsLocal tests
cargo test -p v3-compiler --test integration m2_substrate_inhabitance_test::pr_a_3_strategy_and_memo_key_carriers_match_eager_baseline_shape -- --nocapturecargo test -p v3-compiler --test integration parse_stage4_prep::handwritten_parse_snapshot_matches_manifest -- --nocapturecargo run -p v3-compiler --features bootstrap-regen-fresh --bin regen_bootstrap -- --verifyDebt receipt (R3 standing program)
Per-PR dissolution gate
src/v3/std/runtime.dag: completes the PR-A.3 memo-key carrier gap by declaring structuralEvalStateKey/EvalMemoKey; noEvalThunk, lazy strategy, body evaluator, memo cache, or newValuevariant is introduced.src/v3/compiler/tests/integration/m2_substrate_inhabitance_test.rs: existing Rust test path grows only; no census shift / existing path.regen_bootstrap; parse corpus manifest refreshed through the existing ignored manifest helper. No hand-authored generated edits beyond the regen output.