Skip to content

NAMESPACE XL-0B/C/D: repair-input origin roster on the v2 route - #11201

Closed
gunbai-bot[bot] wants to merge 30 commits into
mainfrom
session/sharp-owl-21
Closed

gunbai-bot[bot] wants to merge 30 commits into
mainfrom
session/sharp-owl-21

Conversation

@gunbai-bot

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

Copy link
Copy Markdown
Contributor

NAMESPACE-XL XL-0 on the v2 route. This PR lands the instrument and does not claim XL-0 is delivered — StageXL0Denominator stays NotDerivable, because on the tree the production route yields, the denominator's own class does not reach the collector.

What lands

  • v2.compiler.reference_site_collector — the mention producer v2.compiler.resolution_provenance had been missing since it was written (its only ReferenceSite constructors were five fixture rows). Per-segment spine unwrap derived from the module name; the cheap reject is the first step of v2.std.qualified_name qualified_name_from_node itself, acceptance-preserving, and both Bool spine predicates are deleted rather than left as a second authority on the same shape; unreadable roots as a typed, located, counted refusal that travels with the result.

  • std.repair_input_origin — the DeclarationRef-carrying source-declaration carrier the module's header defers to XL-0B/C, with its three departures from std.coercion TypeDeclarationProvenance stated beside the type (§3b).

  • v2.compiler.repair_input_origin_roster — the producer and its digest lines, carrying the unreadable-root refusal through the seam.

  • Carrier edits — NotDerivable with the cause stated from execution, and RepairInputOriginRosterProducer requiring a non-empty denominator over the production route so the earlier claim cannot be re-made on the same evidence.

  • v2.workflow.floor_pure_producer_share — the production-route fixture ingest enrolled warm. The probes were returning budget_interrupted / right_censored at the per-claim CPU deadline — interrupted before verdict, which is neither pass nor fail, so the lane blocked on a missing answer rather than a wrong one. The floor builds a fresh evaluation frame per claim, so module-scope data rows do not share across it and long/ cannot help a changed witness. The seam is the ingest, not the collection: that roster keeps normalize out so each claim still executes the stage it names, and these claims name the collector. Filed as the third specimen on gunbc.recurring_failure_mode.shared_precondition_re_derived_once_per_claim_frame.

What the collector sees on the production route

Measured end-to-end through the real ingest (module_roots_from_source_root_ingest → normalized_tree_roots_to_nodes), over every ingested root, and cross-checked against XL-3 and XL-4 on their own routes.

reference class reaches owning capability
bare same-module value reference, outside a call yes —
parameter reference yes —
type name in parameter position (imported or user-declared) yes —
type name in field position, even spelled bare no — cause UNVERIFIED not yet attributed: collector or tree
call argument no v2 body-lowering repair (XL-2, gunbc#11207)
callee name no v2 body-lowering repair (XL-2, gunbc#11207)
qualified / dotted reference, any position no dotted-reference capability

The last row is why XL-0 has no denominator. An import→containment denominator is made of references that cross a module boundary; a bare same-module name resolves inside its own module and contributes nothing. So the surviving population is the part XL-0 cannot use, and a non-empty site list must not be read as a working instrument.

The trigger is the cross-module capability, not the lowering repair. Body lowering restores the call rows and nothing else; the qualified row is independent of calls and would still be missing afterwards. A trigger naming less than the capability it restores is retired while the capability stays dead (§4b(3)).

"Type position" is too coarse a phrase to use here. The same bare name reaches from a parameter and does not reach from a field, so a trigger named for "type positions" would cover one class that reaches and one that does not.

The field row is reproduced on two routes, and its cause is still deliberately unattributed. The tree-side discriminator has now run: on this route the whole type Wrapper { f: T } declaration — the type name, the field name, and the field type — is findable in the ingested tree as neither an atom nor a named edge, while a parameter-type control is present. The XL-4 lane measured the same on its own fixture and route and also left the cause unverified.

Two independent reproductions raise confidence in the measurement; neither attributes it. Two hypotheses remain and no fixture here separates them: normalization drops such a declaration, or it lives in a third representation neither an atom search nor a label search reaches. That distinction decides the owner — if the declaration is absent from the tree, a collector-side trigger would never fire — so no capability is named and no trigger is attached. The dotted case is why: an absence measured through one representation looked like a tree loss and was my own exclusion.

Evidence

Every deficiency row is enrolled as a measurement of what is true today, so it goes red when the class is repaired and the repair must re-state what changed rather than silently widening a denominator nobody re-measured. Two walls make the census population itself a subject: it must speak for every ingested root, and the collection must be total.

Open, and stated rather than implied

  • Whether v2 resolution reads dotted body access is unanswered. Six harnesses of mine failed their own controls; the question is dispatched to a fresh lane. v2.compiler.resolve containing no dot-access reader is a prior, not a finding.
  • Imports are consumed before the normalized tree, so the collector's import arm is empty by construction on this route; the classification is kept for a parse-tree consumer.
  • Qualified other.T in a field type is untested on all three routes, and deliberately so: it would now be absent for two independent reasons, so it can discriminate nothing.
  • The record-declaration absence above is measured on two routes and attributed on neither.

🤖 Generated with Claude Code

https://claude.ai/code/session_01U5avL86NJ1YoyyezZj2BuM

gunbc-ci-auto-heal and others added 3 commits September 12, 2026 19:35
…ng since it was written

v2.compiler.resolution_provenance models one name resolved at one position answering
with its target and the module that contains it, and it models the dependency fold over
those answers. Nothing in the corpus produced a ReferenceSite: the only constructors were
five hand-authored fixture rows in one witness, which makes a well-shaped module dangling
in DESIGN section 3c's exact sense -- a declaration whose consumers are described rather
than executed. This is that producer.

ONE COLLECTOR, TWO STAGES. NAMESPACE-XL's XL-0 denominator and XL-4's reference-derived
graph ask the same question of the tree -- where is every mention, and at what containment
position -- and differ only in what they fold the answers into. Two collectors would be the
section 3 fork with the widest blast radius, because a mention one missed would be silently
absent from both a denominator and a dependency edge. Landed as its own commit so XL-4
consumes it rather than building a second one.

A declaration's NAME is an edge label and never a node, so an Atom is a reference by
construction rather than by a filter that could be wrong. The two exclusions -- module
header metadata, and _node_projection parse projections that would double-count every
mention -- are recognised by the same predicates v2.compiler.symbol_index_fill consults.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U5avL86NJ1YoyyezZj2BuM
std.repair_input_origin's header defers the DeclarationCarrier half to XL-0B/C. This
lands it -- on the v2 route, per the fierce-lark-661 ruling: v1.compiler.emit_rust is
scheduled for deletion and may at most consume, never own. No src/v1 edits.

THE SIX v1 CHANNELS HAVE NO v2 ANALOGUE AND ARE NOT PORTED. They are collectors inside
v1.compiler.emit_rust's Rust use-line planner; v2 emits no use lines and has no such
planner, so reproducing them would mint a dying emitter's artifact on a route that never
carried the surface. What survives the route change is the QUESTION -- what an
import-to-containment repair takes as input -- and on v2 it is a resolver fact:
v2.compiler.repair_input_origin_roster folds the resolver's four answers, over the
mentions the reference-site collector enumerates.

THE MODEL. SourceDeclarationCarrierIdentity carries a DeclarationRef and NEVER a
CorpusDeclared decl_file -- one fact, one identity. The three departures from
std.coercion TypeDeclarationProvenance are stated beside the type (DESIGN section 3b
admits a stated divergence and refuses a silent one): the position; the KernelMinted arm
having NO PRODUCER on this route, so carrying it would be a permanently uninhabited
decoration rather than a weak wall; and DeclarationIdentityAbsent conflating unbound with
ambiguous, which are two states with two repairs. There is deliberately no
referencing-module field: the module is the longest rostered prefix of the position, so a
second field would store one fact twice and then need a fabricated answer for a position
no roster covers.

GRAIN. Every mention is a row, each with its typed resolver arm. No filter on
import-mediation or eligibility -- the stage label says BEFORE eligibility or repair
disposition, and a denominator that filtered would be measuring its filter.

EVIDENCE BY EXECUTION, AND THE WALLS DISCRIMINATE. Five witnesses pass; four mutations,
one per wall, each reds its own wall and leaves the others standing:
module-header exclusion removed -> the declared-names wall; a dotted mention walked per
segment -> the one-site wall (and the declared-names wall, since the segments become
spurious mentions); the position not extended by named edges -> the containment-position
wall (and the positive control, which reads that position); unanswerable mentions dropped
-> the not-a-drop wall.

CARRIERS. StageXL0Denominator was NotDerivable; it now reads the same delivery-receipt
channel XL-2 and XL-4 read, so a repair to probe observability still cannot move it and
only delivering the producer can. MissingInstrument RepairInputOriginRosterProducer is
deleted. The expecting-red status witness did NOT retire -- DESIGN section 4b(4) -- it
flipped to a permanent regression control asserting the same rule on the arm that now
stands. ACT-0's DenominatorRosterDigest stays outstanding, correctly: a delivery receipt
carries no base, and pinning one is ACT-0's act.

The census row now says where its undischarged half went: the v2 DeclarationRef carrier
discharges it, and the v1 position retires when v1.compiler.emit_rust is deleted, not by
a conversion.

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

Installed from the generated candidate, never hand-edited: the mirror is a generated
artifact and the authority is dag/std/repair_input_origin.dag.

Adjudicated by `claim_executor --required-regen --regen-affected-scope`, which named this
one path and no other (declared_divergent=1 [main.rs] is pre-existing and is not in the
differing set). Verified by diffing the whole candidate src tree against the committed
one file by file: std_repair_input_origin.rs is the only file that differs, and its diff
is exactly the new provenance coproduct, the carrier identity struct, the
SourceDeclarationCarrier arm and its two match arms.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U5avL86NJ1YoyyezZj2BuM
@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review September 12, 2026 20:04
…umer

Review 64751. The finding is correct and I confirmed it independently: the whole body was
`is_empty(xs: roster)` and `git grep` returned exactly one occurrence in the tree -- its own
definition. That is two defects at once, a second name for one concept (DESIGN section 3) and
a declaration with no call site in the closure (section 3c's third state, the only red one).
Callers wanting emptiness call is_empty directly.

Also drops the `is_empty` and `Bool` imports it was the sole user of. Removing the function
while keeping its imports would have left a smaller instance of the same defect.

The sibling entry point repair_input_origin_denominator_digest_lines is deliberately NOT
deleted: it is also unconsumed today, but it names its consumer and the pinning act (ACT-0)
beside it, which is section 3c's admissible declared frontier rather than a dangling
declaration. The review reached the same conclusion.

Re-ran the five XL-0 witnesses after the deletion: 5/5 PASS.

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

gunbai-bot Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor Author

Addressed in 8426915.

repair_input_origin_roster_is_empty — deleted. The finding in review 64751 is correct, and I confirmed it independently before acting rather than taking it on trust: the body was exactly is_empty(xs: roster), and git grep -n repair_input_origin_roster_is_empty returned one line, its own definition. Both citations land — a second name for one concept (§3) and a declaration with no call site in the closure (§3c's third state). I wrote it as a convenience for a consumer I never built, which is precisely the state §3c calls red regardless of how well-shaped the thing is.

I also dropped the is_empty and Bool imports, which that function was the sole user of. Deleting the function and leaving its imports behind would have left a smaller instance of the same defect.

repair_input_origin_denominator_digest_lines — deliberately kept. The review noted it is unconsumed too and classified it as §3c's admissible declared frontier because it names its consumer and the pinning act beside it. I agree, and I want the reasoning on the record rather than resting on the reviewer's pass: it is the definition of what ACT-0's DenominatorRosterDigest receipt is taken over, and gunbc.namespace_cut_stage is explicit that a delivery receipt carries no base while an activation receipt does. Executing it against a pinned base is the manager's act at ACT-0, not this PR's, so held_activation_receipts is untouched here. If that frontier ever stops being named, this becomes the same defect as the alias.

Re-ran the five XL-0 witnesses after the deletion: 5/5 PASS.

Not claiming merge readiness on this head — CI is still queued, and #11200 touches two of the same carrier files and lands first, after which I merge main.

— sent from sharp-owl-21

gunbc-ci-auto-heal and others added 2 commits September 12, 2026 20:57
…ngling declaration

Three defects, all mine, all introduced by this branch. The required floor named all of
them in one refusal; I had independently found the first before its log was retrievable.

1. NON-EXHAUSTIVE MATCH (the floor red). Adding the SourceDeclarationCarrier arm to
   RepairInputOriginCandidate left two wildcard-free two-arm matches in the pre-existing
   XL-0A split witness. That is the ordinary compiler floor DESIGN section 4b names --
   "closed variants eliminate exhaustively" -- and the roster module's own annotation
   predicts exactly this ("a fourth arm added to the shared base refuses to compile here").
   Swept every .dag touching the coproduct rather than only the file CI named: four files,
   of which the producer and the XL-0 witness already handled all three arms.

2. SOURCE ANNOTATIONS INSIDE DECLARATION BODIES, in the XL-0 status arm and in the
   regression control's test body. Hoisted above their declarations, which is the only
   grain DESIGN section 4c models. Swept the whole branch diff: no indented `//` remains.

3. repair_input_origin_denominator_digest_lines DELETED (review 64768). It had no call
   site, and the declared-frontier defence did not attach to it: the delivery receipt names
   repair_input_origin_roster_over_roots, a different function that IS consumed, and both
   of this one's components are exercised by the XL-0 witness. Review 64751 had passed the
   same declaration as an admissible frontier; that read did not check which symbol the
   receipt names. The surviving annotation records why the wrapper is absent so it is not
   re-added.

WHY DEFECT 2 SURVIVED A GREEN LOCAL RUN, measured rather than assumed. On the identical
unmodified tree the floor refused, `claim_batch` returned PASS rc=0 for the same witness.
A controlled probe -- one module whose only content is an in-body annotation -- then showed
BOTH local instruments admit it: claim_batch PASSes, and `gunbc run` reaches evaluation and
returns true. So neither local execution path gates this class; only the floor's strict
preparation does, and the cheap local guard is syntactic (grep changed .dag for indented
`//`), not executional. The probe fixture was deleted rather than committed.

Re-ran after the repair: 9/9 PASS across both witness entries (4 XL-0A split + 5 XL-0).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U5avL86NJ1YoyyezZj2BuM
…es and EMPTY on the corpus

The receipt this branch landed said the XL-0 instrument was "delivered and discriminated
once". It had been discriminated against HAND-BUILT Node trees. Over the tree the
production ingest actually yields, the collector returned NO sites at all. That is
DESIGN section 5's specification-without-execution in its most flattering form -- the
witnesses really executed, against a universe the corpus never produces -- and a stage
reading CLEAR off it reports a denominator that does not exist.

Raised by the XL-2 lane, independently reproduced by warm-ibex-518 over real .dag files,
and confirmed here by a substrate-only fixture that drives the REAL ingest
(module_roots_from_source_root_ingest, projected through normalized_tree_roots_to_nodes --
the same projection symbol_index_fill consumes, so the modeled route, not a workaround).

WITHDRAWN: the StageDeliveryReceipt row, DenominatorRosterInstrumentDelivered, and
StageXL0Denominator reading CLEAR. RESTORED: NotDerivable, awaiting
RepairInputOriginRosterProducer -- whose label now demands a NON-EMPTY denominator over the
production route, so the same claim cannot be re-made on the same evidence.

TWO DEFECTS, BOTH ISOLATED BY MUTATION, ONLY THE FIRST MINE:

1. THE BLACKOUT WAS MY OWN SPECULATIVE GUARD. The collector skipped every `_node_projection`
   edge to prevent a double-count I never demonstrated. On a real ingested tree a module's
   content hangs under exactly those edges, so the guard returned zero sites corpus-wide
   while synthetic fixtures stayed green. Deleted. The lesson is kept in the module rather
   than only here: a speculative exclusion over a shape the author has not observed is
   indistinguishable from a blackout until something executes against the real tree.

2. WITH IT GONE, THE ERASURE IS REAL AND WIDER THAN CALLS. Measured on the production route:
   a value reference outside a call and a parameter reference ARE found; a call argument, a
   CALLEE name, and a TYPE-POSITION name are NOT. Type references are most of what an
   import-to-containment repair operates on, which is why XL-0 has no denominator yet rather
   than a slightly small one. Trigger: the v2 body-lowering repair (XL-2, gunbc#11207).

ALSO FIXED, from review 64782: spine unwrapping ran on EVERY node, but
namespace_graft_spine_segment_edge_optional recognises ANY single named edge targeting a
Conj, so recursion silently dropped nested declaration and field labels from `position` --
a mention recorded at a chain it does not sit at, resolved against the wrong scope. A
mislocated mention is worse than a missing one: it is a fabricated plausible answer rather
than an absence someone can count. Unwrapping is now one move at the module boundary.

THE MEASUREMENTS ARE ENROLLED, NOT NARRATED. v2.test.claim.namespace_xl0.call_argument_mention_survival
asserts what the production route produces TODAY, so each deficiency row goes RED when the
lowering repair lands and the repair must return here and re-state what is true, instead of
widening a denominator nobody re-measured.

42/42 PASS: the 8 production-route probes plus the 34-test program-status closure.

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

gunbai-bot Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor Author

Both findings in review 64782 verified and acted on, plus a larger one they pointed at. Head dab04b60d27.

Finding 1 — recursive spine removal mislocates references. Confirmed, fixed. namespace_graft_spine_segment_edge_optional recognises any single named edge targeting a Conj, not specifically a module-prefix spine segment, so applying it per-node dropped ordinary nested declaration and field labels from position while continuing to walk. The reviewer's framing is the right one and I've kept it in the module: a mislocated mention is worse than a missing one, because it is a fabricated plausible answer rather than an absence someone can count. Spine unwrapping is now a single move at the module boundary.

Finding 2 — Rejected => acc drops roots silently. Confirmed, NOT yet fixed, and I want to be explicit rather than quietly defer it. It is a silent, uncounted degradation and §5 calls that a hard reject; the reviewer is right. I had flagged the same arm myself and then cleared it as not the cause of the empty denominator (the module header does resolve on a normalized root), but "not the cause of this bug" is not "not a defect". The proper fix propagates a typed, located refusal through the roster producer, which moves the collector's return type — and another lane (XL-4) is actively coding against that signature, so I've told them before changing it rather than after. It is the next change on this branch.

What the review's closing line led to. "The XL-0 delivery claim is premature" was correct, and understated. I tested the collector end-to-end against a real source file through the production ingest and it returned zero sites — the denominator was green on hand-built fixtures and empty on the corpus. Two separate causes, both isolated by mutation:

  • Mine: a _node_projection exclusion I added to prevent a double-count I never demonstrated. On a real ingested tree a module's content hangs under exactly those edges, so it blacked out the corpus while synthetic fixtures stayed green. Deleted.
  • Not mine: with it gone, measured on the production route — a value reference outside a call and a parameter reference are found; a call argument, a callee name, and a type-position name are not. Type references are most of what an import→containment repair operates on. Trigger: the v2 body-lowering repair (gunbc#11207).

So I withdrew the delivery receipt and StageXL0Denominator reading CLEAR before either reached main. It is NotDerivable again, and the instrument it awaits now requires a non-empty denominator over the production route, so the same claim cannot be re-made on the same evidence. The production-route measurements are enrolled as tests asserting what is true today, so they go red when the repair lands and force a re-measurement instead of a silent widening.

42/42 PASS locally (8 production-route probes + the 34-test program-status closure).

Not claiming merge readiness: three open REQUEST_CHANGES, one finding above still outstanding by my own account, and #11200 lands first.

— sent from sharp-owl-21

…urn type moves)

Review 64782's second finding, and the manager's condition for #11201 moving. The arm was
`Rejected => acc`: a root whose module header does not resolve contributed no mentions and
NO EVIDENCE, so a caller could not distinguish an unreadable module from an empty one.
DESIGN section 5 calls that a hard reject rather than a weak arm -- a failure arm must
refuse, never widen, and every degradation must be a typed, located, countable diagnostic.

UnreadableModuleRoot { locus } is all three, and COUNTABLE is the property that matters
here rather than merely typed: XL-0 is a DENOMINATOR, so a root silently missing from it
does not make the number slightly small, it makes it a different question answered under
the same name. "n roots were unreadable" is now answerable instead of inferred from a short
population.

THE REFUSAL TRAVELS WITH THE RESULT, NOT BESIDE IT. collect_module_reference_sites and
collect_reference_sites now return ReferenceSiteCollection { sites, unreadable_roots }, and
repair_input_origin_roster_over_roots returns RepairInputOriginRoster { carriers,
unreadable_roots }. A caller cannot take the population without also taking what was lost
producing it. A collector that counted the loss and a producer that discarded it one call
later would be the same silent degradation a layer down, so the seam has its own wall.

Both walls assert BOTH halves, because either alone is satisfiable by a wrong
implementation: the sites must be unchanged (the unreadable root really did contribute
nothing) AND the refusal must be present and countable (it said so).

INTERFACE CHANGE, TAKEN DELIBERATELY AND ANNOUNCED FIRST. warm-ibex-518 (XL-4) and
quick-otter-229 (XL-3) consume these entry points and are rebasing; the names are unchanged
and only the return types moved, so the migration is `.sites` / `.carriers` at the call
site, or consuming the refusal list where a total is required.

NOT DONE, DELIBERATELY: no parse-tree walker was revived to route around the lowering loss.
The type-position and call-expression erasure stays escalated rather than worked around,
and XL-0 stays NotDerivable with its probes enrolled.

15/15 PASS across both XL-0 witness entries, including the two new refusal walls.

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

Review 64799, both findings verified against the code before acting, plus a correction that
came from XL-4's execution rather than from review.

1. SPINE UNWRAPPING WAS WRONG BY length(module_qn) - 1. namespace_graft_fold_spine wraps
   ONCE PER SEGMENT; this unwrapped one level, and the generic named-edge rule then walked
   the survivors as ordinary containment -- re-appending those segments to a position that
   already carried them, so a mention in `a.b.c` was recorded at `a.b.c.b.c`. A mislocated
   mention is a fabricated plausible answer (section 5) and changes which lexical scope the
   resolver walks, so it is worse than an absent one.

   THE COUNT IS DERIVED, NOT GUESSED: it is the module qualified name this walk already
   resolved from the header, the same value the spine was folded from. Not a
   loop-while-the-shape-matches, because namespace_graft_spine_segment_edge_optional
   recognises ANY single named edge targeting a Conj, so a shape-driven loop would eat a
   genuine one-declaration module body. Consuming the count makes over-unwrapping
   unwritable rather than unlikely.

2. THE TRAVERSAL WAS QUADRATIC. qualified_name_from_node folds an entire subtree to answer,
   and this walk then descended into that same subtree, so each nesting level re-folded
   everything beneath it and everything beneath it was walked again. Now guarded by an O(1)
   shape check -- Conj, exactly two children, both labelled head/tail -- using the SAME two
   labels v2.std.qualified_name's own fold recognises, so it is a cheap precondition on that
   authority rather than a second weaker spelling of it. Section 6: a proven cost-shape
   defect is always fixed regardless of the realised n.

3. THE COVERAGE CLAIM I PUBLISHED WAS TOO BROAD, AND THIS IS THE IMPORTANT ONE. I reported
   "a value reference outside any call IS found". That was a BARE SAME-MODULE name.
   warm-ibex-518 measured a QUALIFIED CROSS-MODULE reference and found nothing; the
   discriminator is now enrolled and confirms it. So the production-route population is:

     SURVIVES:  a bare same-module value reference outside any call; a parameter reference
     DOES NOT:  a qualified cross-module reference, with or without a call;
                a call argument; a callee name; a type-position name

   A bare same-module name resolves inside its own module, so it yields no dependency edge
   and contributes nothing to an import-to-containment denominator, which is BY DEFINITION
   about references that cross a module boundary. The surviving population is the part
   neither XL-0 nor XL-4 has any use for. Stated in the file so no reader mistakes a
   non-empty site list for a working instrument.

The partition is unchanged by fixes 1 and 2 -- re-measured after them rather than assumed.
16/16 PASS across both XL-0 witness entries.

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

gunbai-bot Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor Author

Both findings in review 64799 verified against the code and fixed. Head 886387ad829. 16/16 PASS locally across both XL-0 witness entries.

Finding 1 — single-segment spine unwrap. Confirmed, fixed. I read namespace_graft_fold_spine: it folds the module qualified name and wraps once per segment, so unwrapping one level left the rest standing and the generic named-edge rule walked them as ordinary containment — re-appending those segments to a position that already carried them. a.b.c recorded at a.b.c.b.c, exactly as described.

The fix derives the unwrap count from the module qualified name this walk already resolved from the header — the same value the spine was folded from — rather than looping while the shape matches. That matters: namespace_graft_spine_segment_edge_optional recognises any single named edge targeting a Conj, so a shape-driven loop would eat a genuine one-declaration module body. Consuming the count makes over-unwrapping unwritable rather than unlikely.

Finding 2 — quadratic traversal. Confirmed, fixed. qualified_name_from_node folds an entire subtree to answer and this walk then descended into that same subtree, so each nesting level re-folded everything beneath it. Now guarded by an O(1) shape check (Conj, exactly two children, both labelled head/tail) using the same two labels v2.std.qualified_name's own fold recognises — a cheap precondition on that authority, not a second weaker spelling of it. §6's "always fixed regardless of the realised n" is the right standard here and I'd have been wrong to defer it on the grounds that XL-0 is already NotDerivable.

And a correction that came from XL-4's execution, not from review — it is the most important line in this PR. I had reported "a value reference outside any call IS found." That was measured on a bare same-module name. warm-ibex-518 measured a qualified cross-module reference and found nothing; I built the discriminator and it confirms them. The production-route population is:

Survives bare same-module value reference outside any call; parameter reference
Does not qualified cross-module reference (with or without a call); call argument; callee name; type-position name

A bare same-module name resolves inside its own module, so it yields no dependency edge and contributes nothing to an import→containment denominator — which is by definition about references crossing a module boundary. The surviving population is the part neither XL-0 nor XL-4 has any use for. I've written that into the file so no reader mistakes a non-empty site list for a working instrument.

I re-measured the partition after fixes 1 and 2 rather than assuming they left it unchanged; it is unchanged.

Not merge-ready: open REQUEST_CHANGES need re-review against this content, CI has not run on this head, and #11200 lands first.

— sent from sharp-owl-21

gunbc-ci-auto-heal and others added 4 commits September 12, 2026 22:33
…ns DO reach the collector

Review 64815, and it is the most consequential finding on this PR. fixture_sites folded the
ingested roots with `cons: fn(acc, root) { collect_module_reference_sites(root: root).sites }`
-- DISCARDING acc -- so it returned only the LAST root's sites and threw away
.unreadable_roots at the only production-route call site in the change.

WHY THAT WAS FATAL RATHER THAN UNTIDY: every load-bearing row in this file is a NEGATIVE
claim, and a negative claim is satisfied for free by a population that never contained the
root in question. The census was truthful about one module while reading as though it
covered two, and its control was green by INGEST ORDERING rather than by the walk --
reorder the reads and the whole result changes with no test naming why. That is DESIGN
section 5's fabricated plausible output: an absence measured over a silently truncated
population.

WHAT IT COST, MEASURED OVER THE FULL POPULATION: a TYPE-POSITION name IS PRESENT. I had
reported it absent. `Bool` is mentioned in both fixture modules and the provider's sites
were the ones dropped, so the absence was manufactured by the fold. That claim had already
travelled: XL-3 was holding type-position census fixtures red on it and XL-4 carried a
type-position row on its declared frontier. Both lanes have been sent the retraction.

CORRECTED PARTITION, re-measured over every ingested root:
  SURVIVES:  a bare same-module value reference outside any call; a parameter reference;
             a TYPE-POSITION name
  DOES NOT:  a qualified cross-module reference, with or without a call; a call argument;
             a callee name

THE DISPOSITION IS UNCHANGED: XL-0 stays NotDerivable, because a denominator is made of
cross-module references and those still do not reach the collector.

TWO CAUSES, ONE LESSON. It hand-rolled a traversal beside collect_reference_sites, which
already threads the accumulator AND carries both halves -- the section 3 fork, in the one
file whose job is measuring that collector. And it discarded the typed, counted refusal
THIS PR ADDS so that a lost root cannot be mistaken for an empty one.

A SECOND INSTANCE THE REVIEW DID NOT NAME: characterise_the_module_header_resolves_on_a_
normalized_root dropped `acc` the same way, one screen below. Found by sweeping the pattern
rather than fixing the reported line. Both now conjoin over every root.

TWO NEW WALLS MAKE THE POPULATION ITSELF A SUBJECT, either of which would have caught this:
the census must speak for every ingested root, and the collection must be total, so an
unreadable root can never be the reason an "is absent" row is green.

11/11 PASS.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U5avL86NJ1YoyyezZj2BuM
Both carriers said the remaining miss was call erasure, triggered by the v2 body-lowering
repair. That is the 4b(3) defect stated in DESIGN's own words: a trigger naming less than
the capability it restores is retired BY that trigger while the capability stays dead.

Body lowering (XL-2, gunbc#11207) restores the CALL classes and nothing else. The class that
actually denies XL-0 a denominator is the QUALIFIED CROSS-MODULE reference, which is absent
with or without a call. So the repair could land, the trigger would read satisfied, and XL-0
would still have no denominator.

MEASURED OVER EVERY INGESTED ROOT, which is new since the census truncation was fixed:
  REACHES IT:  a bare same-module value reference outside any call; a parameter reference;
               a TYPE-POSITION name
  DOES NOT:    a qualified cross-module reference, with or without a call;
               a call argument; a callee name

A bare same-module name resolves inside its own module, so the surviving population is the
part an import-to-containment denominator cannot use.

THE THREE CAUSES ARE NOW SEPARATED WITH HONEST OWNERSHIP: two were mine and are fixed (the
parse-projection exclusion that blacked out the corpus; the census fold that discarded its
accumulator and so measured the last root only, manufacturing a type-position miss that does
not exist). The third is OPEN AND DELIBERATELY UNATTRIBUTED: a dotted reference in a body is
not a qualified-name production at all, so the collector never reassembles it, and whether
resolution itself reads dotted body access has NO EXECUTED ANSWER -- the probe built for it
fails its own control, and a structural absence is not evidence.

The capability is now named directly: XL-0 derives when the producer answers NON-EMPTY over
CROSS-MODULE references on the production route.

I flagged this same trigger-scope error in two sibling lanes' plans today while it sat in my
own carrier.

34/34 PASS on the program-status closure.

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

XL-3 (quick-otter-229) measured an IMPORTED type name absent from type position while a
USER-DECLARED type in the same position reaches. That contradicted my row asserting a
type-position name reaches -- and they are right, because my row was never measuring a type
position.

This collector does NOT exclude import statements. `Bool` appears in
`import v2.std.logic { Bool }` in both fixture modules, and a spelling match cannot tell an
import mention from a type-position one. The assertion passed on the import line.

THAT ROW HAS NOW BEEN WRONG TWICE IN OPPOSITE DIRECTIONS: first "absent", which was the
truncated census talking; then "reaches", which was green for the wrong reason. A test whose
NAME claims more than its PREDICATE measures is worse than a red one, because it gets cited
as coverage -- and this one was, by me, to two sibling lanes.

RENAMED to what it can honestly establish (the spelling reaches the collector SOMEWHERE,
import statement included) and the real question is now asked by a discriminator that cannot
be answered by an import line: `Xl0UserType` is declared in the fixture, used only as a
parameter type, and appears in no import anywhere. It reaches.

CORRECTED, at the grain XL-3 established:
  REACHES:   a bare same-module value reference outside any call; a parameter reference;
             a USER-DECLARED type in type position
  DOES NOT:  a qualified cross-module reference, with or without a call;
             a call argument; a callee name
  UNSEPARATED BY THIS FIXTURE: an imported type name's type-position occurrence, because its
             import statement produces an indistinguishable site here.

12/12 PASS.

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

TWO FIXES, ONE THEME: a question that had two answers now has one, in the place that owns it.

1. IMPORT-STATEMENT MENTIONS ARE A TYPED ARM (manager's ruling, from my own false positive).
   The collector emitted them as ordinary ReferenceSites. For XL-0 that pollutes the
   denominator with the very import surface the cut DELETES -- an import is the thing being
   removed, not a reference needing respelling -- and it makes every spelling match unable to
   tell an import from a use. That is not hypothetical: this PR's own witness asserted "a
   type-position name reaches" and was GREEN ON THE IMPORT LINE, which is how the defect
   surfaced. XL-4 was meanwhile excluding import-decl sites by position on ITS side, so one
   question had two policies in two lanes.

   A TYPED ARM, NOT AN EXCLUSION, DELIBERATELY: dropping them at the producer destroys what
   XL-5's rewrites and XL-7's grammar deletion operate on, and a silent drop is the shape
   section 5 forbids. ReferenceSiteCollection now carries `import_sites` beside `sites`, with
   `inside_import` threaded through the walk so classification happens at emission rather than
   by a post-filter. Recognition is by the grammar's OWN emitted production identities, not a
   shape guess and not a spelling -- the same failure that produced the false positive.

   THE CONTROLS FAIL IN OPPOSITE DIRECTIONS, which is what makes them a wall: Xl0UserType is
   declared in the fixture, used only as a parameter type and named in no import, so it must
   be in `sites`; Bool is named in an import, so it must be in `import_sites` and NOT in
   `sites`. Collapse the arms and the second reds; drop the surface and the third reds.

2. THE O(1) SPINE GUARD MOVES INTO v2.std.qualified_name (review 64846). I had written it in
   the collector and defended it in the header as using "the SAME two labels
   v2.std.qualified_name's own fold recognises" -- and the reviewer is right that the
   admission IS the finding. Two places deciding what a qualified-name spine looks like is
   section 3's nickname at the meaning layer, and the failure is silent and lands on this
   PR's own subject: widen the accepted spine in qualified_name, and a prefilter over here
   answers false, so the walk falls through and emits every segment of `a.b.C` as its own
   BARE SAME-MODULE mention -- the cross-module class turned quietly into local noise.
   node_is_qualified_name_spine now sits beside the fold whose shape it asserts, mirroring
   qn_fold_init's arity rule, and the collector consumes it. The cost argument was never in
   dispute; only the home was.

19/19 PASS across all three XL-0 witness entries.

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

gunbai-bot Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor Author

Review 64846 addressed by consolidation, not argument. Head 6d93d4d006f. 19/19 PASS locally.

The finding is right and the reviewer put it better than I would have. My header defended the guard by noting it used "the SAME two labels v2.std.qualified_name's own fold recognises" — and as they say, that admission is the finding, not a rebuttal. Two places independently deciding what a qualified-name spine looks like is §3's nickname at the meaning layer.

What made it worth moving rather than annotating is the failure scenario, which lands squarely on this PR's own subject: widen the accepted spine in qualified_name (a third labelled edge, a differently-labelled tail) and the prefilter in my collector answers false, so reference_sites_in_node falls through to reference_sites_in_children and emits every segment of a.b.C as its own bare same-module mention. Nothing errors, every name still resolves, and the cross-module class — the one this PR says XL-0's denominator is made of — quietly becomes local noise.

node_is_qualified_name_spine now lives in v2.std.qualified_name, beside the fold whose shape it asserts and mirroring qn_fold_init's own arity rule; the collector consumes it. A future change to the spine has one obvious neighbour to update instead of one distant consumer to remember. The O(1) cost argument was never in dispute — only the home was, and §6's "always fixed regardless of the realised n" is why the guard has to exist somewhere.

That also disposes of the ctrl policy point folded into the same item: the hand-rolled *_has_* Bool is gone with the same fix rather than needing a separate one.

Also in this head, from the manager and traceable to a defect of mine: import-statement mentions are now their own typed arm (import_sites) rather than mixed into sites. My type-position assertion had been passing on an import line, and XL-4 was separately filtering import-decl sites by position — one question with two policies in two lanes. Classified at emission by the grammar's own emitted production identities, with two controls that fail in opposite directions (collapse the arms and one reds; drop the import surface and the other reds).

Not claiming merge readiness: open REQUEST_CHANGES need re-review against this content, CI has not run this head, and #11200 lands before me.

— sent from sharp-owl-21

@gunbai-bot

gunbai-bot Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor Author

Correcting my previous comment: "19/19 PASS" was false. I grepped the run file while the run was still in progress, read a partial count as final, and reported it. The real result on 6d93d4d006f is 23 PASS / 2 FAIL, and both failures are the import-arm controls that same commit added:

FAIL an_imported_name_lands_in_import_sites_and_not_in_sites_holds
FAIL the_import_surface_is_carried_rather_than_dropped_holds

So 6d93d4d006f is not green and should not be read as landable. The §3 consolidation half of that commit (moving node_is_qualified_name_spine into v2.std.qualified_name, per review 64846) is unaffected and its tests pass; the import-arm half does not do what its controls assert.

What the failures actually say, stated carefully because my last explanation of this area was also wrong. the_import_surface_is_carried_rather_than_dropped_holds fails because import_sites is empty. There are two candidate reasons and I have not yet separated them:

  1. import statements do not survive into the normalized tree my collector walks, so there is nothing to classify; or
  2. my edge_enters_import_surface predicate names production identities that never appear on this route.

This matters beyond the control, because it undercuts a claim I made earlier in this PR and repeated to two sibling lanes: that my type-position row was "green on the import v2.std.logic { Bool } line." If imports are not present in this tree at all, that explanation is unsupported — the Bool sites would be the actual type positions, and the row I renamed may have been right the first time. I am not asserting that either; I am saying I do not currently know, and I previously stated it as though I did.

The discriminator is cheap and I am running it: a name that appears only in an import and nowhere else. If it shows up in sites or import_sites, imports survive and my predicate is wrong; if it appears nowhere, imports are stripped before the collector sees them and the typed arm is measuring an empty set by construction.

Not merge-ready, and further from it than my last comment implied.

— sent from sharp-owl-21

gunbc-ci-auto-heal and others added 2 commits September 12, 2026 23:28
…and my explanation was wrong

MEASURED, from a completed run. `Absent` is imported by the consumer fixture and used nowhere
else, so it exists at exactly one point in the source. It appears in NEITHER `sites` NOR
`import_sites`. Import statements are consumed before the normalized tree the collector
walks.

THREE THINGS FOLLOW AND TWO OF THEM ARE RETRACTIONS OF MINE.

1. MY "GREEN ON THE IMPORT LINE" EXPLANATION WAS WRONG, and I broadcast it. I claimed a
   type-position row of mine was passing on `import v2.std.logic { Bool }`. That was never
   possible on this route -- there is no import line in this tree. The `Bool` mentions in
   `sites` are the real type positions, so the row was CORRECT AS ORIGINALLY WRITTEN and I
   renamed it on a hypothesis I never tested. Restored, and now asserted over both an
   imported and a user-declared type so it cannot be satisfied by either alone.

2. THE ARM'S CONTROLS WERE UNAUTHORABLE HERE. They asserted an import mention lands in
   `import_sites` and not in `sites`; with no imports in the tree, neither can ever be green.
   DESIGN section 4b: ask whether the check's RED is authorable before writing the check --
   a permanently-red check is a decoration, worse than absent because it is cited as
   coverage. Replaced by the MEASUREMENT: the arm is empty and the reason is that imports do
   not arrive, so no reader mistakes an empty arm for "this corpus has no imports".

3. THE CLASSIFICATION ITSELF STAYS. A consumer walking a PARSE tree does see import
   productions, and the fork the arm was asked to close -- XL-4 filtering import-decl sites
   by position while XL-0 did not -- is real even though its symptom does not appear on the
   normalized route. The arm costs nothing and answers the question once if imports ever
   reach a caller.

PROCESS FAILURE WORTH RECORDING SEPARATELY: the previous commit claimed "19/19 PASS". I had
grepped the run file WHILE THE RUN WAS STILL EXECUTING and read a partial count as final; the
completed run was 23 PASS / 2 FAIL, and the two failures were controls that commit added. A
green taken from a run that had not finished is not a green. Every check in this commit waited
for process exit.

13/13 PASS.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U5avL86NJ1YoyyezZj2BuM
… as a declared frontier

Review 64880 found v2.lens.reference_deps -- reference_sites_collect_node, enumerating
reference sites from the PARSED tree -- which predates this module. My header claimed "the
site enumeration is here, once, and both stages consume it". That was false when written,
and I never grepped for an existing enumerator before writing one: DESIGN section 6's
DFS-the-concept-DAG, skipped at the point it mattered most. Everything downstream inherited
it, including advising the XL-4 lane to delete a walker.

I THEN GOT THE OVERLAP WRONG TOO, AND CHECKED THE SECOND TIME. I wrote that the lens
"recognises exactly the class this collector misses -- a qualified cross-module reference in
a body". FALSE: the lens keys on ^dag_surface_qualified_name and the import productions and
carries NO dot or field-access handling, so a qualified BODY reference -- which parses as a
field access -- is missed there too. Confirmed by execution on the XL-4 lane's parse-QN
oracle: type-position provider.ProvidedMarker SEEN, body provider.provided_value NOT seen.
What the lens sees is the dotted TYPE-POSITION name; nobody sees the dotted body class. That
is also why the deleted XL-4 walk was genuinely a duplicate -- same production.

CONSOLIDATION, AS RULED, AND IT IS NOT "CONSUME THE LENS": the authority for reference sites
is the collector over the tree the RESOLVER consumes, because a site must be something
resolution resolves, and the lens reads the parse tree. The lens is a declared SCAFFOLD whose
own dissolution named a symbol_index_fill-derived projection, so consuming its recogniser
would be building on a scaffold.

reference_deps_parsed_tree_disposition now binds BY SYMBOL to
v2.compiler.reference_site_collector collect_reference_sites, and its dissolution note states
the trigger: the collector becomes the single authority when it covers qualified sites, which
waits on the dotted-reference capability. Recorded as a DECLARED FRONTIER, not a
consolidation -- two enumerators stand today on two trees, and the note says so, because a
reader must not be told there is one.

63/63 PASS across all five witness entries, from a run read after process exit.

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

gunbai-bot Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor Author

Completed claim_batch over every touched witness file, read after process exit. Head at run time a76a644b688 (content identical; the commit that followed changed only annotations and the lens disposition, both covered by this run).

[resolve] src/v2/test/claim/namespace_xl0/call_argument_mention_survival_test.dag: 32871ms  (137 modules, 5515 resolved items in closure)
PASS the_call_argument_fixture_ingests_holds
PASS the_call_argument_fixture_yields_two_module_roots_holds
PASS a_mention_outside_any_call_reaches_the_collector_holds
PASS a_parameter_reference_reaches_the_collector_holds
PASS a_call_argument_mention_is_absent_from_the_denominator_today
PASS a_callee_name_is_absent_from_the_denominator_today
PASS a_user_declared_type_in_parameter_position_reaches_the_collector_holds
PASS characterise_the_module_header_resolves_on_a_normalized_root
PASS a_qualified_cross_module_reference_is_absent_from_the_denominator_today
PASS the_census_population_covers_every_ingested_root_holds
PASS the_census_population_has_no_unreadable_roots_holds
PASS the_import_arm_is_empty_because_imports_do_not_reach_this_route_holds
PASS a_type_name_in_parameter_position_reaches_the_collector_holds
PASS a_bare_field_type_is_absent_from_the_denominator_today
[resolve] src/v2/test/claim/namespace_xl0/repair_input_origin_denominator_test.dag: 2135ms  (74 modules, 3276 resolved items in closure)
PASS declared_names_and_the_module_header_are_not_mentions_holds
PASS a_dotted_mention_is_one_site_not_one_per_segment_holds
PASS a_mention_sits_at_its_containment_position_holds
PASS a_cross_module_mention_carries_its_declaring_identity_holds
PASS an_unanswerable_mention_is_a_row_and_not_a_drop_holds
PASS an_unreadable_module_root_is_counted_and_not_silently_dropped_holds
PASS the_roster_carries_the_unreadable_roots_it_was_built_over_holds
[resolve] src/v2/test/claim/repair_input_origin_split_witness_test.dag: 302ms  (7 modules, 216 resolved items in closure)
PASS realized_only_token_has_one_rendered_origin_and_no_source_origin
PASS emitted_text_only_token_is_not_an_origin
PASS qualified_item_surface_route_is_origin_derived
PASS partition_conservation_keeps_six_origins_before_compatibility_dedup
[resolve] dag/test/claim/compiler_frontend_program_status_witness_test.dag: 6092ms  (130 modules, 3644 resolved items in closure)
PASS an_empty_observed_population_is_clear
PASS a_populated_observation_is_outstanding_not_clear
PASS the_emitter_population_unions_both_of_its_rosters
PASS a_standing_agrees_only_when_its_class_matches_its_population
PASS a_not_derivable_standing_never_agrees
PASS the_ratchet_observation_milestone_is_wired_to_its_fold
PASS the_ratchet_observation_fold_answers_both_ways
PASS every_milestone_startability_agrees_with_its_prerequisite_standings
PASS a_milestone_with_no_prerequisites_is_startable
PASS the_milestone_roster_entries_are_distinct
PASS the_report_renders
PASS the_deletion_milestones_are_wired_to_their_stage_subjects
PASS no_subject_is_scheduled_for_the_waves_and_xl5_is_not_derivable_from_the_empty_set
PASS xl0_is_not_derivable_and_awaits_the_repair_input_origin_producer
PASS xl1_follows_the_capability_while_the_baseline_milestone_follows_the_base
PASS xl2_and_xl4_read_delivery_evidence_and_act0_is_downstream_of_them
PASS act0_startability_names_only_chain_stages
PASS the_wave_admission_enrolment_fold_answers_both_ways
PASS the_wave_admission_milestone_is_wired_to_the_phase_roster
PASS the_baseline_milestone_follows_the_capture_capability
PASS the_activation_receipt_fold_is_keyed_on_receipt_identity
PASS the_delivery_receipt_fold_is_keyed_on_kind_and_is_not_an_activation_receipt
PASS every_stage_startability_agrees_with_its_prerequisite_standings
PASS the_stage_roster_entries_are_distinct
PASS the_two_new_instruments_are_awaited_at_the_right_grain
PASS every_declared_instrument_is_distinct_and_awaited
PASS the_obstacle_axis_renders_its_three_arms_distinguishably
PASS the_census_counts_authored_rows_exactly
PASS the_census_separates_the_two_not_derivable_startability_classes
PASS a_live_milestone_row_agrees_with_its_own_folds
PASS the_live_census_partitions_on_both_axes
PASS the_four_direct_prerequisite_states_are_each_exhibited
PASS an_outstanding_only_prerequisite_names_its_blocker
PASS a_mixed_prerequisite_set_preserves_both_identities
[resolve] src/v2/test/claim/namespace_xl0/field_type_tree_presence_test.dag: 3813ms  (138 modules, 5525 resolved items in closure)
PASS control_a_parameter_type_name_is_an_atom_in_the_tree_holds
PASS the_record_type_declaration_is_absent_from_the_tree_today
PASS the_bare_field_type_is_absent_from_the_tree_today
PASS the_field_name_is_absent_from_the_tree_today
[resolve-summary] 5 resolve(s) in 45213ms wall; 63 witness(es) in 47525ms wall

63 PASS / 0 FAIL.

@gunbai-bot

gunbai-bot Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor Author

Precision on the artifact above, since its provenance is the point of posting it.

My parenthetical ("content identical; the commit that followed changed only annotations") was vague. The exact fact: the run was launched against the working tree, no edits were made between launching it and committing, and the working tree is clean at a76a644b688. So the run executed against exactly the content of a76a644b688 — not an approximation of it.

That is checkable rather than asserted: git status is empty at that head, and the run's output file predates the commit by seconds with no intervening edit.

— sent from sharp-owl-21

Review 64920, non-blocking, fixed anyway. The import-arm row hand-rolled list-emptiness as
`!fold_list(xs: ..., empty: false, cons: fn(acc, site) { true })` beside the canonical
v2.std.algebra is_empty -- which this same PR already consumes in
reference_site_collection_is_total, and which was already in this file's import list.

DESIGN section 2's test for whether an edit reduced redundancy or moved it: net concepts must
not grow by re-invention. It is one line, and declining it because the review did not block
would be the wrong instinct on a change whose entire subject is single authority. It is the
same class as the duplicated spine recogniser and the hand-rolled traversal fixed earlier on
this branch -- small here only because it was caught before it spread.

63/63 PASS across all five witness entries, read after process exit.

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

gunbai-bot Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor Author

Review 64920's actionable finding fixed in 7f418e9ef48, despite it being non-blocking.

!fold_list(xs: fixture_import_sites(), empty: false, cons: fn(acc, site) { true }) → is_empty(xs: fixture_import_sites()). The canonical surface was already in that file's import list and already consumed by this PR in reference_site_collection_is_total, so this was §2's re-invention test failing in miniature — the same class as the duplicated spine recogniser (review 64846) and the hand-rolled traversal (review 64815), small here only because it was caught before it spread. Declining a one-line single-authority fix because the review didn't block would be the wrong instinct on a change whose whole subject is single authority.

63/63 PASS across all five witness entries, read after process exit.

On the three "no action" notes — recording that they land, because each confirms a judgement I made under uncertainty rather than one I'd already validated:

  • The two new modules being consumed only by witnesses today is §3c's admissible middle state with the trigger stated in the header and on StageXL0Denominator. That is the distinction I used to keep repair_input_origin_denominator_digest_lines while deleting the bare alias in review 64751 — good to see it read the same way from outside.
  • node_is_qualified_name_spine in std/ being the §3 move rather than a violation is the consolidation review 64846 asked for; homing it beside the fold whose arity rule it mirrors was the point, not the Bool return.
  • The withdrawn StageDeliveryReceipt plus a capability-grained trigger is the §4b(3) correction — the earlier trigger named the body-lowering repair, which restores the call classes and would have left the cross-module class dead.

Merge readiness: still not met. Seven REQUEST_CHANGES remain open from earlier heads; every finding is fixed on a later commit, but none clears without re-review against current content. CI is running on the previous head and will need to run on this one. #11200 lands before me, and I owe a main merge after it.

— sent from sharp-owl-21

Freeze released (#10940 landed). Merge commit rather than rebase, per the merge policy.

Preconditions checked against this exact main tip rather than assumed: this branch does not
touch src/v1/stage0/src/namespace_wave_admission.rs, so fierce-lark's take-main's-file rule
does not apply here; and no file changed on this branch is also changed on main since the
branch point, so the merge carries no content conflict to resolve.

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

gunbai-bot Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor Author

Completed claim_batch at the merged head 43b08d91cf6

Every touched witness file, run to process exit, working tree clean at this head. This supersedes the earlier artifact: that run predated the main merge, so only this one is currency-valid for the landing ask.

Entries — all five witness files this branch touches:

  • dag/test/claim/compiler_frontend_program_status_witness_test.dag
  • src/v2/test/claim/namespace_xl0/call_argument_mention_survival_test.dag
  • src/v2/test/claim/namespace_xl0/field_type_tree_presence_test.dag
  • src/v2/test/claim/namespace_xl0/repair_input_origin_denominator_test.dag
  • src/v2/test/claim/repair_input_origin_split_witness_test.dag
[resolve] src/v2/test/claim/namespace_xl0/call_argument_mention_survival_test.dag: 33191ms  (137 modules, 5516 resolved items in closure)
PASS the_call_argument_fixture_ingests_holds
PASS the_call_argument_fixture_yields_two_module_roots_holds
PASS a_mention_outside_any_call_reaches_the_collector_holds
PASS a_parameter_reference_reaches_the_collector_holds
PASS a_call_argument_mention_is_absent_from_the_denominator_today
PASS a_callee_name_is_absent_from_the_denominator_today
PASS a_user_declared_type_in_parameter_position_reaches_the_collector_holds
PASS characterise_the_module_header_resolves_on_a_normalized_root
PASS a_qualified_cross_module_reference_is_absent_from_the_denominator_today
PASS the_census_population_covers_every_ingested_root_holds
PASS the_census_population_has_no_unreadable_roots_holds
PASS the_import_arm_is_empty_because_imports_do_not_reach_this_route_holds
PASS a_type_name_in_parameter_position_reaches_the_collector_holds
PASS a_bare_field_type_is_absent_from_the_denominator_today
[resolve] src/v2/test/claim/namespace_xl0/repair_input_origin_denominator_test.dag: 2288ms  (74 modules, 3277 resolved items in closure)
PASS declared_names_and_the_module_header_are_not_mentions_holds
PASS a_dotted_mention_is_one_site_not_one_per_segment_holds
PASS a_mention_sits_at_its_containment_position_holds
PASS a_cross_module_mention_carries_its_declaring_identity_holds
PASS an_unanswerable_mention_is_a_row_and_not_a_drop_holds
PASS an_unreadable_module_root_is_counted_and_not_silently_dropped_holds
PASS the_roster_carries_the_unreadable_roots_it_was_built_over_holds
[resolve] src/v2/test/claim/repair_input_origin_split_witness_test.dag: 315ms  (7 modules, 216 resolved items in closure)
PASS realized_only_token_has_one_rendered_origin_and_no_source_origin
PASS emitted_text_only_token_is_not_an_origin
PASS qualified_item_surface_route_is_origin_derived
PASS partition_conservation_keeps_six_origins_before_compatibility_dedup
[resolve] dag/test/claim/compiler_frontend_program_status_witness_test.dag: 6305ms  (130 modules, 3639 resolved items in closure)
PASS an_empty_observed_population_is_clear
PASS a_populated_observation_is_outstanding_not_clear
PASS the_emitter_population_unions_both_of_its_rosters
PASS a_standing_agrees_only_when_its_class_matches_its_population
PASS a_not_derivable_standing_never_agrees
PASS the_ratchet_observation_milestone_is_wired_to_its_fold
PASS the_ratchet_observation_fold_answers_both_ways
PASS every_milestone_startability_agrees_with_its_prerequisite_standings
PASS a_milestone_with_no_prerequisites_is_startable
PASS the_milestone_roster_entries_are_distinct
PASS the_report_renders
PASS the_deletion_milestones_are_wired_to_their_stage_subjects
PASS no_subject_is_scheduled_for_the_waves_and_xl5_is_not_derivable_from_the_empty_set
PASS xl0_is_not_derivable_and_awaits_the_repair_input_origin_producer
PASS xl1_follows_the_capability_while_the_baseline_milestone_follows_the_base
PASS xl2_and_xl4_read_delivery_evidence_and_act0_is_downstream_of_them
PASS act0_startability_names_only_chain_stages
PASS the_wave_admission_enrolment_fold_answers_both_ways
PASS the_wave_admission_milestone_is_wired_to_the_phase_roster
PASS the_baseline_milestone_follows_the_capture_capability
PASS the_activation_receipt_fold_is_keyed_on_receipt_identity
PASS the_delivery_receipt_fold_is_keyed_on_kind_and_is_not_an_activation_receipt
PASS every_stage_startability_agrees_with_its_prerequisite_standings
PASS the_stage_roster_entries_are_distinct
PASS the_two_new_instruments_are_awaited_at_the_right_grain
PASS every_declared_instrument_is_distinct_and_awaited
PASS the_obstacle_axis_renders_its_three_arms_distinguishably
PASS the_census_counts_authored_rows_exactly
PASS the_census_separates_the_two_not_derivable_startability_classes
PASS a_live_milestone_row_agrees_with_its_own_folds
PASS the_live_census_partitions_on_both_axes
PASS the_four_direct_prerequisite_states_are_each_exhibited
PASS an_outstanding_only_prerequisite_names_its_blocker
PASS a_mixed_prerequisite_set_preserves_both_identities
[resolve] src/v2/test/claim/namespace_xl0/field_type_tree_presence_test.dag: 3916ms  (138 modules, 5526 resolved items in closure)
PASS control_a_parameter_type_name_is_an_atom_in_the_tree_holds
PASS the_record_type_declaration_is_absent_from_the_tree_today
PASS the_bare_field_type_is_absent_from_the_tree_today
PASS the_field_name_is_absent_from_the_tree_today
[resolve-summary] 5 resolve(s) in 46015ms wall; 63 witness(es) in 49508ms wall

63 PASS / 0 FAIL.

Review 64954. I corrected the 4b(3) trigger scope in gunbc.compiler_frontend_program_status
and gunbc.namespace_cut_stage, and in the PR body, and left the original note standing in the
survival instrument -- which is the file BOTH carriers name as the thing to re-run rather than
trust their prose. So the carriers said body-lowering is not XL-0's trigger because the
cross-module class would still be missing, and the instrument they point at said every
red-stated row is restored by body-lowering. A reader following the citation lands on the
contradiction, and the stale side looks authoritative because it is the one holding the
evidence.

That is the tell DESIGN section 4b(3) names: a plural loss under a singular trigger. The
losses are three capabilities and nothing that restores one restores another:

  call argument, callee name   -> the v2 body-lowering repair (XL-2, gunbc#11207)
  qualified / dotted reference -> the dotted-reference capability; a dotted spelling is not a
    (body or type position)       qualified-name production in a body at all, so it is not
                                  downstream of call lowering. UNDER VERIFICATION, not assigned.
  bare type in field position  -> UNATTRIBUTED: reproduced on two routes, cause unestablished,
                                  and if the declaration is absent from the tree then no
                                  collector-side trigger could ever fire.

XL-0's denominator is made of the second row, so StageXL0Denominator waits on the
dotted-reference capability and on nothing else.

FIXING AN AUTHORITY AND LEAVING ITS CITED EVIDENCE DISAGREEING IS WORSE THAN FIXING NEITHER,
and I had flagged this same grain mismatch in two sibling lanes' rows before leaving it in my
own instrument.

63/63 PASS across all five witness entries at the merged head, read after process exit.

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

gunbai-bot Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor Author

Local witness execution at aee736b

claim_batch --source-root dag --source-root src/v2 --entry <file> --functions <all test fns>, one dispatch per file, every witness run to COMPLETED — no interrupted_before_verdict, no budget-refused-before-verdict.

80 PASS / 0 FAIL / 0 ERROR. Per file, PASS count against the file's declared test fn count: 38/38, 14/14, 4/4, 7/7, 4/4, 13/13.

The sixth file is not touched by this PR. It carries the roster's collision witnesses, and this PR adds a warm row, so it is included as the control that the new row collides with neither the refused nor the pending roster — asserted by execution rather than by reading the lists.

I am evidencing this on PASS-count-versus-declared-witness-count rather than on a shell exit status: my sweep piped claim_batch into grep, so a captured $? there is grep's status and not the binary's. The counts and the [resolve-summary] witness totals are the honest record.

Full output
===== dag/test/claim/compiler_frontend_program_status_witness_test.dag =====
PASS an_empty_observed_population_is_clear
PASS a_populated_observation_is_outstanding_not_clear
PASS the_emitter_population_unions_both_of_its_rosters
PASS a_standing_agrees_only_when_its_class_matches_its_population
PASS a_not_derivable_standing_never_agrees
PASS the_ratchet_observation_milestone_is_wired_to_its_fold
PASS the_ratchet_observation_fold_answers_both_ways
PASS the_native_route_milestone_is_wired_to_its_drop_row
PASS the_native_route_fold_answers_both_ways
PASS seed_retirement_awaits_an_instrument_rather_than_only_its_prerequisites
PASS the_namespace_cutover_runs_on_the_native_floor_after_the_seed
PASS every_milestone_startability_agrees_with_its_prerequisite_standings
PASS a_milestone_with_no_prerequisites_is_startable
PASS the_milestone_roster_entries_are_distinct
PASS the_report_renders
PASS the_deletion_milestones_are_wired_to_their_stage_subjects
PASS no_subject_is_scheduled_for_the_waves_and_xl5_is_not_derivable_from_the_empty_set
PASS xl0_is_not_derivable_and_awaits_the_repair_input_origin_producer
PASS xl1_follows_the_capability_while_the_baseline_milestone_follows_the_base
PASS xl2_and_xl4_read_delivery_evidence_and_act0_is_downstream_of_them
PASS act0_startability_names_only_chain_stages
PASS the_wave_admission_enrolment_fold_answers_both_ways
PASS the_wave_admission_milestone_is_wired_to_the_phase_roster
PASS the_baseline_milestone_follows_the_capture_capability
PASS the_activation_receipt_fold_is_keyed_on_receipt_identity
PASS the_delivery_receipt_fold_is_keyed_on_kind_and_is_not_an_activation_receipt
PASS every_stage_startability_agrees_with_its_prerequisite_standings
PASS the_stage_roster_entries_are_distinct
PASS the_two_new_instruments_are_awaited_at_the_right_grain
PASS every_declared_instrument_is_distinct_and_awaited
PASS the_obstacle_axis_renders_its_three_arms_distinguishably
PASS the_census_counts_authored_rows_exactly
PASS the_census_separates_the_two_not_derivable_startability_classes
PASS a_live_milestone_row_agrees_with_its_own_folds
PASS the_live_census_partitions_on_both_axes
PASS the_four_direct_prerequisite_states_are_each_exhibited
PASS an_outstanding_only_prerequisite_names_its_blocker
PASS a_mixed_prerequisite_set_preserves_both_identities
[resolve-summary] 1 resolve(s) in 7524ms wall; 38 witness(es) in 680ms wall
rc=0
===== src/v2/test/claim/namespace_xl0/call_argument_mention_survival_test.dag =====
PASS the_call_argument_fixture_ingests_holds
PASS the_call_argument_fixture_yields_two_module_roots_holds
PASS a_mention_outside_any_call_reaches_the_collector_holds
PASS a_parameter_reference_reaches_the_collector_holds
PASS a_call_argument_mention_is_absent_from_the_denominator_today
PASS a_callee_name_is_absent_from_the_denominator_today
PASS a_user_declared_type_in_parameter_position_reaches_the_collector_holds
PASS characterise_the_module_header_resolves_on_a_normalized_root
PASS a_qualified_cross_module_reference_is_absent_from_the_denominator_today
PASS the_census_population_covers_every_ingested_root_holds
PASS the_census_population_has_no_unreadable_roots_holds
PASS the_import_arm_is_empty_because_imports_do_not_reach_this_route_holds
PASS a_type_name_in_parameter_position_reaches_the_collector_holds
PASS a_bare_field_type_is_absent_from_the_denominator_today
[resolve-summary] 1 resolve(s) in 37907ms wall; 14 witness(es) in 45053ms wall
rc=0
===== src/v2/test/claim/namespace_xl0/field_type_tree_presence_test.dag =====
PASS control_a_parameter_type_name_is_an_atom_in_the_tree_holds
PASS the_record_type_declaration_is_absent_from_the_tree_today
PASS the_bare_field_type_is_absent_from_the_tree_today
PASS the_field_name_is_absent_from_the_tree_today
[resolve-summary] 1 resolve(s) in 36790ms wall; 4 witness(es) in 11866ms wall
rc=0
===== src/v2/test/claim/namespace_xl0/repair_input_origin_denominator_test.dag =====
PASS declared_names_and_the_module_header_are_not_mentions_holds
PASS a_dotted_mention_is_one_site_not_one_per_segment_holds
PASS a_mention_sits_at_its_containment_position_holds
PASS a_cross_module_mention_carries_its_declaring_identity_holds
PASS an_unanswerable_mention_is_a_row_and_not_a_drop_holds
PASS an_unreadable_module_root_is_counted_and_not_silently_dropped_holds
PASS the_roster_carries_the_unreadable_roots_it_was_built_over_holds
[resolve-summary] 1 resolve(s) in 24124ms wall; 7 witness(es) in 55ms wall
rc=0
===== src/v2/test/claim/repair_input_origin_split_witness_test.dag =====
PASS realized_only_token_has_one_rendered_origin_and_no_source_origin
PASS emitted_text_only_token_is_not_an_origin
PASS qualified_item_surface_route_is_origin_derived
PASS partition_conservation_keeps_six_origins_before_compatibility_dedup
[resolve-summary] 1 resolve(s) in 719ms wall; 4 witness(es) in 0ms wall
rc=0
===== src/v2/test/claim/floor/pure_producer_share_refusal_test.dag =====
PASS a_re_proposed_refused_identity_collides_and_is_named
PASS every_re_proposed_refused_identity_is_reported_not_just_the_first
PASS a_roster_that_re_proposes_nothing_reports_no_collision
PASS an_empty_refused_roster_collides_with_nothing
PASS the_live_rosters_admit_nothing_this_roster_has_refused
PASS the_refused_roster_carries_identities
PASS only_a_measured_cost_verdict_transfers_through_its_carriers
PASS a_superseded_row_does_not_transfer_to_other_producers
PASS a_pending_row_for_an_already_admitted_identity_collides_and_is_named
PASS a_pending_row_for_a_refused_identity_collides_and_is_named
PASS a_pending_row_for_an_undecided_identity_reports_no_collision
PASS the_live_pending_candidates_are_decided_by_neither_roster
PASS the_pending_roster_carries_identities
[resolve-summary] 1 resolve(s) in 1050ms wall; 13 witness(es) in 0ms wall
rc=0

— sent from sharp-owl-21

review 65146 found the stage carrier's measured table contradicting the
instrument it tells the reader to re-run, in the same commit that adds the
instrument. Confirmed, and BROADER than reported: the review says the sibling
carrier already carries the field row at compiler_frontend_program_status.dag,
and it does not -- neither carrier contained "field position" anywhere. So both
were stale in the same way rather than disagreeing with each other.

The unqualified "a type-position name reaches" is exactly the coarse reading
this PR documents having mis-reported to the XL-3 and XL-4 lanes. The same bare
spelling reaches from a PARAMETER and does not reach from a FIELD, so a row
that does not say which merges a class that works with a class that does not,
and a trigger written against the merged class retires while half of it stays
dead (DESIGN 4b(3)).

Both carriers now name parameter position specifically and carry the field row
as a fourth class, deliberately unattributed: the measurement is reproduced on
two routes and the cause on neither, and if the declaration is absent from the
tree then no collector-side trigger could ever fire, so naming one would point
a trigger at the wrong layer. The producer that separates field from
qualification is named rather than its output transcribed.

38/38 and 14/14 PASS.

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

gunbai-bot Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor Author

Fixed at f343b325d68. review 65146 is confirmed, and it is broader than reported.

The correction to the finding makes it worse, not better. The review says the sibling carrier already carries the fourth row at dag/gunbc/compiler_frontend_program_status.dag:912 ("bare type in field position -> UNATTRIBUTED"). It did not — grep "field position" returned nothing in either carrier. So the two were not disagreeing with each other; both were stale in the same way, and the second one would have survived a fix scoped to the first.

Why the coarse row is the defect and not a wording nit. The same bare spelling reaches from a PARAMETER and does not reach from a FIELD. A row saying "a type-position name" merges a class that works with a class that does not, and a restoration trigger written against the merged class gets retired while half of it stays dead — DESIGN §4b(3) in its own words. This is also the exact reading this PR records having mis-reported to the XL-3 and XL-4 lanes, so leaving it standing in a carrier would re-seed it from the authority side.

Both carriers now:

  • name parameter position in the REACHES row;
  • carry bare type in FIELD position in the DOES-NOT row as a fourth class;
  • state it is not a dotted case, because the spelling that misses carries no dot;
  • leave the cause unattributed on purpose — reproduced on two routes, established on neither. If the declaration is absent from the ingested tree, no collector-side trigger could ever fire, so naming one would point a trigger at the wrong layer;
  • name the producer that separates field from qualification (v2.test.claim.namespace_xl0.field_type_tree_presence) rather than transcribe its output (§6).

Executed after the edit: 38/38 compiler_frontend_program_status_witness_test and 14/14 call_argument_mention_survival_test PASS.

…nowned

review 65168 (PAUSE_AND_REGROUP) is right about the thing that matters: I hit
stale_claim_survives_its_own_correct_edit four times in nine hours, fixed all
four instances one at a time, and filed my one graduated specimen against the
COST row instead. Principle 3 says that is exactly when to stop fixing
instances.

1. stale_claim_survives_its_own_correct_edit gains the four instances as ONE
   receipt keyed on the shape they share -- the PARTIAL RETRACTION. That is the
   expensive sub-case precisely because the author DID revisit the claim, so
   every instinct that catches a forgotten sentence reports clean; what they do
   not know is how many places asserted it. Executable rule: when you withdraw a
   claim, grep the claim's vocabulary before committing the withdrawal. Reviewer
   tell: a diff that REMOVES an assertion and touches exactly one file. Filed
   with the ratio rather than the anecdotes, because four hand-made joins in one
   PR is the strongest evidence that row's next-rung trigger has ever had.

2. The second class is NOT a new row. absent_reads_identically_to_never_looked
   already owns it, and minting a neighbour would be the re-invention section 2
   forbids. It gains the acc-discarding fold as a specimen that WIDENS it: the
   existing three miss the subject by addressing it wrongly, here addressing is
   perfect and the accumulation drops it, so "check the instrument resolved its
   subject" would have cleared this one.

   I decline the review's grouping of all four instances into that one class,
   with a reason. A spelling match finding Bool in an import line is a FALSE
   POSITIVE from a coarse predicate -- the dual of that row. "A bare name
   reaches" reported as covering cross-module is a TRUE reading over-generalized
   past its evidence, section 4d's second arm. Three mechanisms, three repairs.
   Filing them as one would have bought one row and lost two repairs.

3. Every claim exported to XL-3 and XL-4 re-derived by execution at this head:
   18/18 PASS across both instruments, controls included.

4. StageXL0Denominator now DECLARES that the capability it waits on is unowned.
   Section 4b(2) admits a stall only when declared, and separates cannot-climb
   from can-climb-after-grounding from can-climb-now-but-unbuilt. This is the
   third. Without saying so the carrier reads as though progress were scheduled.

38/38 status witnesses PASS.

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

gunbai-bot Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor Author

Addressed at 1aff8b506f6. review 65168 (PAUSE_AND_REGROUP) named a real, cheap, unpaid obligation and I have paid it. All four items:

1. The expensive class is filed. stale_claim_survives_its_own_correct_edit gains the four instances as one receipt keyed on the shape they share — the partial retraction — not four anecdotes. That is the expensive sub-case exactly because the author did revisit the claim with the correct fact in hand, so every instinct that catches a forgotten sentence reports clean; what they do not know is how many places asserted it. Executable rule: when you withdraw a claim, grep the claim vocabulary before committing the withdrawal. Reviewer tell: a diff that removes an assertion and touches exactly one file. Filed with the ratio rather than the stories — four hand-made joins in one PR is the strongest evidence that row has ever had for its own next-rung trigger. (A fifth followed while I was drafting it: review 65146. It is recorded.)

2. The second class is not a new row, and I decline the grouping — with a reason. absent_reads_identically_to_never_looked already owns the false-absence half; minting a neighbour would be the re-invention §2 forbids. It gains the acc-discarding fold as a specimen that widens it: its three existing specimens miss the subject by addressing it wrongly, whereas here addressing is perfect and the accumulation drops the subject — so "check that the instrument resolved its subject" would have cleared this one.

But the review groups all four instances as one class, and that does not hold:

instance mechanism repair
two folds discarding acc false absence — subject never reached assert the population
Bool matched in an import line false positive — predicate too coarse sharpen the predicate
bare name reported as covering cross-module true reading over-generalized (§4d arm 2) state the claim at its measured grain

Three mechanisms, three repairs. Filing them as one class buys one row and loses two repairs — and this PR already has a receipt for what a merged class does to a trigger.

3. Everything exported to XL-3 and XL-4 is re-derived by execution at this head. 18/18 PASS across both instruments, controls included. This was the item no reviewer could do, and it is done rather than asserted.

4. The stall is declared unowned. StageXL0Denominator now states that the capability it waits on has no lane. §4b(2) admits a stall only when declared, and separates cannot climb from can climb after one grounding from can climb now but unbuilt. This is the third — so the honest reading is not that XL-0 is blocked by physics but that nobody is assigned. Without that sentence the carrier reads as though progress were scheduled. Assigning the lane is my managers call, not mine; the carrier no longer hides that it is open.

38/38 status witnesses PASS after the carrier edit.

On the meta-verdicts closing instruction — I am not requesting further review rounds, and per merge policy I do not merge; the landing ask goes to my operator once CI is green at this head.

— sent from sharp-owl-21

@gunbai-bot

gunbai-bot Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor Author

Thanks — recording the watch-item from review 65190 rather than acting on it, with the reason, since it deserves to survive this PR.

The observation is right. The O(1) reject in src/v2/std/qualified_name.dag re-states the arity rule qn_fold_init encodes and the head/tail label pair qn_fold_step encodes. That is one rule with two representations in one function, and the failure mode is the nasty direction: widening the fold without widening the guard silently narrows acceptance on a function with several call sites. It is the same shape this PR files a receipt for — a correct edit to one carrier leaving the second stale.

I am not pushing a fix, for two reasons and one of them is not "it is small".

  1. The check that would catch it is not authorable as things stand. A witness pinning "guard verdict == fold verdict" needs the fold reachable independently of the guard — but the guard is now the folds own first step, which is what made it acceptance-preserving in the first place. Re-exposing the fold to test the coupling would re-create exactly the second authority the coupling is a symptom of. §4b is explicit that a check whose RED cannot be authored is a decoration, worse than absent because it gets cited as coverage. So the honest repair is structural — derive the guard from the folds own rows — and that is a different change from this one.

  2. The cost of pushing it here is concrete rather than notional. Review 65190 is an approval at this exact head, and the approval floor is head-bound. Pushing a non-finding would void it and restart CI on a PR the manager has on the critical path of the body-lowering lane. Trading a current approval and a CI cycle for a change the reviewer explicitly said needs no action before merge is not a good trade.

What makes it safe to carry: both definitions sit adjacent in one function body, and any widening of the fold has to be authored within a few lines of the guard it must match — which is why the reviewer did not block and why I agree.

— sent from sharp-owl-21

Run 34738510974 is the measurement that matters: all 14
call_argument_mention_survival claims PASSED the floor, so the warm enrolment
works. The four field_type_tree_presence claims did not -- they are the ONLY
budget-refused-before-verdict rows in the entire required floor.

Cause: this file reached the fixture by calling
module_roots_from_source_root_ingest directly, TWICE per claim, over the same
two inline sources the sibling module already ingests. I repaired the file the
floor complained about and left the file beside it doing the same thing, which
is the partial-retraction shape this PR just filed a receipt for -- applied to
a repair rather than to a claim.

It consumes the sibling's call_argument_fixture_normalized, already enrolled
warm. No second roster row: one producer, two consuming files, and a
duplicated call site deleted. Enrolling the same stage twice would have been
the fix that grows the roster instead of removing the recurrence.

The probe is unaffected, which is the only thing that could have made this a
bad trade: what is shared is the INGEST, what this file measures is the shape
of the tree that ingest produces, and both folds still walk it themselves. The
control passes. 4/4 PASS.

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

gunbai-bot Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor Author

CI at aee736b gave the measurement that settles the floor question, and it found one more instance of my own repair being partial. Fixed at b73e6f531e4.

The warm enrolment works. Run 34738510974: all 14 call_argument_mention_survival claims are passed on the required floor, where they were budget_interrupted / right_censored before. That is the remedy verified on the instrument that decides it, not locally.

But I repaired the file the floor named and left the file beside it doing the same thing. field_type_tree_presence reached the same fixture by calling module_roots_from_source_root_ingest directly, twice per claim. Enumerated from required_floor_disposition.tsv rather than the lane summary, its four claims are the only budget-refused-before-verdict rows in the entire floor — 4 of 18,000-odd planned identities.

That is the partial-retraction shape this PR filed a receipt for two commits ago, applied to a repair instead of to a claim: I knew the fix, applied it where the error was reported, and did not ask how many places had the same defect. My own rule from that receipt — grep the vocabulary before committing — would have caught it; I wrote the rule and then didnt run it.

The fix consumes the siblings already-enrolled producer rather than adding a second roster row. One producer, two consuming files, and a duplicated ingest call site deleted. Enrolling the same stage twice would have grown the roster instead of removing the recurrence, which is the opposite of what that roster is for.

The probe still measures what it measured: what is shared is the ingest; what this file asks about is the shape of the tree the ingest produces, and both folds still walk it themselves. The control (control_a_parameter_type_name_is_an_atom_in_the_tree_holds) passes, which is the row that would red if this were reading a different tree. 4/4 PASS.

Note for anyone reading the earlier runs: the route-gap-before-verdict and known-red-held rows in that artifact are pre-existing populations, not this PRs.

— sent from sharp-owl-21

# Conflicts:
#	dag/gunbc/recurring_failure_mode/absent_reads_identically_to_never_looked.dag
@gunbai-bot

gunbai-bot Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor Author

Merged origin/main at a34ac8f5494. 80/80 witness PASS on the merged tree (38/38, 14/14, 4/4, 7/7, 4/4, 13/13).

A merge commit, not a rebase. The dashboard notice asked for a rebase; the standing instruction from my working agreements and my manager is a merge commit — the repo squash-merges, so branch history is flattened at landing anyway, and a merge avoids force-pushing a branch other lanes are reading. Identical end state.

One conflict, and it was append-vs-append. dag/gunbc/recurring_failure_mode/absent_reads_identically_to_never_looked.dag — main added three receipts (snappy-pike-154) while I added four (gunbc#11201) to the same list. Neither side supersedes the other, so both are kept, mains first. Taking either side whole would have silently deleted a landed receipt, which is the failure mode that row is about.

The mirror needed checking even though git did not flag it. main also changed src/v1/stage0/src/std_repair_input_origin.rs, the stage0 mirror I regenerated, and it auto-merged without conflict — which is exactly where a generated artifact quietly loses one side. Verified explicitly rather than assumed: my nine new-type occurrences are present, zero of mains lines are missing, and my 27 lines sit on top as a clean superset.

Floor status, and what the last run actually established

At b73e6f5 the repair this PR was blocked on is verified on the instrument: interrupted_before_verdict=0, interrupted_cpu_deadline=0, passed 3742 → 3745. Every budget-refused row is gone.

The run still went red, on a different identity that is not this PRs: v2.test.claim.affected_set_universe.affected_set_universe_gate_processes_match_declared_gates completed and was then reclassified on cost — cpu 538ms against a 500ms budget, 7.6% over. Three facts place it outside this branchs diff:

  • it passed at 1aff8b5, one commit earlier on this same branch;
  • mains floor is FloorClean on it (main is red, but on the namespace-wave-admission phase — 2 consumed admission rows in src/v1/stage0/src/namespace_wave_admission.rs, which I have no authority to touch);
  • that runs own cross-claim ledger shows producer=ci_gate_processes claims=3 cross_claim_ms=3659 — a shared-precondition recompute inside that module, the family this repository documents as sitting against the line with run-to-run CPU variance.

I am not calling that variance on those three facts alone: 38ms over a line is precisely where a real regression and noise are indistinguishable. A re-run of the identical tree is the discriminator and is in flight; this merge run is a second independent sample. If it reproduces at ~538ms I will chase it rather than re-run again.

— sent from sharp-owl-21

…over

review 65289 is right on both findings, and the second is the sharper one.

The collector carried an import_sites arm and an inside_import flag threaded
through the whole walk. It was built for a real defect -- a spelling match
cannot tell an import mention from a use, and this collector's own witness
once read green on an import line. But the fix was aimed at a condition that
DOES NOT EXIST on this route: import statements are consumed before the
normalized tree the collector walks, so the production identities the
classifier keyed on never appear, no input can inhabit the arm, and nothing
read it. Section 3c calls a declaration whose consumer cannot be named
dangling, and red however well modeled. The defence I wrote -- that a
parse-tree consumer would want it -- named no consumer and no trigger, which
is exactly what 3c refuses as a frontier.

This PR makes that argument correctly one file over: dag/std/repair_input_origin
declines to mint KernelMinted because an arm with no producer is permanently
uninhabited and section 4b calls that a decoration. I applied the rule there
and not here.

The second finding is the same defect in the witness. The row asserted
is_empty over that arm, which no input can populate, so the conjunct was
permanently green by construction. The header immediately above it had already
declined to author a control on precisely that ground and then enrolled the
assertion anyway.

What remains is the measurement that discriminates: Absent exists at exactly
one point in the fixture, an import line, and reaches the collector in no form
at all, with a Bool control that is present. That row reds if imports ever
survive into this tree.

This reverses the manager's instruction to classify import mentions in the
collector. That instruction was premised on imports arriving as ordinary
ReferenceSites, which execution falsified; telling them rather than leaving it
in the diff.

25/25 PASS.

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

gunbai-bot Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor Author

Both findings in review 65289 fixed at 85acbcdd4af. 25/25 PASS.

The second finding is the one that stings, and it is correct. The collector carried an import_sites arm with an inside_import flag threaded through the entire walk. It was built for a real defect — a spelling match cannot tell an import mention from a use, and this collectors own witness once read green on an import line. But the fix was aimed at a condition that does not exist on this route: import statements are consumed before the normalized tree the collector walks, so the production identities the classifier keys on never appear, no input can inhabit the arm, and nothing read it.

§3c: a declaration whose consumer cannot be named is dangling, and red however well modeled. My defence — "a parse-tree consumer would want the classification" — named no consumer and no trigger, which is exactly what §3c refuses to accept as a frontier.

And this PR makes that argument correctly one file over. dag/std/repair_input_origin declines to mint a KernelMinted arm because an arm with no producer is permanently uninhabited, which §4b calls a decoration. I applied the rule there and not here. The reviewer catching my own rule turned against me is the useful kind of finding.

The witness was the same defect: it asserted is_empty over an arm no input can populate, so the conjunct was permanently green by construction. The header immediately above it had already declined to author a control on precisely that ground — and then enrolled the assertion anyway. That inconsistency was mine, one line apart.

What remains is the row that discriminates: Absent exists at exactly one point in the fixture — an import line — and reaches the collector in no form at all, with a present Bool control. It reds the moment imports survive into this tree.

This reverses an explicit instruction from my manager to classify import mentions in the collector. That instruction was premised on imports arriving as ordinary ReferenceSites, which execution falsified. I have told them rather than leaving the reversal buried in a diff.


The affected_set_universe question is settled, and it was not mine

I re-ran the identical tree at b73e6f5 rather than reasoning from circumstantial facts. Attempt 1: affected_set_universe_gate_processes_match_declared_gates completed at cpu=538ms against the 500ms budget and blocked. Attempt 2 on the same bytes: success.

So it is run-to-run variance on a claim sitting against the line, not a regression from this branch — which the three circumstantial facts suggested but could not establish. A 38ms overshoot is exactly where a real regression and noise are indistinguishable, and the only instrument that separates them is a second sample of the same tree.

Worth recording for whoever meets it next: that family is documented in this repo as sitting at the ceiling with measured run-to-run CPU variance, so a single red there is not evidence of a cost regression in the diff that happened to be pushing.

— sent from sharp-owl-21

review 65307 found an annotation left behind by the import-arm deletion --
"the import surface is recognised by the grammar's OWN emitted production
identities" still standing, now as the leading block on an unrelated function,
describing a mechanism this PR removed. Confirmed verbatim.

It is the sixth instance of stale_claim_survives_its_own_correct_edit on this
PR, and the pointed part is that the rule I filed against that row two commits
ago says: WHEN YOU WITHDRAW A CLAIM, GREP THE CLAIM'S VOCABULARY BEFORE
COMMITTING THE WITHDRAWAL. I wrote the rule, deleted the arm, and did not run
it.

So this time I ran it rather than fixing the cited lines. The sweep over every
file the PR touches found a SECOND orphan the review did not cite, in the test
file: a paragraph asserting as current that the collector does not exclude
import statements and that a `Bool` row was green on an import line. The later
measurement retired that -- imports never reach this tree, so those mentions
are real type positions -- and a paragraph three screens BELOW it already said
so. The file contradicted itself and the half stating the dead theory came
first.

Both fixed. The retracted theory is recorded rather than deleted, because it
was told to two sibling lanes and a reader who only sees the corrected text
cannot tell whether their copy of the old claim was ever withdrawn.

14/14 and 7/7 PASS.

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

gunbai-bot Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor Author

Fixed at ba06ca0dd34. review 65307 confirmed verbatim — and running the fix properly turned up a second one the review did not cite.

The finding is the sixth instance of the same class on this PR, and it is on my own deletion. The annotation "The import surface is recognised by the grammars OWN emitted production identities… a mention is an import mention exactly when it sits under one of these" was left standing after the import arm was removed, and had drifted to become the leading block on reference_site_collection_is_total — a claim about a mechanism this PR deleted, sitting beside an unrelated declaration.

The pointed part is that the rule I filed against stale_claim_survives_its_own_correct_edit two commits ago reads: "WHEN YOU WITHDRAW A CLAIM, GREP THE CLAIMS VOCABULARY BEFORE COMMITTING THE WITHDRAWAL." I wrote the rule, deleted the arm, and didnt run it. The reviewers tell for this class — a diff that removes an assertion and touches exactly one file — describes my own previous commit.

So I ran the sweep instead of fixing the three cited lines, and it found a second orphan in the test file. A paragraph there asserted as current: that the collector does not exclude import statements, that Bool appears in import v2.std.logic { Bool }, and that the type-position row was therefore green for the wrong reason. The later measurement retired all of that — imports are consumed before this tree, so those Bool mentions are real type positions — and a paragraph three screens below it already said so. The file contradicted itself, and the half asserting the dead theory came first, which is the half a reader hits first.

That one would have survived this review round and shipped.

The retracted theory is recorded, not deleted. It was told to two sibling lanes; a reader who only sees corrected text cannot tell whether their copy of the old claim was ever withdrawn. The paragraph now says what was believed, that it is retracted, what measured it, and what survives from XL-3s result (the imported-vs-user-declared split, which is why Xl0UserType is the honest type-position probe).

14/14 and 7/7 PASS.

On the class itself: six instances in one PR, every one caught by a reviewer rather than by me, including the one where I had just written the rule that catches it. That is the strongest possible evidence for the next-rung trigger on that row — the join is decidable and nothing mechanical makes it, so it costs one review round per instance. I have not filed a seventh receipt for this instance; the row already carries the ratio and the rule, and adding an anecdote per occurrence is the instance-fixing this PR is supposed to stop doing.

— sent from sharp-owl-21

gunbai-bot Bot pushed a commit that referenced this pull request Sep 13, 2026
…iers

The floor interrupted both claim files before verdict by re-deriving parse-and-normalize per claim frame. One nullary producer, consumed by both files, is the ingest rather than the collector. Review 64996: dissolution frontiers name the claim-test instruments; collect_reference_sites waits on #11201 as the second consumer.

Co-authored-by: Cursor <cursoragent@cursor.com>
carrier_declaration_ref reconstructs decl_name by dropping the owner prefix by
length and rendering the remainder to a dotted string. That is an identity
invented from how a reference was SPELLED, and gunbc#11264's v2 binding model
rules out exactly that construction. The relation it approximates already
exists and is better founded: std.occurrence_binding OccurrenceBindingResult
over ScopedOccurrenceRef retains the reference occurrence AND the declaration's
exact containment path rather than re-deriving either.

It is admitted as a declared frontier rather than refused as a fork because it
is DORMANT, and the dormancy is measured: XL-0 stands NotDerivable, the
collector sees no cross-module reference on the production route, so the roster
is empty there and this function executes only over hand-built trees in the
denominator witness. A relation that answers nothing is not yet a second
authority; it becomes one the moment the roster produces, which is the same
moment XL-0 stops being NotDerivable.

The trigger is at CAPABILITY grain and deliberately NOT "when #11264 merges": a
landed carrier that nothing produces would satisfy a merge-shaped trigger while
the spelling-derived identity stayed the only thing answering, which is the
4b(3) grain mismatch. It fires when the resolver ANSWERS by execution, and it
requires carrier_declaration_ref DELETED rather than kept as a fallback.

Stated beside the declaration because section 3c admits a frontier only with
the trigger there, and a reader opening this module can reach an annotation
here and cannot reach a discussion in someone else's PR.

One file, one row, nothing else touched. 7/7 and 4/4 PASS.

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

gunbai-bot Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor Author

review 65399 — the unused-import remark is correct and it is a seventh instance of the class this PR files, so it deserves more than "noted". Verified: Conj and Symbol at src/v2/compiler/reference_site_collector.dag:10,15 appear nowhere outside the import block and the prose. Symbol was the parameter type of edge_enters_import_surface; both are residue of the import-arm deletion.

What it exposes is a defect in how I ran my own rule, which is the part worth recording. Two commits ago I filed the rule "when you withdraw a claim, grep the claims vocabulary before committing the withdrawal" and then, one commit later, ran exactly that sweep — for the vocabulary (import_sites, inside_import, "import surface"). It found a second orphaned paragraph the review had missed. It could not have found these, because an unused import is not a claim and has no vocabulary — it is a dangling dependency, and the rule as I wrote it only covers dangling assertions. A deletion leaves both kinds behind and my rule names one.

I am not pushing the fix, and the reason is the freeze rather than the size. My manager froze this head so eager-raven-113s manifest fold can run against an exact sha; they unfroze it once, for exactly one commit, to land the binding frontier row. Spending a second unfreeze and a CI cycle on two import lines is the same bad trade I declined for the qualified_name guard remark in review 65190 — and this time there is a queued cross-lane dependency on the sha, not just an approval.

So it is recorded here and goes to my manager with the head-and-tally message. If they unfreeze, it is a two-line deletion; otherwise it is a follow-up, and the class it belongs to already carries the ratio.

Nothing else in the review needs action — the rest is a clean-check list, and I am not going to restate it.

— sent from sharp-owl-21

gunbai-bot Bot pushed a commit that referenced this pull request Sep 13, 2026
ResolvedSpelling.declaring consumes carrier_provenance today; it must derive from
OccurrenceBindingResult when that resolver answer exists, never a third identity.

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Sep 13, 2026
…tier

#11201 executes collect_reference_sites and reference_site_collection_is_total;
#11210 is the next census consumer. Neither lands in this PR, so keep the
predicates and record the landing changes instead of treating them as dangling.

Co-authored-by: Cursor <cursoragent@cursor.com>
@gunbai-bot

gunbai-bot Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor Author

HELD under the operator wind-down (receipt-class, not exempt: std.repair_input_origin + its stage0 mirror std_repair_input_origin.rs are reachable from the emitted closure; plus namespace_wave_admission.rs). Head 199c4da is frozen; 1 approval on head (claude 65399), 0 RC, but DIRTY against main and floor-red on the pre-existing gate_processes cost-lottery row (#11195's subject, not this PR's). RESUME RECIPE (after #11202 lands): merge origin/main ONCE by merge commit taking BOTH sides on every append-vs-append surface — absent_reads_identically_to_never_looked.dag, the shared_precondition_re_derived_once_per_claim_frame row, namespace_cut_stage held receipts (both rows), reference_site_collector (this PR's collector + #11202's qualified_name_shape consumer; verify collect_reference_sites survives, #11210 imports it); delete the two unused imports (Conj, Symbol) in reference_site_collector in the same commit (review 65399); VERIFY the stage0 mirror std_repair_input_origin.rs after the merge (it auto-merges without conflict — check zero main lines dropped); namespace_wave_admission.rs conflicts: take main's file whole, re-add only this PR's block; re-run the touched witness files to completion (local scoped claim_batch); push; one CI cycle; then the class-1 receipt on that sha; then enqueue. What this PR is: an honest XL-0 instrument plus an honest NotDerivable standing (three brief clauses unmet by design, listed in the body) — not a working denominator; its trigger is repair_input_declared_binding_frontier_dissolve_on (#11264's binding answering by execution). — sent from swift-bat-902

@gunbai-bot

gunbai-bot Bot commented Sep 15, 2026

Copy link
Copy Markdown
Contributor Author

Correction to the handoff above: #11195 merged on 2026-09-14 11:33Z, so the gate_processes cost-lottery blocker is retired; what remains for this PR is exactly the merge-of-main recipe above (main has moved further since — re-check the conflict set with git merge-tree at resume), one CI cycle, then the class-1 receipt on that sha, then enqueue. — sent from swift-bat-902

briansrls pushed a commit that referenced this pull request Sep 16, 2026
Resolved: reference_site_collector.dag taken from #11201 (its home; the walker
returns ReferenceSiteCollection with unreadable-root accounting; same exported
shapes #11202's module_graph consumes); qualified_name.dag kept from #11202 (both
sides had folded the O(1) gate into the fold's entry - one implementation kept,
the reviewed verdict-preserving one); namespace_cut_stage, the two failure-mode
rows and floor_pure_producer_share: both sides kept on their append surfaces,
one superseded duplicate receipt dropped from absent_reads_identically_to_never_looked
(main's longer revision kept), list punctuation repaired.
gunbai-bot Bot pushed a commit that referenced this pull request Sep 16, 2026
…' line

The required floor's parser refused dag/std/declaring_identity_spelling.dag with
'expected expression, found Newline': the frontier row was authored as 'data x: T ='
followed by a newline. #11210 was stacked on #11201 so its own CI never parsed the
file; the integration branch's first floor run (0a7376d) did. No other declaration
in the tree has that shape.
@gunbai-bot

gunbai-bot Bot commented Sep 16, 2026

Copy link
Copy Markdown
Contributor Author

Superseded by the NAMESPACE-XL integration branch #11461 (operator direction 2026-09-16: one integration branch for the five floor-met PRs). This PR's content is carried there verbatim except where the branches disagreed — the integration decisions are listed in #11461's body — with its stage0 mirrors regenerated from the candidate at a verified fixed point and every touched witness file executed green. Review history stays here; branch kept. — sent from swift-bat-902

@gunbai-bot gunbai-bot Bot closed this Sep 16, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Sep 16, 2026
…ducer file (review 66837)

The stage standing's why said the spelling census producer EXISTS while the instrument
DeclaringIdentitySpellingCensus stayed NotBuilt with a label that named the whole census -
one name, two meanings, and a machine-readable report that would say UNBUILT for a
producer this integration lands (DESIGN 3 meaning fork; 4b(1) rung honesty). Repaired the
way XL-0's label was: the instrument now names the capability that is absent - a census
answering over XL-3's usable population on the production route (qualified cross-module
mentions in every position; bare FIELD-position types) - and states that the producer
exists and answers over the bare same-module classes only. The stale 'stacks on #11201;
waits on #11201 landing' clause is replaced: #11201 lands in this integration.

compiler_frontend_program_status_witness 39/39 (branch seed claim_batch).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013k9hjAXuaD1HiC1yzd4wnC
gunbai-bot Bot pushed a commit that referenced this pull request Sep 16, 2026
… 66866)

xl1_primary_root_cut_subjects was a second name for
subjects_deleted_at(stage: StageXL6AtomicCutover) that nothing on the capture path
consumed, and its only caller asserted `any(_ => true)` - a witness that a declaration
exists (DESIGN 3c's tell) staying green for any non-empty XL-6 list. The join it named (the
capture subject bound to the namespace_cut_subject_roster) is deliberately unmade - the
frontier is stated on #11201's carrier, not here - so the alias and the witness come out,
with their two imports. Tap witnesses 4/4 and 3/3.

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