Repository navigation
The wall deadline enforces the same figure the floor reports - #10748
Merged
Merged
Conversation
Shared-artifact fill is not the paying claim's marginal cost (operator ruling, 2026-08-27). `required_floor_runner` already nets it out of the wall figure it REPORTS, and `budgeted_cpu_nanos` nets it on the CPU deadline. The wall deadline did not: it was armed on a raw `Instant` and charged the fill to whichever claim happened to pay it. One question -- has this claim spent its wall budget -- had two answers, and the repo had already adjudicated which one is right. This is not a loosening of the ceiling. The 8000ms line is unchanged, what arms the deadline is unchanged, and the CPU side is untouched. What changes is WHO is charged for a fill every later claim reads warm: the enforced figure now equals the reported one. It does mean the wall deadline fires LESS often -- it fires correctly rather than less, and both halves of the cost are still counted, still attributed and still printed on the `[floor-shared-fill]` line. The residue was declared, not discovered: the note above `budgeted_cpu_nanos` has said since the CPU repair that the wall half is "a real, currently unexercised residue, not a fix silently omitted". Required run 34097895230 exercised it -- `carrier_ref_hand_authored_census_is_zero_refusals` was INTERRUPTED-BEFORE-VERDICT `raised_by=wall_deadline` while reporting `wall_at_least=184ms/8000ms`, its own marginal figure two orders under the line, because a 20579ms `module_path_index` fill landed inside its interval. The fill nanos standing at arm time are carried in the deadline itself, so every poll subtracts what accrued since -- the same cancellation the CPU clock gets from reading one netted function at both ends. Discriminating pair, both arms over one budget and one elapsed interval: `wall_deadline_charges_marginal_wall_and_still_refuses_without_a_fill` fails on its first assertion with the netting reverted (verified by executing the revert arm), and its second assertion is the positive control -- the same overrun with no fill must still refuse -- so deleting the deadline would not satisfy it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01D8MN5JAQH477n6jXerQc6i
This was referenced Sep 7, 2026
gunbai-bot Bot
added a commit
that referenced
this pull request
Sep 7, 2026
…e trigger is what changes (#10767) `gunbc.guarantee_stall.wall_deadline_shared_fill_attribution_stall` declared its next-rung trigger as an OBSERVATION conjoined with ONE MECHANISM CHANGE: the floor's ledger reports an INTERRUPTED-BEFORE-VERDICT row whose clock is Wall, at which point the wall deadline must read a fill-netted clock. Both halves happened today -- `carrier_ref_hand_authored_census_is_zero_refusals` was refused on the Wall clock at main 9b341e1 against a 29.7s `resolve_declaration_ref_over` fill it did not cause, and gunbc#10748 netted the clock one commit later -- and the invalid state is exactly as writable as it was. That is DESIGN.md section 4b(2)'s named defect: a trigger naming less than the capability it restores is satisfied while the capability stays dead. THE ROW IS NOT RETIRED AND THE RUNG DOES NOT MOVE. Retiring on a fired trigger while the ceiling is unreached is rung inflation, which section 4b(1) prices as worse than sitting low because an inflated class never ranks for climbing again. A netted clock makes the misattribution not happen; it does not make it unwritable. And rung 2 is not reached either: #10748's discriminating RED is a `v1-compiler` lib test, and `gunbc.rung_drop` `rust_unit_tests_off_the_merge_path` records that no CI step runs that command, so nothing on the acceptance path keeps the two arms netting tomorrow. #10748 is recorded as progress against the subject, at rung 1, with the population unchanged. THE NEW TRIGGER IS AT CAPABILITY GRAIN and says what it is not sufficient for, because that is the half the old one omitted: an enforced budget's baseline must be DERIVED from the carrier that measures the fill, so a raw `Instant` or a raw thread-CPU read is not a value an arm site can supply. Both arms netting correctly -- what #10748 delivered -- explicitly does not satisfy it. AND THE ROW'S OWN JUSTIFICATION DID NOT HOLD, which is recorded in the row rather than filed as a new class. It argued it existed "because a comment beside the code would go stale on the day the population changes while this row cannot"; it went stale on the same commit as the `budgeted_cpu_nanos` comment it was written to outlive (corrected in gunbc#10764), by the same mechanism -- nothing executing reads either one. Declaring the fact as data bought COUNTABILITY, not enforcement. Both halves have existing homes: the fired-but-dead trigger is the class filed in gunbc#10755, and countability-without-enforcement is `gunbc.recurring_failure_mode.a_written_row_is_not_a_firing_mechanism`. The receipt lands on that row with the ledger's next regeneration rather than here, so this diff carries one subject. Claude-Session: https://claude.ai/code/session_01CQyej6wA7GiSibWkkjMsro Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
briansrls
pushed a commit
that referenced
this pull request
Sep 7, 2026
Shared-artifact fill is not the paying claim's marginal cost (operator ruling, 2026-08-27). `required_floor_runner` already nets it out of the wall figure it REPORTS, and `budgeted_cpu_nanos` nets it on the CPU deadline. The wall deadline did not: it was armed on a raw `Instant` and charged the fill to whichever claim happened to pay it. One question -- has this claim spent its wall budget -- had two answers, and the repo had already adjudicated which one is right. This is not a loosening of the ceiling. The 8000ms line is unchanged, what arms the deadline is unchanged, and the CPU side is untouched. What changes is WHO is charged for a fill every later claim reads warm: the enforced figure now equals the reported one. It does mean the wall deadline fires LESS often -- it fires correctly rather than less, and both halves of the cost are still counted, still attributed and still printed on the `[floor-shared-fill]` line. The residue was declared, not discovered: the note above `budgeted_cpu_nanos` has said since the CPU repair that the wall half is "a real, currently unexercised residue, not a fix silently omitted". Required run 34097895230 exercised it -- `carrier_ref_hand_authored_census_is_zero_refusals` was INTERRUPTED-BEFORE-VERDICT `raised_by=wall_deadline` while reporting `wall_at_least=184ms/8000ms`, its own marginal figure two orders under the line, because a 20579ms `module_path_index` fill landed inside its interval. The fill nanos standing at arm time are carried in the deadline itself, so every poll subtracts what accrued since -- the same cancellation the CPU clock gets from reading one netted function at both ends. Discriminating pair, both arms over one budget and one elapsed interval: `wall_deadline_charges_marginal_wall_and_still_refuses_without_a_fill` fails on its first assertion with the netting reverted (verified by executing the revert arm), and its second assertion is the positive control -- the same overrun with no fill must still refuse -- so deleting the deadline would not satisfy it. Claude-Session: https://claude.ai/code/session_01D8MN5JAQH477n6jXerQc6i Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
gunbai-bot Bot
added a commit
that referenced
this pull request
Sep 7, 2026
…runs (#10764) `budgeted_cpu_nanos` carried a WHAT THIS DOES NOT REACH paragraph stating that the wall deadline is armed on a raw `Instant` and charges a shared-artifact fill to whichever claim paid it, with a receipt -- 44 of 44 interruptions on the `Cpu` clock, run 33185280160 -- for why that residue was unexercised. gunbc#10748 armed the wall deadline on a fill-netted baseline and did not edit the paragraph, so the tree kept a well-formed, resolving, receipt-bearing sentence describing a mechanism that no longer executes. WHAT RUNS NOW, WHICH IS ALL THIS COMMIT ASSERTS: `arm_wall_deadline` captures `shared_artifact_fill_wall_nanos()` at arm time and `wall_deadline_marginal_nanos` subtracts the fill accrued since, so the enforced wall figure excludes the fill exactly as the enforced CPU figure does through this clock. THE OLD RECEIPT IS NOT KEPT AS HISTORY. It measured a population under a mechanism that is gone, so restating it would preserve the same routing defect one degree removed. What is kept is the one fact a future reader needs: the wall half was unnetted until #10748. WHY THIS IS NOT A TIDY. No `Accepted` program reads an annotation (DESIGN.md section 4c), so a false one never reds and drifts in whichever direction flatters the last change. This one routed a reader diagnosing a live wall refusal into a non-repair within the hour of #10748 landing, which is the cost the correction buys back. Claude-Session: https://claude.ai/code/session_01CQyej6wA7GiSibWkkjMsro Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The defect: one question, two answers, one already adjudicated
Shared-artifact fill is not the paying claim's marginal cost — the operator ruling of 2026-08-27,
which
required_floor_runnerstates at length beside the subtraction it already performs on thereported figure, and which
budgeted_cpu_nanosimplements on the CPU deadline.The wall deadline did neither. It was armed on a raw
Instant, so a claim that happened to fill ashared memo was charged, on the enforcing clock, for work every later claim reads warm — while the
same run's receipt reported that claim's marginal wall as a small figure well under the line. Two
answers to has this claim spent its wall budget, and the repo had already decided which one is
right.
This is not a relaxation
What changes is who is charged. Both halves of the cost are still counted, still attributed and
still printed on the per-claim
[floor-shared-fill]line — split, never dropped, which is what theruling requires.
It does mean the wall deadline fires less often, and that is the thing to be clear about. It
fires correctly rather than less: a claim is now refused when its own marginal wall exceeds the
line, and not when someone else's memo fill landed inside its interval. A claim that genuinely
spends 8s of its own wall time still refuses, and the positive control below is exactly that case.
The residue was declared, not discovered
The note above
budgeted_cpu_nanoshas said since the CPU-side repair:Required run 34097895230 exercised it.
test.claim.long.carrier_reference_integrity_witness_test.carrier_ref_hand_authored_census_is_zero_refusalsis
INTERRUPTED-BEFORE-VERDICT raised_by=wall_deadlinewhile reportingcpu_at_least=179ms/500msand
wall_at_least=184ms/8000ms— its own marginal figures two orders under both lines — because amodule_path_indexfill offill_ms=20579landed inside its interval. A declared residue thatbecomes reachable is a repair obligation, not new debt.
The mechanism
The fill nanos standing at arm time are carried in the deadline itself, so every poll subtracts what
accrued since. That is the same cancellation the CPU clock gets from reading one netted function at
both ends, and it means
wall_deadline_remaining_msandwall_deadline_exceeded_error— the readused to bound subprocess waits and the one that refuses — cannot disagree with each other or with
the report. Monotone as a deadline requires: the fill counter only rises, and it rises inside the
interval being netted, so the subtraction can never make elapsed time run backwards.
The evidence
wall_deadline_charges_marginal_wall_and_still_refuses_without_a_fill, both arms over one budget andone elapsed interval so the only variable is whether a fill happened inside it:
with the netting reverted, this assertion fails —
a shared-artifact fill wider than the interval was charged to the claim that paid it— and thefix was restored afterwards.
deleting the deadline outright would satisfy the RED.
The RED is authorable here because the fill is a process-wide counter a test can move directly,
which is what makes this the level the check belongs at rather than a floor-run observation.
Scope
The netting and nothing else. This is held ahead of #10741 (the keyed declaration-index read), whose
change is what exercised the residue; that PR carries the measurement and this one carries the
enforcement repair, so neither review has to judge two unrelated things.
🤖 Generated with Claude Code
https://claude.ai/code/session_01D8MN5JAQH477n6jXerQc6i