Skip to content

Carry the gate observation onto the row that owns the class, and retire its second name - #12016

Merged
briansrls merged 3 commits into
mainfrom
fix/carry-gate-observation
Sep 22, 2026
Merged

briansrls merged 3 commits into
mainfrom
fix/carry-gate-observation

Conversation

@briansrls

@briansrls briansrls commented Sep 21, 2026 •

Copy link
Copy Markdown
Contributor

Closes the loop on #11915, which I filed and then found to be a second name for an existing class.

Why #11915 is withdrawn

accepted_source_emits_uncompilable_target already owns that invalid state — "a .dag construction the front end accepts with zero blocking diagnostics, whose emission is a target program the target compiler refuses." Two names for one concept is the §3 fork, and the author of the second name is the one person who could say cheaply that it was unintended.

The numeric instance that prompted the filing is already recorded by its owner on bounded_natural_arithmetic_evaluated_as_unbounded_int (OCCURRENCE, 2026-09-21).

What was not recorded anywhere, and is carried here rather than lost

I checked before closing: the class-level observation about why nothing catches this appears on no row on main.

  • The floor routes reached at that revision run declarations under the seed interpreter, where the construction evaluates and nothing is emitted.
  • The only executing consumers of the emission are the instrument labels, and at 87c6658641e gunbc.instrument_targets bound thirteen, of which no CI step invoked any.
  • So the source-to-target path had no executing consumer on the merge path at all. Three independent defects reached main inside one day by that route.

The scope of that reading is the revision it names — a dated search for instrument invocations, not a standing claim about every floor route or any future lane roster.

And the half that makes the absence worse than a missing check — the standing was inflated while it was broken. compiler_frontend_program_status reported SelfHostCorpusEmitsCleanly as Clear across the 2026-09-20/21 window while the capability was down. That is §4b(1) rung inflation, and an inflated class never ranks for climbing. The repair is not a refresh cadence: a recent receipt can describe the wrong subject, and an older one stays applicable while its relevant inputs are demonstrably unchanged. Applicability, not recency.

No new trigger

An earlier revision of this PR proposed a trigger at emission grain — an executing consumer of the emission whose refusal reaches a process exit. That is withdrawn. Emission can succeed while producing output the target compiler refuses, so an emission-only consumer is weaker than the class it would have joined. The row's existing ACCEPTED-SOURCE-TO-TARGET AGREEMENT trigger stands unchanged, and this PR adds no trigger.

Corrections carried in this revision

  • The three new observations are inside the receipts list (an earlier push placed them after its closing bracket, naming a field that does not exist).
  • The count at 87c6658641e is thirteen, not twelve. Re-derive with instrument_targets() at that revision; the enumeration ends primitive_egress_census_seed_label(), floor_memory_qualification_label().

🤖 Generated with Claude Code

…re its second name

gunbc#11915 filed a_declaration_the_interpreter_runs_emits_rust_that_does_not_compile
as a new recurring-failure-mode class. It is not one: accepted_source_emits_uncompilable_target
already owns that invalid state -- "a .dag construction the front end accepts with
zero blocking diagnostics, whose emission is a target program the target compiler
refuses". Two names for one concept is the DESIGN section 3 fork, and the author of the
second name is the one person who could say cheaply that it was unintended.

The numeric INSTANCE that prompted the filing is already recorded by its owner, on
bounded_natural_arithmetic_evaluated_as_unbounded_int (OCCURRENCE, 2026-09-21).

What was NOT recorded anywhere, and is carried here rather than lost with the closed
PR, is the CLASS-level observation about why nothing catches this:

  - every floor route runs declarations under the seed INTERPRETER, where the
    construction evaluates and nothing is emitted;
  - the only executing consumers of the emission are the instrument labels, and
    gunbc.instrument_targets binds TWELVE of which NO CI STEP INVOKES ANY;
  - so the source-to-target path has no executing consumer on the merge path at all.
    Measured 2026-09-20/21: three independent defects reached main inside one day.

And the half that makes the absence worse than a missing check: the standing was
INFLATED while it was broken. compiler_frontend_program_status reports
SelfHostCorpusEmitsCleanly as Clear from a receipt nothing refreshes on a cadence, so
the carrier reported a capability that had been down for a day -- section 4b(1) rung
inflation, and an inflated class never ranks for climbing.

The next-rung trigger is stated at CAPABILITY grain so it cannot be discharged by
paperwork: an executing consumer of the EMISSION of the retained closure whose refusal
reaches a process exit a human or a lane reads. Not satisfied by a receipt row, by
refreshing the standing by hand, or by any check that runs declarations under the
interpreter.

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-21T21:59:36.997155Z 299f11a 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: 299f11ad6e

ℹ️ 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".

Comment on lines +270 to +272
"WHY NO GATE SEES THIS CLASS, which is the class rather than any instance (carried from gunbc#11915, closed as a second name for this row; the numeric instance it was filed over is recorded on gunbc.recurring_failure_mode bounded_natural_arithmetic_evaluated_as_unbounded_int). EVERY floor route runs declarations under the SEED INTERPRETER, where the construction evaluates and nothing is ever emitted. The only executing consumers of the emission are the instrument labels, and `gunbc.instrument_targets` binds TWELVE of them of which NO CI STEP INVOKES ANY. So the source-to-target path has no executing consumer on the merge path at all, and a declaration whose EMISSION is ill-typed lands clean through a green required gate. Measured 2026-09-20/21: three independent defects reached main inside one day by this route.",

"AND THE STANDING WAS INFLATED WHILE IT WAS BROKEN, which is why the absence above is worse than a missing check. `gunbc.compiler_frontend_program_status` reports SelfHostCorpusEmitsCleanly as Clear, derived from the latest validated whole-corpus compile-phase receipt; nothing refreshes that receipt on a cadence, so the carrier reported a capability that had been down for a day. DESIGN section 4b(1) rung inflation stated exactly -- the reported rung exceeded the rung established by executed evidence -- and an inflated class never ranks for climbing. NEXT-RUNG TRIGGER at capability grain: an executing consumer of the EMISSION of the retained closure whose refusal reaches a process exit a human or a lane reads. It is NOT satisfied by adding a receipt row, by refreshing the standing by hand, or by any check that runs declarations under the interpreter.",

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 Append the observations before closing receipts

The receipts list is already closed on line 268, so these two string expressions are parsed as anonymous _ initializers of RecurringFailureMode, not as receipt entries. Consequently consumers and generated projections that read .receipts will not carry the newly added gate observation or its next-rung trigger (and record validation may reject the unexpected initializers); move both strings above the closing ],.

Useful? React with 👍 / 👎.

"WHAT DISTINGUISHES THIS OCCURRENCE, and why it is a component of this class rather than a class of its own: the target did not refuse something the emitter failed to notice. std.operator_realization decided OperatorRealizationRefused at every site -- a correct, typed, located refusal -- and v1.compiler.emit_rust emit_typed_bin_op rendered it through emit_rust_compile_error_expr as compile_error! text; what failed is only the JOIN from that decision to the compile step's blocking count. This is component (ix) of the retirement roster above. It has a cheaper ceiling than the class: every refusal the emitter renders is a fact the compile step already holds, and counting it as blocking needs no new analysis. NEXT-RUNG TRIGGER for this component: the compile step's blocking count includes every realization refusal the emitter rendered into the artifact, SUFFICIENT FOR a closure whose emission carries any compile_error! to be refused by `gunbc compile` itself, with the site and message, before any toolchain runs. The upstream defect these 18 sites exposed -- infix arithmetic on bounded naturals being evaluated as unbounded Int by the interpreter -- is filed separately as gunbc.recurring_failure_mode bounded_natural_arithmetic_evaluated_as_unbounded_int.",
],

"WHY NO GATE SEES THIS CLASS, which is the class rather than any instance (carried from gunbc#11915, closed as a second name for this row; the numeric instance it was filed over is recorded on gunbc.recurring_failure_mode bounded_natural_arithmetic_evaluated_as_unbounded_int). EVERY floor route runs declarations under the SEED INTERPRETER, where the construction evaluates and nothing is ever emitted. The only executing consumers of the emission are the instrument labels, and `gunbc.instrument_targets` binds TWELVE of them of which NO CI STEP INVOKES ANY. So the source-to-target path has no executing consumer on the merge path at all, and a declaration whose EMISSION is ill-typed lands clean through a green required gate. Measured 2026-09-20/21: three independent defects reached main inside one day by this route.",

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 Derive the instrument population instead of recording twelve

At this revision, gunbc.instrument_targets.instrument_targets() contains 15 labels, not twelve (the list includes all entries from heads_reading_differential_label() through bare_reference_channel_outcome_label()). Recording twelve makes the class-level measurement false on arrival and will mislead later coverage work; derive or enumerate the actual population rather than embedding this stale count.

Useful? React with 👍 / 👎.

…ined

TWO DEFECTS IN THE FIRST VERSION OF THIS APPEND, both mine.

1. THE STRINGS WERE OUTSIDE `receipts`. They landed after the list's closing bracket and
   before `evidence`, so the record initializer named a field that does not exist. The
   PR read MERGEABLE, and mergeable is a statement about a git merge, not about whether
   a file compiles -- exactly the specification-without-execution DESIGN section 5 names.
   The declaration now parses and resolves: `gunbc run --entry <this file> --function
   accepted_source_emits_uncompilable_target` evaluates the record in full and refuses
   only because the entry contract wants ProcessExit, which is the harness, not the file.

2. THE PROPOSED TRIGGER WAS WEAKER THAN THE CLASS. It offered "an executing consumer of
   the EMISSION whose refusal reaches a process exit". But this row's invalid state is
   accepted source emitting a target program the target compiler REFUSES -- and emission
   can succeed while doing exactly that, which is what the 2026-09-21 occurrence did:
   emission completed, cargo refused. A trigger naming emission would have been
   discharged while the class stayed open. It is withdrawn; the row's existing class-grain
   trigger (ACCEPTED-SOURCE-TO-TARGET AGREEMENT) stands, and this receipt now refines why
   that trigger is outstanding instead of competing with it.

THREE STATES THE REPLACEMENT KEEPS APART, because collapsing them is how a refresh
cadence gets mistaken for a wall: OBSERVATION (an on-demand run exposes a failure),
REGRESSION PROTECTION (a required acceptance consumer that emits a closure AND COMPILES
it, with the target compiler's refusal reaching the lane), and FRONTIER TRUTH (a standing
derived from evidence applicable to the claimed subject). The repair for the third is
APPLICABILITY, not recency: a recent receipt can describe the wrong subject, and an older
one stays applicable while its relevant inputs are demonstrably unchanged.

The historical observation is now bounded to the revision it was taken at -- main
87c6658, 2026-09-20/21 -- and says so, rather than asserting a standing fact about
every floor route or any future lane roster.

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

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

HOLD at 8d6a830 for one remaining factual correction. The prior record-initializer and weak-trigger objections ARE fixed in the source: the observations are now inside receipts, and the receipt explicitly retains accepted-source-to-target agreement and emit+compile regression protection. I checked the remaining count objection against the HISTORICAL REVISION THE RECEIPT NAMES, not current main. At 87c6658, dag/gunbc/instrument_targets.dag::instrument_targets() contains 13 entries, not TWELVE: heads_reading_differential, behavioral_receipt_plan, behavioral_receipt_census, behavioral_receipt_selftest, compile_clean_diagnostic_census, self_host, v2_native_cli, evaluation_store_address_exact_head, primitive_egress_census, primitive_egress_census_v2, primitive_egress_census_dag, primitive_egress_census_seed, floor_memory_qualification (all *_label()). instrument_bindings() has the corresponding 13 entries. The previous review's 15 refers to its different revision and should not be substituted for this historical count. Correct TWELVE to thirteen, or omit the numeric assertion while retaining the precise dated observation. Please also update the PR description, which still repeats twelve and the superseded emission-only trigger. No new mechanism or broader investigation is requested. All four GitHub check results are successful at this head; they do not validate this historical assertion. No merge attempted for this PR. This is a COMMENT because the connected account is the author, not an independent reviewer.

Review fetched instrument_targets() at the revision the receipt names and
found THIRTEEN labels with thirteen corresponding bindings; the receipt said
twelve. Re-derived independently before changing it: the enumeration ends
primitive_egress_census_seed_label(), floor_memory_qualification_label().

The figure is kept rather than dropped because it is already re-derivable --
the receipt names the revision AND the symbol, so it is a dated reading of a
fixed revision rather than a transcribed number with no producer. It was
simply wrong.

Nothing else moves: the observations stay inside `receipts`, and no trigger
is proposed -- the row's existing ACCEPTED-SOURCE-TO-TARGET AGREEMENT stands.

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

Copy link
Copy Markdown
Contributor Author

Corrected, and re-derived independently before changing it rather than taking the count on the review's word.

instrument_targets() at 87c6658641e lists thirteen labels — the enumeration ends primitive_egress_census_seed_label(), floor_memory_qualification_label() — with thirteen matching bindings. The receipt said twelve. It now says thirteen.

I kept the figure rather than dropping it: the receipt already names both the revision and the symbol, so it is a dated reading of a fixed revision that any reader can re-derive. It was wrong, not ungrounded.

The PR description is rewritten too. The count is fixed there, and the superseded emission-only trigger is now stated as withdrawn — emission can succeed while producing output the target compiler refuses, so that trigger was weaker than the class it would have joined. This PR adds no trigger; the row's existing ACCEPTED-SOURCE-TO-TARGET AGREEMENT stands unchanged.

Evidence for the edit itself: the declaration was run through the front end (gunbc run --entry … --function accepted_source_emits_uncompilable_target), which evaluated the whole record with THIRTEEN in it before refusing on the entry contract. A structural grep would not have established that.

@briansrls
briansrls added this pull request to the merge queue Sep 22, 2026
Merged via the queue into main with commit c4464fc Sep 22, 2026
4 checks passed
@briansrls
briansrls deleted the fix/carry-gate-observation branch September 22, 2026 04:39
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