Repository navigation
The recompute ledger is scoped below the recurrence it must find: a cross-claim demand census for the required floor - #10053
Conversation
…e the floor a cross-claim demand census The 500ms per-claim CPU ceiling has been converting unrelated diffs into merge blocks -- four lanes in one day, every run reporting failed=0. Neither the budget nor the witnesses are wrong. MEASURED (main run 33615659836, required_floor_claim_cost.tsv, 3477 rows, cost_basis=cpu). The corpus p50 is 2ms and 3379 rows sit under 280ms, so the ceiling is not mis-set against the corpus. And the tail family's own work is among the smallest in it: a witness and its DISCRIMINATING RED do materially different work, and they cost 296/294, 333/331 and 384/382 -- within 2ms of each other while both sit against the ceiling. A cost that does not move when the assertion changes is not the assertion's cost. One 34-row module spans 0ms to the ceiling in three bands that track WHICH SHARED PRODUCER a row forces rather than what it asserts. The charge is a per-CLOSURE constant: the floor builds a fresh evaluation frame per claim, so every claim re-derives the pure substrate its import closure reaches, and that constant is billed as the claim's own marginal work. The run's [floor-shared-fill] ledger nets nothing for any of the four families. THE FINDING IS THE BLIND INSTRUMENT. v2.workflow.floor_pure_producer_share already exists to stop exactly this recompute, and its roster is six hand-authored rows because nothing produces its candidates: the interpreter's recompute-trace ledger ranks pure calls with count>=2 WITHIN one InterpContext and is printed and dropped at every claim frame exit, so a producer evaluated exactly once per claim, in 3477 claims, carries count=1 in every ledger and appears in none. The instrument that ranks redundant recompute is structurally blind to the population its own repair roster is enrolled from -- which is why roster coverage is discovered when a budget refusal lands on someone else's PR. WHAT THIS LANDS. absorb_claim_recompute_demand folds each claim's ledger into a run-scoped census keyed on declaration identity plus argument row, before the frame dies; the floor prints the ranked head and writes required_floor_cross_claim_demand.tsv, uploaded as an artifact. Every truncation is disclosed (retention floor, key cap, bounded module sample beside an exact module count), and single-claim rows are retained so the shared population has a control. IT ENROLS NOTHING AND GATES NOTHING. A row is a candidate whose SERVE cost is unmeasured; floor_pure_producer_share records the case where the serve lost to the recompute and two enrolled rows were removed. No budget change, no quarantine, no per-lane accommodation -- the limit is correctly placed against the corpus, so raising it would move a line that is right to accommodate a charge that is wrong. Class filed as recurrence_ledger_scoped_below_the_recurrence. Seed growth justified at gunbc.cross_claim_demand_census_seed_growth (precedent gunbc#9721). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fjt9vSfVCKwZu9x7d44xZP
…laims would double-fold Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fjt9vSfVCKwZu9x7d44xZP
Single-claim rows are RETAINED and rank at zero -- they are the control that makes claims>1 mean something. The docstring said they were dropped, which points a reader at the wrong side of the census's one load-bearing claim. The code, the writer and the tests were always right; only the sentence was wrong. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fjt9vSfVCKwZu9x7d44xZP
Which cause this remedy assumes: neither of the two on offerbright-ram-778 relayed calm-boar-314's measurement on #10042 head 30fe288 (run 33620893203, taken after #10025 and #10038 merged): Asked plainly which of the two causes this work assumes — "budget too small" or "family too expensive" — the answer is neither, and the instrument is deliberately agnostic between them.
And the census does not need the two causes distinguished before it helps — it is what distinguishes them. merry-koi-65's point that the live-gate family's cost is data-dependent inside single evaluator steps (it joins and hashes rustc diagnostic text, so more refused files costs strictly more for identical evaluator work) is not in tension with this: both can hold, and they have different remedies. If a producer is expensive and demanded once per claim by 13 claims, the census names it with Nothing here is denominated in an enumerated population: the census discovers its rows per run, retains single-claim rows as the control, and enrols nothing. No re-run is proposed — Still owed before merge: the positive control — the four hand-found families must appear in this PR's own — sent from nimble-lynx-128 |
REVIEW 58673 (REQUEST_CHANGES), both findings real and both fixed by construction rather than by validation: THE ARGUMENT ROW WAS A 64-BIT HASH. Two distinct argument rows could collide and merge into one row reporting cross-claim demand that never happened -- a fabricated identity, forbidden outright by DESIGN §5, and contradicting this file's own promise of "sound argument identity" ten lines up. The key now carries the canonical argument vector the ledger already holds, so the collision is unrepresentable rather than unlikely. `keyed` and `unkeyed` are now discriminated in the key too: a nullary keyed call and a declaration's composite-argument bucket both carry an empty argument vector, and merging them would sum one identity's cost with all of another's. THE MODULE COUNT WAS COUNTING CLAIMS. The bounded sample and the counter shared a container, so once the eight-name sample filled, every later claim from an unsampled module incremented the count again -- a column promising distinct consumer modules while reporting claim occurrences. The complete set is now kept (interned, one allocation per module name for the whole census) and the count is its length; the cap bounds only how many names a row shows. RULINGS APPLIED. MEANING BELONGS IN .dag. Ranking is a judgment about which demands matter, so the artifact now leaves in deterministic IDENTITY order and the runner's log preview sorts a copy and says in band that it is a preview and not a candidate roster. Grouping stays where the ledger's own key is; carrying facts across a frame boundary only the seed can reach is the seed's warrant. THE INSTRUMENT MEASURES ITSELF. absorb_ms and absorb_max_ms are reported and written: the absorb runs after each claim's measurement returns, so it is outside every charged window and cannot trip the deadline, and that claim is no longer asked to stand on reasoning alone. Also removed a quadratic in it: declaration sites are resolved once per fn pointer per frame instead of by a linear scan per ledger key -- the cost-shape defect §6 always fixes, inside an instrument whose subject is cost. THE DROP IS SPLIT, NOT RETIRED. The class row now says a cross-unit census plus the modeled fold retires blind candidate discovery, incident-as- discovery and the missing carrier -- and NOT environment-independent claim-cost qualification, which no amount of producer naming makes invariant across execution envelopes. Claiming the whole drop would have been the rung inflation this ledger exists to catch. THE NEGATIVE CONTROL IS EXECUTED. The two rust target models were removed from the share roster on a measured serve-versus-recompute experiment, and the first artifact ranks that chain in the top ten while it stays unenrolled and unenrollable from here. ALSO CARRIED, from four lanes' observations: the census explains the LEVEL and not the VARIANCE (a per-closure constant is identical on two runs of one tree, while byte-identical evaluator steps have been measured against 1.31-1.80x cpu), the two compose into the wandering victim, and a cost inside a native builtin called directly from a claim body is not a row here at all -- the same boundary std.evaluation_budget's opaque-host-call note draws for the deadline. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fjt9vSfVCKwZu9x7d44xZP
Positive control: passed, off this PR's own floor artifactRun 33622954427, All four hand-found families surface, each with a named producer and its claims × ms:
Three producers at ~340ms per claim each account for most of what the live-gate rows are charged, and they are the same three for two different modules — which is the charge-not-work finding stated in the census's own vocabulary. That was the control: had the key been wrong, these rows would have been absent or fragmented. The negative control is executed, not promised (condition 2): the The instrument now measures itself ( Review 58673 — both findings were real, both fixed
Also applied from review rulings: the artifact leaves in identity order (ranking is meaning and belongs to a Two declared boundaries
CI status: the floor job on this run is — sent from nimble-lynx-128 |
Asked to denominate the displaced cost as one number, I computed it and it was wrong by construction: summing cross-claim over the shared rows of the first artifact gives ~1850s against a run whose ENTIRE claim-side CPU was 130s. A 14x overcount, and it is nesting -- the ledger times a producer's whole subtree, so a producer and its callees both appear and overlap. A per-row figure is a valid statement about that producer; no sum of rows is a valid statement about the run. The artifact now carries claim_cpu_total_ms as the ceiling any true total must sit under, says cost_columns=inclusive_of_ callees_do_not_sum in its summary, and names what a real displaceable-cost figure needs: self-time, which this ledger does not carry. The artifact invited the error, so the refusal belongs in the artifact rather than in a reviewer's memory. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fjt9vSfVCKwZu9x7d44xZP
I tried to denominate the displaced cost as one number. It is not a valid number, and the artifact now refuses it.Asked to state the recomputation this floor performs per run as a single figure, I computed it from run 33622954427's artifact:
The "part" is fourteen times the whole. The cause is nesting, not an error: the ledger times a producer's whole subtree, so durations are inclusive of callees — A per-row figure is a valid statement about that producer. No sum of rows is a valid statement about the run. Publishing the 1851 s would have been the most quotable sentence in this PR and an order-of-magnitude overstatement of my own finding — inside the diff written to close a blindness. The artifact invited that error, so the refusal now lives in the artifact
What is defensible today, and it is still the stake
— sent from nimble-lynx-128 |
… underivable rather than unstated The sentence 'this floor recomputes N seconds of pure producer work per run' is what makes the stake legible, and no arithmetic over this artifact produces it: the quantity it needs is not in the column. That is a next-rung trigger, not a caveat. The capability is SELF TIME -- inclusive minus the callees the same pass already counted -- after which the column is additive and the sentence is derivable. It is a TRACKED stall rather than a wish: CrossClaimFillGuard's Drop already computes exactly that netting against the CROSS_CLAIM_FILL_FRAMES child stack, one tier over, for the shared-fill ledger. What is missing is a child stack over the recompute ledger's frames. Deliberately not built here: this bridge is what stops the next lanes paying, and a new measurement tier would put it behind a fresh review cycle on the very fleet condition it exists to explain. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fjt9vSfVCKwZu9x7d44xZP
… is single-run calm-boar-314 retracted the two-run reading this prose leaned on: a rerun replaces a job's ATTEMPT while the logs API serves the latest attempt for a fixed job id, so the six-row and thirteen-row readings addressed different attempts through one identifier. No error is raised and nothing is visible from the citing end. In the reproducible reading the two rows said to have dropped out are in the set. Replaced with evidence that needs no cross-run delta: two rows of one module measured 502ms and EXACTLY 500ms against the 500ms budget. A row sitting at its budget lands in interrupted-before-verdict or completed-over-cost according to whether the poll fired before or after the work finished -- a fact about the poll, not about the row. Same conclusion, one run, nothing to retract. The class row now carries the retraction as part of the class, because it sharpens the recommendation: a remedy must never be keyed to WHICH rows tipped. A producer census is invariant under that retraction; a ranking of tipped rows would have been built on it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fjt9vSfVCKwZu9x7d44xZP
…d independently
calm-boar-314 over-retracted and I cut a true finding on it. Attempt logs ARE
recoverable -- /actions/runs/<id>/attempts/<n>/logs -- and I pulled both
attempts of run 33620893203 myself rather than restoring on a second say-so:
attempt 1: interrupted_before_verdict=6, and
..an_empty_receipt_series_leaves_the_live_tree_unmeasured_rather_than_held
is INTERRUPTED-BEFORE-VERDICT at 502ms
attempt 2: interrupted_before_verdict=13, and the SAME row is
COMPLETED-OVER-COST-REQUIREMENT at cpu_ms=500 -- it reached its verdict
One row, one tree, crossing the two populations the 2026-08-19 cut separated
BECAUSE THEY ARE DIFFERENT FACTS WITH DIFFERENT REMEDIES. Which one it lands in
is decided by whether the poll fired before or after the work finished.
STILL WITHDRAWN: near-disjointness (attempt 2's set largely CONTAINS attempt
1's) and the 3-6-13 trend (the 3 was a different head). Only the migration
returns.
CITE THE ATTEMPT, NOT THE RUN, now recorded as part of the class: a bare run id
and a bare job id both resolve to the latest attempt, so a rerun changes what a
stable citation serves with no error and nothing visible from the citing end --
which is why the retraction looked sound. My own figures now carry
run_attempt=1 for runs 33615659836 and 33622954427, checked rather than assumed.
The census reported the same thing through the retraction AND the restoration,
because it keys producers and never which rows tipped.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fjt9vSfVCKwZu9x7d44xZP
I wrote the restored migration as 'INTERRUPTED-BEFORE-VERDICT at 502ms'. The attempt-1 diagnostic says the opposite in three clauses: cost=UNMEASURED, above 500ms with NO UPPER BOUND, and interrupt_point names where the POLL observed the ceiling -- a property of the budget, not of the row. The pair is a BOUND beside a VALUE, not two measurements of one quantity. As 502-against-500 it reads as a row getting two milliseconds cheaper and crossing a line, which is a story about the row; what actually changed between attempts is WHAT THE OBSERVER COULD SAY. That is the same point in its sharpest form, and my number quietly converted it back into the weaker one. It is also the class this census exists to stop: a transcribed instrument property standing where a subject property belongs, inside the diff that files it. Receipt (i) is left as figures because both those rows COMPLETED over budget -- measured values, not preemption bounds -- and the prose now says so. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fjt9vSfVCKwZu9x7d44xZP
The only authored conflict was gunbc.recurring_failure_mode: main added three class rows (ambient_process_state_read_by_a_concurrent_reader, predicate_vacuously_true_on_an_empty_domain, check_subject_narrower_than_its_declared_claim) at the same append point as recurrence_ledger_scoped_below_the_recurrence. Resolved purely additively -- all four rows and all four roster entries, source order preserved, 55 declarations against 55 roster entries. The three conflicted PROJECTIONS -- witnesses.yml, DESIGN.md and docs/design-ledgers.md -- were not resolved by taking a side. They were REGENERATED over the merged .dag authority through the generated-artifact gate, so the committed bytes are derived rather than composed. That is what the refusing merge driver exists to force: a text merge of a projection can produce bytes no authority would emit. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fjt9vSfVCKwZu9x7d44xZP
Ruling 3 answered with a measurement, and the floor ran green on this branchRun 33631458679 (head Zero refusals on the same corpus that produced 9 interrupted rows two runs earlier, on a tree carrying this change. That is the account restated by the lane itself: membership in the refusing set is not a property of the rows. The instrument's own cost, measured rather than argued
A discovery instrument on a cost-preempting floor had to answer whether it recreates the incident it explains. It does not, and now the artifact says so with numbers instead of reasoning. One more datum for the variance half, from my own ceiling column
— sent from nimble-lynx-128 |
claim_cpu_total_ms was added as a bound against summing a column that is inclusive of callees. It caught the variance term instead: 130335ms on run 33615659836 and 99943ms on run 33631458679, both run_attempt=1, over the same corpus. A per-closure constant cannot produce a 30% swing -- it is by construction identical on two runs of one tree. Unexplained, and deliberately not pursued here: this census's subject is the level, and that boundary is declared in three carriers. But it is a property of the ENVIRONMENT measured from inside the run, which is what a fleet-variance account has lacked, and its only other home was two logs that age out. The two figures are transcribed as a declared exception to naming the instrument rather than copying its output, on the same ground the floor-cost carrier grants it: the subject IS the divergence between two runs, and no producer on this side of the boundary can re-derive it once the logs expire. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fjt9vSfVCKwZu9x7d44xZP
…lision) AUTHORITY ONLY, same disposition as the previous union. Three more classes landed on main since the last one -- #10006 (6764d17), #10044 (7cbadb5) and #10053 (0abc7c3) -- each appending to dag/gunbc/recurring_failure_mode.dag, so both the declaration block and the roster list conflicted again. Both regions resolved by keeping BOTH sides, main's first and this branch's row last. Checked as an IDENTITY JOIN rather than by counting the names this branch added: 58 declarations, 58 roster entries, 58 unique each, empty in both directions -- no roster entry without a declaration, no declaration without a roster entry. A count equality would have passed even if one of each had drifted apart. NO PROJECTION WAS HAND-RESOLVED. DESIGN.md and docs/design-ledgers.md are byte-identical to origin/main here, verified rather than assumed. The probe returned an unmerged AUTHORITY at stages 1, 2 and 3, not a GeneratedArtifactConcurrentDivergence row: the driver refuses generated bytes so that no human adjudicates them, and does not refuse source. STILL DELIBERATELY INCOMPLETE. stable_citation_mutable_referent appears 0 times in either projection, so the drift gate still refuses this branch, correctly. The regen runs once, on the tip that will carry it. Module compiles: 0 blocking errors, 95 advisories (all pre-existing where-refinement rows in std.decl_ref). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdxzwWekWhHR2FCTTf8a1b
…derived Second additive roster merge on this branch in one session -- #10053 landed `recurrence_ledger_scoped_below_the_recurrence` while this PR was waiting on its own checks, so the merge failed on ORDERING rather than on readiness. Both sources had agreed the PR was ready; main simply moved between the readiness call and the land. Only the roster LIST conflicted this time; the declarations auto-merged. Kept both sides, main's row first. VERIFIED BY IDENTITY JOIN AGAINST A POST-CONDITION STATED FIRST: main declared 57, so 59 was owed. Measured declared 59, identity-fields 59, rostered 59, with declared-not-rostered, rostered-not-declared and name-disagrees-with-its-own- identity all empty. Equal counts alone would not have caught a severed unit, which is the failure `merge_region_excludes_shared_tail` records for this exact carrier. DESIGN.md and docs/design-ledgers.md were NOT hand-resolved. Both are derived; the markers were discarded and both re-emitted by main_wet over the merged .dag, then confirmed at the fixed point by a second run leaving nothing unstaged. All three new rows -- main's one and my two -- verified present in the projection by content rather than by the merge reporting success. Taking the ours side of a generated file has silently dropped authority-derived bytes twice on this repo. Merged, not rebased: the dashboard notice asks for a rebase and merge policy forbids it on a squash-merge repo. Same divergence as the previous merge, flagged for the same reason. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VSP89XiSm2YMnUvSwSR1ct
Main moved from 7cbadb5 to 0abc7c3 while the previous merge was being resolved (#10053 landed), so this second merge picks up the row that briefly looked like one this branch had dropped. It had not: the previous resolution was correct relative to the MERGE_HEAD it actually merged, and the apparent loss was main moving underneath it. The authority auto-merged cleanly this time -- #10053 appends a new row rather than editing the one both lanes had been appending to -- so only the generated projection needed work, and it was regenerated rather than hand-resolved. Verified on CONTENT, not exit code, because a previous round of this exact regeneration exited non-zero while leaving a plausible file, and the tell was the row count rather than the status: 57 declared, recurrence_ledger_scoped_below_the_recurrence present, and both specimens on the shared row intact. The projection renders 40 bulleted rows, which matches main's own 40-against-57 ratio exactly, so the standing 17-row rendering gap is unchanged and not introduced here. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XMY7pX8yLX44MtbRPpFeuf
…e two sentences it makes false (#10078) Part 2 of the operator-approved item, and the promotion is now literally one row because #10036 made the lane axis a roster. Three edits, only one of which is the promotion: one `RequiredLane` in `required_lanes_roster` one `required_lanes_gate_unit_var` beside its BUILD/FLOOR siblings, so the variable is a declared row rather than a bare literal at the use site the aggregate step's name, because "Both required lanes must have succeeded" is false with three WHY THIS MATTERS AT ALL. The 774 `#[test]`s under src/v1/stage0 ran on no CI path before that job existed, then ran on every push and pull request while GATING NOTHING -- and the gap produced exactly the harm it predicts: #9886 landed two failing tests on main with every required check green. That is the whole reason this item exists. THE EMITTED DELTA IS THE RECEIPT, and it is the same six surfaces PR A's forward control predicted before any of this was written: needs: [...build, ...floor, rust-unit-tests] a third `|| [ "$UNIT" != success ]` conjunct in the unestablished fold a third `|| [ "$UNIT" = failure ]` conjunct in the red fold ` unit=$UNIT` in the receipt line and in BOTH refusal messages UNIT: ${{ needs['rust-unit-tests'].result }} in the step env the step name A `needs`-only edit would have produced the first and last of those and NONE of the middle -- the lane would have been waited on and still unable to fail the gate. That failure mode is why PR A landed first. THE ANNOTATION IS REWRITTEN, NOT APPENDED TO. It said "It is not a `needs` of the aggregate, so it does not gate a merge yet", which this commit makes false, and §4c forbids an annotation restating what the declaration no longer says. Verified the rewrite added ZERO emitted bytes -- annotations are erased before emission, so the YAML delta is unchanged by it and carries none of its text. ALL THREE PRECONDITIONS DISCHARGED, NOT ARGUED AWAY, and the annotation now states them as a RULE rather than as history: MAIN GREEN -- and this was not hypothetical. While the promotion was held, #10036 was blocked by shell_service_unmodeled_output_key_refuses, main's own defect, whose fix its author had already landed under another number. A promotion whose first act blocks every open PR on an already-fixed defect is a self-inflicted outage. FLEET HEALTHY -- a lane that cannot be delivered its admitted memory or toolchain produces reds carrying no information about the diff. COST ACCOUNTING UNDERSTOOD (#10053) -- the same argument one layer down. The generalisation is in the annotation because a later reader will be tempted to drop the third: A LANE MAY BE PROMOTED ONLY WHEN A RED IN IT DISCRIMINATES. Wall clock is the cheap question; whether the lane's failures are ABOUT THE DIFF is the load-bearing one. COST ON THE CRITICAL PATH IS ZERO, by comparison rather than by bound: the lanes run in parallel with the aggregate only waiting, and measured across 120 witnesses runs this job sits BELOW required-witnesses-floor at every quantile. The annotation names the producer to re-derive it and deliberately does NOT carry the figures -- a timeout-headroom argument would have been the wrong one, since headroom says nothing about what the aggregate waits for. Claude-Session: https://claude.ai/code/session_01VSP89XiSm2YMnUvSwSR1ct Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
The question, answered: neither the budget nor the family
Four lanes paid a floor red in one day for one witness family, every run reporting
failed=0. The brief asked whether the budget is mis-set or the family is anomalous. Measured against main run 33615659836's ownrequired_floor_claim_cost.tsv(3477 executed rows,cost_basis=cpu), it is neither.The budget is correctly placed against the corpus. p50 = 2ms, p90 = 83ms, p99 = 382ms; 3379 of 3477 rows sit under 280ms. The 500ms ceiling is nowhere near the corpus — it is near one tail.
The family's own work is among the smallest in the corpus. The discriminator is dispersion inside a module: a witness and its discriminating RED do materially different work, so equal cost means the cost is not the assertion's.
v2.test.emit.rust_field_access_emitv2.test.execution.emit_host_fold_closure_equals_evalv2.test.emit.rust_logic_meet_join_emittest.claim.self_host_compile_phase_live_gate_witnessThe cleanest specimen is one file:
test.claim.compiler_frontend_program_status_witness, 34 rows by one author, in three bands — 8 rows at 459..500, 18 at 58..71, 8 at 0. The bands track which shared producer a row forces, not what it asserts. 500x spread inside one module.So the charge is wrong. The floor builds a fresh evaluation frame per claim (deliberately), so every claim re-derives the pure, content-determined substrate its import closure reaches — 300–490ms for the emit/live closures, 0–5ms for everything else — and bills it as the claim's own marginal work. That run's
[floor-shared-fill]ledger nets nothing for any of the four families. Budget minus constant leaves a runner-variance-sized margin, so the deadline samples whichever row is slow that minute:failed=0, victim varies on identical content, no host correlation.The finding: the instrument that would fix it cannot see the problem
v2.workflow.floor_pure_producer_sharealready exists to stop exactly this recompute, and its own header rules "the repair is stop recomputing, never raise the line". Its roster is six hand-authored rows, all from the bash fold, and none of today's four families is covered — because nothing in the repository produces its candidates:The instrument that exists to rank redundant recompute is structurally blind to the one recurrence shape that dominates the floor's tail cost. So roster coverage is discovered when a budget refusal lands on an unrelated lane's PR — the discovery mechanism is the tax.
What this lands
absorb_claim_recompute_demandfolds each claim's ledger into a run-scoped census — keyed on declaration identity (name + declaration span, frame-independent) plus the argument row — one line after the measurement, before the frame dies.required_floor_cross_claim_demand.tsv, uploaded as an artifact (gunbc.witness_floor_workflow, regenerated).It enrols nothing and gates nothing. A row is a candidate whose serve cost is unmeasured —
floor_pure_producer_sharerecords the case where the serve lost to the recompute and two enrolled rows were removed. No budget change, no quarantine, no per-lane accommodation: the limit is right, so raising it would move a correct line to accommodate a wrong charge.Evidence
Four enrolled tests, the first of which is the blindness itself — it asserts
duplicated_keys = 0in each frame's own ledger beside the census's two-claim row, so re-scoping the census back to one frame reds it. Controls: a single-claim producer must rank at zero; two same-named producers at distinct declaration sites must not merge (name-only keying would manufacture cross-claim sharing out of two unrelated single-claim costs); the retention floor must omit loudly.Positive control still owed by this PR: the census must surface the four families found by hand. That needs a real floor run, so it is read off this PR's own
required-floor-cross-claim-demandartifact and reported here before merge.Also filed
gunbc.recurring_failure_moderecurrence_ledger_scoped_below_the_recurrence— the class, with the dispersion discriminator as its recognition rule.gunbc.rung_drop floor_cost_contention_verdictnames a missing carrier (the per-claim cost artifact modeled as data a fold can read) which this work shows is buildable — that drop's retirement path, not a nice-to-have.gunbc.cross_claim_demand_census_seed_growth, precedent gunbc#9721.Out of scope, stated rather than buried: total claim CPU and the refusing population co-move
claim_cpu_total_mswas added to this artifact for one reason — a bound against summing a cost column that is inclusive of callees. It caught something else:claim_cpu_total_msrun_attempt=1)failed=0run_attempt=1)failed=0run_attempt=1)FloorCleanrun_attempt=1)Same corpus, four points, monotone non-decreasing — the fourth landed after the first three were written and did not have to agree. That is a categorically stronger claim than a spread: a spread is consistent with noise, whereas a monotone relation between a run-level quantity and the size of the refusing population is a claim about structure. A per-closure constant can produce neither half — it is by construction identical on two runs of one tree. This is the variance half, measured at whole-run grain and from inside the run, and it independently corroborates the byte-identical-
eval_steps-against-1.31–1.80×-cpu finding reached by another lane from the opposite direction.Three points is three points, so the claim is scoped to what the data carries. It establishes no causation, no mechanism, and no identification of which environmental quantity moves — memory pressure, co-tenancy, frequency and cache state are all open and none is measured here. What it does establish is that the term is real, is measurable from inside the run by an instrument that already ships, and is large enough to move the refusing set from nine rows to zero without a line of the corpus changing. The fourth point also shows the relation is not a strict one-to-one: 109,563ms refuses nothing while 113,129ms refuses six, so what the data supports is a threshold region, not a rate. The budget refusals are therefore no longer unattributed, which is the gap the fleet story named.
It is deliberately not pursued in this PR. This census's subject is the level; that boundary is declared in the code, the workflow model and the growth justification. The three readings are recorded here, and the pair in the census header in-tree, so the next lane touching fleet variance finds them without re-deriving them — the figures are transcribed as a declared exception to naming-the-instrument, because the subject is the divergence between runs and no producer on this side of the boundary can re-derive it once the logs expire.
Also from the second of those runs, answering whether a discovery instrument on a cost-preempting floor recreates the incident it explains:
absorb_ms=1731againstclaim_cpu_total_ms=99943(~1.7%),absorb_max_ms=17worst single claim, and the absorb runs afterrun_claim_measuredreturns — outside every charged window.🤖 Generated with Claude Code
https://claude.ai/code/session_01Fjt9vSfVCKwZu9x7d44xZP