Skip to content

RESTORATION: return two gap-analysis rows that #9868 reverted off a stale base (one with a §6 repair) - #9937

Merged
gunbai-bot[bot] merged 6 commits into
mainfrom
session/eager-hawk-376-scope-gap
Sep 1, 2026
Merged

gunbai-bot[bot] merged 6 commits into
mainfrom
session/eager-hawk-376-scope-gap

Conversation

@gunbai-bot

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

Copy link
Copy Markdown
Contributor

THIS IS A RESTORATION, WITH ONE DECLARED EXCEPTION. READ THIS BEFORE THE DIFF.
Almost every added line here is byte-identical to content that already merged and was already reviewed.

A restoration diff is structurally indistinguishable from authorship, so restored content reads as new content. Before filing a finding against a line below, please check whether it is restored bytes — in which case the finding is about the merged row and generally belongs in its own diff against main, with the lane that authored it.

Summary

docs/plans/compiler-guarantee-recovery-gap-analysis.md lost content on main. #9868 was authored from a base predating #9888 and #9889, so its squash silently reverted both of their contributions to that older text while adding its own sealed-carrier row. Nobody's change was rejected on the merits — one branch carried a stale copy of the region. All three coexist here and #9868's row is unchanged.

Established by provenance rather than by reading a diff (git log -S on the file):

The mechanism, which generalises past this file

Only one of the two losses conflicted. The nullary-alias row was deleted outside the conflict region, so git auto-merged its removal silently. Resolving the visible conflict would have produced a resolution that looked complete and still shipped the loss. A conflict marker is not the boundary of what a stale-base squash takes with it.

And the row-key check has its own blind spot, in the opposite direction. The two losses were different shapes: the nullary-alias loss was a dropped row (catchable by comparing row-key sets); the census loss was a truncated cell inside a row whose key never changed (invisible to a key-set comparison, caught here by the conflict). Neither check subsumes the other. Comparing key and cell length catches both.

The general form: verifying over an enumerated set is necessary but not sufficient — the set must be enumerated at a grain finer than the unit that can be silently edited. Rows were the wrong grain by one level.

A clean answer about main is a measurement with a timestamp. This branch was correctly reported as fully landed; that was true when measured and false two commits later.

Review 58203's §6 finding — accepted and fixed

The finding read this PR's current head and is correct: the restored nullary-alias row reinstated exact populations from a one-off scan with no committed producer, while its own prose says no probe re-derives them.

Fixed in fafd2adc7e1. Ending (2)+(3) of the three admissible ones, because (1) is unavailable — nothing in the tree re-derives a per-file refusal census for a named diagnostic arm, and re-running the scan to commit fresher literals is the path explicitly ruled out: a number is auditable when something re-derives it, not when it is recent.

  • the arm comparison keeps its shape (one arm inflated relative to the other) and loses its literal;
  • the three files stay as cited specimens with qualitative magnitude;
  • the absent per-file census is named as part of the row's trigger rather than papered over.

The harm claim is undamaged. What makes the row matter is that an inflated population was quoted and endorsed before the diagnostic text was read closely — and that survives without the figure. Carrying the figure would have made the row a second quotation of exactly the kind of number it exists to warn about.

An earlier revision of this PR argued the finding belonged in its own diff, since the bytes were #9888's. That reasoning still holds in general and is why the class restored_bytes_reviewed_as_authorship is being filed separately; it was overruled here by the XL-N manager, which is what makes this repair a ruling rather than one lane rewriting another's cells.

Test plan

Docs-only; no code path changes. Verified over an enumerated set rather than an impression of the file, per §5's completeness is an identity join, not a count equality: row keys (grep '^|' | cut -c1-70 | sort) differ from main by exactly the one added key with none lost. Restoration fidelity for the unmodified row verified by cmp against the merged blob of a7c72f00729. The four removed literals are confirmed absent from the repaired row by grep. cargo fmt --all --check ran green in the pre-commit and pre-push hooks.

gunbc-ci-auto-heal and others added 4 commits September 1, 2026 05:04
… no producer

neat-hawk-884 found it; this verifies it independently and adds the three
things the carrier does not state.

Verified rather than relayed: DeclaredTypeObligation is declared once and
CONSTRUCTED at exactly two sites in v1.compiler.04_infer, for
PositionDirectCallArgument and PositionListElement. The other ten members
occur only in declared_type_position_label, which renders a name and judges
nothing.

The carrier already states the gap in 4b shape in its own voice, including the
enumeration and a per-position trigger, so this row POINTS at it instead of
restating it -- DESIGN 6 says the mark on the carrier is the authority and a
parallel ledger is the failure mode. Recorded here is only what the carrier
does not say:

1. It is a THIRD cause of silence. The board reasons with two -- the judgment
   ran and accepted, or ran and declined -- and the bodyless row above
   established the first is real. "No producer at that seam" is a third, the
   three are indistinguishable from outside, and 45 of 64 board rows are
   UNDECIDED on exactly that.

2. Occupancy per position, by cited specimen rather than by count. Nine are
   occupied. PositionParameterDefault is grammar-admitted (02_parse parses
   `name: Type = expr`) and corpus-unoccupied: zero parameter defaults across
   42,329 fn declarations, detector validated against planted positives first.
   That zero does not make it inert -- reachability is judged by what a fixture
   may author, so the RED is authorable and the exposure begins the day someone
   writes the construct.

3. Ceilings do not differ by position, and the reason is the point: none is
   grammar-absent, and the decision procedure is shared, so each is a
   construction site rather than a rule. The one real limit sits inside the
   relation rather than at a position -- UndecidableGenericFormal already binds
   PositionGenericTypeArgument.

Not enrolled, by the manager's ruling: enrolling an expected red is a decision
about the required gate, not the finder's call. No producers written.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013wJU7jqGAEk8rj4UwpHdox
…of them had one

review 58065 (codex/gpt-5.6-sol) is right, and the rule it cites disposes of
more than the figure it caught. DESIGN §6: a measurement is cited by naming the
producer that re-derives it, never by copying its output; if it is worth
re-deriving it is worth an entry point, and if it is not worth an entry point it
is a one-off rather than an instrument.

The parameter-default figures came from a one-off paren-balanced scan with no
committed producer, so they are gone. What replaces them is stronger, because
the conclusion never depended on them: reachability is judged by what a FIXTURE
MAY AUTHOR, so a grammar-admitted position has an authorable RED whether or not
the corpus occupies it. An empty corpus means exposure on first use; a non-empty
one means exposure now; neither makes the position inert and neither moves the
rung, ceiling or trigger. Grammar admission itself is decidable by symbol and
stays cited.

The same rule condemns three further figures in this row that the review did not
flag -- the bodyless population, the miscounted-coproduct figure, and the
prefix-shadowed pair count -- all from one-off scans of mine with no producer
either. Fixing only the one that was caught would leave the same defect standing
under a review that had just named it, so all four are now cited members,
specimens and magnitudes instead of transcribed numbers.

The row now also names the instrument it is owed: a committed producer
reporting, per DeclaredTypePosition member, whether the tracked corpus occupies
that position -- which would give the nine cited specimens a re-derivable form
as well.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013wJU7jqGAEk8rj4UwpHdox
…-gap census

#9888 edited the same row while this PR was open, so the merge is a real
resolution rather than a pick. Both sides survive:

- their exposed-subset measurement and the 69 / 66 reconciliation are kept
  VERBATIM, including the figures. Removing them to satisfy review 58065 would
  have been wrong: that review condemns transcribing a one-off with no producer,
  and their join is the opposite -- two lanes deriving the same population
  independently and reconciling it at IDENTITY GRAIN against a named ref, which
  is the re-derivation §6 asks for. Their "which JOINS THIS ROW'S 69 EXACTLY"
  also depends on the 69 upstream of it, so deleting the number would have left
  their sentence dangling.

- my own figures stay removed, because they are the case the review actually
  named: one-off scans with no committed producer.

The row now says which of the two treatments applies and why, so the next reader
does not read the asymmetry as an oversight, and records that both censuses
still owe the same committed producer.

The scope-gap census (ten of twelve positions have no obligation producer) is
carried through unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013wJU7jqGAEk8rj4UwpHdox
The conflict is one table region in docs/plans/compiler-guarantee-recovery-gap-analysis.md,
and resolving it is not a choice between two authors: #9868 was authored from a base
predating #9888 and #9889, so its squash silently reverted both of their rows while adding
its own. Verified by `git log -S` on the file: the scope-gap census text is added by
a7c72f0 (#9889) and removed by 8f82b55 (#9868), and the nullary-alias row goes the
same way via d0009ca (#9888).

Resolution keeps all three, because none contradicts another:
- the long inhabitance row (this branch), carrying the bodyless-type exposure split and the
  TEN-OF-TWELVE obligation scope census;
- the nullary-alias diagnostic row (#9888), re-inserted at its original position after the
  container-element row — git auto-merged main's deletion of it silently, outside the
  conflict region, which is exactly how the clobber propagates unnoticed;
- the sealed-carrier row (#9868), taken from main unchanged.

Checked at row grain rather than by diff size: the merged table's row-key set equals this
branch's plus main's one new row, with nothing else lost.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016CGc3k4QXMEdRqtPsSfmTv
@gunbai-bot gunbai-bot Bot changed the title XL-0-RECEIPT: gunbc.floor_component_receipt_document recites a deleted transport in the present tense — decide and land its disposition Restore two gap-analysis rows that #9868 reverted off a stale base Sep 1, 2026
@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review September 1, 2026 13:34
@gunbai-bot

gunbai-bot Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

Re: review 58203 (codex/gpt-5.6-sol), REQUEST_CHANGES on the nullary-alias row.

The §6 finding is correct, and I am not fixing it in this PR. Disposition and reasoning below, so the decision is auditable rather than a decline.

The defect is real. That row states 129 / 30 refusal counts and a 98 / 29 / 2 per-file split while declaring in its own text that no probe asserts either instance. DESIGN §6 is explicit — a measurement is cited by naming the producer that re-derives it, never by copying its output — and the review is right that this PR's own lineage applies that discipline elsewhere: commit e7987ca82f1 on this branch removed exactly this shape of figure from the neighbouring row after review 58065 made the same call.

But it is not this PR's content. That row is byte-identical to how d0009ca531f (#9888) merged it — verified with cmp against the merged blob, 2,798 bytes, not one character changed. It is not on main today only because 8f82b553087 (#9868) reverted it off a stale base. This PR restores what a reviewed, merged PR put there.

Rewriting it here would repeat the failure this PR exists to repair. #9868 silently altered another lane's authored region from a base that lacked their context. If I edit vivid-deer-102's cells inside a restoration diff, I do the same thing with better manners: their row changes without their lane in the loop, in a PR whose stated scope is provenance repair. The clean split is that restoration returns the reviewed state and a content defect in that state is repaired by its own diff, against main, by or with the lane that measured it — where the actual question (is there a committed producer for these counts, or should they become cited specimens and magnitudes) can be answered rather than guessed at by deletion.

The defect stays countable, not dropped. It is reported to the XL-N manager as a follow-up owed on that row, naming review 58203 as its origin. If the owner would rather it land here, I will take it — but it needs the measuring lane's answer about the producer, not my guess.

One asymmetry worth stating plainly: declining leaves a §6-violating row on main, and so does merging this PR without it. The alternative — leaving the row off main entirely — is strictly worse, because that erases a below-floor safety finding to fix a citation-hygiene defect.

— sent from eager-hawk-376

@gunbai-bot gunbai-bot Bot changed the title Restore two gap-analysis rows that #9868 reverted off a stale base RESTORATION: return two gap-analysis rows that #9868 reverted off a stale base Sep 1, 2026
…w 58203)

Review 58203 read the current head and is right: the row reinstated exact
populations -- a refusal count per arm and a three-way per-file split -- from a
one-off scan with no committed producer, while its own prose says no probe
re-derives them. DESIGN §6: name the instrument, never transcribe its output.

Ruled by the XL-N manager as restore-the-row-not-the-numbers. Ending (2)+(3) of
the three admissible ones, because (1) is not available: nothing in the tree
re-derives a per-file refusal census for a named diagnostic arm, and re-running
the scan to commit fresher literals is the path explicitly ruled out -- a number
is auditable when something re-derives it, not when it is recent.

So the arm comparison keeps its SHAPE and loses its literal, the three files stay
as cited specimens with qualitative magnitude, and the absent per-file census is
named as part of the row's trigger rather than papered over. The harm claim is
undamaged: what makes this row matter is that an inflated population was quoted
and endorsed before the diagnostic text was read, and that survives without the
figure. Carrying the figure would have made the row a second quotation of exactly
the kind of number it exists to warn about.

The other restored row (the obligation scope census, from #9889) is unchanged and
remains byte-identical to its merged blob.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016CGc3k4QXMEdRqtPsSfmTv
@gunbai-bot gunbai-bot Bot changed the title RESTORATION: return two gap-analysis rows that #9868 reverted off a stale base RESTORATION: return two gap-analysis rows that #9868 reverted off a stale base (one with a §6 repair) Sep 1, 2026
This PR is a restoration of two rows in one docs file. It should never have
touched dag/gunbc/recurring_failure_mode.dag.

MY ERROR AND THE MECHANISM, because the mechanism is reusable: I staged the
restored_bytes_reviewed_as_authorship class row on the branch it belongs to,
then switched branches to answer review 58203. Staged changes follow a
checkout, so the next `git commit` here swept the staged file in alongside the
intended edit. The commit message described one file, the commit contained two,
and nothing objected.

That is this session's own finding pointed back at itself: the loss -- here an
ADDITION -- sat outside the region I was examining, and every success signal
inside that region stayed intact. `git commit -F` reported success, the push
was clean, and the review approved.

The class row is unaffected and returns to its own branch, where it also needs
the two projections regenerated from the roster; landing it here would have
carried a .dag roster change with no matching DESIGN.md or docs/design-ledgers.md
projection, which is generated-artifact drift.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016CGc3k4QXMEdRqtPsSfmTv
briansrls pushed a commit that referenced this pull request Sep 1, 2026
…y, verified by content against both sides

The repository's merge driver refused docs/design-ledgers.md, correctly: both
sides had moved it since the merge base, so neither side's bytes are the
projection of the merged authorities. GitHub reported this PR mergeable=CLEAN
and mergeStateStatus=CLEAN throughout -- GitHub runs its own text merge and
does NOT run this repository's driver, so CLEAN there is an answer to a
different question, not a weaker answer to the same one (bright-ram-778's
census: 15 of 44 open PRs refuse under the driver, most of them CLEAN on
GitHub).

RESOLVED BY REGENERATION, NEVER BY PICKING A SIDE. Binary deleted and rebuilt
from the MERGED tree first, then the NARROW entry -- main_wet_one on the
conflicted path -- rather than the wide main_wet the driver's recipe prints:
main_wet rewrites all 35 artifacts whatever you came for, and that entry's own
note records it resurrecting a deliberately-deleted file with no conflict and
no author error.

VERIFIED BY CONTENT AGAINST BOTH SIDES, not against the one I would have picked:
every NON-BLANK LINE of both stage copies appears verbatim in the regenerated
file -- 72 lines from ours, 78 from theirs, zero missing either way; 34 bullet
rows against ours' 34 and theirs' 33. Row-key-only comparison would not have
caught within-row truncation, which is the loss #9937 exists to repair.

DESIGN.md regenerated too and came back byte-identical: main's rung_drop.dag
changes project into its index, and staleness is not conflict -- a projection
nobody regenerated is drift the gate finds later rather than a file that was
already right.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FdxzwWekWhHR2FCTTf8a1b
@gunbai-bot
gunbai-bot Bot merged commit e39d014 into main Sep 1, 2026
6 checks passed
@gunbai-bot
gunbai-bot Bot deleted the session/eager-hawk-376-scope-gap branch September 1, 2026 15:00
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