Repository navigation
main red again: delete the duplicated roster row (#7288 raced a concurrent identical fix) — 28 rostered vs 27 declared - #7291
Merged
Conversation
briansrls
added a commit
that referenced
this pull request
Jul 26, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
main is red again on the same witness, for the opposite reason.
#7288and a concurrent PReach 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_rosteredreads 27 declared vs 28 rostered and reds again.This PR deletes the duplicate — the declaration block and its second
language_source_scaffold_rosterentry. Net
-6lines, no other change.fn ct_Verified green by execution
./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 (sha256a5b9eb4a0643…).The RED half is already on the record: main's push run at
afd33913failed withcompiler_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
datadeclarations with the identical name(
ct_row_ct_render_rust_applied_type_qualified_base_test) sat in one module and the corpuscompiled and evaluated normally — CI reached the witness and got a
Bool(false)verdict, sonothing 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.