Skip to content

PROBE ONLY — DO NOT MERGE: uncensored cost measurement for the 102 budget-refused rows - #8451

Closed
gunbai-bot[bot] wants to merge 1 commit into
mainfrom
probe/floor-uncensored-cost
Closed

gunbai-bot[bot] wants to merge 1 commit into
mainfrom
probe/floor-uncensored-cost

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Aug 18, 2026 •

Copy link
Copy Markdown
Contributor

MEASUREMENT INSTRUMENT. This branch exists to take one number and is deleted afterwards. 30000ms is not a proposed budget and this must never merge.

Why the data on main cannot answer the question

After #8447 restored the roster, main reports:

passed=8951 known_red_held=367 failed=5
stale_quarantine=0 budget_refused=97     -> exit 1

All 97 budget-refused rows are Interrupted, against one budget (1552ms):

elapsed  min=1553  p50=1554  p90=1692  max=20215

Every one of those elapsed figures is a censored lower bound, not a cost. A row killed at 1554ms has true cost >= 1554ms and may need far more. The floor's own diagnostic offers exactly two dispositions — reduce the row's cost, or move it to a lane that declares its own ceiling — and neither can be chosen from censored data.

The tempting inference is that raising the budget to ~1600ms clears 85 of 97, because 85 rows report elapsed under 1600. That inference is invalid: those rows were killed, not finished, so a higher budget lets them run longer and be killed again one quantum later. Acting on it would look like progress and change nothing.

A finer poll stride does not help either — it tightens the overshoot and reproduces the censoring at higher resolution. Only completion yields an exact cost. (Prescription from tidy-pike-117, adopted.)

What this measures

Raising the per-claim budget to 30000ms lets these rows run to completion, converting censored bounds into measurements. Rows needing more are still censored, but at >=30s rather than >=1.55s — enough to separate the two dispositions.

CORRECTION (my own claim, refuted by my own measurement). An earlier version of this line said 30000 "bounds the run." It does not, and I should have caught it: the deadline is cooperative and fires only at 4096-step poll boundaries, so low-step or host-builtin-heavy work sails past it. I measured the existing 1552ms budget overshooting by up to 19,192ms — inversely proportional to steps/ms across four orders of magnitude. The five near-stepless rows (45,552ms in 7 steps) are the controls proving it.

The honest statement: 30 seconds bounds the intended observation window at pollable execution sites. The hard run bound is the 180-minute workflow timeout. Any post-threshold completion or overshoot is itself part of the receipt, not a failure of it. (Correction owed to the side-chat reviewer.)

The receipt must carry verdict AND cost together

These are enrolled expected-red rows, so completion does not imply passing. Three outcomes are all real and must not be collapsed into an elapsed-only ranking:

  • completes PASS -> exact cost, and a stale enrollment (stale-quarantine)
  • completes FAIL -> exact cost, and the expected red it was enrolled for is finally demonstrated (held)
  • still interrupted -> censored still, but at >=30s instead of >=1.55s

Ranking by elapsed alone would silently merge the first two, which differ in what they oblige.

What it will decide

The exact costs partition the 102 rows (97 refused + the 5 PassedOverBudget failures, whose costs are already exact at 2.6s / 22s / 29s / 45s / 75s):

  • near 1552ms -> the budget is miscalibrated, not the rows. 1552 is measured-max + one scheduler quantum from a 1527ms observation on 2026-08-18; a snapshot pin re-derived from a live tree is exactly the oracle DESIGN §5 rejects.
  • genuinely expensive -> a real cost defect: reduce it, or declare a ceiling.

Census first, partition by mechanism, fix by class — the method Wave 1 (#8396) used to split 339 name-resolution rows into two causes and clear 164 of them.

Disposition

Branch-local experiment. No dissolution obligation is created because nothing here merges: the branch is deleted once the numbers are recorded, per DESIGN — the canary may run and produce measurements, then be deleted, leaving only the facts.

— sent from sleek-moth-351

…or one uncensored cost measurement

Every one of the 97 budget-refused rows on main is Interrupted, so its
elapsed is a CENSORED LOWER BOUND, not a cost. A row killed at 1554ms has
true cost >= 1554ms and may need far more. No disposition can be chosen
from censored data: 'reduce the row's cost' and 'declare a ceiling' need
the actual number, and raising the budget on the strength of elapsed would
just re-kill the same rows one quantum later.

Measured on run 32172241912 (97 rows, all against budget 1552ms, all 'at
least'): elapsed min 1553, p50 1554, p90 1692, max 20215.

A finer poll stride cannot fix this — it tightens the overshoot and
reproduces the censoring at higher resolution. Only COMPLETION yields an
exact cost (prescription from tidy-pike-117, adopted).

30000ms is chosen to bound the run: rows needing more are still censored,
but at >=30s rather than >=1.55s, which is enough to separate a
miscalibrated budget from a genuine cost defect.

This branch is a measurement instrument and is deleted after the numbers
are taken. It must never merge: 30000ms is not a proposed budget.

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

gunbai-bot Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor Author

MEASUREMENT TAKEN, AND ITS CONCLUSION IS THAT THE BUDGET SHOULD NOT BE RAISED. Closing. Operator ruling: a witness taking 30 seconds "is basically a failing test" — the tests are valid and passing, and their responsibility needs splitting rather than their ceiling raising.

Run 32175959536 at 30000ms against main at 1552ms:

                    main @1552ms    probe @30000ms
budget_refused           97              10
stale_quarantine          0              76
known_red_held          367             378
failed                    5               3

The 97 undecided rows decompose into three populations, which is what the probe existed to establish and what no censored reading could have produced:

  • 76 PASS when allowed to finish. Enrolled as expected-red, no longer red. Stale roster rows the 1552ms ceiling was hiding — they never got far enough to report anything.
  • 11 genuinely still red. They demonstrate the failure they are enrolled for once they have time (known_red_held 367 -> 378).
  • 10 unfinished even at 30 seconds, pinned at ~30,001ms: the same censoring one level up, true cost still unknown.

The trap this rules out, for the record. Raising the budget alone makes main worse — the 76 move budget_refused -> stale_quarantine, equally red. Retiring the 76 alone is worse still — unenrolled plus interrupted reports as failed, so failed=76. Only a joint change moves the needle, and the operator has now ruled out its budget half. That closes the question rather than leaving it open.

One family root-caused, with evidence. dag_arrow_lambda_witness_test — 13 of the slow rows — parses 3-line sources like fn f(xs: List<Int>) -> Bool { any(xs, p => p == 1) }, but each witness calls dag_grammar(), rebuilding a grammar defined across a 6,230-line module with 134 production constructors. The floor gives each claim a fresh frame by design, so nothing is reused: 13 witnesses, 13 full grammar builds, against a subject worth ~1ms of parsing. That is a cost-shape defect, not a slow test.

It does not generalize to all ten families: effect_reach_test (8 rows) carries zero parse or grammar references and is slow for some other reason. At least two mechanisms are in play and I am not asserting one cause across the rest without measuring it.

Disposition: branch deleted, nothing merged, 30000ms was never a proposed budget. The instrument produced the partition and is now waste — per DESIGN the canary runs, produces measurements, and is deleted, leaving the facts. The facts are above.

— sent from sleek-moth-351

@gunbai-bot gunbai-bot Bot closed this Aug 18, 2026
@gunbai-bot
gunbai-bot Bot deleted the probe/floor-uncensored-cost branch August 18, 2026 20:32
briansrls pushed a commit that referenced this pull request Aug 18, 2026
…ed rung drop (#8457)

* Move the 5 over-budget witnesses to long/ homes and retire their roster rows

Operator direction (2026-08-18): move the five PassedOverBudget identities
to long/ for now; a separate worker is draining the expensive population
out of long/.

Each module is renamed into a long home (test.claim.long.*), which is how
required_floor excludes it -- the exclusion is by AUTHORED MODULE NAME via
long_home_prefixes, not by file path, so the rename is the mechanism and
the directory move is for humans.

THE ROSTER ROWS GO WITH THEM, and this is not optional. main enrolled all
five after #8447 (roster 464 -> 469). An enrolled identity that no longer
executes trips the floor's did-not-execute check, which walks the roster
looking for identities no claim reported. Leaving them enrolled would swap
one refusal for another. Roster returns to 464.

Enrollment was never going to clear these anyway: they PASS over budget, so
an enrolled row reports STALE-QUARANTINE plus BUDGET-REFUSED -- both red.
That is the same move I shipped and closed in #8438.

Stale path and module citations updated rather than left dangling:
ci_layer_roots.dag (2 entry rows), floor_effect_gate_witness.dag (1 prose
path), and the self-referencing decl_ref inside the dissolution census
witness.

THIS DOES NOT MAKE MAIN GREEN. It clears the failed channel only;
budget_refused=97 exits 1 on its own (evidenced by run 32143198793:
failed=0, budget_refused=130, exit 1). Those 97 are interrupted rows whose
true cost is unknown, measured by probe #8451.

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

* Quarantine the 102 over-budget witnesses to long/ homes; roster 469 -> 361

Operator direction: get CI green, treating these witnesses as effectively
failing. Decomposing them is a separate lane already staffed; this change
only removes them from the required floor so the floor's verdict is about
everything else.

WHAT MAKES A WITNESS LEAVE THE FLOOR: its module's AUTHORED NAME, via
required_floor long_home_prefixes. Not its directory -- the host used to
test the path and that was ruled out in 2026-08-17 precisely because a
directory is not a fact the program reads. So each file is moved into a
long/ dir AND its module renamed under one of the three valid prefixes;
the rename is the mechanism, the move is for humans. All 17 verified to
carry a valid prefix.

THE ROSTER ROWS GO WITH THEM. An enrolled identity that no longer executes
trips the floor's did-not-execute check, so leaving them would swap one
refusal for another. 469 -> 361, exactly the 108 identities whose modules
moved, no others, chunk brace structure verified balanced.

POPULATION, from main run 32177951514 (budget_refused=97, stale=5):
  60 rows in 9 files where EVERY witness was red -- no collateral
  37 rows in 8 files with healthy siblings -- collateral, declared below
   5 rows already moved earlier in this branch

DECLARED COVERAGE LOSS (§4b rung drop, loud rather than silent): 78 healthy,
fast, passing witnesses leave the floor because they share a file with a
slow one. Worst cases: roadmap_page_witness 29, live_read_classification 17,
add_arrow_eval_by_execution 13, loop_eval_by_execution 7, bind_eval 6. They
are not refused, not failing, and nothing will report them missing -- which
is exactly why the number is written here.

Splitting each file to strand only the slow witnesses was considered and
rejected for now: loop_eval_by_execution alone is 516 lines with ~20
interdependent local helpers, and eight such surgeries cannot be verified
without a floor run each. RESTORATION TRIGGER: as the cost lane fixes a
module, that module returns to the floor whole and its siblings return with
it -- so the collateral dissolves with the work already scheduled, and is
not a population anyone must separately remember.

Importers of the renamed modules updated in the same motion (9 files),
including two roster-row string references and five real imports.

THIS DOES NOT FIX THE WITNESSES. It makes the floor's verdict trustworthy
about the other 9,318 rows while the cost work proceeds.

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

* Declare the roster shrink as a bounded rung drop on the carrier itself

tidy-lark-471's mechanical objection, taken: nothing in this tree guards
roster SHRINKAGE. An empty roster refuses (they landed that today), but
469 -> 361 reads as perfectly healthy -- indistinguishable from the defect
that silently dropped 197 identities and went unnoticed for an hour.

So the drop is now declared where the population lives, not in a PR body
that no consumer reads: previous rung, temporary rung, reason, both halves
of the bounded population (108 enrollments AND the 78 healthy collateral
siblings), and the restoration trigger.

It also records what this is NOT: every other removal from this roster came
from OBSERVING a pass, and these did not. Calling that out on the carrier is
the difference between a declared temporary measure and the class of bug
this roster spent today recovering from.

Operator decision: land the quarantine, investigate the root cause after.
The restoration trigger names that root cause with the evidence three
sessions gathered independently today -- the cost is the evaluation context,
not the witnesses; no genuinely slow witness has been found.

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

* Inoculate the rung-drop note: this quarantine is not a precedent for relocation-as-remedy

tidy-lark-471's forward-looking catch, and it is a real risk rather than a
stylistic one. #8456 says relocation is not an honest remedy for an
over-budget row; #8457 relocates 21 modules. To the next reader those look
contradictory, and the cheap wrong conclusion is that required_floor's
comment is stale and should be reverted -- which would leave the floor
advertising the unsanctioned move again.

They are different acts. An author moving their own over-budget witness
deletes coverage silently (the gunbc#7762 specimen). An operator-ruled
bounded rung-drop with a named population and a restoration trigger is
permitted by DESIGN 4b. The distinction is declaration and reversibility,
never the directory -- so the carrier now says so where the relocation
happened, rather than leaving the distinction in two PR bodies that no
consumer reads.

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

* Pre-merge repair: 50 stale pre-move paths, and the roster denominator said 469 while carrying 361

Both found by an external reviewer mid-review on this PR, relayed by
tidy-lark-471, and both real. I had verified module NAMES after the moves and
never re-scanned PATH literals, which is the half that actually broke.

(1) STALE PATHS -- 50 literals across 13 files still named a pre-move path.
The dangerous one is witness_deferral_freeze.dag (9): its own note says a
frozen row naming a witness the tree no longer carries is a
StaleFrozenPathDeferral REFUSAL, so those rows would have failed the build,
not degraded quietly. commit_workflow (4), ci_layer_roots (22), the three
self-host frontiers (7), prose_row_frontier (2) and four others follow the
same shape. Zero remain.

The opposite failure was possible too and is worth recording: exclusion
patterns match by SUBSTRING, and every move changed only the directory, never
the filename -- verified, 21/21 basenames identical -- so bare-filename
patterns still match and no row silently returned to the floor unannounced.

(2) DENOMINATOR -- the header still read 'POPULATION: 469 identities' while
the file carried 361. A count that contradicts its own contents is the change
detector this project rejects, in the one file whose justification is being
visible at identity grain. It now reads 361, states the 469 -> 361 drop, and
says explicitly that the 78 collateral siblings are counted by NO number here
-- because a half-counted population is exactly how the 78 would later become
invisible.

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

* Name the 6 known_red_held identities the rung drop was rounding into 102

tidy-lark-471 verified what the external reviewer reached by arithmetic, and
I reproduced it: the roster drops 108 identities, of which exactly 102 are the
cost population (identity join against main run 32177951514 -- all 102
removed, none missed) and SIX are not.

Those six were known_red_held: enrolled, and behaving exactly as enrolled.
They leave because they share a module with a relocated row, not for anything
about their own cost or verdict. Five are add_arrow_eval_by_execution rows and
one is realization_sweep.

The declaration said 108 and explained 102, which is a population described at
a grain it is not actually bounded at -- the precise failure this roster exists
to avoid, in the file whose whole justification is identity-grain visibility.
They are now named individually, and typed as a THIRD collateral class: the 78
are unenrolled and passing, these six were enrolled and correctly red. Both
leave for the same reason and both return when their module does.

Also recording, so a stale review is not re-litigated later: the companion
finding that commit_gate_roster and the live-discovery test retain pre-move
bind/loop paths is REFUTED at this head. tidy-lark-471 checked it the general
way -- every quoted .dag path on the branch diffed against the branch file
list, then asked of each missing one whether it exists on main, which is the
signature of a path these moves broke. Zero. The only surviving mentions are
two lines in a historical measurement receipt, which is not a consumer.

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

* Second wave: quarantine everything over 1000ms, plus one measured straggler

Operator-directed. Run 32186963581 on the first wave proved the approach and
exposed its residue in one motion:

  stale_quarantine=0  budget_refused=0   <- both channels CLEARED
  known_red_held=361
  failed=8                               <- new

The 102-row quarantine did exactly what it claimed. The 8 failures are rows
that were PASSING under the ceiling and tipped over it once the slow head was
gone -- and 7 of the 8 sit in the 1000-1552ms band I flagged as the tip risk
before the run, so this is the predicted failure mode arriving on schedule
rather than a surprise.

This wave moves 16 modules: the 15 measured over 1000ms, plus
test.claim.e0308_mechanical_trio_test at 774ms. That last one is BELOW the
operator's line and is quarantined anyway because it actually failed on
32186963581 -- evidence beats threshold, and leaving a measured failure in
place to honour a round number would red the tree for a rule.

Roster 361 -> 358. About 200 further healthy siblings leave under the same
module-grain rule as the 78, and the declaration says so.

The underlying reason, recorded on the carrier: 1552ms was calibrated as
measured-max-plus-one-quantum from a SINGLE 1527ms observation, so anything
within a few hundred ms of it is not stably green on a shared runner.

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

* Quarantine emitted_lib_rs_module_declaration_witness_test (42545ms)

The 1000ms wave took failed 8 -> 1. The survivor is a module that costs
42545ms -- 27x the ceiling -- and it was missed for an instructive reason
recorded on the carrier: the cost table it was screened against came from a
run where the 30s wall interrupted the slowest rows, so censored rows reported
their deadline (30000ms) instead of their cost. The table systematically
under-reported precisely the rows most in need of quarantine, and I read those
lower bounds as values.

3 witnesses leave with the module. No roster row named it; roster stays 358.

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

---------

Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
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