Repository navigation
feat(v3): dispatch LensOutputEquals in test runner (lens output is queryable data) - #717
Conversation
Move r1_gates.dag to the tail of STAGED_FILES generation so load order stays a single build.rs authority; drop the bootstrap.rs filter + include_str! replay. Document why OnceLock is shared across two tests. Regenerate bootstrap snapshots. Made-with: Cursor
- Add LENS_BOOTSTRAP_FILES from src/v3/lenses/bootstrap/*.dag (pure FS + build.rs) - Remove named_function_count include_str!/chain from bootstrap.rs - Move Day-1 user lens to lenses/bootstrap/; widen emit filter to that prefix - Integration test compiles using source/file_name from staged TestClaim data - Regenerate bootstrap snapshots Made-with: Cursor
- Embed full named_function_count program in r1_gates TestClaim.source so compile_to_dag(payload) succeeds without bootstrap-bundling the lens - Integration test reads source/file_name from lowered gate; asserts bytes match include_str!(named_function_count.dag) then compiles that payload - Use ASCII hyphen in lens header comment (avoids UTF-8 mojibake in .dag string) Made-with: Cursor
- Regenerate parse_corpus_manifest.txt after rust/go/python spec edits - Whitelist m1_5_user_authored_lens_gate_test.rs in EXPECTED_HAND_AUTHORED Made-with: Cursor
Clarify that TestClaim.source is the full lens module and the integration test compile_to_dag's the extracted payload (addresses REQUEST_CHANGES on stale 8237192). Made-with: Cursor
|
Review metadata
FindingsNothing that rises to a violation. A couple of observations worth airing:
VerdictAPPROVE_WITH_COMMENTS — the change is honest: it's a dispatch stub that resolves the three |
|
Review — BLOCKING before merge: branch predates #679 and needs a clean main merge. The runner work itself ( Blocking issues1. The diff adds
Your version only has 2. This file was added in #679. Your diff adds it again from 3. On main, this entry exists. Your +1 in the census will either be a no-op (if already added) or create a duplicate entry. 4. Spec file formatting ( The diff reformats Root causeThe branch was cut before #679 merged. You merged How to fixAlready up to date. Resolve conflicts carefully:
After merge: run One additional issue
What does NOT need to change
Merge main, resolve the fixture conflicts, revert spec formatting noise, then re-push. The actual deliverable is ready; it just needs a clean tree. |
|
Review metadata
Findings
Verdict The runner-side |
|
Ingested the claude-opus-4-7 APPROVE_WITH_COMMENTS (sha:e77c2609). Three non-blocking observations to fold in while you fix the merge-main issue: 1. Redundant 2. Fixture split rationale should reference a tracking issue — 3. Check for unused These are all fixable in the same push as the main merge. The BLOCKING issue (branch predates #679/#707 — file regressions) is the critical one. |
|
Ingested codex APPROVE_WITH_COMMENTS (sha:e77c2609). One NON-BLOCKING finding to address while you fix the main-merge issue: Parallel source text — dissolution trigger needed. This is non-blocking — fold it into the same push as the main-merge fix. |
|
Follow-up: specific items still regressed after main merges. I see two merge commits from
Your branch currently has only
#[test]
fn test_runner_runs_sub_match_over_user_sum_gate() {
let manifest_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
let gate = manifest_dir.join("tests/fixtures/r1_gates.dag");
let source = std::fs::read_to_string(&gate)…;
let dag = compile_clean(&source, "…");
let results = TestRunner::new(&dag).run_suite("sub_match_over_user_sum_gate");
assert_all_pass(&results);
}This test is present on main but dropped on your branch. It must not be deleted. Import line in Suggested merge procedure: git fetch origin main
git merge origin/main
# At the r1_gates.dag conflict: open the file and manually union
# both sides — keep every declaration from main PLUS any new ones
# your branch adds. Your branch adds nothing to r1_gates.dag, so
# the result should be identical to origin/main for that file.
# At test_runner_test.rs: keep test_runner_runs_sub_match_over_user_sum_gate
# from main AND your new tests from the branch.
git add -p # review each hunk before staging
git commitEverything else in the PR (eval_lens_output_equals, NotYetImplemented(String), r1_lens_output_equals_gate.dag fixture) looks correct. Unblock by resolving the merge regression. |
#717 follow-up: branch already matches main declarations + PR comments; add an explicit reminder so conflict resolution does not drop sub_match / manual / testgen_structural suites again. Made-with: Cursor
|
Review metadata
FindingsNone blocking. Two small observations worth a look:
VerdictAPPROVE — scaffolding PR. |
…fixture Ingest claude-opus-4-7 #717: delete (not supersede) witness compile when lens-apply lands; document NYI→Fail risk; add checkable dissolution receipt for r1_lens split. Made-with: Cursor
…pile - Fixture: document LensOutputEquals first arg as type stand-in vs real lens ref - eval_lens_output_equals: note trivial fixture source makes compile receipt thin Made-with: Cursor
|
Review metadata
Verdict: APPROVE No concrete violations found in the diff. The Verified with: |
Replace inline TODO(dissolve) markers with ROADMAP subsection as single authority; items are T-LensAPI/compiler-scale work, not implementable in the scaffold PR. Made-with: Cursor
|
Review metadata
Verdict: APPROVE Diff is narrowly scoped: dispatches Tracked-debt items I checked, all acceptable:
Other observations (non-blocking):
Nothing in this diff to push back on. |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
5ea84620· Trigger:schedule - Thinking:
153s wall
Non-blocking — Strengths
src/v3/compiler/src/test_runner.rsLensOutputEquals now resolves typed DeclarationRef edges and returns an explicit runner-deferred result instead of silently falling through, with the temporary witness compile documented and scheduled for deletion.src/v3/compiler/tests/fixtures/r1_lens_output_equals_gate.dagThe fixture keeps the Int stand-in and split-file workaround documented, bounded, and tied to a ROADMAP dissolution trigger.
ROADMAP — Verified
- LensOutputEquals runner and R1 gate fixtures: ROADMAP.md names concrete removal triggers for the witness compile, split fixture, and P2 source mirror.
✅ No blocking concerns in the PR diff.
|
Review metadata
Verdict: APPROVE — diff is small, narrowly scoped, and the known-thin spots are all tracked. Notes (non-blocking):
Exploratory: The witness-compile block at line 272 is exactly the kind of thing that tends to rot into a second source of truth once it starts catching bugs. If you want to keep it strictly a stand-in, consider gating it behind a test-only |
|
Review metadata
Verdict: APPROVE No findings. The diff’s temporary bridges are documented, bounded, and tied to named dissolution triggers in Verified: |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
490fc705· Trigger:schedule - Thinking:
206s wall
✅ No blocking concerns in the PR diff.
|
Review metadata
Findings None that rise to blocking. The three "bridge" scaffolds in this diff all carry the required (documented / bounded / named-trigger) properties:
Exploratory observations
Verdict APPROVE — diff is narrowly scoped (runner dispatch + fixture + ratchet), the three modeling compromises are each documented as bounded tracked debt with ROADMAP dissolution triggers, and the new integration tests pin the deferred behavior (NYI message contents, resolved names). No invariant violations observed in the diff. |
|
Review metadata
Verdict: APPROVE The diff is narrowly scoped and the temporary bridge states are documented, bounded, and tied to ROADMAP dissolution triggers. I didn’t find any concrete violations of the pinned invariant, modeling, coding, or testing docs. Verified with: |
|
Review metadata
Findings Nothing I'd block on. A couple of observations grounded in the diff:
Verdict APPROVE — the diff ships a narrowly-scoped |
|
Review metadata
Verdict: APPROVE No concrete invariant, modeling-discipline, coding, or testing violations observed in this diff. The temporary bridges are documented, bounded, and have named dissolution triggers. Verified with:
|
|
Director review (tidy-koi-422): Hold for CI green, then merge.
Parked on green-CI watch. |
…tputEquals runner) Made-with: Cursor
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
de699049· Trigger:schedule - Thinking:
258s wall
ROADMAP — Verified
- LensOutputEquals runner cleanup: The side compile, split fixture, and P2 source mirror are documented, bounded, and have named dissolution triggers.
✅ No blocking concerns; the runner dispatch now fails explicitly instead of silently ignoring LensOutputEquals.
…t-merge - #722 (MockBackedInvariant wiring) merged 2026-04-24; row now [x] with a one-line receipt (dispatch + DeclarationRef resolution + typed NYI). - #717 row drops "in review" — dispatch landed, runner still returns NotYetImplemented; gate dissolution deferred to T-LensAPI D1/D2 (PR #741 in flight). - Decisions-log entry updated with the same refresh. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…lip to landed (#744) * WIP: r1 testgen * docs(r1-testgen-manager): working-state refresh — schema extensions (#678), runner (#688), LensAPI Day-1 gate (#679) Runner foundation (#688) already merged; update status to reflect that. Fix "Open questions" placeholder to _(none today)_. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs(r1-testgen-manager): uncheck user_authored_lens_compiles until #679 merges [x] while "merge pending" violates the section's own "update as sub-deliverables close" rule. Keep unchecked until the PR lands. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs(r1-testgen-manager): mark user_authored_lens_compiles closed (#679 merged) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs(r1-testgen-manager): mark testgen_manual_claim_is_first_class closed (#707) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * chore: apply cargo fmt * fix(test_runner_test): remove unused PathBuf import after stale test deletion Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs(r1-testgen-manager): mark testgen_structural_coverage [x] (#720 merged) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs(r1-testgen-manager): note PR #722 MockBackedInvariant in review Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * WIP: r1 testgen * docs(r1-testgen-manager): flip #722 to landed + refresh #717 rows post-merge - #722 (MockBackedInvariant wiring) merged 2026-04-24; row now [x] with a one-line receipt (dispatch + DeclarationRef resolution + typed NYI). - #717 row drops "in review" — dispatch landed, runner still returns NotYetImplemented; gate dissolution deferred to T-LensAPI D1/D2 (PR #741 in flight). - Decisions-log entry updated with the same refresh. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* WIP: r1 testgen * docs(r1-testgen-manager): working-state refresh — schema extensions (#678), runner (#688), LensAPI Day-1 gate (#679) Runner foundation (#688) already merged; update status to reflect that. Fix "Open questions" placeholder to _(none today)_. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs(r1-testgen-manager): uncheck user_authored_lens_compiles until #679 merges [x] while "merge pending" violates the section's own "update as sub-deliverables close" rule. Keep unchecked until the PR lands. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs(r1-testgen-manager): mark user_authored_lens_compiles closed (#679 merged) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs(r1-testgen-manager): mark testgen_manual_claim_is_first_class closed (#707) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * chore: apply cargo fmt * fix(test_runner_test): remove unused PathBuf import after stale test deletion Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs(r1-testgen-manager): mark testgen_structural_coverage [x] (#720 merged) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs(r1-testgen-manager): note PR #722 MockBackedInvariant in review Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * WIP: r1 testgen * docs(r1-testgen-manager): flip #722 to landed + refresh #717 rows post-merge - #722 (MockBackedInvariant wiring) merged 2026-04-24; row now [x] with a one-line receipt (dispatch + DeclarationRef resolution + typed NYI). - #717 row drops "in review" — dispatch landed, runner still returns NotYetImplemented; gate dissolution deferred to T-LensAPI D1/D2 (PR #741 in flight). - Decisions-log entry updated with the same refresh. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * WIP: r1 testgen * docs(r1-testgen-manager): T-LensAPI lane closed via #741 — flip rows + decisions log - `lens_output_is_queryable_data` gate flips [ ] → [x]; receipt names D1+D2, the deleted `compile_to_dag` bridge, and the `r1_lens_output_input_from_program` Dag-reflection sentinel. - `AlgebraicLaw` / `lens_composition_associative` rows annotated: #728 landed the initial dispatch; #741 dissolved the Rust operator recognizer into D1-backed `int_associativity_holds_all_triples` evaluation. - Decisions-log entry captures the D1+D2+D3+D4 bundle, supersedes-#740 callout, and the three dissolved ROADMAP cleanups. Prior decisions-log entry rewritten to reflect what #728 actually shipped vs what #741 dissolved. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(r1-testgen-manager): correct `compile_to_dag` dissolution claim (codex review on #753) `compile_to_dag(&claim.source, ...)` is still called on the real evaluation path in #741 — intentional and load-bearing (program Dag for reflection, canonical lens pairing for P2 id_space alignment), not a dissolved bridge. ROADMAP §77 item 1 retains an open follow-on for retiring the parallel compile paths once DeclarationRef resolves lens + inputs structurally. - `lens_output_is_queryable_data` row receipt rewritten: real evaluation replaces the NYI thin receipt; compile paths remain fail-closed (P3); two follow-ons (§77 items 1 + 3) explicitly open. - Decisions-log entry tightened: only ONE Rust recognizer was deleted (`declaration_is_binary_int_add_associativity_witness`); the LensOutputEquals thin-receipt shape was replaced, not a recognizer deleted. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Summary
Post-#679 follow-on for Brief 3 (T-LensAPI /
lens_output_is_queryable_data): wireLensOutputEqualsin the Rusttest_runnerso the predicate is never silently ignored.Changes
test_runner:run_claimdispatchesLensOutputEqualstoeval_lens_output_equals, which parses the threeDeclarationRefpayload slots asFieldValue::Reference, looks up declarations on the suite DAG, requiresvalue_bodyon input/expected,compile_to_dagonTestClaim.source, then returnsNotYetImplementedwith an explicit message until lens application + structural comparison exist.ClaimResult::NotYetImplemented(String): all NYI paths (including unknown predicate labels) carry a human-readable reason.r1_lens_output_equals_gate.dagholds a minimalLensOutputEquals(Int, …)gate + suite;r1_gates.dagremains theuser_authored_lens_compilesCompileswitness. Integration tests cover dispatch + fixture compile; harness test documents thatLensOutputEquals(Int, Int, Int)lowers likeMockBackedInvariant(Int, Bool).Known limits (explicit)
lens_refcannot yet be the realnamed_function_countfnin this snapshot: inference hits aDeclarationRefvsInttemplate conflict for callable refs in that slot.LensOutputEquals(..., Int, …)in the same translation unit as the huge embeddeduser_authored_lens_compilessourcestring brokeIntresolution; the dedicatedr1_lens_output_equals_gate.dagavoids that.Test plan
cargo test -p v3-compiler test_runner_test::cargo test -p v3-compiler user_authored_lenscargo test -p v3-compiler r1_lens_output_equals_gate_fixtureMade with Cursor