Skip to content

The wall deadline enforces the same figure the floor reports - #10748

Merged
briansrls merged 1 commit into
mainfrom
session/valiant-bat-506-wall-fill-netting
Sep 7, 2026
Merged

briansrls merged 1 commit into
mainfrom
session/valiant-bat-506-wall-fill-netting

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

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_runner states at length beside the subtraction it already performs on the
reported figure, and which budgeted_cpu_nanos implements on the CPU deadline.

The wall deadline did neither. It was armed on a raw Instant, so a claim that happened to fill a
shared 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

  • The 8000ms line is unchanged.
  • What arms the deadline is unchanged.
  • The CPU side is untouched.

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 the
ruling 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_nanos has said since the CPU-side repair:

WHAT THIS DOES NOT REACH: the WALL deadline (witness_wall_deadline) is still armed on a raw
Instant and still charges a fill to whichever claim paid it. Every interruption in the repaired
population was on the CPU clock — 44 of 44 Cpu on run 33185280160 — so the wall half is a real,
currently unexercised residue, not a fix silently omitted.

Required run 34097895230 exercised it. test.claim.long.carrier_reference_integrity_witness_test.carrier_ref_hand_authored_census_is_zero_refusals
is INTERRUPTED-BEFORE-VERDICT raised_by=wall_deadline while reporting cpu_at_least=179ms/500ms
and wall_at_least=184ms/8000ms — its own marginal figures two orders under both lines — because a
module_path_index fill of fill_ms=20579 landed inside its interval. A declared residue that
becomes 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_ms and wall_deadline_exceeded_error — the read
used 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 and
one elapsed interval so the only variable is whether a fill happened inside it:

  • RED: a fill wider than the interval must not be charged to the claim that paid it. Executed
    with the netting reverted, this assertion fails —
    a shared-artifact fill wider than the interval was charged to the claim that paid it — and the
    fix was restored afterwards.
  • Positive control: the same overrun with no fill recorded must still refuse. Without it,
    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

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
@briansrls
briansrls merged commit 0bb56d5 into main Sep 7, 2026
2 of 3 checks passed
@briansrls
briansrls deleted the session/valiant-bat-506-wall-fill-netting branch September 7, 2026 09:31
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant