Skip to content

rust_runtime_bridge_name's Absent arm is the identity case, not a fail-open: the premise falsified, and the join enrolled - #9123

Merged
briansrls merged 8 commits into
mainfrom
session/gentle-newt-105
Aug 25, 2026
Merged

briansrls merged 8 commits into
mainfrom
session/gentle-newt-105

Conversation

@briansrls

@briansrls briansrls commented Aug 24, 2026 •

Copy link
Copy Markdown
Contributor

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_names is DERIVED, not authored. extdeps.languages.rust.emit builds it as 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 cannot reach either use of the result. v1.compiler.emit_rust 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 through the Rust error_type_template when rt_functions() misses.

What lands

Evidence, not a repair. test.claim.v1_source_audit_witness_test rt_bridge_name_agrees_with_registry_on_every_row joins 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 a v1_rt symbol that does not exist. A §4c annotation on rust_runtime_bridge_name records the two guarded call sites, which a reader of that function alone cannot see.

Executed

  • Witness green on the tree as it stands (gunbc run --entry dag/test/claim/v1_source_audit_witness_test.dag --function rt_bridge_name_agrees_with_registry_on_every_row → returned \true``).
  • Discriminating RED: replacing the derivation's filter with filter(f => f.name == "concat") returns false. Control reverted, no diff.
  • v1_src_dag_parse: 3932 files parse-clean with the annotation in place.
  • All runs used ./target/release/gunbc (tree-built, 24MB), not the baked pin.

Not verified locally: --required-regen byte-equality of the stage0 mirror. The .dag edit 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's PlainMethodSemantics arm rendering recv.method(args) for a method with no rust_method_templates row, while its AlgebraMethodSemantics sibling refuses the identical input — is not a live fail-open either. v1.compiler.infer method_existence_decision refuses first, typed and located, on every shape authorable as a fixture:

  • kernel-profiled receiver → method 'nope_not_real' not found on receiver type 'Container(List,Primitive(String))'
  • propagated lambda parameter → same class, Primitive(String)
  • bare type variable → ReceiverTypeUnestablished

The contrary readings came from the baked /usr/local/bin/gunbc, which resolves the entry file alone. It compiled x |> nope_not_real() with 0 diagnostics and emitted x.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.

…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
@gunbai-bot gunbai-bot Bot changed the title rust_runtime_bridge_name's Absent arm returns its INPUT unchanged: an unknown bridge name is not refused, not counted, not located — it is emitted, so every mismatch on this path becomes silently invalid Rust instead of a stopped line rust_runtime_bridge_name's Absent arm is the identity case, not a fail-open: the premise falsified, and the join enrolled Aug 24, 2026
@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review August 24, 2026 18:25
…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
Brian Searls and others added 6 commits August 24, 2026 19:47
…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
@gunbai-bot

gunbai-bot Bot commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

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 dag/gunbc/systemctl_show_read.dag (systemctl_show_property_path, systemctl_show_property_service, systemctl_show_property_read_ssh_argv, systemd_property_capture_from_outcome) that took main down for roughly ninety minutes tonight. #9147 repaired that and merged at 23:31:12; the failing run is 23:12:42, nineteen minutes earlier, and I confirmed the fix is not an ancestor of this branch. Merging main clears it.

The regen refusal is environmental — spawn rustfmt: Text file busy (os error 26). ETXTBSY means the binary was being written while being executed, i.e. a concurrent toolchain install racing this job on a shared self-hosted runner. Not fixable in this diff, and it will hit other PRs at random.

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. rt_bridge_function_names is derived — filter(f => f.name != f.bridge_name) over a 57-row registry, 9 rows — so a miss 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. And an unknown name cannot reach either consumer, since both sit behind map_contains_key(rt_functions(), func).

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: rt_bridge_name_agrees_with_registry_on_every_row joins registry to derivation by identity over every row, no count and no literal — §5's oracle rule followed rather than cited. A count would be satisfied by two different sets of the same size; a tree-copied literal would be a change detector. This goes red when a future registry row's override is dropped from the map, which is the thing actually worth catching.

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

@briansrls
briansrls merged commit 62848b4 into main Aug 25, 2026
1 check passed
@briansrls
briansrls deleted the session/gentle-newt-105 branch August 25, 2026 02:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant