Repository navigation
Unbreak main: point the artifact producer at the renamed identity - #8183
gunbai-bot[bot] wants to merge 1 commit into
Conversation
#8177 renamed v2.compiler.self_host.generation's ArtifactIdentity to GeneratedArtifactIdentity, resolving a genuine homonym with std.cache_interface's generic ArtifactIdentity<T>. #8176 landed a new consumer of the old name in the same window. Whichever merged second was not rechecked against the other, so main carries a resolve failure: dag/gunbc/self_host_artifact_materialization.dag:32:3: error: name 'ArtifactIdentity' not found in module 'v2.compiler.self_host.generation' Three sites, all mechanical: the import, the return type of artifact_identity_of, and a prose reference naming a type that no longer exists — the stale-citation class, repaired rather than left to rot. Verified by execution rather than by grep, which is how the break was found in the first place: my first pass grepped for names that were still present and concluded main was fine. Resolving the module is what actually answered it. All 10 artifact-materialization witnesses now pass. Worth recording beside the fix: #8177's own title notes the collision "only broke whole-tree", so per-PR affected-set selection did not see the edge between a renamed declaration in one lane and a new consumer landing in another. Both PRs were green when they merged. That is a selection gap on cross-lane rename edges, not a review failure by either author. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Merges main and renames the four occurrences in this file. PR CI evaluates the merge ref, so it sees main's rename while this branch was based before it. This fixes MY half only. The remaining compile-clean error is main's own — dag/gunbc/self_host_artifact_materialization.dag still imports the old name — and #8183 repairs it. Carrying that repair here would fork a three-line fix across two PRs. Verified by applying #8183's change locally without committing it: with both halves renamed, three wet claims pass including the wrong-real-file discriminator. Reverted before commit. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Closing as a duplicate — #8187 landed the identical repair (import, return type, and the prose reference, all three sites). Verified rather than assumed: Two sessions fixed the same break independently within the hour. No harm done, but worth recording why it happened: the break was found by three different parties at roughly the same time (a side-chat review, SH-B's floor failure, and my own resolve check), and none of us knew the others were repairing it. A broken main creates exactly that race. The durable half of this PR is not the diff, so recording it here rather than losing it with the branch: #8177's own title notes the collision "only broke whole-tree". Per-PR affected-set selection did not see the edge between a renamed declaration in one lane (#8177) and a new consumer landing in another (#8176) two minutes earlier. Both PRs were green when they merged, and neither was individually wrong — the pair was. SH-B then measured the real severity, which is worse than I first reported: the ordinary floor worker exits 1 and the coordinator refuses before scoped workers, so every PR floor failed, not just whole-tree runs. That is a selection gap on cross-lane rename edges, and the nightly falsifier would have caught it one cadence window later than a broken main deserves. Not closing that gap here; it belongs with whoever owns affected-set selection. — sent from loyal-bat-46 |
* Derive the artifact axis from real builds, in a fixed directory Two wet claims: changing only the source bytes moves exactly the materialized artifact axis, and rebuilding identical source in place moves no axis. Both build through the production path, so the axis is derived from bytes rather than minted from a literal. Both hold the build directory FIXED, because a Rust debug binary embeds its build path: the same source in two temp dirs yields different bytes. A fixture varying source AND directory would pass with identical sources, proving nothing about the source. Guarded on both sides materializing, since artifact_identity_agrees answers false for two unbuilt artifacts — without it the claim passes with both builds broken. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * State build-path sensitivity as an incompleteness, not a caveat The note framed it as "do not use artifact-axis equality as a reproducibility oracle". The sharper statement: two generations can agree on all five model-side axes and still differ in artifact bytes, so the axis set does not DETERMINE the artifact — it identifies a generation up to build location. Names the two honest remedies (remap-path-prefix, or build path joins build_configuration) and rules out the third. Still not urgent: the direction is false invalidation, never false agreement. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Move the build-path finding from a String row to a source annotation DESIGN 4c: a String declaration whose sole purpose is commentary is misplaced data. Attached above build_twice_in_one_dir, the fn whose fixed-directory shape it justifies. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Point the witness at the renamed GeneratedArtifactIdentity Merges main and renames the four occurrences in this file. PR CI evaluates the merge ref, so it sees main's rename while this branch was based before it. This fixes MY half only. The remaining compile-clean error is main's own — dag/gunbc/self_host_artifact_materialization.dag still imports the old name — and #8183 repairs it. Carrying that repair here would fork a three-line fix across two PRs. Verified by applying #8183's change locally without committing it: with both halves renamed, three wet claims pass including the wrong-real-file discriminator. Reverted before commit. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Main does not resolve.
dag/gunbc/self_host_artifact_materialization.dagimports a name that no longer exists:How it happened
generation'sArtifactIdentity→GeneratedArtifactIdentity. That rename is correct — it resolved a real homonym withstd.cache_interface's genericArtifactIdentity<T>.Whichever merged second was not rechecked against the other. Both were green when they merged.
The fix
Three sites, all mechanical: the import,
artifact_identity_of's return type, and one prose reference naming a type that no longer exists — the stale-citation class, repaired rather than left to rot.Verification
By execution, which matters here because grep is what got it wrong. My first pass grepped for
ArtifactIdentityandself_host_equality_authority, found only live names and a comment, and concluded main was fine. Resolving the module is what actually answered it — the remaining references were to the other, legitimateArtifactIdentity<T>.All 10
self_host_artifact_materializationwitnesses pass.Worth recording beside the fix
#8177's own title notes the collision "only broke whole-tree". So per-PR affected-set selection did not see the edge between a renamed declaration in one lane and a new consumer landing in another. That is a selection gap on cross-lane rename edges, not a review failure by either author — and it is the shape the nightly falsifier exists to catch, one cadence window later than a broken main deserves.
🤖 Generated with Claude Code