Conversation
…ames move to the tier their price earns Seven consecutive `main` push runs went red, every one of them on `durations` and its `guest-suite` aggregate. That is one standing disagreement seen seven times, not seven incidents: `tests/test-durations` was last written from a partition whose author replaced only the rows their own change had registered and left every other name at its older number, so the committed declaration drifted from the instrument on names nobody could see from the landing that did it, and it drifted until a run that renders the whole verdict met all of them at once. ## Why the push run reds and the merge group does not, and why that stays `.github/workflows/ci.yml:614` sets `TIER_BASE` from `github.event.merge_group.base_sha || github.event.pull_request.base.sha`, which is empty on `push`, `schedule` and `workflow_dispatch`. An empty base is `Enforced::Everything`, so a push to `main` renders every price verdict; a merge-group composition names the `main` it was built on and prints the rows it did not touch as `::warning::`. **That asymmetry is the documented design and `ci.yml` is unchanged.** `src/durations.rs`'s `Enforced::Everything` names "a push to `main`" in its own doc and states the rule the other way round as well — "a workflow expression that evaluates to nothing must widen the gate, not silence it" — and the `TIER_BASE` step's own comment says "Empty on `schedule`, `push` and `workflow_dispatch` — none of them is a change under review — and empty means the whole verdict, never none of it." A push run is `main`'s tip and not a change under review, so it is the instrument of record by construction. The defect is the declaration, and the declaration is what moves here. ## The instrument `cargo run -- --merge-durations` over the twelve `durations-shard-*` artifacts of scheduled run 35072262489 (2026-09-16, `main` at 8261079, twelve hosted shards under `--nightly`, all twelve present) writes 448 measured rows — every row in the profile, none carried. The verdict it renders at `Enforced::Everything` names 27. ## `sysret_ss_reload`, the one over the line 15,402 ms against the 10,000 ms ceiling while declared `Tier::Fast`, on a committed 6,453 ms. It is relegated `Why::Cost`: "priced without margin by itself — over `FAST_COMMIT_MS`, whether or not it is also over `FAST_CEILING_MS`" is the variant's own definition and this is it. Not `Why::TimerAnchored`. Its verdict is a substring of a line the kernel printed and no clock is in it, and whether the timer-anchored boundary is a classification or a cost rule is the open owner question in `issues/build/a-timer-anchored-names-tier-is-decided-by-its-price.md` — not this landing's to answer. `Why::Cost` is also the row that retires itself: the price is the harness's and not the kernel's, and `issues/build/the-shard-split-prices-a-boot-and-not-the-image-behind-it.md` already records the mechanism — the probe line lands before `===READY===`, so `boot_log()` already holds it and `drain_until`'s predicate can only time out, spending the ceiling in full on every run. Fixing that returns the name by the table's own rule. Not its redlist row either. `src/redlist.rs` "declares nothing and exempts nothing", so the standing row could never be what kept the name Fast; what it recorded was the price going unenforced at a base. It is retired against this landing and its `source` repointed from the closed issue file to `src/tiers.rs`, which is the site that now carries the name. ## The twenty-six in the return direction Each is a `Why::Cost` row this partition prices at or under the 8,000 ms commitment line, which is the return rule's own condition, so each loses its `RELEGATED` entry and its `Tier::Nightly` column. Old `ci_ms` against this run's price, in ms: dump_nmi_probe 8098 -> 6023 esp_filesystem 10123 -> 4970 fat_backing_revoked 8226 -> 6719 heap_ceiling_recovery 10371 -> 4516 idle_stack_guard 9601 -> 4642 locale_detect 9959 -> 5961 log_partition_identity 9516 -> 6896 usb_short_read 8150 -> 4751 writeback_spawn 8820 -> 4748 xhci_full_speed_device 8833 -> 6695 xhci_slot_exhaustion 8149 -> 5198 cache_eviction 8165 -> 4515 log_conservation_smp4 8248 -> 7991 fs_rename_durable 9346 -> 5999 wall_clock_rtc_dead 8070 -> 4929 wall_clock_century_register 9030 -> 4866 wall_clock_zone 9347 -> 4988 fsync_failed_commit 8386 -> 4248 screen_console_scroll 13401 -> 7513 double_panic_names_the_fault 9120 -> 2735 console_line_atomicity 8925 -> 4608 ftruncate_flush_race 9452 -> 5844 gpu_set_resolution 8610 -> 4554 writeback_durability 8888 -> 6555 screen_survived_panic_not_blamed 8477 -> 5794 screen_gop_firmware_mode 12624 -> 7667 A twenty-seventh row moves with them although no verdict names it. `locale_detect_unrecognized` (160 -> 281 ms) is `Why::RidesTheBootOf("locale_detect")` and its own `guards` say it is "relegated only because its carrier is". `tests/toyos.rs`'s group gate refuses a `LOCALE_WIZARD` boot split across two tiers, so the rider returns with the carrier and the reason for its row is gone. Two of the returns carry standing evidence and the PR names both. `xhci_full_speed_device` returning is `issues/build/xhci-full-speed-device-jumped-47-percent-over-its-commitment.md`'s 2026-08-22 ruling being honoured rather than overridden — that entry says the name stays `Tier::Fast` and is "not answered by a `Why::Cost` row — which the return rule refuses the moment a run prices it at or under 8,000, and its next cheap shard will". Its standing redlist row about its own variance is what a fast-tier price red on it is read against. `log_conservation_smp4` returns at 7,991 ms, nine milliseconds of margin, and its redlist row stands again: the relegation that retired it is what this landing reverses, so nothing retires it any more. ## The two names the profile had never priced `audio_tone (smp=8)` and `audio_tone_load (smp=8)` were labels the committed profile did not hold, so `Shard::keep` costed each at the longest price it knew. This run prices them 8,799 and 12,315 ms from CI's own artifact. Both are over the commitment line, both names stay `Tier::Nightly`, and no `UNMEASURED` marker is owed — a marker buys a measured run and the measurement already exists. Their `ci_ms` rows are left where they are: that field is last-measured documentation a human moves when a tier correction lands, and neither name gets one. ## The tracker `issues/build/the-committed-profile-disagrees-with-the-nightly-on-28-names.md` asked for exactly this landing — "one landing takes the whole measured profile and moves each of the 28 to the tier its price earns" — and is closed by deletion. Its one durable rule goes to `src/durations.rs`'s header, at the site that writes the file: a merged profile is committed whole, because one run's rows are one partition and keeping a name's older number beside the rest prices nothing against that run. Its only citation, the `sysret_ss_reload` redlist `source`, moves in this same change. `issues/build/a-timer-anchored-names-tier-is-decided-by-its-price.md` loses the one paragraph this landing falsifies; its exit condition is the owner's and is untouched. ## Verified - `cargo test -p toyos-build --lib` exit 0 — 308 passed, 0 failed, 1 ignored. That is where `tiers::tests::the_ci_profile_and_tiers_agree` runs the same bidirectional rule the `durations` job runs, and where the redlist's `every_row_can_say_what_it_claims` resolves every `source`. - `cargo run -- --merge-durations <the twelve artifacts>` exit 0, rendering the whole verdict at `Enforced::Everything` — the rendering a `main` push run does, and the one that was red. Run again on the committed tree it leaves `tests/test-durations` byte-identical, which is the `git diff --quiet` the CI step reports on. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK
Japabu
marked this pull request as ready for review
September 16, 2026 13:43
…oad reads its probe off the boot log
The previous commit's premise — seven main push reds as "one standing
disagreement seen seven times" — is false for five of the seven. The
durations job logs of runs 34773208611, 34778832553, 34834353873,
34899157020 and 34911665787 each name sysret_ss_reload and, on five of
them, a second Fast name no pull request touched, priced over a line the
nightly 35072262489 partition prices the same name well under:
boot_partition_identity 8205 and 8319 against 6798 (1.21x, 1.22x),
xhci_many_devices 11102 against 4944 (2.25x), page_cache_partition_offset
8503 against 4559 (1.87x), so_cache_refusals 10992 against 6348 (1.73x),
home_overwrite_reads_back 10721 against 6734 (1.59x), metal_sim_input
8721 against 6166 (1.41x). The push lane rendered Enforced::Everything on
a composition the merge queue had just measured at Touched, so a
disagreement the queue warned on landed and then reded main on names no
pull request could fix. ci.yml's durations job now passes
`--tier-base ${{ github.event.before }}` on push — the tip the push
replaced — and src/ci.rs's workflow gate holds that third expression the
way it holds the other two; Enforced::Everything's doc no longer names a
push to main, and src/durations.rs's header says the nightly is the sole
instrument of record.
sysret_ss_reload is not relegated. Its price was the harness's: the probe
line lands before ===READY===, so boot_log() already held it and the
10 s drain_until ceiling, scaled by width and host speed, could only time
out — 15,402 ms on the nightly, 32,237 to 45,686 ms on the five push
runs. The test now reads the boot log for the line and drains only when
it is not there. The name stays Tier::Fast, its RELEGATED row is gone,
and its committed price is the UNMEASURED marker: a dev-host number may
not price a hosted profile, and the only hosted measurement of the fixed
test is the one the next hosted run takes — the marker buys it and stays
red until the measured value replaces it, by design. Local, TCG on the
dev host: sysret_ss_reload passed at the price the handoff quotes. The
redlist row about its price is retired against this commit with `source`
at tests/toyos.rs, and the comment that called the price "not this
branch's to fix" goes.
Two records filed and one closed. The return rule reads one sample:
log_conservation_smp4 returned at 7,991 ms against 8,248 and 8,572 on two
main push runs, screen_gop_firmware_mode at 7,667 against a committed
12,624, screen_console_scroll at 7,513 against 13,401 — all three stay
Fast, where the recorded rule puts them, and
issues/build/the-return-rule-reads-one-sample.md holds the numbers and the
exit condition. Nothing compares a committed tier row or profile row to
the artifact: four partial fixes of this landing pass every gate it
names, recorded as issues/build/nothing-compares-a-committed-tier-row-to-the-artifact.md.
issues/build/idle-stack-guard-price-nearly-doubled-since-its-return.md is
closed by deletion: its whole evidence was idle_stack_guard at 9,601 ms
and dump_nmi_probe at 8,098, and the committed partition prices them
4,642 and 6,023; no citation to it existed.
Prose the review named is deleted rather than answered: the #431 story in
src/durations.rs's header, the tier clause on sysret_ss_reload's
registration, the third copy of the return-rule sentence in the redlist
retirement, and the dated run id in the test's comment.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK
…r is held Round 3 of PR #467, against the round-2 review. The tier-base gate holds the order. src/ci.rs asserted that three strings were somewhere in the `durations` job; it now reads the `TIER_BASE:` expression and asserts its operands in `||` order — merge group's base, pull request's base, `github.event.before`. A `pull_request` `synchronize` payload carries `before` too, so `before` first narrows every pull request to what its last push moved with all three strings still present. Control: the reviewer's reorder of ci.yml builds (exit 0) and reds `ci::tests::the_names_a_landing_is_judged_on…` (exit 101, left [before, merge_group, pull_request]). A name whose committed price a landing re-takes is judged by that landing. `touched_names` gains a fourth source: a name whose `tests/test-durations` row differs from the tier base's. Before it, a marker replaced by a number left the name rendered by no run a landing can be stopped by — the reviewer measured exit 0 with `sysret_ss_reload` at 15,402 ms. Host test `a_repriced_name_is_rendered_by_the_landing_that_repriced_it`; control: with the profile dropped as a source the crate builds (exit 0) and the test reds (exit 101, touched set {} against {audio_tone, iommu_empty_domain}). `UNMEASURED_MS`, `render_verdict`, `Enforced`, both module headers and the ci.yml comment say the marker covers a re-taken price as well as a new registration. One law for what is committed from a run, in src/durations.rs's header: a re-pricing of the profile is the nightly's whole artifact, landed as its own change; a pull request replaces only its own `UNMEASURED` marker's row, from its own hosted run, and that row stands until the next nightly re-prices it. `sysret_ss_reload` gets its judge. `QemuInstance` counts its drains, and the test refuses a run whose boot log held the probe line and whose console was drained anyway. Control: the reviewer's partial fix (no guard, a 1 ms ceiling) builds (exit 0) and reds the test (exit 1) by that sentence; the unmutated test passes (exit 0). The return-rule record states its criterion: all 26 returns have another hosted sample over the line (8,070 to 13,401 ms), and what orders them is distance under the line on the nightly partition. It gains the next hosted partition, PR #467's run 35352795338, which priced four of the 26 back over the line: screen_gop_firmware_mode 9,090, fat_backing_revoked 8,333, screen_console_scroll 8,235, ftruncate_flush_race 8,111. Prose, by deletion: the shard-split record loses the five totals whose spread was `sysret_ss_reload`'s drain and keeps the net figures (about 41.7, 12.3, 8.3, 19.9, 6.5 s; spread about 35 s against a best case of about 31 s); the `sysret_ss_reload` redlist retirement is anchored to 20b04cc and loses its sentence about the marker; `log_conservation_smp4`'s row says what this landing does with the name, cites the return-rule record, and is re-measured from nightly 35072262489's shard 11 (7,991 ms, 2026-09-16). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK
…08 ms The second kind of profile commit src/durations.rs's header names: a pull request replacing only its own `UNMEASURED` marker's row, from its own hosted run. `ci` run 35352795338 (pull_request, head 20b04cc, twelve hosted shards, 2026-09-18) ran the fixed test on shard 1 and its `test-durations-merged` artifact prices it 5,908 ms — under the 8,000 ms commitment line, so the name stays `Tier::Fast` with no `RELEGATED` row. The other 447 rows stay nightly 35072262489's, and this row stands until the next nightly re-prices it. That run's `durations` job was red on the marker line alone, which returns before any price verdict is computed. With the marker replaced, the same twelve shards under `--tier-base dc38a05` exit 101 on five names that run priced over the commitment line: boot_partition_identity 9,527, fat_backing_revoked 8,333, ftruncate_flush_race 8,111, screen_console_scroll 8,235, screen_gop_firmware_mode 9,090. Four of the five are among this landing's 26 returns and were rendered under the old name set too; boot_partition_identity is rendered because this landing re-prices its row. `issues/build/the-return-rule-reads-one-sample.md` holds the numbers. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK
Brings in #463 (five rules for what a measurement is worth). Git merged src/durations.rs cleanly; one reconciliation is made by hand. #463 added to the header's `durations`-red paragraph: "A CI run's merged durations are committed only for the rows this change's own markers blocked." This branch's header states that law once, with the other half it is true beside — a re-pricing of the profile is the nightly's whole artifact, landed as its own change; a pull request replaces only its own `UNMEASURED` marker's row, from its own hosted run — so the second statement of it is removed here rather than left to contradict "one run's rows are one partition" two paragraphs up. .claude/agents/reviewer.md is taken from main unchanged. `cargo test -p toyos-build --lib` on the merged tree: exit 0, 310 passed, 0 failed, 1 ignored. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK
…'s own reading A name is Fast only if it is at or under FAST_COMMIT_MS (8,000 ms) on the instrument of record, the nightly, AND on the gate it must then pass: the returning landing's own hosted run, which renders the name because the landing re-tiers it. The contract is one sentence in FAST_COMMIT_MS's doc. This landing returned 26 Why::Cost names on nightly 35072262489's prices. Its own hosted run, `ci` 35352795338 (pull_request, head 20b04cc), priced four of them back over the line, and one existing Fast name with them: name nightly 35072262489 run 35352795338 screen_gop_firmware_mode 7,667 9,090 fat_backing_revoked 6,719 8,333 screen_console_scroll 7,513 8,235 ftruncate_flush_race 5,844 8,111 boot_partition_identity 6,798 9,527 boot_partition_identity has two more readings on the same lane, both `main` pushes red in `durations`: 8,205 (run 34773208611) and 8,319 (34834353873). All five figures were read out of the runs' `durations-shard-*` artifacts. The four are not returned and boot_partition_identity is relegated. 22 of the 26 return as before, with `locale_detect_unrecognized` riding `locale_detect` back: 23 rows leave RELEGATED against main, 4 stay, 1 is new. Why a new variant and not Why::Cost. The committed profile is the nightly's, so it prices all five under the line, and a Why::Cost row priced under the line is exactly what the return arm refuses. Measured with the five rows written `Why::Cost`: `cargo test -p toyos-build --lib tiers::` exits 101 with five `belongs Fast` lines, one per name (mut-hold-tiersync-4.log) - and the nightly, and this pull request's next run (which retains the nightly's row for a name the fast tier does not run, and renders it because this landing re-priced it), would say the same. `ci_ms` cannot carry the hold for every Cost row either: it is a hand-kept note, 121,441 on `desktop_audio_client` against a profile price of 8,401, and a rule reading it would hold every Cost row for ever and end the nightly's invitation back. So the hold is a declaration: Why::CostOnTheGate - priced with margin by the nightly and without it by the gate a return has to pass. `ci_ms` is the hosted pull-request-lane reading that refused the return, and on this variant alone it is checked: a reading at or under FAST_COMMIT_MS holds nothing and is refused on every run as a declaration verdict. No nightly price moves the row; it returns through a landing that re-tiers it Fast and whose own run prices it under the line. Why::Cost rows keep the nightly's invitation unchanged. Negative control: `a_nightly_price_does_not_return_a_row_the_gate_holds` - the same 8,000 ms that returns `desktop_window_child` leaves a gate-held row alone, and the hold is refused at ci_ms = 8,000 and stands at 8,001. The whole-change mutation is the one above: the five rows as Why::Cost, exit 101. issues/build/the-return-rule-reads-one-sample.md is closed: the rule reads two. What it recorded, all 26 returns on both partitions, in ms (removed row's ci_ms / nightly 35072262489 / run 35352795338): log_conservation_smp4 8,248 / 7,991 / 4,881 screen_gop_firmware_mode 12,624 / 7,667 / 9,090 held screen_console_scroll 13,401 / 7,513 / 8,235 held log_partition_identity 9,516 / 6,896 / 7,854 fat_backing_revoked 8,226 / 6,719 / 8,333 held xhci_full_speed_device 8,833 / 6,695 / 7,130 writeback_durability 8,888 / 6,555 / 6,803 dump_nmi_probe 8,098 / 6,023 / 6,374 fs_rename_durable 9,346 / 5,999 / 5,296 locale_detect 9,959 / 5,961 / 5,028 ftruncate_flush_race 9,452 / 5,844 / 8,111 held screen_survived_panic_not_blamed 8,477 / 5,794 / 6,548 xhci_slot_exhaustion 8,149 / 5,198 / 5,260 wall_clock_zone 9,347 / 4,988 / 6,756 esp_filesystem 10,123 / 4,970 / 4,791 wall_clock_rtc_dead 8,070 / 4,929 / 6,507 wall_clock_century_register 9,030 / 4,866 / 5,199 usb_short_read 8,150 / 4,751 / 4,510 writeback_spawn 8,820 / 4,748 / 4,658 idle_stack_guard 9,601 / 4,642 / 5,560 console_line_atomicity 8,925 / 4,608 / 4,786 gpu_set_resolution 8,610 / 4,554 / 5,626 heap_ceiling_recovery 10,371 / 4,516 / 4,431 cache_eviction 8,165 / 4,515 / 4,621 fsync_failed_commit 8,386 / 4,248 / 4,394 double_panic_names_the_fault 9,120 / 2,735 / 2,700 Not closed by this and said so: a name that straddles on the nightly's own lane. `log_conservation_smp4` is 9 ms under the line there and 4,881 on the gate, so both lanes put it Fast, and a nightly that prices it over 8,000 again is its standing `src/redlist.rs` row - re-sourced to `tests/common/logread.rs`, since the row's source was the closed file, with run 35352795338's figure added. Gates, on this tree: cargo test -p toyos-build --lib exit 0, 311 passed, 1 ignored cargo test --test toyos-build -- --list exit 0 --merge-durations, run 35352795338's twelve shards, --tier-base 9f91b58 (pull_request.base.sha) exit 0, 433 names rendered, 0 warnings same shards with the five names' lines removed, the shape of the next hosted run exit 0 --merge-durations, nightly 35072262489, no base exit 101, one line: `sysret_ss_reload measured 15402 ms` - the nightly ran the test before 20b04cc fixed its drain; the written profile differs from the committed one in that row only the same nightly shards on a `git archive` of dc38a05 (the base, negative control) exit 101, 27 lines Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK
Collaborator
Author
|
Superseded by #475 (the test-governance cut, CTO ruling of 2026-09-21): the merge-health instrument is deleted and the duration verdict only warns, so this branch's subject no longer exists. Its measurements stay in its history. |
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.
Seven consecutive
mainpush runs went red ondurations. Every one namedsysret_ss_reload, and five of the seven also named a Fast name no pullrequest had touched, priced over a line on the push lane that the nightly's
own partition prices the same name well under. From the
durationsjob logsof those five runs against the nightly
35072262489partition this branchcommits (ms):
boot_partition_identityxhci_many_devicesboot_partition_identitypage_cache_partition_offsetso_cache_refusalshome_overwrite_reads_backmetal_sim_inputSix name/nightly pairs, seven push prices, 1.2x–2.25x over the nightly. Two
things were wrong and this branch moves both. The committed tier declaration
had drifted from the instrument —
tests/test-durationswas last written froma partition whose author replaced only the rows their own change had
registered — and the push lane rendered
Enforced::Everythingon a compositionthe merge queue had just measured at
Touched, so a disagreement the queueprinted as a warning landed and then reded
mainon names no pull requestcould fix.
The return rule reads both lanes — read this first
A name is Fast only if it is at or under
FAST_COMMIT_MSon the instrumentof record, the nightly, and on the gate it must then pass: the returning
landing's own hosted run. That sentence is
FAST_COMMIT_MS's doc insrc/tiers.rsnow, and this landing is placed by it.This pull request's first hosted run (
ci35352795338, head20b04cc1) wasred in
durationson theUNMEASUREDmarker line alone — the marker's refusalreturns before any price verdict is computed. With the marker replaced, the
same twelve shards priced five names over the 8,000 ms line on the
pull-request lane:
3507226248935352795338screen_gop_firmware_modefat_backing_revokedscreen_console_scrollftruncate_flush_raceboot_partition_identitymain's push runs 34773208611 and 34834353873 priced it 8,205 and 8,319These five were found because a landing that re-prices the whole profile
renders every re-priced name on its own runs — 433 names here — and that rule
stands as written.
Why the five rows are a new
Whyand notWhy::Cost. The committedprofile is the nightly's, so it prices all five under the line — and a
Why::Costrow priced under the line is exactly what the return arm refuses.Measured with the five written as
Why::Cost:cargo test -p toyos-build --lib tiers::exits 101 with fivebelongs Fastlines, one per name; the nightly would say the same every night, and sowould this pull request's next run, which retains the nightly's row for a name
the fast tier does not run.
ci_mscannot carry the hold for everyWhy::Costrow either — it is a hand-kept note (121,441 on
desktop_audio_clientagainsta profile price of 8,401), and a rule that read it would hold every Cost row
for ever and end the nightly's invitation back. So the hold is declared:
Why::Costrows keep the nightly's invitation exactly as it was. What thisdoes not close is a name that straddles on the nightly's own lane:
log_conservation_smp4is 9 ms under the line there and 4,881 on the gate, soboth lanes put it Fast, and a nightly that prices it over 8,000 again is its
standing
src/redlist.rsrow.The push lane
A push to
mainis a composition the merge queue already measured, so.github/workflows/ci.yml'sdurationsjob passes--tier-base ${{ github.event.before }}onpush— the tip the pushreplaced. The gate holds the order, not the set:
src/ci.rsreads theTIER_BASE:expression and asserts its operands in||order — the mergegroup's base, the pull request's base,
github.event.before. Apull_requestsynchronizepayload carriesbeforetoo (the branch's previous head), sobeforefirst would narrow every pull request to what its last push movedwith all three strings still in the file.
Enforced::Everything's doc nolonger names a push to
main;scheduleandworkflow_dispatchstill name nobase and render the whole verdict.
One law for what is committed from a run
src/durations.rs's header states it once: the nightly is the instrument ofrecord, so a re-pricing of the profile is the nightly's whole artifact, landed
as its own change; a pull request replaces only the row its own
UNMEASUREDmarker holds, from its own hosted run, and that row stands priced by that run
until the next nightly re-prices it. #463's sentence in the same header ("a CI
run's merged durations are committed only for the rows this change's own
markers blocked") is the second half of that law and is folded into it in the
merge of
origin/main.This landing is the first kind:
cargo run -- --merge-durationsover thetwelve
durations-shard-*artifacts of scheduled run35072262489(2026-09-16,
mainat8261079e, twelve hosted shards under--nightly, alltwelve present) writes 448 measured rows — every row in the profile, none
carried — and its verdict on the base names 27. Its commit
3928e700is thesecond kind: one row,
sysret_ss_reload 5908 shards=12, from this pullrequest's own hosted run.
A name whose price a landing re-takes is judged by that landing
Before this, once a marker was replaced by a number, no gate a pull request or
a merge group runs rendered that name's verdict: the reviewer measured exit 0
with
sysret_ss_reloadsitting at 15,402 ms. The rendered name set gains afourth source — any name whose
tests/test-durationsrow differs from the tierbase's — and the same experiment now exits 101:
sysret_ss_reload measured 15402 ms in CI, over the 10000 ms line, but sysret_ss_reload remains Fast [enforced on this run: …re-priced sysret_ss_reload].UNMEASURED_MS,render_verdict,Enforced, both moduleheaders and the
ci.ymlcomment now say the marker covers a re-taken price aswell as a new registration.
The consequence for a first-kind landing is deliberate and visible here: this
pull request re-prices every row, so its own runs render the verdict for 433
names rather than for the ones it re-tiers.
sysret_ss_reload— the test is fixed, judged, and priced Fast15,402 ms on the nightly and 32,237 to 45,686 ms on the five push runs, against
a committed 6,453 — none of it the kernel's. The probe line lands before
===READY===, soboot_log()already held it and the 10 sdrain_untilceiling, scaled by width and host speed, could only time out. The test reads
the boot log for the line and drains only when it is not there.
Its judge:
QemuInstancecounts its drains, and the test refuses a runwhose boot log held the probe line and whose console was drained anyway.
Its price:
cirun 35352795338 ran the fixed test on hosted shard 1 at5,908 ms — under the commitment line, so the name stays
Tier::Fastwith noRELEGATEDrow, and the marker is gone. Locally, cross-arch TCG:cargo test sysret_ss_reloadexit 0, 2,168 ms.The redlist row about its price is retired against commit
20b04cc1withsourceattests/toyos.rs.Twenty-two returns, plus one rider; four held; one relegated
The nightly partition prices 26
Why::Costrows at or under the 8,000 mscommitment line. Twenty-two of them are also under it on this pull request's
own hosted run and return:
RELEGATEDentry removed,Tier::Nightly→Tier::Fast. The four marked held stayTier::NightlyasWhy::CostOnTheGatewithci_msthe gate's figure. Removed row'sci_ms/nightly
35072262489/ run35352795338, ms:locale_detect_unrecognized(160 → 281 ms) isWhy::RidesTheBootOf("locale_detect")and returns with its carrier: one bootcannot be in two tiers.
boot_partition_identity(6,798 on the nightly; 9,527,8,319 and 8,205 on the gate's lane) leaves the fast tier as
Why::CostOnTheGate; itsguardssays what goes dark — thefirmware-against-table agreement and the two-claimant arm — and what stays:
toyos-gpt's host suite andforeign_disk_untouched. Againstmain: 23 rowsleave
RELEGATED, 4 stay with a newWhy, 1 is new.xhci_full_speed_devicereturning isissues/build/xhci-full-speed-device-jumped-47-percent-over-its-commitment.md's2026-08-22 ruling honoured; its standing redlist row about its own variance is
what a fast-tier price red on it is read against.
The two names the profile had never priced
audio_tone (smp=8)andaudio_tone_load (smp=8)were labels the committedprofile did not hold. Priced here from CI's own artifact at 8,799 and
12,315 ms; both over the commitment line, both names stay
Tier::Nightly.Tracker
issues/build/the-committed-profile-disagrees-with-the-nightly-on-28-names.mdasked for exactly this landing and is closed by deletion; its one durable
rule is in
src/durations.rs's header (the nightly's artifact is committed whole, asits own change).
issues/build/idle-stack-guard-price-nearly-doubled-since-its-return.mdisclosed by deletion: its whole evidence was
idle_stack_guard9,601 ms anddump_nmi_probe8,098 ms, and this partition prices them 4,642 and 6,023.No citation to it existed.
issues/build/the-return-rule-reads-one-sample.mdwas filed by this pullrequest and is closed by it, by deletion: the rule reads two lanes now. Its
table is the one above and is in commit
08d700d3's message; no citation toit survives (
git grep), andlog_conservation_smp4's standing redlist row,which cited it, is re-sourced to
tests/common/logread.rswith run35352795338's 4,881 ms added.
issues/build/nothing-compares-a-committed-tier-row-to-the-artifact.md—filed: nothing compares a committed
Relegatedrow or profile row to theartifact (
ci.yml'sgit diff --quietwrites a summary bullet and no red),with the four partial fixes of this landing that every named gate stays green
under as its evidence. The gate is not changed here.
issues/build/a-timer-anchored-names-tier-is-decided-by-its-price.mdlosesthe one paragraph this landing falsifies;
issues/build/the-shard-split-prices-a-boot-and-not-the-image-behind-it.mdloses the five run totals whose spread was this test's drain and keeps the
figures net of it: about 41.7, 12.3, 8.3, 19.9 and 6.5 s, a spread of about
35 s against a best case of about 31 s.
Risk, named
Negative controls, build exit before test exit.
ci.yml'sTIER_BASEreorderedbefore || merge_group || pull_request(the reviewer's)ci::tests::the_names_a_landing_is_judged_on…, left[before, merge_group, pull_request]durations::tests::a_repriced_name_is_rendered_by_the_landing_that_repriced_it, touched{}against{audio_tone, iommu_empty_domain}sysret_ss_reloadwith no guard and a 1 ms ceiling (the reviewer's partial fix)the boot log already held the probe line and the console was drained 1 time(s) for it anywayWhy::CostOnTheGaterows writtenWhy::Costtiers::tests::the_ci_profile_and_tiers_agreewith fivebelongs Fastlines, anda_nightly_price_does_not_return_a_row_the_gate_holdswith it--merge-durationsover the nightly's twelve artifacts on agit archiveofdc38a054sysret_ss_reload15,402 over the line and 26Why::Costrows that belong FastThe independent oracle. The prices are CI's own
durations-shard-*artifacts from a scheduled hosted run of
mainand from this pull request'sown hosted run; the push-lane prices are the five push runs' own
durationsjob logs;
--merge-durationsrefuses anything that is not one wholetwelve-shard partition.
What this does not claim. The 22 returned names are under the line on two
hosted partitions, one per lane, and no more than that; a name that straddles
on the nightly's own lane is still held nowhere (
log_conservation_smp4,first section). The shortened-ceiling half
of the reviewer's partial fix (guard kept, ceiling cut) is not reded by
anything: it breaks only a shard where iod's probe runs after
===READY===,and no actuator stages that.
Checks run, on
08d700d3cargo test -p toyos-build --libcargo test --test toyos-build -- --list(check_registration)cargo run -- --merge-durations <run 35352795338's twelve artifacts> --tier-base 9f91b581— the pull-request lane, with the baseci.ymlpasses (pull_request.base.sha)cargo run -- --merge-durations <nightly 35072262489's twelve artifacts>, no basesysret_ss_reload measured 15402 ms in CI, over the 10000 ms line, but sysret_ss_reload remains Fast. That line is the nightly having run the test before20b04cc1fixed its drain; nothing else is named, and the written profile differs from the committed one in that row onlygit archiveof basedc38a054cargo test sysret_ss_reload(guest, dev host TCG), on84bfc3c5cargo run's QEMU path was not used; the guest boot above is the harness.🤖 Generated with Claude Code
https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK