Skip to content

File the class that let three defects land: nothing on the merge path emits the closure - #11915

Closed
briansrls wants to merge 1 commit into
mainfrom
rfm/emitted-only-breakage
Closed

briansrls wants to merge 1 commit into
mainfrom
rfm/emitted-only-breakage

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

The class

A module is admitted by every executing check — it parses, it typechecks, its witnesses evaluate — because every one of those checks runs it under the seed interpreter. Its emitted Rust is produced by nothing on the merge path. So a declaration whose emission is ill-typed, or whose operator has no host realization, lands clean and takes down the ability to build the v2 compiler.

Observed, at main 87c6658641e

gunbc test //gunbc/instruments:self-host refused EmittedCompilerBuildFailed status=101. Emission itself completed; cargo then reported three errors in src/std_integer.rs, emitted from dag/std/integer.dag:

  • two E0308 expected PhantomData<(i64, std_machine_constraints::MachineWidth<()>)>, found i64
  • one compile_error!("operator realization: host operator + on structural operand std.integer.UInt8 — the declaration has no host realization and declares no operator")

The same instrument built cleanly at 31bbd220f9d. git log 31bbd220f9d..87c6658641e -- dag/std/integer.dag names exactly one commit: 6bb950a5589 (#11643, NUMERIC-BIT-0), which added 146 lines declaring UInt8Result, uint8_of_int and octet constructors over UInt8 = Compose<UInt, MachineWidth<8>>.

The proposed cause is held separate from the observation, per DESIGN §4d. What is observed is three errors and a differential. Whether the defect is owned by the emitter's operator realization, by the width composition's emitted representation, or by the added declarations is a reading of v1.compiler.emit_rust this row does not make — the next reader owes that chain (§6b) rather than a patch at whichever link printed the error.

Why no gate saw it — which is the class, not the instance

The required check at that revision ran a floor that concludes success while refusing. But a floor in full working order would not have caught this one either: every floor route evaluates declarations under the interpreter, where UInt8 arithmetic never reaches emission. The only executing consumer of the emission is the self-host instrument, and gunbc.instrument_targets binds twelve labels of which no CI step invokes any.

Meanwhile gunbc.compiler_frontend_program_status reported SelfHostCorpusEmitsCleanly as Clear throughout, derived from a receipt nothing refreshes — DESIGN §4b(1) rung inflation, stated exactly: the reported rung exceeded the rung established by executed evidence.

This was one of three independent breakages live on main within a day. I could not build the v2 compiler without locally applying two other in-flight repairs first, and then hit this.

Rung and trigger

Found at mitigatable, and only by hand. Ceiling is mechanically preventable, not impossible — whether arbitrary emitted Rust typechecks is rustc's judgment, which sits in §4b's outside-the-modeled-guarantee column.

Trigger named at capability grain, not artifact grain: an executing consumer of the retained closure's emission, whose refusal reaches a process exit. Explicitly not satisfied by refreshing the standing by hand, or by any check that runs declarations under the interpreter.

Scope

One file. Membership is the directory (roster.dag is generated and gitignored), so no roster edit. Verified: the row compiles; the 21 blocking errors its compile reports are the pre-existing in-body-annotation defects in five other files, none in this row.

🤖 Generated with Claude Code

… emits the closure

A module is admitted by every executing check -- it parses, it typechecks, its
witnesses evaluate -- because every one of those checks runs it under the SEED
INTERPRETER. Its emitted Rust is produced by nothing on the merge path, so a
declaration whose EMISSION is ill-typed, or whose operator has no host
realization, lands clean and takes down the ability to build the v2 compiler.

Observed at main 87c6658: the self-host instrument refused
EmittedCompilerBuildFailed status=101. Emission completed; cargo then reported
three errors in src/std_integer.rs -- two E0308 expecting
PhantomData<(i64, MachineWidth<()>)> and finding i64, and one compile_error! that
host operator `+` on std.integer.UInt8 has no host realization. The differential
names one commit: 6bb950a (#11643) added 146 lines declaring UInt8Result,
uint8_of_int and octet constructors over UInt8 = Compose<UInt, MachineWidth<8>>.

The row holds the proposed cause separate from the observation, because which
link owns the defect -- the emitter's operator realization, the width
composition's emitted representation, or the added declarations -- is a reading
of v1.compiler.emit_rust this row does not make.

The class, rather than the instance, is that a floor in full working order would
not have caught it either: every floor route evaluates under the interpreter,
where UInt8 arithmetic never reaches emission. The only executing consumer is an
instrument, and no CI step invokes any of the twelve labels. Meanwhile
compiler_frontend_program_status reported SelfHostCorpusEmitsCleanly as Clear
throughout, from a receipt nothing refreshes -- DESIGN 4b(1) rung inflation.

Ceiling is mechanically preventable rather than impossible, since whether
emitted Rust typechecks is rustc's judgment. The trigger is named at capability
grain: an executing consumer of the retained closure's EMISSION whose refusal
reaches a process exit.

Membership is the directory; roster.dag is generated and gitignored, so this
commit is the row file alone.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 21, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-21T00:44:52.006897Z 873a50f PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 873a50f60e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".


"PROPOSED CAUSE, HELD SEPARATE FROM THE OBSERVATION because it is not established here: the added declarations construct and perform arithmetic on a width-composed integer whose emitted representation carries the width as a phantom parameter, and the emitter has no host realization for `+` on that operand. What is observed is the three errors and the differential. Whether the defect is owned by the emitter's operator realization, by the width composition's emitted representation, or by the added declarations is a reading of `v1.compiler.emit_rust` that this row does not make. The next reader owes that chain (DESIGN section 6b) rather than a patch at whichever link the error printed.",

"WHY NO GATE SAW IT, which is the class rather than the instance. The required check at that revision built the seed and ran a floor that concludes success while refusing (see required_floor_passes_with_a_failed_phase). But even a FLOOR IN FULL WORKING ORDER would not have caught this one: every floor route runs declarations under the interpreter, where `UInt8` arithmetic evaluates without ever being emitted. The only executing consumer of the emission is the self-host instrument, and `gunbc.instrument_targets` binds twelve labels of which NO CI STEP INVOKES ANY. So the emission path has no executing consumer on the merge path at all.",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Correct the instrument population count

At the cited 87c6658641e revision, gunbc.instrument_targets::instrument_targets() contains 13 labels, not twelve, with floor_memory_qualification_label() as the thirteenth; instrument_bindings() likewise has 13 entries. This records a false denominator in the failure-mode ledger and can mislead later audits of whether the complete instrument population is invoked by CI, so derive the count or correct it to thirteen.

Useful? React with 👍 / 👎.

@briansrls

Copy link
Copy Markdown
Contributor Author

Withdrawn: this is a second name for accepted_source_emits_uncompilable_target, which already owns the invalid state ("a .dag construction the front end accepts with zero blocking diagnostics, whose emission is a target program the target compiler refuses") — the DESIGN §3 fork. The numeric instance is recorded on bounded_natural_arithmetic_evaluated_as_unbounded_int by its owner.

The two receipts that were genuinely new — the twelve instrument labels with no invoking CI step, and the rung-inflated SelfHostCorpusEmitsCleanly standing — are carried onto the owning row rather than lost with this PR. I verified neither was recorded anywhere on main before closing.

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