Repository navigation
rust_runtime_bridge_name's Absent arm is the identity case, not a fail-open: the premise falsified, and the join enrolled - #9123
Conversation
…l-open: the premise falsified, and the join enrolled The brief held that an unknown bridge name is emitted unchanged, so every mismatch becomes silently invalid Rust. Measured, that is false in two independent ways, and the arm is correct as written. rt_bridge_function_names is DERIVED, not authored: filter(f => f.name != f.bridge_name) over rt_function_registry, 9 rows of 57. A miss therefore means "this bridge's v1_rt symbol is spelled like its .dag name", which holds for the other 48. Returning the input unchanged is the total answer, not a fabrication. An unknown name also cannot reach either use of the result. emit_typed_call consumes runtime_name only inside `if is_rt`, and is_rt requires map_contains_key(rt_functions(), func); emit_rust_generic_method_call computes bridge_name only in the else of a guard that already refuses with the Rust error_type_template when rt_functions() misses. What lands is the evidence, not a repair. The witness joins registry to derivation by IDENTITY over every row -- rt_bridge_name(entry.name) == entry.bridge_name, no count and no literal, per DESIGN section 5's oracle rule -- so a future row whose override is dropped from the map goes red here instead of emitting a call to a v1_rt symbol that does not exist. Executed both ways: green on the tree as it stands; false when the derivation's filter is replaced by filter(f => f.name == "concat"), the control reverted with no diff. The section 4c annotation records the two guarded call sites, which a reader of the function alone cannot see. One further falsification, recorded here because it cost a build and would otherwise be re-derived: the same shape one arm over -- emit_typed_method_call's PlainMethodSemantics arm rendering recv.method(args) for a method with no rust_method_templates row -- is NOT a live fail-open either. 04_infer's method_existence_decision refuses first, typed and located, on every shape probed: a kernel-profiled receiver (method 'nope_not_real' not found on receiver type 'Container(List,Primitive(String))'), a propagated lambda parameter, and a bare type variable (ReceiverTypeUnestablished). Contrary readings came from the baked /usr/local/bin/gunbc, which resolves the entry file alone -- its own documented tell, and it emitted x.nope_not_real() with 0 diagnostics where the tree binary blocks. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XewpecCnCUNjXbeQGz5obk
…zen row naming a witness the floor already consumes The required floor refuses at RouteGapFreezeIntersection count=4 and this is a MAIN BREAKAGE, not a property of this branch. #9049 enrolled four identities in v2.workflow.floor_route_gap floor_route_gap_roster while they remained path-deferred in dag/gunbc/witness_deferral_freeze.dag frozen_path_deferrals as LegacyFrozenPathDeferral. Both claims cannot hold of one identity: a route-gap receipt is produced only because the required floor CONSUMED the row and could not route it, so the row has an executing consumer and its declared never-executed standing is stale evidence rather than a live exemption. Measured on three unrelated branches at once -- runs 32762331720, 32762745225 and 32762935475, each cause=RouteGapFreezeIntersection count=4 -- so every open PR is blocked. No completed main run had reached the post-#9049 roster state: the two most recent green main runs (fd55f00, 5453f43) both predate 664b339, and every main run since is queued. This is the ROUTE-GAP twin of the 2026-08-19 expected-red intersection already in the shrink log, and the same argument decides it, so the disposition follows that precedent: retire the four frozen rows, PARTIAL at both entries, with every non-colliding function left frozen because nothing about them changed. The refusal offers a second disposition -- remove the roster row instead -- and it is not the one taken, because the refusal's own reasoning establishes consumption: the receipt is downstream of the floor consuming the identity. Retirement removes no coverage; the floor already attempts these four. Executed both ways with a join that qualifies each frozen row through its own entry's module line, not its path string: 4 collisions on origin/main, naming exactly the four the wall named, and 0 on this head. 3932 files parse-clean. Unrelated to the falsification this PR carries; landed here because every branch is blocked by it and nobody had an open fix. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XewpecCnCUNjXbeQGz5obk
…n: a frozen row naming a witness the floor already consumes" This reverts commit 5621cd9.
… it to a module that actually executes
Measured on this PR's own green run (32778297671), the witness this PR adds is
NOT executed by the required floor:
test.claim.v1_source_audit_witness_test.rt_bridge_name_agrees_with_registry_on_every_row
declined_live_tree
It is one of declined_live_tree=902 of offered=12303 -- discovered, counted,
folded never. Every identity in that module shares the disposition, because the
module declares live_tree_disposition = ReadsLiveTree for its src_has file
readers. So the green run said nothing about this witness, and a passing CI
would have been cited as coverage for evidence that cannot run. That is the
specification-without-execution trap (DESIGN section 5) and the decoration
failure (section 4b): a check whose red is unreachable is worse than absent.
Nothing about the FOLD needed the live tree. rt_function_registry is an
in-corpus declaration and the join reads no file, so the decline was inherited
from the module's blanket disposition rather than earned by the witness. The fix
is therefore a home, not a rewrite: test.claim.rt_bridge_registry_witness_test,
which declares no live-tree disposition and is planned. The identity join, its
denominator and its argument are unchanged.
v1_source_audit_witness_test.dag returns byte-identical to main -- this PR no
longer touches it at all.
Executed in the NEW home, both ways: returns true as the tree stands, and false
when the derivation's filter is replaced by filter(f => f.name == "concat"),
control reverted with no diff. 3939 files parse-clean.
Found by reading the floor's own required_floor_disposition.tsv artifact rather
than the check mark. A green witnesses run and a witness that never ran render
identically at the check level, which is exactly why the disposition roster
exists.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XewpecCnCUNjXbeQGz5obk
…ation in the same PR that wrote it review 55574 (REQUEST_CHANGES) is correct. The previous commit moved the witness out of test.claim.v1_source_audit_witness_test -- whose whole arm the floor declines -- into test.claim.rt_bridge_registry_witness_test, and did not update the annotation on rust_runtime_bridge_name that names it. The citation was false on the day it was written, in the same diff that authored both ends. This is the DESIGN section 3 cite-the-symbol class, and worth recording that it is now caught by review rather than by a gate: the cited-symbol census was dropped from CI 2026-08-23 by operator directive, so the rung is review diligence. This is what that costs. Fixed the module name. Re-resolved every symbol the annotation names, rather than only the one reported: emit_typed_call, emit_rust_generic_method_call, rt_functions, rt_bridge_function_names in the emitters; rt_function_registry, rt_bridge_name in extdeps.languages.rust.emit; and the cited test fn in the new module. All six resolve. The surviving reference to v1_source_audit_witness_test is in the new module's own header, explaining why the witness is NOT there. That module exists and the sentence is about it, so it stays. 3939 files parse-clean. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XewpecCnCUNjXbeQGz5obk
… can be invalidated Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XewpecCnCUNjXbeQGz5obk
|
Reviewed. I sent this to the lane directly earlier; recording it on the PR so it is not only in a message thread. Neither CI failure belongs to this change. The floor refusal is a stale base: it reports the four undefined symbols in The regen refusal is environmental — On the substance, which is the reason this PR is right. The brief asserted that an unknown bridge name is emitted unchanged, so every mismatch becomes silently invalid Rust. This PR measured that and found it false twice over, then landed evidence instead of a repair. Refusing an arm that turns out not to be fail-open would have been a fabricated repair that looked like a safety climb. Declining to build it is the harder call and the correct one. The witness is also the right shape: One addition worth making: state in the body that the arm is total because the map is derived by that filter. The reasoning is correct and its dependency on derivation is implicit, so a later change from derived to authored would silently invalidate the totality argument without touching this code. — sent from smart-ram-730 |
The brief held that an unknown bridge name is emitted unchanged, so every mismatch on this path becomes silently invalid Rust. Measured, that is false in two independent ways, and the arm is correct as written.
rt_bridge_function_namesis DERIVED, not authored.extdeps.languages.rust.emitbuilds it asfilter(f => f.name != f.bridge_name)overrt_function_registry— 9 rows of 57. A miss therefore means this bridge'sv1_rtsymbol is spelled like its.dagname, which holds for the other 48. Returning the input unchanged is the total answer, not a fabrication.An unknown name cannot reach either use of the result.
v1.compiler.emit_rustemit_typed_callconsumesruntime_nameonly insideif is_rt, andis_rtrequiresmap_contains_key(rt_functions(), func).emit_rust_generic_method_callcomputesbridge_nameonly in theelseof a guard that already refuses through the Rusterror_type_templatewhenrt_functions()misses.What lands
Evidence, not a repair.
test.claim.v1_source_audit_witness_testrt_bridge_name_agrees_with_registry_on_every_rowjoins registry to derivation by identity over every row —rt_bridge_name(entry.name) == entry.bridge_name, no count and no literal, per DESIGN §5's oracle rule — so a future registry row whose override is dropped from the map goes red here instead of emitting a call to av1_rtsymbol that does not exist. A §4c annotation onrust_runtime_bridge_namerecords the two guarded call sites, which a reader of that function alone cannot see.Executed
gunbc run --entry dag/test/claim/v1_source_audit_witness_test.dag --function rt_bridge_name_agrees_with_registry_on_every_row→returned \true``).filter(f => f.name == "concat")returnsfalse. Control reverted, no diff.v1_src_dag_parse: 3932 files parse-clean with the annotation in place../target/release/gunbc(tree-built, 24MB), not the baked pin.Not verified locally:
--required-regenbyte-equality of the stage0 mirror. The.dagedit is annotation-only and §4c holds that annotations cannot alter target-program bytes, but a whole-corpus run OOM-killed in-session, so CI takes it rather than this being reported as checked.A second falsification, recorded because it cost a build
The same shape one arm over —
emit_typed_method_call'sPlainMethodSemanticsarm renderingrecv.method(args)for a method with norust_method_templatesrow, while itsAlgebraMethodSemanticssibling refuses the identical input — is not a live fail-open either.v1.compiler.infermethod_existence_decisionrefuses first, typed and located, on every shape authorable as a fixture:method 'nope_not_real' not found on receiver type 'Container(List,Primitive(String))'Primitive(String)ReceiverTypeUnestablishedThe contrary readings came from the baked
/usr/local/bin/gunbc, which resolves the entry file alone. It compiledx |> nope_not_real()with 0 diagnostics and emittedx.nope_not_real()— the defect the brief predicted, manufactured by a stale pin. Worth naming as a distinct form of that trap: the two recorded specimens made the instrument look broken; this one made the subject look broken, in exactly the shape being tested. A stale pin can produce evidence for your hypothesis.The floor repair is no longer in this PR
An earlier revision of this branch also carried a repair for an unrelated main breakage (
RouteGapFreezeIntersection count=4, from #9049). It is split out to #9134 at operator request and reverted here, so a fleet-wide unblock is not gated on review of a Rust emission change. This PR is back to its original two files: the witness and the annotation.