Skip to content

Name the per-module relay span, and correct the row that was credited with it - #11290

Merged
gunbai-bot[bot] merged 5 commits into
mainfrom
session/deep-cat-655-relay-row
Sep 14, 2026
Merged

gunbai-bot[bot] merged 5 commits into
mainfrom
session/deep-cat-655-relay-row

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Sep 13, 2026 •

Copy link
Copy Markdown
Contributor

Every full-corpus fold refuses the same way: #11256 at a 238.8 ms remainder over
714 modules, #11202 at 276.6 ms over 717, SUCC3 at 238.5 ms and SUCC6 at 244.8 ms
on the same population, all against a 50 ms tolerance. Each receipt is internally
coherent -- parent minus the exclusive sum equals the remainder exactly on every
one -- so the work is real and simply covered by no row.

THE SPAN. The per-module loop prints one [native-prepare-split] line per unique
module to stderr, which the host runner drains through a pipe, and that write sat
outside every exclusive row while being paid inside parent_span. relay_emit
measures it with span_nanos around the eprintln and joins
NativeDriverExclusiveRows -- the TYPE, which is where the reconcile fold can see
it -- and native_driver_exclusive_sum. It is never derived as parent minus the
others: a row defined as the remainder forces the residual to zero and makes the
tolerance arm unfireable.

MEASURED-BUT-UNVALIDATED, and the PR says so. Per unique module the four folds
give 334.0, 342.9, 334.5 and 385.8 microseconds -- a 15.5% spread, not the
constant an earlier message of mine claimed. That spread is consistent with a
pipe write whose cost tracks line length and the reader's drain rate, and
"consistent with" is not "established by". The row exists to settle it by
measurement. If it returns less than the remainder, the span is named, the
remainder is smaller, and the next one gets the same treatment.

THE CORRECTION, which is the reason this PR also touches an annotation. The
module_release row landed in #10940 with a sentence in dag/std/compiler_entry.dag
saying the full corpus's 238.5 ms residual WAS that release cost. That was a
hypothesis written as history and measurement refuted it: module_release is
1.9 ms on SUCC6 against a 244.8 ms residual, and 1.86 ms on #11256 against
238.8 ms -- about one part in a hundred of what it was credited with. Another
lane had already cited the sentence as "the 238.5 ms was repaired by the
module_release row" before it was corrected. The row stays, because it is a real
measured non-overlapping span; the causal sentence goes, replaced by what the
runs established.

THE CLASS is filed as gunbc.recurring_failure_mode.attribution_row_around_the_wrong_span:
an attribution row placed around the wrong span leaves the residual intact while
the class reads as repaired. Its distinguishing fact is arithmetic rather than
judgement -- the row's own count is ~0 while the residual is unchanged to the
millisecond -- and its rule is that a row may be credited with a residual only
when its measured count is the same order as that residual, on the same run.

The OverAttributed arm already has its standing control
(planted_over_attribution_is_over_attributed_not_clamped): a rows fixture whose
exclusive sum exceeds the parent must refuse as OverAttributed rather than
clamping. It is a control of the law, not evidence for this repair.

Evidence: cargo test --release -p v1-compiler-tests --lib native_driver_cost --
7 passed, 0 failed, against mirrors regenerated and adopted for both
std_compiler_entry.rs and v1_compiler_emit_rust.rs. No tolerance change.

A §3 finding this PR does not fix, surfaced by the sibling bisect branch

NativeDriverExclusiveRows is built by literal initializer at many sites — the driver template's
own construction in v1.compiler.emit_rust, and every fixture construction in
test.claim.native_driver_cost_partition — rather than through one constructor those sites consume.
So adding a row is an N-site edit with nothing that forces the N to be found, which is the §3
single-authority defect applied to a record's construction rather than to a name.

It is stated here rather than on the branch where it bit because the duplication is the driver
template's, and this is the PR that owns that template. This PR does not add a row, so it is not
exposed to it
; the scratch bisect branch adds two and was, failing the emitted-crate build with
error[E0063] on the sites that had not been updated.

The reason it is worth a row and not just a fix-forward: the miss is invisible to every check
runnable before emission.
The seed typechecks the incomplete record without complaint, so a local
build, the unit tests and --required-regen's fixed point are all green; the field only becomes an
error when the corpus is emitted and a Rust struct initializer must be total. That puts it in the
same class as the body-grain annotation that refused the fold before it — a defect whose first
honest observer is a native-route emit, so the cost lands on whoever spends the runner rather than
on the author. The construction-over-validation repair (§5) is one constructor taking the measured
spans, with the literal sites consuming it; then a new row is a one-site edit that cannot be
half-applied.

Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_013aZDLk2CxsCDznqn49Xhe8

🤖 Generated with Claude Code

https://claude.ai/code/session_013aZDLk2CxsCDznqn49Xhe8

… with it

Every full-corpus fold refuses the same way: #11256 at a 238.8 ms remainder over
714 modules, #11202 at 276.6 ms over 717, SUCC3 at 238.5 ms and SUCC6 at 244.8 ms
on the same population, all against a 50 ms tolerance. Each receipt is internally
coherent -- parent minus the exclusive sum equals the remainder exactly on every
one -- so the work is real and simply covered by no row.

THE SPAN. The per-module loop prints one [native-prepare-split] line per unique
module to stderr, which the host runner drains through a pipe, and that write sat
outside every exclusive row while being paid inside parent_span. relay_emit
measures it with span_nanos around the eprintln and joins
NativeDriverExclusiveRows -- the TYPE, which is where the reconcile fold can see
it -- and native_driver_exclusive_sum. It is never derived as parent minus the
others: a row defined as the remainder forces the residual to zero and makes the
tolerance arm unfireable.

MEASURED-BUT-UNVALIDATED, and the PR says so. Per unique module the four folds
give 334.0, 342.9, 334.5 and 385.8 microseconds -- a 15.5% spread, not the
constant an earlier message of mine claimed. That spread is consistent with a
pipe write whose cost tracks line length and the reader's drain rate, and
"consistent with" is not "established by". The row exists to settle it by
measurement. If it returns less than the remainder, the span is named, the
remainder is smaller, and the next one gets the same treatment.

THE CORRECTION, which is the reason this PR also touches an annotation. The
module_release row landed in #10940 with a sentence in dag/std/compiler_entry.dag
saying the full corpus's 238.5 ms residual WAS that release cost. That was a
hypothesis written as history and measurement refuted it: module_release is
1.9 ms on SUCC6 against a 244.8 ms residual, and 1.86 ms on #11256 against
238.8 ms -- about one part in a hundred of what it was credited with. Another
lane had already cited the sentence as "the 238.5 ms was repaired by the
module_release row" before it was corrected. The row stays, because it is a real
measured non-overlapping span; the causal sentence goes, replaced by what the
runs established.

THE CLASS is filed as gunbc.recurring_failure_mode.attribution_row_around_the_wrong_span:
an attribution row placed around the wrong span leaves the residual intact while
the class reads as repaired. Its distinguishing fact is arithmetic rather than
judgement -- the row's own count is ~0 while the residual is unchanged to the
millisecond -- and its rule is that a row may be credited with a residual only
when its measured count is the same order as that residual, on the same run.

The OverAttributed arm already has its standing control
(planted_over_attribution_is_over_attributed_not_clamped): a rows fixture whose
exclusive sum exceeds the parent must refuse as OverAttributed rather than
clamping. It is a control of the law, not evidence for this repair.

Evidence: cargo test --release -p v1-compiler-tests --lib native_driver_cost --
7 passed, 0 failed, against mirrors regenerated and adopted for both
std_compiler_entry.rs and v1_compiler_emit_rust.rs. No tolerance change.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013aZDLk2CxsCDznqn49Xhe8
…refutes

fierce-lark asked for the residuals stated by fold id and instrument rather than
as a constant. Doing that surfaced a live instance of the class this PR files,
inside this PR's own correction.

The annotation still read "a per-module constant, stable across different host
loads". That was written on three folds. The fourth — gunbc#11202 at a3157d6a,
276,596,559 ns over 717 modules = 385.8 us — refutes it against 334.0 / 342.9 /
334.5 on the other three. A 15.5% spread is not a constant, and leaving the word
there would have repeated, in the paragraph immediately below the correction, the
defect the correction records.

Both texts now name the fold and the instrument instead of asserting a figure:
the number is remainder_nanos divided by unique_modules from that run's
[native-cost-partition] line, listed per fold (SUCC3 45a9105, SUCC6 4011bf9,
gunbc#11256 f5e8a568, gunbc#11202 a3157d6a), with an instruction to re-derive it
from the line rather than trust the list. That is DESIGN section 6's name-the-
instrument rule applied to a number that would otherwise be frozen into an
authority by transcription.

The spread is stated as consistent with a pipe write whose cost tracks line
length and the reader's drain rate, and explicitly not established by it.

PROSE ONLY, AND THE DRIVER IS UNCHANGED. required-regen on this head reports
first_generation_equal=true, exit 0 — no mirror drift, so the emitted driver is
byte-identical to 422b406. Folds composed against that head remain valid
evidence for this one.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013aZDLk2CxsCDznqn49Xhe8
Brian Searls and others added 3 commits September 13, 2026 22:27
… template stops transcribing

Review 65551 (cursor, REQUEST_CHANGES) is right that compiler_entry.dag credited
relay_emit with the residual before any measurement backed it -- DESIGN 4d, an
inference promoted to a deduction, which is the very class this PR exists to
record. The remedy it asked for was to demote the sentence to a candidate. The
measurement has since arrived and says something stronger, so that is what is
written instead:

  relay_emit is 20,084,918 ns against a residual of the order of 240 ms -- about
  8%, the same order as module_release's one part in a hundred, and NOT the
  order of the thing to be explained.

So relay_emit is recorded as a FALSIFIED candidate, not an open one. Two
candidates have now been measured and both were refuted; the residual is unnamed
and is left unnamed rather than handed to a third guess. Both rows stay: a
measured, non-overlapping row is worth keeping whatever it cost, because the row
is what made the refutation possible at all.

The review's corroborating finding -- 05_emit_rust.dag asserting the same bet as
established fact, in the stale three-fold ~334 us framing -- is fixed at its
root instead of being re-worded. Measurement sentences are DELETED from the
driver template, which now points at std.compiler_entry NativeDriverExclusiveRows
for what the spans cost. A number copied into a generated template rots in a
place no fold can reach to correct it (DESIGN 6: name the instrument, never
transcribe its output), and this correction has now had to be made three times
in the same prose.

The census also caught one the review did not: the template still asserted that
module_release IS "the residual that refused the full corpus at
RemainderExceedsTolerance" -- the claim already falsified and corrected in
compiler_entry.dag, surviving in the emitted copy. Deleted.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013aZDLk2CxsCDznqn49Xhe8
The emitted-comment change in the driver template moves the template's own
mirror, v1_compiler_emit_rust.rs -- one file, one hunk. std_compiler_entry.rs is
correctly unchanged: the compiler_entry.dag edit was annotation-only, and an
annotation is not semantic program data (DESIGN 4c), so it produces no mirror
movement.

Regen on srv2 (eager-raven-113, regen.MlinSc), rc=0:
  required-regen             first_generation_equal=false planned=155 executed=155
                             adjudicated=155 declared_divergent=1 [main.rs]
  regen-round-cost           changed_paths=1, convergence_stages=1
  required-regen-fixed-point fixed_point_equal=true
                             referenced_first_generation_equal=true
  cargo test native_driver_cost  7 passed

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013aZDLk2CxsCDznqn49Xhe8
…them

Review 65769 is right, and its sharpest point is the one that decides it: the
same commit that deleted measurement sentences from the driver template on
DESIGN section 6 grounds MOVED those numbers into this annotation rather than
dissolving them. compiler_entry.dag is no more reachable by a fold than the
template was. And the recurring_failure_mode row this PR files exists precisely
because a transcribed figure in this very annotation went stale and was
inherited as settled -- landing four more was the next instance of the class
being filed.

WHAT REPLACES THEM. The four folds are still NAMED -- SUCC3 at 45a9105,
SUCC6 at 4011bf9, #11256 at T=f5e8a568, #11202 at T=a3157d6a -- because a fold
id is a citation that stays true, while remainder_nanos, the divisor and the
hand-computed quotient are outputs that rot. The claims the numbers supported
are kept as RELATIONS, which is what they were actually being used to assert:
the per-module remainder is NOT constant across the four (the fourth refutes
constancy), and both candidate spans come back an order of magnitude or more
below the residual they were credited with, so both are falsified.

The self-caveat the block used to carry -- 're-derive it by reading the line
rather than trusting this list' -- is deleted rather than kept. It conceded the
numbers were not the authority while still committing them, which is the
concession the rule exists to refuse.

The module_release paragraph is de-transcribed in the same pass even though the
review cited only the fold table. It carried the identical defect two paragraphs
up and sits in this PR's own diff; fixing only the flagged block would leave the
class standing where a reviewer had just named it.

Annotation-only, so no mirror moves.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013aZDLk2CxsCDznqn49Xhe8
@gunbai-bot

gunbai-bot Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor Author

Fixed in 248aa42. Review 65769 is accepted in full, and its sharpest point is the one that decided it: the same commit that deleted measurement sentences from src/v1/05_emit_rust.dag on §6 grounds moved those numbers into dag/std/compiler_entry.dag rather than dissolving them. compiler_entry.dag is no more reachable by a fold than the template was. The review is also right that this PR's own gunbc.recurring_failure_mode.attribution_row_around_the_wrong_span exists because a transcribed figure in this very annotation went stale and was inherited as settled — so landing four more was the next instance of the class being filed in the same diff.

What replaces them. The four folds are still named — SUCC3 at 45a9105101, SUCC6 at 4011bf9d, #11256 at T=f5e8a568, #11202 at T=a3157d6a — because a fold id is a citation that stays true, while remainder_nanos, the divisor and the hand-computed quotient are outputs that rot. The claims those numbers were actually supporting are kept as relations, which is all they were being used to assert:

  • the per-module remainder is not constant across the four folds (the fourth refutes constancy — which is why the figures could not simply be updated: a variable quantity stated as four copied numbers rots four ways);
  • both candidate spans come back an order of magnitude or more below the residual they were credited with, so both module_release and relay_emit are falsified candidates and the residual stays unnamed.

The self-caveat the block carried — "re-derive it by reading the line rather than trusting this list" — is deleted rather than kept. It conceded the numbers were not the authority while still committing them, which is exactly the concession §6 refuses, and the review was right that it discharges nothing.

One thing I fixed beyond what was flagged. The review cited the fold table at :82-90. The module_release paragraph two above it carried the identical defect (transcribed ms figures for the row and the residual) and sits in this PR's own diff. Fixing only the flagged block would have left the class standing where a reviewer had just named it, so it is de-transcribed in the same pass. A sweep of the file for transcribed magnitudes now comes back empty; the one surviving numeral is the modeled tolerance constant, which is a policy value rather than a measurement.

Annotation-only, so no mirror moves and no regeneration is needed for this commit.

— sent from deep-cat-655

@gunbai-bot

gunbai-bot Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor Author

On review 65784's closing observation — that attribution_row_around_the_wrong_span.dag still carries ms figures while compiler_entry.dag just had its figures deleted. I checked the premise rather than take it on the approval, and the review's reading holds: the receipt names its producing runs beside the figures (SUCC3, SUCC6, and #11256 at f5e8a568), so they are reachable from the thing that owns them.

Recording the line between the two cases, because the cleanup could otherwise be read as inconsistent and someone could later "finish" it by deleting that row's numbers — which would destroy the specimen:

  • In compiler_entry.dag the figures were a standing description of a variable quantity. Four folds disagreed, the spread was the point, and any copy is wrong as soon as a fifth fold reports. §6 applies: name the instrument, and the fold ids are the citation that stays true.
  • In the failure-mode row the figures are the frozen evidence of one past claim. The row's distinguishing fact is the arithmetic — the credited row's own count is ~0 while the residual is unchanged to the millisecond — so a reader cannot check the claim refutes itself without them. They describe a specific historical run, not a live quantity, so they cannot rot in the way §6 targets.

The test that separates them: would a new measurement make the number wrong, or is the number a record of what was measured then? The first must be a citation; the second must be carried.

Not changing anything for this — noting it so the distinction survives the next cleanup.

— sent from deep-cat-655

gunbai-bot Bot pushed a commit that referenced this pull request Sep 14, 2026
…sus could not see

MIRRORS: regen.iR8A85 on this parent, fixed_point_equal=true
referenced_first_generation_equal=true, no planner split, exactly two mirrors
changed.

AND THE DEFECT THE TRANSACTION SURFACED, which is mine: src/v1/tests
native_driver_cost_refusal_test.rs carries TWO literal constructions of
NativeDriverExclusiveRows, and they were missing ALL FOUR bisect fields --
including the first pair, so they have been wrong since ac83372. The fold never
tripped it because the fold builds only claim_executor; clippy --all-targets
would have.

WHY MY SWEEP MISSED THEM, because the lesson is the population and not the
pattern: I censused with grep --include=*.dag. The row set is constructed in
.dag witnesses, in the emitted template, AND in hand-written Rust tests, so a
.dag-only census cannot see a third of the sites however carefully it is written.
This commit's census scans *.dag and *.rs together, brace-matches each
construction, and reports 14 sites with zero missing any of the four fields.

THIS IS THE THIRD INSTANCE OF THE SECTION 3 FINDING recorded on #11290, and the
first to cross a language boundary. A row set built by literal initializer at 14
sites in two languages cannot be grown safely by hand; the section 5 repair is
one constructor the sites consume, after which a new row is a one-site edit that
cannot be half-applied.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013aZDLk2CxsCDznqn49Xhe8
@gunbai-bot
gunbai-bot Bot added this pull request to the merge queue Sep 14, 2026
Merged via the queue into main with commit 0306cf9 Sep 14, 2026
4 checks passed
@gunbai-bot
gunbai-bot Bot deleted the session/deep-cat-655-relay-row branch September 14, 2026 18:46
gunbai-bot Bot pushed a commit that referenced this pull request Sep 14, 2026
…h main

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DQyBe1FaYb3bFZmpTczetX
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