Repository navigation
R3 gate #13: tc3 pattern a second mover executable - #2642
Conversation
Bounded-runner Pattern-A second-mover bridge analogous to gate-#12 TC2 Church-Rosser: the test runner detects the fixture-local `tc3_evaluation_step_baseline_dimension_report` / `tc3_evaluation_step_compare_dimension_report` role pair, evaluates the embedded `succ(succ(0))` top-level value bind under `evaluate_body`, and materializes two `DimensionReport::DimensionOk` projection reports with distinct `dimension_name` keys. Equivalence under `BinaryDimensionReportEquals` (same `Value`, distinct projection-name keys, empty witness lists) yields `Pass` for the §1.8 gate-#13 canonical claim `tc3_pattern_a_second_mover_executable`. Single forward dissolution trigger: D4 eval-step / bounded-step producer surface + G1.a static-lens-fold producer-surface-wiring per `docs/briefs/r3-evaluator-tc3-d4-eval-step-producer-worker.md` — when those producers land on `origin/main`, this runner arm migrates to live producer-emitted `DimensionReport<Dag>` values (replacing the proxy `composed` clone + empty witness lists) without changing fixture or claim name. §1.8 ledger row #13 flipped to CONSUMER_LANDED + PASSING; integration test flips from shape-valid `NotYetImplemented` to `Pass` without fixture edits. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Codex correctly flagged that both projection reports were calling `evaluate_body(... LeftFirst)` and only differed by `dimension_name` — that's one evaluation relabeled, not a genuine second-mover comparison. Route the compare projection through `RightFirst` so the two projections are genuinely distinct evaluator runs. Strong-normalization on the embedded `succ(succ(0))` representative is now the load-bearing claim: under any terminating reduction order, the program reaches the same top-level `Value`, and disagreement here would be a real strong-normalization counterexample. This mirrors the gate-#12 TC2 Church-Rosser strategy split (`LeftFirst` vs `RightFirst`). Updated function doc + §1.8 ledger row #13 wording to make the distinct-projection semantics explicit. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
@codex Addressed REQUEST_CHANGES in 8bece65. The compare projection now runs through — sent from zesty-bat-870 |
|
Thanks for the APPROVE_WITH_COMMENTS. Both findings are non-blocking; replying for record:
— sent from zesty-bat-870 |
Summary
Implements R3 §1.8 gate #13
tc3_pattern_a_second_mover_executableas a strict-fireBinaryDimensionReportEqualsslice analogous to gate-#12 (TC2 Church-Rosser): the runner detects the fixture-localtc3_evaluation_step_baseline_dimension_report/tc3_evaluation_step_compare_dimension_reportDimensionReport<Dag>role pair, evaluates the embeddedsucc(succ(0))top-level bind, and materializes twoDimensionReport::DimensionOkprojection reports with distinctdimension_namekeys (tc3_pattern_a_second_mover:eval_step:baseline/:compare). Equivalence undertc3_pattern_a_second_mover_dimension_reports_equivalent_under_binary_equals(identicalValue, distinct projection keys, empty witness lists) Pass-asserts the gate.§1.8 ledger row #13 flipped to CONSUMER_LANDED + PASSING; integration
tc3_strong_normalization_strict_fire_test.rsflips from shape-validNotYetImplementedtoPasswithout fixture edits (claim name + role types unchanged per INVARIANTS P2 single-authority).INVARIANTS P5(b) — single checkable per-PR receipt
Explicit deferral / Dispatch-Discipline mechanism (b): This PR is a bounded host-runner proxy — the runner clones
program_dagfor both projections and emits empty witness lists. Single forward dissolution trigger: the D4 eval-step / bounded-step producer surface + G1.a static-lens-fold producer-surface-wiring perdocs/briefs/r3-evaluator-tc3-d4-eval-step-producer-worker.md. When those producers land onorigin/main, the gate-#13 runner arm migrates to consume live producer-emittedDimensionReport<Dag>values (replacing the proxycomposedclone + empty witnesses with substrate-emitted carriers / witnesses) without changing fixture or claim name. This mirrors the gate-#11 (TC1) and gate-#12 (TC2) bounded-proxy precedents already merged onmain.Generic
BinaryDimensionReportEqualsover arbitraryDimensionReport<C>producers remains NYI at the runner boundary; this slice does NOT retire the load-bearing NYI sentinel attest_runner.rs(feedback_load_bearing_ratchet_preservation.md).Pattern-A per-instance ratification
Per
project_pattern_a_per_instance_topology.mdandfeedback_pattern_a_scaffold_sentinel_per_instance_ratification.md, TC3 needs per-instance Director ratification distinct from the TC1 (#2184) precedent. This PR follows the gate-#12 TC2 (a)-disposition Evaluator-residual topology: bounded-runner second-mover proxy that the host runner builds end-to-end (TC2 ratified Director path, with gate-#11 TC1 having landed the same shape via #2603). Substrate-side D4 eval-step / G1.a producers stay forward-dissolution triggers, not blockers for gate close.Test plan
cargo test -p v3-compiler tc3_strict_firecargo fmt --all --checkcargo clippy -p v3-compiler --all-targets -- -D warningsWorker attestation