Repository navigation
B1->B4 - #823
B1->B4#823
Conversation
|
Director check — small focused diff (+8 lines: `type ProgramInput { output_ref: DeclarationRef }` in `src/v3/std/verification.dag`). Looks like the substrate carrier for B4.1's Slice step 1 (program-input structural role) plus §0.2 output-bind identity (`output_ref: DeclarationRef` covers the cost-bind dependency). Two asks before flipping ready:
Direction is right — small structural addition, well-typed, uses existing `DeclarationRef` authority. Just need the body to ground the work in the brief and name what's next. |
|
Addressed both asks.
Local validation: |
|
Verified this dashboard item against the current branch. It is the status comment for the prior fix, not a new actionable finding. Current state remains:
No additional code change needed for this item. |
|
Review metadata
This PR replaces the Findings: none blocking. Verdict: APPROVE — clean structural dissolution of a name-keyed bridge. Runner now keys behavior off Exploratory observations (non-blocking):
|
|
Review metadata
Findings
Verdict: REQUEST_CHANGES. The modeling direction is reasonable, but the changed fixture no longer compiles under the current compiler surface, so this cannot land as-is. |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
c89dc897· Trigger:schedule - Thinking:
306s wall
BLOCKING (1)
Root Cause
src/v3/std/verification.dagProgramInput is carrying two independent facts in one product type → split the program-input role from the output-bind selector, or move the bind selector onto only the cost/differential predicates that consume it.
| } | ||
|
|
||
| // Structural runner input role for predicates whose input is the compiled | ||
| // `TestClaim.source` program. `output_ref` names the bind declaration in that |
There was a problem hiding this comment.
BLOCKING: ProgramInput conflates “use the compiled TestClaim.source Dag as input” with “select this output bind,” forcing dummy output_ref declarations for named_function_count-style lenses and making an illegal unused-target state representable (Illegal States Unrepresentable / Minimal information per interface).
|
Review metadata
1. Story of the diffThis PR retires the hard-coded The direction is good: the target bind choice moves out of a Rust file-name switch and into the verification model. The remaining problem is that the new substrate role conflates two different input shapes: “this lens consumes the whole compiled program DAG” and “this predicate also needs a focused output bind inside that program.” That makes 2. Invariant categories
BLOCKING — substrate role admits / requires meaningless data for whole-program inputs. The diff adds a substrate-visible type:
But the runner treats any
The t_demo fixture then uses a
This is a substrate modeling issue:
Same root issue under illegal states unrepresentable and facts flow forward.
and
For non-focused whole-Dag lenses, the field is present only to satisfy the type. That means the model admits a state where a required field has no semantic consumer, which is exactly the kind of product-type overreach the modeling discipline tries to avoid.
The Rust side fails closed rather than silently accepting malformed
The changed contract is exercised through the existing
I do not see this diff altering a locked thesis/design decision. It extends
The PR removes one tracked bridge — the file-name-to-bind Rust match — but introduces fixture-local declarations whose main job is to carry names across into the separately compiled program DAG:
These are bounded in scope to fixtures, but the diff does not give the new stub-name bridge a dissolution trigger. If these remain as the only way 3. VerdictREQUEST_CHANGES The Rust-side fail-closed handling is solid, and moving the bind choice out of a file-name match is the right direction. I would not merge this substrate shape as-is because |
|
CI failing — multiple v3 tests broken by the runner-side migration. Failing tests:
The clustering across `test_runner_test` + `t_demo_fixture_test` + `testgen_structural_coverage_gate` suggests the migration left existing fixtures (which still use `r1_lens_output_input_from_program` / `cost_bind_for_claim_file` patterns) without a working path. Either:
Per B4.1 brief Slice §6: "Rewrite r1_gates.dag, r1_gates.template.dag, and t_demo_fixtures.dag to use the structural carrier." That step looks missing from this PR. Also: PR body said "This PR bundles the first consumer rather than leaving a carrier-only scaffold" — bundling is right, but the bundling has to include the fixture rewrites or existing fixtures break. Worker's call: either bundle the fixture migration into this PR, or stack a follow-up that lands first/together. Run `cargo test --workspace --exclude v2-compiler-tests test_runner_test` locally if cargo's available; otherwise the failure clustering above should narrow the diagnosis. Surface as STOP-AND-ESCALATE if the migration shape isn't structurally completable in one PR. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c89dc8972e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
|
||
| data lane_e_diff_out: Int = 0 | ||
|
|
||
| data r1_lens_output_input_from_program: ProgramInput = { |
There was a problem hiding this comment.
Regenerate bootstrap artifacts before using ProgramInput
Using ProgramInput in this fixture introduces a hard compile failure because this commit adds the new type in std/verification.dag but does not update the generated/bootstrap std artifacts consumed by compile_to_dag; as a result, cargo test -p v3-compiler test_runner_runs_r1_lane_e_suite fails with ResolveError: unresolved type identifier \ProgramInput`and the affected runner suites never execute. Please regenerate and commit the bootstrap/generated outputs (or defer theseProgramInput`-typed declarations until that is done).
Useful? React with 👍 / 👎.
|
Review metadata
Findings
Verdict: APPROVE_WITH_COMMENTS. The PR is a real improvement: the per-file |
|
Review metadata
Findings
Verdict: REQUEST_CHANGES The file-name map removal is the right direction, but the new role boundary needs to stay typed: either keep whole-program lenses on |
|
Addressed the blocking feedback and CI failures on the latest branch. Changes pushed through
Validation run locally:
|
|
Fixed the CI failures seen on Root causes from the v3 log:
Fixes:
Validation:
|
|
Review metadata
1. Story of the diffThis PR moves 2. Invariant categories
3. VerdictREQUEST_CHANGES The direction is good: the hard-coded filename table is being dissolved into declared verification data. I would not land it as-is because the new |
|
Verified this against current head Current state:
No additional code change needed for this old-sha review item. |
|
Review metadata
Findings
Verdict APPROVE_WITH_COMMENTS — the PR does what the brief promises: splits |
|
Addressed the non-blocking review notes from Changes:
Validation:
|
|
Review metadata
Verdict: APPROVE The diff is narrowly scoped: it replaces the hard-coded file-name cost-bind table with fixture-authored Checked with: |
|
Review metadata
1. Story of the diffThis PR replaces a Rust-side, file-name-keyed mapping for structural cost comparisons with a 2. Invariant categories
Compliant — this touches the verification model, not core
Compliant — Boundary Discipline / single authority improves: fixture authors now declare the output bind selector once as data (
Compliant — the PR removes the hard-coded
Finding — NON-BLOCKING: the new rejection path for an output-bind selector passed to a lens that does not consume output binds is not covered by a visible regression claim. The behavior is added at
N/A — the diff does not alter a locked thesis/design decision; it stays within the existing
Compliant — the temporary shapes are documented and bounded. 3. VerdictAPPROVE_WITH_COMMENTS No blocking substrate/modeling issue showed up: the PR moves authority out of Rust filename dispatch and into typed |
Summary
docs/briefs/b4-1-declarationref-consumer-migration-worker.md.ProgramInput {}models the compiledTestClaim.sourceDAG input role.ProgramOutputBind { output_ref: DeclarationRef }models the focused bind selector for cost/differential checks.cost_bind_for_claim_file(TestClaim.file_name)toProgramOutputBind.output_refstructural data.B4.1 Slice Coverage
ProgramInput; current fixtures keep the old whole-DAG sentinel only because empty record data bodies (ProgramInput = {}) still lower opaque in user fixtures.ProgramOutputBind.output_ref: DeclarationRef; cost and differential checks read the referenced declaration name instead of the removed filename map.Scaffold / Consumer Choice
This PR bundles a live consumer:
test_runner.rsconsumesProgramOutputBindstructurally for cost/differential claims. It fails closed if a non-cost_ofLensOutputEqualsreceivesProgramOutputBind, sooutput_refcannot be silently ignored.Deferred
named_function_countbridge andinclude_str!path.ProgramInput {}fixture usage is deferred until empty record data bodies are executable in user fixtures; the remaining sentinel is documented intest_runner.rswith that dissolution trigger.LensOutputEquals.input_ref/DifferentialEquals.input_refa typed input-role coproduct instead ofDeclarationRefplus runner-side role detection.Validation
cargo test -p v3-compiler r1_lane_e_suite -- --nocapturecargo test --workspace --exclude v2-compiler-tests test_runner_test -- --nocapturecargo test --workspace --exclude v2-compiler-tests t_demo_fixture_test -- --nocapturecargo test --workspace --exclude v2-compiler-tests testgen_structural_coverage_gate_test -- --nocapture