Skip to content

main red again: delete the duplicated roster row (#7288 raced a concurrent identical fix) — 28 rostered vs 27 declared - #7291

Merged
briansrls merged 1 commit into
mainfrom
fix/roster-dup-7288
Jul 26, 2026
Merged

briansrls merged 1 commit into
mainfrom
fix/roster-dup-7288

Conversation

@briansrls

@briansrls briansrls commented Jul 26, 2026 •

Copy link
Copy Markdown
Contributor

Summary

main is red again on the same witness, for the opposite reason. #7288 and a concurrent PR
each independently added the same roster row for ct_render_rust_applied_type_qualified_base_test.
Both merged. The roster now carries the row twice, so
compiler_tests_rust_blobs_are_all_rostered reads 27 declared vs 28 rostered and reds again.

This PR deletes the duplicate — the declaration block and its second language_source_scaffold_roster
entry. Net -6 lines, no other change.

before after
declared fn ct_ 27 27
rostered rows 28 27
unique rostered blob_decls 27 27

Verified green by execution

PASS compiler_tests_rust_blobs_are_all_rostered
PASS runtime_rust_blobs_are_all_rostered
PASS language_source_scaffold_roster_is_fully_dispositioned

./target/release/claim_batch --entry dag/test/claim/language_source_scaffold_index_test.dag --source-root dag --source-root src/v2, binary built 2026-07-26 13:58 UTC (sha256 a5b9eb4a0643…).

The RED half is already on the record: main's push run at afd33913 failed with
compiler_tests_rust_blobs_are_all_rostered … returned Bool(false) (1 of 2491 discovery witnesses),
which is this exact duplicate.

The finding worth more than the fix: a double-bound name did not refuse

Two top-level data declarations with the identical name
(ct_row_ct_render_rust_applied_type_qualified_base_test) sat in one module and the corpus
compiled and evaluated normally — CI reached the witness and got a Bool(false) verdict, so
nothing refused at compile time.

That is what let a merge race corrupt a roster silently instead of failing loudly. The
namespace-resolution design states the rule plainly — "binding-edge owner, unbound/double-bound =
error"
and "no ambiguity at any layer" — so a duplicate top-level binding should be a typed,
located refusal, not a last-writer-wins overwrite. Today it is neither caught by construction nor
by any lens; it surfaced only as an arithmetic mismatch in a downstream coverage count, one merge
later.

Not fixed here (this PR is the unblock, and the wall belongs in the resolver, not in a roster
file). Flagged for the namespace lane: a double-bound top-level declaration must refuse. The
same race that produced this duplicate produces silent shadowing anywhere else in the corpus, and
only this roster happened to have a counting witness pointed at it.

Process note

The duplicate arose because two sessions independently diagnosed the same main-red and shipped the
same one-line fix within minutes. Both were correct in isolation; neither could see the other. The
one-merge acceptance window caught it, as designed — but the double-bound refusal above is what
would have caught it at authoring time instead.

@gunbai-bot gunbai-bot Bot changed the title Weak Self Host -> Strong Self Host (Gates 1-3, i guess) main red again: delete the duplicated roster row (#7288 raced a concurrent identical fix) — 28 rostered vs 27 declared Jul 26, 2026
@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review July 26, 2026 16:31
@briansrls
briansrls merged commit 90ed8b2 into main Jul 26, 2026
4 of 9 checks passed
@briansrls
briansrls deleted the fix/roster-dup-7288 branch July 26, 2026 16:51
briansrls added a commit that referenced this pull request Jul 26, 2026
Pick up #7291's ct_render scaffold roster dedupe (fixes compiler_tests_rust_blobs_are_all_rostered after #7279 reintroduced a second row).
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