Skip to content

Delete the derived-generator-input arm: #10856 fixed the root, so it classifies a delta that no longer occurs - #10889

Merged
briansrls merged 2 commits into
mainfrom
revert/derived-binding-classification-arm
Sep 9, 2026
Merged

briansrls merged 2 commits into
mainfrom
revert/derived-binding-classification-arm

Conversation

@gunbai-bot

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

Copy link
Copy Markdown
Contributor

DO NOT MERGE WITHOUT THE OPERATOR. This reverts a merge the operator made. It is opened so the finding and its evidence survive in a durable place; landing it is theirs.

What this deletes

#10871 (d2559c36e3) added DerivedGeneratorInputResolution: an auto-admission for a 0 -> 1 binding on the derived failure-mode roster whose every candidate is a module of the generator's declared input directory.

That delta no longer occurs, and it was already gone when the arm merged.

The root was fixed first

#10856 (aba7939b54, 2026-09-08T18:51:35-04:00) fixed the cause. Its own doc block states the mechanism:

roster.dag is gitignored and written on the read path, so the diff can never name it — and carrying it made the HEAD's roster stand as the base's … the roster's base and head source, which were THE SAME BYTES, so an ordinary append read as not locally authored and classified NewPoolCoincidenceResolution.

With the base side derived from the base tree's row membership, an ordinary append produces no binding delta at all.

#10871 merged at 23:19:18 — four and a half hours later — classifying the symptom.

Measured

Three floor runs, two branches, all on base 34800395b1:

DerivedGeneratorInputResolution NewPoolCoincidenceResolution deltas
#10842 abf30e7fb0 0 0 2, membership only, ADMITTED
#10842 631cd3bbf0 0 0 2, membership only, ADMITTED
#10710 1ce4fe1eac 0 0 2, membership only, ADMITTED

deltas went 4 → 2 on #10710. There are no binding deltas at all.

A fourth run, on a base that still HAS the arm

#10892 appends one failure-mode row — modules_added=1, exactly the change this arm was built to admit — against base fc464baf92, which contains the arm:

namespace-wave-admission base=fc464baf92 … modules_added=1
ExplicitlyEvaluatedZeroDelta membership …roster -> …mechanism_outlives_the_population_it_was_built_for
ADMITTED — every delta is auto-admitted or named by a transition admission
DerivedGeneratorInputResolution: 0

The arm is present and inert on the precise change it exists for. This is the discriminating observation the three earlier runs only implied: they showed the delta absent, this shows the arm loaded and silent while the append it was written for sails through on membership alone.

Three DESIGN readings, same direction

  • §3 — with the root fix landed, the symptom classifier is a second structure answering one question, and the surviving one is an attractor: nearby questions keep getting answered in its vocabulary.
  • §3c — its only consumers were the two fixtures shipped with it. Dangling.
  • §5 — a populationless arm that widens what a required gate auto-admits can never go red, and will be cited as coverage of a class it never sees.

The deletion is the census. If a real delta of that shape exists, the gate refuses and names it — the evidence the arm never had.

Why no regression probe is added

The fair worry is that the root fix could regress with nothing to catch it. #10856 already enrolled that evidence: the_base_side_is_the_base_listing_not_the_head_directory and a_base_tree_with_no_row_files_has_no_roster_module_rather_than_an_empty_one, both passing on this branch. A second probe would fork existing evidence (§3).

What is true — and is a pre-existing declared drop, not this change's to repair — is that those are #[cfg(test)] under repo_self_test_command, which no CI step runs (gunbc.rung_drop rust_unit_tests_off_the_merge_path). The evidence exists at rung 2 and does not execute on the merge path. That gap is identical with or without this revert. The arm did not close it, because an auto-admission cannot be evidence of anything.

How this got in

The arm was reviewed four times and approved. Every reviewer — and the manager, and me — reasoned from CI evidence bound to base 788013c849, which predates #10856. The review process did not fail to check whether the arm was correct. It failed to ask whether the arm was still needed.

Mechanics

Exact inverse of d2559c36e3 via git revert; nothing has touched these files since it landed, so this is not a hand-reconstruction. 50 wall integration tests pass; #10856's own probes pass.

Correction (review 62904). The first push was not the exact inverse it claimed: git add -A swept in src/v2/test/claim/modules_under_container_test.dag, untracked residue from the closed #10836, whose subject modules_under_container is defined nowhere in the tree. Removed. The claim was the worse half of the defect — "exact inverse" was checkable and false, and a reader who trusted it would not have looked, which is the same shape as the arm this branch deletes. It is now verifiable:

git diff --stat main..HEAD                      # six files, only the arm
git diff d2559c36e3^ HEAD -- <the six files>    # empty: byte-identical to pre-arm

🤖 Generated with Claude Code

https://claude.ai/code/session_01GwvzQ3SQoWWDgHkAeffMeF

Brian Searls and others added 2 commits September 9, 2026 05:25
…classifies a delta that no longer occurs

#10871 auto-admits a `0 -> 1` binding on the derived failure-mode roster whose
every candidate is a module of the generator's declared input directory. That
delta no longer exists, and it was already gone when the arm merged.

#10856 (aba7939, 2026-09-08T18:51:35-04:00) fixed the ROOT. Its own doc block
states the mechanism: `roster.dag` is gitignored and written on the read path, so
a baseline reconstructed by dropping only diff-TOUCHED paths inherited the HEAD's
roster bytes as the BASE's. Base and head were the same bytes, so an ordinary
append read as not-locally-authored and classified NewPoolCoincidenceResolution.
With the base side derived from the base tree's row membership, an append
produces no binding delta at all.

#10871 (d2559c3) merged at 23:19:18 -- four and a half hours later --
classifying that symptom.

MEASURED, THREE RUNS ACROSS TWO BRANCHES, all on base 3480039:
DerivedGeneratorInputResolution count 0 in every floor log; NewPoolCoincidence-
Resolution count 0; no binding deltas at all. Both ledger PRs adjudicated on
membership alone.

Three DESIGN readings, all pointing the same way. Section 3: with the root fix
landed, the symptom classifier is a second structure answering one question, and
the surviving one is an attractor. Section 3c: its only consumers were the two
fixtures shipped with it. Section 5: a populationless arm that WIDENS what a
required gate auto-admits cannot go red, and will be cited as coverage of a class
it never sees.

The deletion is the census. If a real delta of that shape exists, the gate refuses
and names it -- which is the evidence the arm never had.

NO REGRESSION PROBE IS ADDED, AND THAT IS ARGUED RATHER THAN OMITTED. The obvious
worry is that the root fix could regress with nothing to catch it. #10856 already
enrolled that evidence: `the_base_side_is_the_base_listing_not_the_head_directory`
and `a_base_tree_with_no_row_files_has_no_roster_module_rather_than_an_empty_one`
in `derived_row_roster`, both passing here. A second probe would fork existing
evidence. What is true, and is a pre-existing declared drop rather than this
change's to repair, is that those are `#[cfg(test)]` under `repo_self_test_command`,
which no CI step runs -- `gunbc.rung_drop` `rust_unit_tests_off_the_merge_path`.
The evidence exists at rung 2 and does not execute on the merge path. That gap is
the same with or without this revert; the arm did not close it, because an
auto-admission cannot be evidence of anything.

Reverts #10871 (d2559c3) in full. Nothing has touched these files since, so
this is the exact inverse rather than a hand-reconstruction. 50 wall tests pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GwvzQ3SQoWWDgHkAeffMeF
Review 62904 found `src/v2/test/claim/modules_under_container_test.dag` in a
commit whose own message calls itself the exact inverse of d2559c3. Verified,
all three ways it stated: the file is absent from origin/main, a clean revert of
that commit touches six files and this is a seventh, and the subject it imports --
`modules_under_container` -- is defined nowhere in the tree. It is residue from
the CLOSED #10836, whose FreeMonoid-returning version was withdrawn; it survived
as an untracked file in this worktree and I swept it in with `git add -A`.

So the commit added a test over a subject that does not exist (DESIGN section 6,
a new artifact with no final consumer) inside an operator-gated revert of a
required-gate arm, which is the last place unrelated work should ride along.

The claim was the worse half of the defect. "Exact inverse" was checkable and
false, and a reader who trusted it would not have looked -- the same shape as the
arm this branch deletes, where four reviewers checked that a thing was correct
and none checked that it was still needed. The revert IS a clean `git revert` of
d2559c3; the message asserted more than the diff delivered.

The six arm files are untouched by this commit and remain byte-for-byte the
inverse. The file is preserved outside the repo, not lost.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GwvzQ3SQoWWDgHkAeffMeF
@briansrls
briansrls merged commit cb203f7 into main Sep 9, 2026
4 checks passed
@briansrls
briansrls deleted the revert/derived-binding-classification-arm branch September 9, 2026 06:33
gunbai-bot Bot pushed a commit that referenced this pull request Sep 9, 2026
OPERATOR RULING REVERSED (2026-09-09), after review 5155887943 supplied a
DESIGN §3 reading that neither the earlier ruling nor my framing of it had.
The correction is mine to own: the three scopings I put to the operator were
all deletion-scoped, so the choice was made from a menu that never contained
the right option.

WHY THE DELETION WAS WRONG, from the passage rather than from preference. The
delete-first root here is the obsolete `func` DECLARATION FORM. This wall is
not another spelling of that fact -- it asks an independent safety question,
whether subject membership or occurrence binding changed without adjudication,
and its refusal WAS the deletion census doing its job. §3 says to fix a
surfaced dependent FORWARD from first principles, not to delete the question
it was enforcing. Two clauses decide it: a GAP-INTOLERANT BOUNDARY -- which a
required merge wall is -- keeps the STAGED form, Y built in shadow and then one
transition; and the minimum Y must PRESERVE EVERY REQUIRED REFUSAL or it has
erased a correctness distinction rather than completed the replacement.
Deleting with no Y did precisely that.

MY EARLIER ARGUMENT ANSWERED THE WRONG CARVE-OUT. I argued that freezing
preserves the refusal and so the carve-out could not apply. That addresses the
FROZEN carve-out; the applicable one is the STAGED carve-out, where preserving
the refusal is the REASON the wall holds the cut rather than an objection to it.

WHAT IS RESTORED, AND FROM WHERE. The module, its host realization and its
tests come from origin/main rather than from the deleted copy, so main's later
work on the wall survives -- including the #10871/#10889 disposition churn.
Roster membership, the executor phase, the interlock milestone, the status
row, the seed-growth justification and the two guarantee-stall rows are the
inverse of the deleting commit. `head_index` returns with the phase that was
its only consumer. The rung drop is DELETED rather than retired: nothing
dropped, so there is no drop to declare.

THE FAILURE-MODE ROW STAYS AND CHANGES ROLE. It is now a prerequisite rather
than a postmortem: the class is unchanged, its next-rung trigger is unchanged,
and it travels with the repair instead of being resolved by removing its only
specimen. §4b(4) keeps it enrolled as regression evidence after the climb.

CONSEQUENCE, STATED RATHER THAN DISCOVERED IN CI: with the wall restored this
branch's own wave-admission phase now refuses, because the grammar change is
exactly what it cannot read across revisions. That is the staged carve-out
working. The `func` cut lands only after revision-relative acquisition does.

`cargo clippy --all-targets -- -D warnings` exit 0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YZZi3QsDvibJqy8k8PwzZ9
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