Repository navigation
row 155: the door path serves budget on_exhaust: downgrade as 1.5.5 did ($, ahead of #824) - #833
Merged
Merged
Conversation
… did ($) A budget block whose limit declared `on_exhaust: downgrade` re-admits the unit through its `downgrade_to` pool instead of refusing it (1.5.5 `ingress::admit_check`): the charge lands on the effective pool, the unit's walk routes over that pool's members, and its request count and span name it. The chain may cascade; the visited set bounds it, and every hop re-judges the caller's grant over the pool and its fallback chain, so a downgrade never routes a key into a pool it may not use. The kernel already computes `downgrade_to` (governance/state.rs); the door's `$` step acts on it. Before this, the door refused the unit `OverBudget`. RED-able (root/tests/door_steps.rs, ported from busbar-llm's ingress tests): an_exhausted_budget_re_pools_the_unit_through_its_downgrade_pool (red while the door refuses), a_downgrade_cycle_ends_in_the_plain_refusal_naming_the_last_pool_walked, a_downgrade_never_routes_a_key_into_a_pool_it_may_not_use.
…isolation law0 busbar x instance:secret 37 -> 35) The cycle test's pools were `a`/`b`/`c` and a fixture bound `c`: the bare `c` is the secret kind's instance id (busbar-secret-c), so the root carried two secret-instance hits. The pools are `first`/`second`/`third` and the fixture binding `charged`; nothing the tests assert moves.
This was referenced Oct 13, 2026
Merged
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.
Row: /status 155. This fix lands ahead of #824 (ARCHITECT ruling: #824 stays draft until this lands).
$: lands alone.What. On the door path (
root/door_steps.rs, the$stepcharge), a budgetLimitBlockedthat carriesdowngrade_tonow re-admits the unit through that pool instead of refusing it.routedbecomes that pool and its members, so the egress walk (DoorFar,egress_pool(routed)) dials there.poollabel and theforwardspan's pool name the downgraded pool (serve.rs).on_exhaustedfallback chain.downgrade_to(governance/state.rs:2031), and no plane is involved.Why. 1.5.5
crates/busbar/src/ingress/mod.rsadmit_check(v1.5.5) re-admits throughdowngrade_to, andingress/dispatch.rs:199-206dispatches through the pool the charge landed on. Its metric label is the effective pool (finish_admitted(.., model, ..)). Before this PR, the door refused the unitOverBudget. Part 0: behaviour is identical to 1.5.5 unless signed. This came up while mapping the busbar-llm tests (F25) for the llm-default flip.RED-able tests (
root/tests/door_steps.rs, ported from busbar-llmingress_integration_tests.rs, drivingDoorSteps::chargeon a governed generation):an_exhausted_budget_re_pools_the_unit_through_its_downgrade_pool(fee 10, cap 25): the third unit is admitted, re-pooled tovalue, and routes overvalue's members. RED: a door that refuses the downgrade block answersOverBudget.a_downgrade_cycle_ends_in_the_plain_refusal_naming_the_last_pool_walked: a->b->c->b ends in OverBudget namingpool 'c'. A guard that stops one hop early namesb.a_downgrade_never_routes_a_key_into_a_pool_it_may_not_use: a key granted onlyfrontiergets the plain refusal, and its route is unchanged.Ledger rows touched: none expected. The root crate grows by the downgrade loop; if a root ceiling row turns red I'll report it here.
Golden. The 1.5.5 oracle has no downgrade cell; the only
downgradecells are theboot.refusalvalidate cells. An add-only cell has to be recorded from the published 1.5.5 binary. The path is the one 344dc1c used:testing/shadow-oracle/scripts/budget-downgrade.sh, own config: a group budget on poolfrontierwithon_exhaust: downgrade, downgrade_to: value, three chats, capturing the last answer, the key's usage by pool and the request family's pool label), plus itscells.jsonrow and the scripts-allowlist row;oracle-rerecordrun against that corpus, whose artifact cell, ledger row and meta are copied unchanged.That cell lands in its own PR once the recording exists. This PR carries the RED tests now, per the ruling.
Known residual, for the ARCHITECT: on a downgrade, 1.5.5 also read the effective pool's affinity header. On the door path, the sticky position comes from the plane's
arrive, which ran against the pool the caller named. The two differ only when the pools set differentaffinityheader names.