Skip to content

unpartitioned tail - #8368

Closed
briansrls wants to merge 60 commits into
mainfrom
ibex/tail-partition
Closed

briansrls wants to merge 60 commits into
mainfrom
ibex/tail-partition

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Auto-opened by session-dashboard for session smart-ibex-716.
Pushing to ibex/tail-partition advances this PR.

Worker attestation

Before flipping this PR to ready for review, confirm each item:

  • Title describes the change (not the session id or branch).
  • PR body summarises what and why (replace the TODO below).
  • Tests run: name the command (e.g. npm test, cargo test) and the result.
  • If this closes a work item, the body contains a Closes #N directive.
  • No commits on this branch are surprises (no fork/cherry-pick I did not make).
  • No secrets / credentials / large binaries staged.

Summary

TODO: replace this paragraph with one or two sentences naming the change and its motivation. Reviewers read this first.

Test plan

  • TODO: list the commands that ran (or "no tests changed; relied on CI") and the outcome.

gunbc-ci-auto-heal and others added 30 commits August 16, 2026 21:24
The 1/27 milestone was mis-stated. Modules already emit Rust — 20 of 21 emit
24-133 files — and then fail cargo build. The milestone is emitted Rust that
compiles, not emission.

Adds docs/plans/self-host-cargo-refusal-root-partition.md as one stable place
for smart-ram-730 and gentle-dove-833 to agree on what the wall is, carrying:
the 9,444-instance / 24-code census from the banked 2026-07-26 sweep, three
labelled hypotheses each with what would falsify it, the stale carriers that
route readers to the wrong stage, and the division of labour.

Every claim names its measurement. The hypotheses are labelled as hypotheses —
in particular the shared-floor read (05_emit at 35 source lines and 06_translate
at 4,226 produce identical histograms) is argued from counts, and the document
says so and names the text-intersection measurement that would confirm it.

Registers the doc on gunbc.doc_graph_roots at subject grain: the Band A
readiness note, the inference grounding frontier note, and the direct-door
dissolution note are the three carriers whose movement would make this
document's framing false.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FwPMTY6Myy3scaMNn33cg5
Four roots cover 36% of the wall, and the largest is not what the by-error-code
view suggested.

docs/probes/canonical_seven_cause_signature_attribution_2026-07-28.tsv already
existed and answers what section 4 was still hypothesizing: 233 cause
signatures over 2,898 diagnostics, grouped by concrete expected/found pair,
receiver + missing method, and unsatisfied trait + self type rather than by
error code. Surfaced via the side channel and verified in tree before use.

It refutes H2 — there is no single global top-three root. Grouping the
signatures gives six roots, of which:

  A  generic trait bounds not emitted   ~590  one root, five signatures
  B  primitive representation fork      ~196  DESIGN's open thread, with counts
  C  Optional collapses to ()           ~169  mechanism established by gentle-dove-833
  D  generic argument count              ~76

Root A is the largest and is mechanically uniform: emit fn f<T> whose body
clones a T and rustc refuses at every use site. Its own diagnostic text names
it — "exists but its trait bounds were not satisfied".

Also records the prior art in docs/probes/ so the next reader does not
re-derive it: seven existing per-code diagnosis and census documents, one per
root area.

Ownership assigned: A to smart-ram-730, C to gentle-dove-833 (whose emitter is
already instrumented for it). B and D unclaimed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FwPMTY6Myy3scaMNn33cg5
The cause-signature TSV is dated 2026-07-28. gunbc#7691 — "Propagate item
Clone bounds as a fixpoint over the declared-type graph" — landed 2026-08-02
and wires clone-bound emission into emit_type_def_from_connective, which is
Root A's exact site. A fix targeting the root landed five days after the
measurement that sized it, so ~590 is not a live number and Root A's real size
is unknown.

Two further corrections fall out. The July E0277 census's central claim, that
the struct-declaration path renders generic params with no Clone-bound logic
at all, is stale — that path now branches into clone-bound emission. And what
#7691 emits is a struct-level T: Clone, which is the shape review 43338 argued
against as over-constraint; selective rather than blanket, but type-level
rather than per-derive-impl, and whether that is correct-enough or is itself
producing failures is unmeasured.

Root A is halted pending a live cause breakdown. This is the exact
receipt-staleness failure this document was opened to stop — three carriers
had already misrouted readers by naming a superseded blocker — caught one step
before it produced a fix aimed at a root that may already be closed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FwPMTY6Myy3scaMNn33cg5
Three checks on the approved plan, two of which came back better than expected
and one of which sharpens the risk.

The fork is declared, not hidden: v1.trait_derive_emit
trait_derive_emit_item_clone_bound_contract_fork_note is a counted
model-realization fork saying the v2 carrier "has no consumer in v1 seed emit
today" and that v1's rule is "an approximation of cited upstream requirements
pending v2 emitter subsumption at that grain". Its dissolution clause IS the
wire-through this lane proposed, so the plan executes a registered dissolution.

But that note also warns the dissolution "re-grounds onto upstream impl
requirements, not a mechanical lift of the same predicate — the two can
disagree at the edges", and the disagreement now has a name: v1's rule is
item/type-level while v2's contracts are per-derive-impl. The wire-through
changes the GRAIN, not just the source of truth, and the failure mode to guard
is unioning per-derive requirements back onto the type declaration — which
would reproduce v1's over-constraint while claiming v2's authority. Records the
discriminating control: a type whose Debug impl needs Clone but whose
construction does not.

No bootstrap cycle, checked rather than assumed: 05_emit_rust.dag already
references v2.std.compilers.target_model and v2.extdeps.languages.rust, and
eight other v1 modules reference v2, so the edge exists today.

Ownership is by generated file, not entry module: the floor files appear in
every closure, so a shared-file failure belongs to that file's root owner, not
to the lane that happened to compile it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FwPMTY6Myy3scaMNn33cg5
Operator ruling 2026-08-16: delete anything not actively derived. A dated
snapshot that nothing regenerates is the same attractor as the frontier
roster — readers treat it as current, and three lanes were misrouted this week
by exactly that.

Deletes docs/probes/*.tsv (41 files).

The deletion is the census. One real consumer refused:
dissolution_census_a_projection_witness_test read the TSV as canonical
observation and asserted a generated summary agreed with it. Its subject is
retired, so it is retired with it (DESIGN 3 step 6), together with the
summary JSON it compared against and the Python projector that produced it —
keeping a projection whose source is gone would leave a witness that can only
ever pass vacuously or fail.

Everything else that named a TSV was prose: 32 pointers across 15 files. The
corpus ones (7 across four .dag and one .rs) are repointed to name the
deletion rather than silently dropped, because the claims in those notes were
BASED on those receipts and a reader deserves to know the evidence is gone
rather than find a citation to nothing. Corpus dangling references: 0.

Not in scope, reported rather than taken: 11 markdown documents still cite
deleted TSVs, and the docs/probes/*.md diagnosis documents are arguably the
same class as the TSVs themselves — dated snapshots nothing regenerates,
several bound in doc_graph_roots. That is a wider cut than "delete the TSVs"
and is the operator's call, not mine.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FwPMTY6Myy3scaMNn33cg5
Root A: the derive trigger is struct-only (v1_clone_bound_seed_for_item opens
if is_coproduct_type { round }), so a generic coproduct with a container field
earns no Clone bound from either trigger — the well-formedness trigger cannot
reach it because im::Vector carries no declaration bound. Outcome<T> is exactly
that shape. An item-level bound structurally cannot close it; the requirement
is per-derive-impl, which is what v2's cited contracts encode.

Live size from gentle-dove-833's run today: ~105 in one module against July's
~84/module, so #7691 did not reach these sites.

Adds section 9, the working agreements, so three newly dispatched lanes inherit
today's paid-for lessons rather than rediscovering them: the deleted TSVs and
what that means for every number here, the working instrument and the dead one,
ownership by generated file, the generated-emitter authority, per-worktree
before/after, and the null-control lesson from the refuted Optional fix.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FwPMTY6Myy3scaMNn33cg5
Raised by the side channel, verified against
docs/probes/e0599_phase_b0_emitter_decision_2026-07-29.md.

The five signatures I summed to 590 came partly from the July E0599 diagnosis
(whose own 590 was 590 OF 635 E0599 diagnostics, including shapes I did not
list) and partly from the separately counted 181 E0277 T: Clone. Adding them
double-counted two overlapping populations.

More decisively, that E0599 population was already split by emitter decision:
CloneSharedRequirement 369 (61.5%), TargetApiRequirement 168 (28%),
OwnedDeconstructionRequirement 63 (10.5%). So Root A as defined here spans two
lanes. The derive-macro supplemental-bound mechanism I root-caused maps to the
168; the larger 369 is clones the emitter SYNTHESISED at sharing seams, which
belongs to the emitter-ownership-defork thread DESIGN already carries.

Carries forward the two warnings that census attaches to its own numbers, since
stripping them is how a receipt becomes a plan: 369 is not a predicted
burn-down (the census records which arm is associated with a site and does not
execute the ownership verdict), and CloneSharedRequirement means only that the
emitter inserted a clone, never that it can be removed. Including the withdrawn
Rc::make_mut rationale — make_mut is declared where T: Clone and so requires
the very bound being counted.

The mechanism stands; the sizing and the boundary do not. Work against the
live ~105 from today's 05_emit run, not 590.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FwPMTY6Myy3scaMNn33cg5
Two lanes hit the same underlying fact from different roots.

Root B is root-caused with an executed receipt: rust_corpus_repr picks the
whole corpus's numeric representation from corpus_has_v1_seed_source_indices,
which is a PATH SUBSTRING test over the closure's source keys. HostNative
grounds Nat/Int to i64; FaithfulFreeMonoid does not. A seed closure contains
src/v1 paths, a pure-v2 closure does not, so the seed compiles and every
pure-v2 closure refuses from one flag. DESIGN section 4 rules a heuristic
never necessary in a closed system, and section 3 rules that paths are
discriminators, not gospel.

Root A shows the same shape: 06_translate's FIRST error today is the emitter
refusing, not rustc. v1_type_expr_clone_undecided_head fires because a declared
parameter list is not readable in this closure. That arm's own note ends
"Dead in corpus as of this landing". It is not dead.

Both mechanisms branch on closure content, and both take the unfavourable
branch exactly when the closure is pure-v2. So the wall may be substantially
that the emitter has never been exercised on a seed-free closure, rather than a
set of independent emission defects. Recorded as a hypothesis with two
confirmed instances and its falsifier, not as a finding.

Also records two facts that cut against tidy stories: 06_translate measured 671
coded errors today against July's 364, so the wall GREW with no cause
attributed; and Bool will not dissolve with a repr fix because there are two
Bool authorities and the host bridge is hardcoded to reject the std.logic one,
a section 3 fork sitting above the representation choice.

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

Writes the Root B result into the shared surface directly rather than sending it for
transcription. Supersedes the July sizing table with the mechanism plus a before/after
receipt, answers both questions the partition asked of this root (the double-Rc row is
one alias hop, not a second defect; the Bool half is a separate section 3 fork that
survives a repr fix), and records the finding underneath it: RustCorpusRepr fuses the
primitive realization choice with the use-line synthesis choice, and a pure-v2 closure
needs opposite arms of each.

Also answers the section 10 meta-root question with a third CANDIDATE (not an
instance -- unexecuted), one explicit non-instance, and evidence cutting both ways.
…iguity sentinel ignored at the read), plus §9 denominator guidance

The emitter's variant_to_enum map records an ambiguity sentinel that
is_value_variant_type_arg then ignores, so an ambiguously-owned name
collapses to () — and ambiguity is a function of closure membership.
Measured -158 E0308 / -139 total on 05_emit.dag; retracts this lane's
earlier inference-side explanation of the same population.

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

Measured by gentle-dove-833, verified in tree here. The strongest of the three
because nobody wrote an if-statement about closures: it is emergent from a fold.

derive_variant_to_enum folds the closure's type summaries into variant name to
owning enum, and on collision inserts the EMPTY STRING as an ambiguity
sentinel. is_value_variant_type_arg then reads that map with map_contains_key,
which ignores the value. So an ambiguous name tests positive as a value variant
and the type argument collapses to unit. The map's value carries three states —
absent, a real owner, and ambiguous — and the consumer collapses every present
case into one. Whether a name is ambiguous depends on which modules are in the
closure, so this is a closure-shape branch nobody authored as one.

The two dominant collapsing names are exactly the two carrying the sentinel:
Absent (91) and Optional (68), each declared by two different modules —
ordinary section 3 nickname collisions, invisible until the emitter reads them.

Effect on one entry: 666 coded errors to 527, E0308 286 to 128, with 25 E0425
appearing. Those 25 are honest residue, not regression: a type argument
genuinely spelled Absent now renders as a nonexistent Rust type instead of
being masked by a fabricated unit.

Records gentle-dove-833's retraction of their own Root C explanation, since
site D shows a correctly spelled Optional collapses too, and the fix shape they
argue for: rename the colliding variants to empty the ambiguous population, and
land the guard as a typed refusal rather than the non-empty-owner test the
measurement used.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FwPMTY6Myy3scaMNn33cg5
gentle-dove-833 and I both wrote up the variant-ambiguity-sentinel finding, so
the shared doc briefly carried two accounts of one mechanism — the dual
authority this surface exists to prevent, produced by the surface's own
authors within minutes of each other.

Theirs is the authority: they measured it. Mine is reduced to what it
independently adds — that the mechanism was verified in tree here, and that it
is DESIGN's state-space conflation by name (the map's value carries absent / a
real owner / ambiguous, and the consumer collapses every present case into
one), which is what makes it a closure-shape branch nobody authored as one.

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

My section 10 candidate was written as 'type_leaf_is_unbound_in_closure_scope returns
true on Absent', which reads as the corpus name Absent. It is not: that Absent is the
match arm of an Option returned by lookup_type_by_name, i.e. a lookup MISS in the
emitter's own control flow.

gentle-dove-833's mechanism does fire on the corpus variant name Absent, declared by
v2.std.optional and dag/std/upsert_decision. So the two do not share a name and the
coincidence was an artifact of this document, not of the tree. Corrects both the
candidate's description and the relation paragraph built on it.

An interaction is still not excluded -- both are closure-membership facts -- but no
experiment should be designed around the same-name premise.
…tected

Instrumented the sentinel insert per closure: seed and pure-v2 each carry
6 ambiguous variant names, sharing Absent. So the branch is closure-shaped
but does not correlate seed-favourable/v2-unfavourable — which is the
falsifier §10 names for itself. Also narrows the finding: six sibling read
sites already guard the sentinel; only line 705 omits it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
gentle-dove-833 instrumented the sentinel insert and dumped the ambiguous name
set per closure under identical source roots. The seed closure carries six
ambiguous names too, including the same Absent, and the emitter collapses them
by the same predicate. So instance 3 is closure-shaped but does NOT correlate
seed-versus-v2 — which is exactly the falsifier section 10 named for itself.

The meta-root is restated narrower: several independent decisions are keyed off
under-modeled closure facts. That is what the instances share. The direction I
asserted — that the seed is the exercised configuration and pure-v2 the
untested one — holds for Root B's path substring, which really is
seed-versus-v2, and does not hold here.

Also retracts my own framing. I called this a state-space conflation and put
that in the doc under my name. Every other consumer of the map already guards
the sentinel with an explicit non-empty check; only the map_contains_key site
does not, because that call cannot see the value. It is one consumer diverging
from a convention six siblings follow, not a design-wide gap — which makes the
fix smaller and more obviously right. The section 2 residue stands: a guard
hand-repeated at six sites is what let the seventh omit it.

Cancels the three-run overlap partition with a receipt: eager-deer-389
retracted the shared-name premise, so the two mechanisms never shared a subject.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FwPMTY6Myy3scaMNn33cg5
I wrote "not restated here" and then restated the per-closure ambiguous name
tables that gentle-dove-833's own entry already carries — the same duplication
I had just collapsed and just asked them to avoid. Mine now states the verdict
(the falsifier fired, no favourable seed arm) and points at their entry for the
data and method.

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

Re-denominates my forced-flip table the way section 11's census counts, so the two can
be reconciled rather than silently disagreeing by 4x. The algebra carrier in 06_translate
is 84 errors / 74 distinct sites at baseline, 0 forced. Adds the two residues at the same
grain: 125 Rc<i64> sites appear, and unresolved-name sites go 19 -> 110 -- the latter being
execution evidence for the K warning that forcing the flag disables the use-line walk.
…he name Absent

Executed rather than left as a lead I had published. Instrumenting the miss arm of
type_leaf_is_unbound_in_closure_scope on a pure-v2 05_emit closure gives 34 firings,
28 of them on the name Absent.

That reopens the overlap with gentle-dove-833 on the premise they originally proposed
and I dismissed: a VARIANT name arriving at a type-name lookup, with their mechanism and
mine as two consumers of it. My retraction of the same-name MECHANISM still stands -- the
Absent in my match is an Option arm -- but their substantive hypothesis was right and I
stood their experiment down for the wrong reason.

Also records the consequence for identity-keying: resolved identity disambiguates two
same-named TYPES and does not obviously repair a VARIANT name in a type position, so the
fix must not be sized as if it covers both.
…ing law, and Root A under challenge

Sections 1-11 were authored in discovery order and several early claims are
superseded later in the same document. Section 12 states where the program
actually stands, cited to the sections that measured it, and does three things
the prior sections cannot do for themselves.

It states the bound as the headline rather than the mechanism: name-keying is
real, 253 attributable sites, and NOT the wall. Two structural confirmations
arrived before anyone measured the negative space, and I record that I was one
report away from generalizing from them.

It collects the five claims falsified today in one table, including two authors
correcting their own published numbers and my own Root A diagnosis, which I am
withdrawing pending live signatures rather than defending.

And it makes the masking law explicit as a standing rule: every fix so far
fires in front of a population it was hiding, so figures are net, never gross,
and the unmasked set is named before it appears.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FwPMTY6Myy3scaMNn33cg5
Supersedes section 12.5, which withdrew A pending live signatures.

The signatures landed and dissolved half my worry: A's E0599 dominance is a
reporting-position artifact, not method resolution. rustc reports an unsatisfied
bound as E0277 at a coercion site and E0599 at a call site, and says 'no method'
for a bare type parameter because an unbounded T has none. 133 of 142 sites are
one mechanism; the 9 concrete-receiver sites are misfiled and belong with Nat.

The other worry stands and sharpens into the actual cause. One map is read by
two consumers asking different questions -- does this declaration print its own
bound, and does naming someone else's G<T> oblige the caller to bound T. The
seed skips coproducts, which is correct for the first question because derive
supplies a per-impl bound, and wrong for the second because that per-impl bound
is precisely what a consumer must be told about. Outcome<T> and the whole
CacheLookupResult chain are read in tree as specimens.

So my published root cause was right about the location and wrong about the
reason, and the difference changes the fix: deleting the skip would over-bound
enum declarations corpus-wide, because the enum decl site already routes through
the same function. The construction is a separate seeded record for
well-formedness, strictly additive.

Recorded with its falsifier outstanding and no executed before/after. Nothing
in section 13 is a receipt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FwPMTY6Myy3scaMNn33cg5
Brian Searls and others added 24 commits August 16, 2026 23:58
…ules

Section 14.6: smart-ibex walked each A site to its enclosing item. 104 of 121
are fn signatures against 6 type declarations, so my refuted fix was aimed at
5% of its own population -- true independently of the witnesses that killed it.

The 13 partially-bounded signatures are the real finding. The mechanism bounds
some parameters of a signature and misses others, and the missed one always
flows through a carrier with no bound to propagate. A wholesale failure fits
half a dozen causes; a partial failure along exactly that line fits one, and it
was produced from outside the fixpoint by someone who could not read the
predicates. Their three-outcome prediction is recorded as A's acceptance test
before any fix exists.

That also downgrades my own objection from a blocker to a measurement: the
mechanism already over-bounds in this shape for carriers that do have bounds,
so the open question is how many fns name these carriers without cloning them.
Countable, not decided.

Section 15 collects the measurement rules, each derived from a measurement and
each having already caught a wrong number: state M in the figure not a footnote;
across a wave boundary there is no honest delta at all; net never gross with the
unmasked population named in advance. Plus the two testing traps and the
diagnostic instruction that a reader looking for a wrong line will not find one.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FwPMTY6Myy3scaMNn33cg5
…mpossible one; R1 is symmetric at call sites
…y v1, and record the confirmed field/signature renderer split
…rives demand serde over closure-bearing values
…rged branch

doc_graph_has_no_dangling_links refused three witnesses on one edge. The
receipt is real and is authored on gunbc#8337; it is simply not on this
branch, so the link had no target here. Named with its path and its carrying
PR, which is what a reader needs and what the doc graph can accept.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FwPMTY6Myy3scaMNn33cg5
…C; delete the aggregates, withdraw the dispatch-prediction claim, fix A to 133, renumber past the heading collision
…5% to 286/15.3%

Their 11.10 amendment counts T7, K, R5 and D-Witness into the attributable
population. My entry-point section kept the pre-amendment figure, so the
document disagreed with itself about a number I had asked people to carry.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FwPMTY6Myy3scaMNn33cg5
…ped, 167 derive-shaped on one underivable declaration
…ction while the front door kept serving it

smart-ibex withdrew B1's 509 as one root (keyword-assigned; at most 146
repr-shaped) and fixed their own section 11. Two rows in my sections still
carried it, and the second is the dispatch table, so it was telling Root B's
owner their target is 509. Struck rather than rewritten, and the row now also
carries eager-deer's own narrowing: a repr-shaped site whose type has a
checkpoint row is outside the population, because the table is keyed on the
bare name and bypasses declaration identity.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FwPMTY6Myy3scaMNn33cg5
…ead of the plan it cites

main carries docs/probes/root_b_primitive_repr_fork_2026-08-16.md (gunbc#8337)
and produces both doc-graph defects from that one file: its only link points at
this plan, which is not on main, and nothing on main references the probe, so it
is unreachable. Five witness rows fail — two defects asserted from two files plus
the conjunction — and every PR in the subtree inherits them through the merge ref.

Landing this plan closes the dangling edge. The orphan needed two things, and
both are here: a typed HandAuthoredDocBind row so the probe is bound at its
subject (v1.compiler.infer rust_corpus_repr, the single Boolean the probe
measures), and the restored markdown link from the citing plan, which was
deliberately downgraded to plain text while the probe was unmerged. That
downgrade is what left the probe orphaned when it landed first — the right
sequencing is the doc and its citation in one merge, or the citing side second.

Diagnosis by stern-badger-166, who established it was not their branch four ways
and declined to green their own PR with an unrelated fix.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FwPMTY6Myy3scaMNn33cg5
…name the two that remain instead of the four that did not
@briansrls
briansrls marked this pull request as ready for review August 17, 2026 06:52
@cursor

cursor Bot commented Aug 17, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@gunbai-bot

gunbai-bot Bot commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

⚠️ DO NOT MERGE AS-IS — this reintroduces the defect that had main red an hour ago, and it does so with no conflict to warn you.

Measured, not inferred. Simulating the merge of this branch into current origin/main:

git merge-tree --write-tree origin/main origin/ibex/tail-partition
  -> tree 64792c2

slug "root_b_primitive_repr_fork_2026-08-16" in the MERGED tree:  2
  ... on origin/main today:                                       1
  ... on this branch:                                             1
conflict markers in the merged doc_graph_roots.dag:               0

Two rows with the same home: ProbeDoc and the same slug derive the same key, hand_authored_key_collision_count goes nonzero, and doc_graph_bind_identities_unique fails. That is precisely what 6a3779d442 (#8364) just removed from main.

Why nothing catches this. Both sides add a bind row, in different positions in the list, so git merges them cleanly — one plus one equals two with no conflict and no marker. The branch is individually correct (1 row) and main is individually correct (1 row); only the union is wrong. Every per-branch check passes, and the defect exists solely in the merge ref.

This is the fifth distinct cause behind the same five doc_graph row names tonight, and it is the worst of them: the previous four were at least visible in some tree someone could run the witness against. This one is invisible on both sides.

The history matters for choosing the fix. This slug already collided once: 76d64357 (#8362) bound the probe, then 8a346ec3 (#8333) bound it again — two lanes independently authoring one bind. Yours would be the third. Main currently keeps #8362's row, which carries additional_works: [rust_seed_host_numeric_alias] and the dissolution naming RustCorpusRepr's two fused axes — the condition Root B (#8357) is actually executing against.

So the correct resolution is to drop the bind row from this branch, not from main. The document is already bound; this branch does not need to bind it.

smart-ibex-716's session is archived and dashboard-message refuses it as not found, so this PR is ownerless. I am picking it up — I authored one of the two original colliding rows and I hold the fix that cleared main, so I would rather resolve it than watch it re-land. Pushing the removal plus a merge of current main shortly.

Two other overlaps with my open PRs, for the record: this branch edits src/v2/compiler/self_host/frontier_probe_survey.dag, which #8344 deletes whole (modify/delete either way — keep the deletion); and it edits docs/plans/self-host-cargo-refusal-root-partition.md §11.8 against my §12/§18.3 edits in #8367, which are disjoint sections.

— sent from smart-ram-730

…icate

This branch and main each carry ONE bind for
root_b_primitive_repr_fork_2026-08-16 and are individually correct. The merge
unions them into TWO, which re-creates the key collision 6a3779d (#8364)
just removed — and it does so with no conflict and no marker, because both
sides ADD a row at different positions in the list. One plus one equals two,
cleanly. Every per-branch check passes; the defect exists only in the union.

Measured before touching anything: merge-tree of origin/main with this branch
gives 2 rows for that slug, 0 conflict markers.

Dropped THIS branch's row and kept main's, which is #8362's: it names
rust_seed_host_numeric_alias as an additional work and its dissolution states
the condition Root B (#8357) is executing against, where this one had an empty
additional_works and a looser trigger. Same call made on #8364, same reasoning,
opposite branch.

The other six conflicts are one shape: both sides replaced a citation to a
deleted probe TSV with prose. Took main's on all six, on grammar rather than
seniority — this branch's substitution is mechanical and leaves sentences like
"Frozen receipt a probe TSV deleted 2026-08-16 ... is output, not authority",
while main's were repaired per site. A mechanical sweep over prose produces
text that parses and says nothing; that mistake was already made and corrected
once on #8333.

Verified on the merged tree: zero duplicate slugs across the whole carrier, and
every decl_name bound in it resolves.

Picked up because smart-ibex-716's session is archived and dashboard-message
refuses it as not found, leaving the PR ownerless with an approval on it.

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

gunbai-bot Bot commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Pushed bb827c477d4 — merged current main and dropped the bind row that would have re-created the duplicate.

The duplicate is gone and the resolution is verified on the merged tree, not argued:

duplicate slugs across the whole carrier:  0
every decl_name bound in it resolves:      yes

Kept main's row (#8362's) and dropped this branch's: main's names rust_seed_host_numeric_alias as an additional work and its dissolution states the condition Root B (#8357) is actually executing against, where this one had additional_works: [] and a looser trigger. Same call I made on #8364, same reasoning, opposite branch — there I deleted my own row for the same reason.

Six other conflicts, all one shape, and worth explaining rather than just resolving: both sides replaced a citation to a deleted probe TSV with prose. I took main's on all six — on grammar, not seniority. This branch's substitution is mechanical and leaves sentences like

"Frozen receipt a probe TSV deleted 2026-08-16 (operator: delete anything not actively derived) is output, not authority."

while main's were repaired per site. That exact mistake — sweeping one replacement across many prose sites and producing text that parses and says nothing — was made and corrected on #8333 a few hours ago, so the corrected form is the one that should survive.

Two remaining overlaps with my open PRs, neither of which needs action here:

Ownership: smart-ibex-716's session is archived and dashboard-message refuses it as recipient session not found, so this PR had an approval and no owner. I have taken it. The operator asked for these TSVs deleted, so it should land rather than rot — it just should not land carrying the defect it was about to reintroduce.

— sent from smart-ram-730

@briansrls briansrls closed this Aug 17, 2026
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