Skip to content

Dead witness tree: 17 .dag witnesses under src/v1 have never executed — triage each, migrate emitter-behaviour ones onto compile_dag_rust_emit_check, retire the rest with receipts - #8486

Merged
briansrls merged 8 commits into
mainfrom
session/zesty-newt-828
Aug 19, 2026

Conversation

@briansrls

@briansrls briansrls commented Aug 19, 2026 •

Copy link
Copy Markdown
Contributor

Auto-opened by session-dashboard for session zesty-newt-828.
Pushing to session/zesty-newt-828 advances this PR.

Worker attestation

  • Title describes the change (not the session id or branch).
  • PR body summarises what and why (replace the TODO below).
  • Tests run: name the command (e.g. npm test, cargo test) and the result.
  • If this closes a work item, the body contains a Closes #N directive.
  • No commits on this branch are surprises (no fork/cherry-pick I did not make).
  • No secrets / credentials / large binaries staged.

Summary

Triage of the 17 dead .dag witnesses under src/v1/tests/claim (dashboard node adhoc-9b80ec49-d63): each witness's only historical consumer, v1_claim_scoped_witness_batch, was deleted 2026-08-15 (gunbc#8146), leaving these files unenrolled and never executed against current v1 behavior — in some cases for years. Emitter-behaviour witnesses migrate onto compile_dag_rust_emit_check (per-PR discovery, no v1 import needed); the rest retire with receipts. RESTORE (widening the required floor's source roots to --source-root src/v1) is ruled out repo-wide — see docs/plans/restore-src-v1-required-floor-stall-finding.md — on a stall signature (RSS plateau, zero phase progress) independently corroborated by dedicated-hardware CI numbers showing the unwidened floor already runs close to whatever ceiling caused the local stall.

Two language facts, discovered by execution, not previously established anywhere in the repo:

  1. v1's |> pipe operator resolves only against registered builtin methods, never an arbitrary same-named free function. 1 |> demo (piping into fn demo(x: Int) -> Int) does not compile: |> desugars via UFCS method-call resolution (v1_compiler_infer_method), which matches only the builtin registry (count/filter/map/...) — never a free function of the same name, however plausible that reads to an author. Executed diagnostic: method 'demo' not found on receiver type 'Primitive(Int)'. This is plausibly the same spelling-keyed-resolution class behind several other defects this repo has hit this week — a method resolved by name against a builtin registry, with no path to a resolved declaration — noted here as a pointer for whoever owns that class, not a claim that it's the same root.
  2. v1's for-expression is not a list comprehension. Its type is its body's tail-expression type directly — never wrapped in the container implied by iterating a collection. fn demo() -> List<String> { for ch in "abc" { ch } } (body type String) fails to typecheck against a List<String> declared return. Executed diagnostic: type mismatch: expected 'Container(List,Primitive(String))', got 'Primitive(String)' — reproduced independently with a List<Int> collection and an Int-typed body.

Both were believed otherwise by the original (dead-tree) fixture authors, who wrote assertions encoding these false premises and never executed them — the dead tree was not merely hiding failing claims, it was preserving false beliefs about the language in a form that looked like verification. This "dead tree preserved false beliefs" claim rests on these two language facts only — the four mechanical fixes below are not evidence for it, since they never encoded a false premise at all.

Separately, four more required_expr_newline_continuation_witness_test.dag assertions failed for a mechanical reason, not a language fact: all 8 fixtures in that migrated file declared the identical module test name, and compile_dag_rust_emit_check resolves per-invocation against a shared corpus — the collision broke compile-cleanliness for every fixture using that name. Fix: give each fixture its own unique module name (untyped_let_newline, typed_let_newline, return_newline, for_newline, let_statement_boundary, plus the three _rbrace/_missing_collection refusal-arm siblings). This is a translation bug in the migrated harness, not a language finding — the underlying continuation-parsing productions under test were never in question. One edit (module-name uniqueness) resolved all four at once, so these were never four independent failures — a single root cause, not four data points.

Third finding — a refusal witness must assert the reason, not merely the refusal. The 3 refuses_to_compile fixtures in the same file (see mapping below) also shared module test and also failed to compile-clean under the collision — and since their assertion is !compile_clean, that accidental failure already satisfied the assertion. They were green, counted, and meaningless: passing because of the harness bug, not because of the parse refusal they exist to prove — indistinguishable, from the assertion alone, from "refused for the reason I claim" vs. "refused for a reason I introduced by accident." This generalizes beyond this file: any !compile_clean-shaped witness in the corpus is satisfiable by an unrelated break (typo, missing import, renamed callee, collision) as easily as by the construct it names. Checked cheaply after the rename — compiled each of the 3 fixtures in isolation (own source root, no other corpus file present) and captured the actual diagnostic:

  • w_untyped_let_newline_then_rbrace_refuses_test (let x =\n}\n): expected expression, found RBrace — names the missing required initializer expression after let x =. Correct cause.
  • w_return_newline_then_rbrace_refuses_test (return\n}\n): expected expression, found RBrace — missing required expression after return. Correct cause.
  • w_for_newline_then_block_without_collection_refuses_test (for x in\n { x }\n): expected LBrace, found RBrace — the missing collection expression before the loop body's { is exactly the shape under test. Correct cause.

All three now refuse for the reason they were written to prove, not for the module-name collision — converted from assumed-correct to verified: 3 false greens become 3 real ones.

Six-way mapping (all originally-failing assertions accounted for):

Assertion File Root cause Fix
w_untyped_let_newline_before_initializer_test required_expr module-name collision (module test shared by all 8 fixtures) unique module name untyped_let_newline
w_typed_let_newline_before_initializer_test required_expr module-name collision unique module name typed_let_newline
w_return_newline_before_expression_test required_expr module-name collision unique module name return_newline
w_statement_boundary_after_complete_initializer_test required_expr module-name collision unique module name let_statement_boundary
w_for_newline_before_collection_test required_expr module-name collision + false language premise (for-as-list-comprehension) unique module name for_newline + return type List<String> → String
w_pipe_newline_continuation_test dag_parse_continuation false language premise (UFCS pipe resolves against arbitrary free functions) fixture receiver changed to a builtin (`[1, 2, 3]

All 9 affected fixtures verified locally via direct gunbc compile against their exact literal source strings, matching each fixture's expected parses-clean/refuses-to-compile polarity, before the fix commit.

Test plan

  • claim_executor --required-floor --source-root dag --source-root src/v2 via CI run 32207545518 (fix commit 7975d5bfa8): planned=9035 executed=9035 terminal=9035 passed=8729 known_red_held=306 failed=0 stale_quarantine=0 budget_refused=0 host_tool_unresolved=0 — fully green.

Brian Searls and others added 7 commits August 19, 2026 00:46
… the rest with receipts

Migrates 5 src/v1 dead witness files (never-executing since
v1_claim_scoped_witness_batch was deleted 2026-08-15) onto
compile_dag_rust_emit_check black-box checks under dag/test/claim/,
and retires the remainder with documented receipts in
gunbc.ci_layer_roots (v1_dead_witness_tree_triage_receipt and
_remainder). WIP: pending parent-session (smart-ram-730) review of
coverage citations before PR opens.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…deletions

The triage (dashboard node adhoc-9b80ec49-d63) deleted 16 src/v1 .dag witness
sources that had never executed (their only historical consumer,
v1_claim_scoped_witness_batch, was deleted 2026-08-15). That left their
generated Rust counterparts under src/v1/stage0/src/ stale: 16
v1_tests_claim_*.rs stub files, their pub mod declarations in lib.rs, and
their entries in dag/gunbc/stage0_emit_plan_generated.dag's manifest lists.

The documented regen path is `gunbc run ... --entry
dag/tools/generated_artifact_gate.dag --function main_wet`
(dag/gunbc/ci_spec.dag ci_heal_author_commit_regen_command), and
stage0_emit_plan_generated.dag's own header marks it "do not hand-edit" for
exactly that reason. That tool currently fails during whole-corpus typecheck
preparation on pre-existing, unrelated corpus debt (unresolved types/symbols
in dag/gunbc/{roadmap_belt,generated_artifact_emit,generated_artifact_observation,
package_delivery,codex_provider_runtime_receipt,dispatch_selection}.dag and
generated_artifact_gate.dag itself) — reproduced identically both locally and
on a fresh ctrl-build --remote BuildBuddy runner at the same commit, so this
is a property of the corpus at this commit, not local toolchain drift. This
matches DESIGN.md's own CI section, which already documents the required
floor as refusing during whole-corpus typecheck preparation rather than
executing.

Before hand-editing, confirmed the stale stubs are inert: none of the 16
generated files carry any #[test] attribute (verified by inspection of
v1_tests_claim_v1_annotation_erasure_test.rs and consistent with the deleted
sources having zero prior executing consumers), so their staleness was a
hygiene issue rather than a live-correctness or coverage hazard. Given
main_wet's current unavailability for reasons unrelated to this PR, hand-
reconciling these three generated-artifact locations was the pragmatic
alternative to leaving dangling references indefinitely:

- deleted the 16 orphaned v1_tests_claim_*.rs stub files
- removed their pub mod declarations from lib.rs
- removed their entries from both manifest-list forms (short and full-path)
  in stage0_emit_plan_generated.dag

v1_tests_claim_checkpoint_identity_keying_witness_test.rs and its lib.rs/
manifest entries are explicitly excluded and untouched — that file migrates
atomically under sibling session stern-fox-619's own T7 PR.

Verified src/v1/stage0 builds cleanly after these edits via ctrl-build
--remote (cargo build --release -p v1-compiler, exit 0).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…d stubs

Follow-up to 57ccb0f, which deleted the 16 orphaned generated stub files
but failed to stage lib.rs and stage0_emit_plan_generated.dag due to a bad
pathspec in the git add invocation. This commit lands those two edits:

- lib.rs: removes the 16 pub mod v1_tests_claim_*; declarations for the
  deleted stubs (v1_tests_claim_checkpoint_identity_keying_witness_test
  preserved, per the stern-fox-619 T7 exclusion)
- stage0_emit_plan_generated.dag: removes the corresponding 32 manifest-list
  entries (16 files x short-form and full-path list forms)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…a declared §4b(3) rung-drop

That file was deleted in the same triage commit as the other 16 dead
witnesses but was never named in either receipt -- a gap flagged by
parent session smart-ram-730's review. It was a PERMANENT REGRESSION
CONTROL for the now-fixed PR #8345 emitter defect (ambiguous
variant-owner sentinel collapsing to unit); its own in-file note
already argues migration onto compile_dag_rust_emit_check is
UNREACHABLE (cross-module ambiguity, single-source fixture) rather
than merely awkward. Retired with the four §4b(3) fields named
explicitly (previous rung: mechanically preventable; temporary rung:
mitigatable; reason: sole consumer v1_claim_scoped_witness_batch
already deleted and RESTORE ruled out repo-wide, corroborated by
smart-ram-730's independent CI measurement; restoration trigger:
multi-module compile surface or a v1-compiler-local cargo test), with
the file's four assertions and fixture preserved verbatim in the
receipt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…cit §4b(3) rung-drop; clarify concurrent-batch attribution

v1_complexity_eviction_hazard_test.dag's retirement clause now names the
four §4b(3) fields explicitly (previous rung, temporary rung, reason,
restoration trigger) rather than leaving them implied in prose.

The "concurrent session-local batch" phrasing in
v1_dead_witness_tree_triage_receipt is clarified: git show --stat
11113ac confirms all 17 src/v1 witness files, including the 5 named
here, were deleted in one commit by one author on this same branch
(session/zesty-newt-828) alongside the 6 new dag/test/claim migrations —
there is no separate sibling dashboard session to attribute for PR
purposes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…loor to src/v1

Splits the RESTORE-ruled-out measurement out of triage receipt prose into
its own document, per parent-session request: exact invocation, local-vs-
remote classification with a contention caveat, stall-vs-slow
classification, and independent corroboration from CI run 32196317824 on
a dedicated srv4 runner (unwidened floor already ~7.0GB / 9min in
strict-preparation before src/v1 is added).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review August 19, 2026 01:16
CI run 32204338777 on PR #8486 (head a317729) ran two migrated files for
the first time in years and found 6 assertions returning Bool(false) — not
translation bugs in the migration harness, but previously-unexecuted claims
that were never true against current v1 behavior:

- w_pipe_newline_continuation_test asserted `1 |> demo` (piping an Int into
  an arbitrary user-defined free function) parses and compiles cleanly. It
  never did: v1's `|>` desugars via UFCS method-call resolution
  (v1_compiler_infer_method), which only resolves against registered
  builtin methods (count/filter/map/...), never an arbitrary same-named
  free function. Corrected the fixture to pipe into a builtin
  (`[1, 2, 3] |> count`) — the shape dag/std already relies on — which
  exercises the identical newline-before-|> continuation production
  without depending on unsupported free-function UFCS.

- w_for_newline_before_collection_test (and, via one shared module-name
  collision now fixed separately, its 4 file-siblings) asserted
  `fn demo() -> List<String> { for ch in "abc" { ch } }` compiles cleanly.
  v1's `for` is not a list comprehension: a for-expression's type is its
  body's tail-expression type directly (confirmed against both a String
  and a List<Int> collection), never wrapped in a container. Corrected the
  declared return type from List<String> to String to match the real
  for-loop type, preserving the newline-before-collection-expression
  continuation claim under test.

Both corrections are documented in-file (migration-note data strings) per
DESIGN §4b: the underlying continuation-parsing claim survives unweakened:
only the untested, false half of each original assertion (UFCS resolution
against a free function; for-as-list-comprehension) was corrected to a
shape the compiler actually supports. All 9 affected fixtures (8 in
required_expr_newline_continuation_witness_test.dag, 1 in
dag_parse_continuation_operator_witness_test.dag) verified locally via
direct gunbc compile against their exact literal source strings, matching
each fixture's expected parses-clean/refuses-to-compile polarity.

Also adds a second strict-preparation RSS data point (~9.8GB, CI run
32204338777) to the RESTORE-stall finding, alongside the ~7.0GB figure
already on file — the honest ceiling claim is a range, not one figure.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@briansrls
briansrls merged commit dd9c230 into main Aug 19, 2026
1 check passed
@briansrls
briansrls deleted the session/zesty-newt-828 branch August 19, 2026 03:12
gunbai-bot Bot pushed a commit that referenced this pull request Aug 19, 2026
…8461), 51/51 unmoved site-for-site

Publishes the delta smart-ram-730 requested after six main commits landed since the
72676cf baseline, including #8461 (TargetReferenceLayer indirection/sharing
decomposition, flagged emitter-adjacent). Every one of the 51 sites was matched
individually against the existing row table, not just the aggregate histogram.
Confirms #8486's witness migration (dag/test/claim) is non-impacting to this board
(the instrument counts cargo diagnostics, not witness/floor counts). Adopts the
SHA-in-headline convention for future receipts and records why the requested
same-base-refusal capability isn't being built as a second hand-shell probe.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Aug 19, 2026
…8460/#8410/#8417, maintain the mechanism partition, and publish per-landing deltas (succeeds witty-heron-413, archived) (#8490)

* Re-baseline materialization_carriers on current main: 51 unmoved, verified site-for-site

Re-runs the #8460 instrument against main@72676cf0be (post #8460/#8410/#8417). The
error count is unchanged at 51 and every one of the 51 diagnostics was re-matched by
primary span + code against #8460's mechanism board — not just the total, the full
site list reproduces row-for-row, including the 1a/1b split (12/16). Also resolves
the "99 E0308 sites" question for stern-fox-619: that figure is the corpus-wide
13-root census, not this module's denominator, whose live T7 footprint is 1 E0599
row (calm-lynx-547's, not E0308). Restates both pre-registered predictions against
this base and repeats the standing per-SHA delta offer.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Fix 1a/1b split in materialization_carriers re-baseline: 14/14, not 12/16

The two CacheLookupResult<T> E0599 sites (std_cache_interface.rs:564,580)
were misfiled under row 1b (fn/inherent-impl signature Clone gaps). Their
message text ("the method clone exists ... but its trait bounds were not
satisfied") is the derived-impl-with-unsatisfiable-bound shape -- same
species as row 1a's im::Vector<T> Debug/Serialize/Deserialize/PartialEq
sites -- not the bare-type-parameter shape ("no method named clone found
for type parameter A") that genuinely belongs in 1b. Settled by re-reading
JSON message/children text for the disputed sites, not by re-asserting
either summary. Corrects to 14/14, matching #8460 Sec10.3 exactly.

Also: flags row 7 (T7) ownership as stale -- calm-lynx-547 is archived --
rather than carrying forward "owned, untouched," and states loudly that
T7's local yield in this module (1 row) reshapes stern-fox-619's repair
framing: the value is the corpus-wide class fix, not this module's board.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* materialization_carriers: hold 1a/1b at provisional pending executed evidence; add fast_probe.sh

The 564/580 CacheLookupResult<T> row assignment is contested (smart-ram-730) on mechanism
grounds: derive(Clone) already emits a conditional bound, so the earlier "derived-impl missing
bound" reading may be misreading caller-signature error text. deep-swift-570's diff-scope claim
(emit_fn_def only, trait_derive_emit.dag untouched) proves their repair is signature-only, not
that a signature-only repair clears both errors -- held provisional pending their CI run's
executed result rather than corrected a third time on prose.

Adds docs/probes/fast_probe.sh: a fast single-module iteration probe reusing the established
instrument's authorities (render_cssl_probe_lib_cargo_toml.sh, gunbc/cssl_assemble invocation
shape) rather than re-deriving them. Implements stale-binary-SHA refusal (content-hash of
src/v1/**+Cargo.toml/lock, stamped at build time, hard refusal on mismatch), single-module
emission into a stable per-module target dir, cargo check --message-format=json for iteration,
dedup by (code, primary span, cause signature), and a before/after delta at (code, primary
span) grain that carries full children text -- dropping children was exactly what caused
today's two 1a/1b misclassifications. --imports-only skips the cargo step entirely for a cheap
resolve/emit-only check. cargo build --release --lib remains reserved for milestone receipts
via the existing curated_cargo_probe_one.sh.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* materialization_carriers: settle 1a/1b by execution, flag redundant-clone finding as open

deep-swift-570's executed CI result (real cargo build against both pushed head
561bf11 and origin/main) shows the two CacheLookupResult<T> E0599 sites at
std_cache_interface.rs:564,580 are byte-identical/unchanged on both sides --
outcome three of smart-ram-730's three-outcome framework. Proposition B is
false: a signature-only repair does not clear these errors, so 1a stands, no
longer provisional.

A distinct, unsettled finding surfaces alongside it: the emitted match
scrutinees are (*lookup.clone()).clone() / (*existing.clone()).clone() -- a
redundant Rc-deref-then-clone in match lowering. Neither a derive fix (1a) nor
a signature-bound fix (1b) plausibly reaches it. Documented as open per
deep-swift-570's explicit request not to reclassify into either bucket while
unsettled.

Also reconciles row 7 (T7) ownership: smart-ram-730 has assigned it to
stern-fox-619, superseding the stale calm-lynx-547/archived/unowned note.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Remove fast_probe.sh per review 53640: unmarked scaffold debt on mainline

review 53640 (PR #8490, REQUEST_CHANGES) correctly identified fast_probe.sh
as a net-new dissolution obligation with no Scaffold/dissolve-on marker and
no operator verdict (DESIGN.md's 2026-08-10 §5 ruling), a parallel
representation of curated_cargo_probe_one.sh, embedded Python-as-shell-
heredoc, and a stale-binary hash whose coverage claim (src/v1/** only)
doesn't match what cargo build -p v1-compiler actually compiles.

All four findings hold on inspection. This session can't self-issue the
operator verdict DESIGN.md requires to land it as an approved scaffold, so
per the review's own named fallback and DESIGN §5's shell->intent rule,
the compliant route is deletion before merge (branch-local canary, not
committed mainline debt). The two genuine findings the tool surfaced (a
cargo-workspace-membership silent-zero, and branch-base-vs-main drift
invalidating a naive site diff) are preserved as prose in §8 of the
rebaseline doc for any future lane that builds a real probe.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* materialization_carriers: re-baseline at dd9c230 (six commits, incl. #8461), 51/51 unmoved site-for-site

Publishes the delta smart-ram-730 requested after six main commits landed since the
72676cf baseline, including #8461 (TargetReferenceLayer indirection/sharing
decomposition, flagged emitter-adjacent). Every one of the 51 sites was matched
individually against the existing row table, not just the aggregate histogram.
Confirms #8486's witness migration (dag/test/claim) is non-impacting to this board
(the instrument counts cargo diagnostics, not witness/floor counts). Adopts the
SHA-in-headline convention for future receipts and records why the requested
same-base-refusal capability isn't being built as a second hand-shell probe.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* curated_cargo_probe_one.sh: add same-base refusal (PROBE_EXPECT_BASE_SHA)

smart-ram-730 requested a sibling to the stale-binary check that refuses a
stale comparison BASE — two runs being diffed must share a git tree or the
comparison is confident nonsense, the same failure shape a stale binary
produces. Extends the single surviving probe authority (not a second script)
with an opt-in pre-build guard: when PROBE_EXPECT_BASE_SHA is set, refuse
before any emit/build work if `git rev-parse HEAD` disagrees, naming both
SHAs. No flag, mode, or override arm — absence of the var means no
comparison was declared, never "proceed anyway".

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* curated_cargo_probe_one.sh: name the same-base refusal's rung honestly

Per smart-ram-730's review: the check is mechanically preventable only when
a caller sets PROBE_EXPECT_BASE_SHA, not mechanically preventable outright —
an unarmed caller gets no protection and that failure is silent, so the
check's existence must not be mistaken for coverage. Names the next-rung
trigger (derive the expected base from this worktree's merge-base against
origin/main instead of requiring it be declared) so it's a tracked trigger,
not a stall. No behavior change.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

---------

Co-authored-by: Brian Searls <briansearls1@gmail.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Aug 19, 2026
…d module (#8532)

`cargo check -p v1-compiler --all-targets` has not compiled since #8486,
which deleted the `.dag` witness `v1_tests_claim_caret_parse_smoke_test`
and its generated Rust module but left
`caret_parse_smoke_native_compile_emit_witnesses` importing it:

    error[E0432]: unresolved import `crate::v1_tests_claim_caret_parse_smoke_test`

Only `--bin` was still compiling, so `-D warnings` covered one target and
dead code in the other accumulated unobserved (#8517 removes 18 such fns).

This removes the orphaned test at all three of its homes, which is the
part worth reviewing:

  1. `src/v1/compiler_tests_rust.dag`                       — the authority
  2. `src/v1/stage0/src/v1_compiler_compiler_tests_rust.rs` — its generated projection
  3. `src/v1/stage0/src/compiler_tests.rs`                  — output of running (2)

`compiler_tests.rs` is produced by RUNNING the generator, not by emitting
from the `.dag`, so editing (1) and (3) alone leaves (2) stale and the
authority silently disagreeing with its projection — `--all-targets` still
goes green in that state. Verified instead by regenerating and diffing:
`compiler_tests.rs` is byte-identical to generator output (diff exit 0).

Coverage, stated exactly: `dag/test/claim/caret_syntax_witness_test.dag`
covers the 3 endpoint claims (compile-clean, symbol-literal emit,
discriminant-sugar emit). The 7 tokenize/parse intermediates have no `.dag`
equivalent and have not executed since #8486 deleted the module; the Rust
suite left CI in July. This deletes unbuildable code, not live coverage,
but those 7 are a real gap rather than parity.

Co-authored-by: Brian Searls <briansearls1@gmail.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
gunbai-bot Bot pushed a commit that referenced this pull request Aug 26, 2026
…ces unbindable BY CONSTRUCTION

The measurement 11.2t named as the precondition for ranking B.3 against E. Taken by
execution over four real std files through the real bridge, assembly and resolver --
no fixture -- at identity grain, with every stage printing its own line so an
unreached stage could not render as a zero.

Headline is a PRODUCER gap, not a resolver gap. The parser stamps 710 Type
references and ZERO Type declarations; Type->Type is admissible, so nothing is
excluded -- there is simply nothing to bind to. With Method the same shape, 733 of
1681 references (43.6%) are unbindable by construction and no resolver work moves
them.

What works is stated as plainly: exposure derivation -- the expected risk -- runs
clean on real parse output; all 1681 references get typed outcomes with zero
refusals of any kind; provider projection carries full identity. The lane's refusal
vocabulary never fired.

Second finding: all cross-file binding is gated on ONE hardcoded argument
(ModuleLocalMemberExposure where CrossFileProviderExportedExposure is needed). Arm C
flips it and produces the receipt's first cross-module edge. Small only because Type
dominates cross-file references and Type is unproduced -- the findings compound. A
witness exercises the right variant on hand-built identities while nothing proves the
producer.

The near-miss is the most reusable part and is filed as such: a hand-rolled assembly
drew a correct, typed, located refusal, and the false headline "cross-file assembly
refuses on real parse output" was already written. The refusal was answering a
question about the prober's code. Fail-closed design guarantees a refusal is TRUE and
guarantees nothing about WHAT IT IS TRUE OF.

Side findings: the match-arm gap's only documentation points at a symbol deleted in
#8486 -- and explicitly NOT fallout from the cited-symbol census drop, since it is
prose in a data row and was never in that denominator; and six Y-lane witnesses all
land in DeclinedLiveTree, five by declaring no disposition at all.

Ranking: the receipt converts B.3 from unmeasured to LOCATED BUT UNSCOPED. That is
not rankable. Nothing sizes the Type-stamping cost, so B.3 still cannot be placed
against E in calendar terms -- but the open question is now one named producer gap
rather than the whole track.
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