Skip to content

Unbreak main: point the artifact producer at the renamed identity - #8183

Closed
gunbai-bot[bot] wants to merge 1 commit into
mainfrom
session/loyal-bat-46-unbreak-artifact-identity
Closed

gunbai-bot[bot] wants to merge 1 commit into
mainfrom
session/loyal-bat-46-unbreak-artifact-identity

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Main does not resolve. dag/gunbc/self_host_artifact_materialization.dag imports a name that no longer exists:

dag/gunbc/self_host_artifact_materialization.dag:32:3: error: name 'ArtifactIdentity'
  not found in module 'v2.compiler.self_host.generation'

How it happened

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 ArtifactIdentity and self_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, legitimate ArtifactIdentity<T>.

All 10 self_host_artifact_materialization witnesses 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

#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>
gunbai-bot Bot pushed a commit that referenced this pull request Aug 12, 2026
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>
@gunbai-bot

gunbai-bot Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor Author

Closing as a duplicate — #8187 landed the identical repair (import, return type, and the prose reference, all three sites). Verified rather than assumed: git diff origin/main against this branch is empty, and the 10 hermetic materialization witnesses pass on current main.

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

@gunbai-bot gunbai-bot Bot closed this Aug 12, 2026
briansrls pushed a commit that referenced this pull request Aug 13, 2026
* 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>
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.

0 participants