Repository navigation
Delete the test tiers: a run is the whole suite or its filter - #625
Conversation
The Fast / Nightly / Weekly / Local tiers selected which registered guest tests a run took: `src/tiers.rs` (Tier, Reach, Schedule), a Tier column on every MACHINE_TESTS and SCREEN_TESTS row, the `--nightly` / `--weekly` flags and their refusals, the nightly workflow's two schedules and the cron reader in `src/ci.rs` that turned one into a reach flag, the tally's held-back report, and the rule that one shared boot has one tier. All of it goes; nothing replaces it. `cargo test` runs every registered test, or the ones its filter names, and every nightly guest shard runs the whole suite on one daily schedule. `Local` was the one tier that said something about the machine: the AArch64 `virt_` rows boot a guest no CI guest lane installs a QEMU for. That is now the row's architecture, an `Arch` column on SCREEN_TESTS in the Tier column's place, and `select` drops a row of another architecture than `ci::GUEST_ARCH` on a shard, which only a CI guest lane runs. The guest job's instrument reads the same constant. `schedule`'s refusal of a name registered twice stays, as `registered`; `--list` prints the names alone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U6SVYFkdvV2t38KzNrESxs
# Conflicts: # tests/toyos.rs
|
Review of #625 at Gate: CI BLOCKER
NOTE
REMOVE
SEND BACK 🤖 Generated with Claude Code |
src/ci.rs: main deleted gate-stage and nightly-red with their constants; this branch deleted the two schedules' crons. Both deletions kept, and GUEST_ARCH stays. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ff that The review of #625 at c9ef173 found the new `Arch` column on `SCREEN_TESTS` a second declaration of what `Profile::arch()` already says, with nothing tying the two. The column is gone: each row names its `qemu::Profile`, the screen task hands that profile to `run_screen_test`, and every body boots it rather than a literal of its own (`virt_job` and `virt_selftest` take it as a parameter). `select` drops a row on a shard when `profile.arch()` is not `ci::GUEST_ARCH`. A row can no longer say aarch64 while its body boots x86, because the body boots the row's own profile. `screen_gop_firmware_mode` still boots a second machine, `Metal`, by literal beside its row's `Gop`: a different arch there fails that boot on a shard, never skips it. `registered()` answers a `Result`, so its refusal of a name registered twice is testable: `a_name_registered_twice_is_refused` covers two shared rows and a shared row under a screen row's name. The selection check is renamed to what it checks and gains a non-prefix filter (`el2_drop`). A sharded run whose filter matches only rows the shard drops for their arch now names them and says why, rather than "No enabled test matches filter". Deleted, per the review: the false "only a guest lane runs a shard" clauses, the reworded comments in `src/build.rs` and `nightly.yml`, and the stale `src/tiers.rs` / `Tier::` / `--nightly` / relegation clauses in eleven issue files. Stage 8 of the arm64 track no longer names a tier or an aarch64 CI lane: its exit is one manual whole-suite run on the M4 host. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
No CI NOT READY FOR REVIEW 🤖 Generated with Claude Code |
tests/toyos.rs: keep main (#623) dropping SHOW_OUTPUT, keep this branch dropping Reach. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Review of #625 at Gate: CI Net size is −383 (+603/−986):
Two runs must be green at the landing head, both the orchestrator's:
Earlier BLOCKER
The earlier NOTEs are closed as well: the BLOCKER None. NOTE
REMOVE
LAND AFTER NAMED CHANGES 🤖 Generated with Claude Code |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…cture A shard now prints one line naming the screen rows it leaves to a guest of another architecture, from `arch_drop_line`, on every shard and not only when the selection ends empty. The empty selection has the one message it had on main, "No enabled test matches filter". `a_run_selects_by_filter_and_shard` checks the line for an unfiltered shard, a filter naming one dropped row, and a filter naming none. `virt_job`'s cached test binary is `virt_copyout(arch)`, one cache per architecture behind an exhaustive match, so a boot on one architecture cannot be served the other's binary. Deleted: `GUEST_ARCH`'s doc, `shared_row`'s doc, and the reason `screen_pager_keys` boots Metal, which `Profile`'s `usb` field already states. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One conflict, modify/delete: issues/build/defect-events.md. Main deleted the file (#626, the meta tracks); this branch had cut three lines of it, the sentence saying `src/tiers.rs` reded a `Tier::Fast` name measured over `FAST_CEILING_MS`. The deletion takes the file. That cut was the branch's only hunk in it, and the sentence it removed goes with the file, so nothing of the branch's side is left to carry. No other file cites the deleted name, by path or bare. Every other file merged without a conflict, and each was read for what the two sides mean together: - src/ci.rs: this side removed the guest reach and its schedules, main reshaped `Control::krate` and the model-control packages; the two touch different functions and the merged file has both. - src/lib.rs: this side dropped `tiers`, main dropped `actuatorstate` and `forkcheck`. - .github/workflows/nightly.yml: this side's single daily cron, main's package list for the guest image. - CLAUDE.md: this side's testing sentence without the tiers pointer, main's fork-rules pointer. - The three issue files both sides edited keep this side's `src/tiers.rs` cuts and main's deletions. The rust gitlink is 90697f14 on both sides and does not move. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A search of every CLAUDE.md, .claude/agents/*.md, README.md and issues/ for
tier, the reach flags, `src/tiers.rs` and `in_tier` finds no prompt or
CLAUDE.md that names a tier of tests (the hits there are model tiers and the
compiler's target tiers); the text naming what is gone is in issues/. What no
prompt says is how a run is chosen now, and the one place an agent needs it is
the orchestrator's Runs paragraph, which queues the guest runs and is where a
reach flag would be typed:
- .claude/agents/orchestrator.md: "A run is the whole suite, or a positional
filter that reaches any enabled test." Enabled, because a redlist row still
disables a test in every run.
In issues/, only what states a tier or the reach flag as present fact or as
something to do was cut, and each cut removes the tier word and nothing else:
- A registration stated as fact: "(fast tier)" and "(nightly tier)" after a
test's name, "the nightly-tier test", and ", Nightly" in a registration
citation, in six files.
- "in any tier" and "in every tier" on a coverage claim, in three files.
- An exit that asks for a "fast-tier test", "a loaded fast tier", "runs of the
Fast tier" or "re-tiered", or that types `--nightly`, in eight files. Where
the tier was one of two ways to satisfy the exit ("a host test or a
fast-tier test", "either re-tiered or fixed at the cause"), the exit keeps
the other.
- `issues/build/a-metal-only-row-cannot-be-disabled.md` cited `schedule`, the
value this branch replaced by `registered`; its three citations follow the
rename.
- `issues/build/the-shard-split-prices-a-boot-and-not-the-image-behind-it.md`
argued for a second profile from the Fast ceiling and the tier gate; the
ceiling went before this branch and the gate with it, so the clause naming
it and the sentence that carried the argument go.
Left as they are, on purpose: dated observations of a run, which say which run
was measured and so cannot be restated without changing what was measured, and
which the supervisor track's own exit search already treats as recorded
evidence. That is 17 lines that name `--nightly` as part of a run that
happened, in 15 files, and the sightings that call a run a "fast tier" or a
"Fast tier". Also left, because they are not this branch's to decide: the
network gate's plan for a Fast and a Thorough tier
(issues/build/there-is-no-network-gate.md), and the audio issues' fast and
thorough tiers, which are the audio gate's own.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Found by sweeping the tree once more, on the merged head, for the terms of the brief. Both state the tier machinery as a standing fact or ask for it: - issues/build/idle-stack-guard-price-nearly-doubled-since-its-return.md: its closing sentence says relegation hides the symptom from the per-PR gate, and that this is why the growth is recorded. Relegation went with the tiers and the PR gate runs no guest, so the sentence is false and goes whole. The dated prices and the two hypotheses stay. - issues/build/qemu-drops-console-output-the-harness-is-slow-to-read.md: the exit condition asks for 20 of 20 runs "beside a full nightly", which was a whole-suite run on the dev host. A run is the whole suite now, so it says so. Nothing else moves. The sweep's residue is recorded evidence of runs that happened (a sha, a PR or a date anchors each), the audio gate's own fast and thorough modes, the network-gate track's plan for a Fast and a Thorough split, and model and compiler-target tiers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016t9wjdQkB8SH7bmfUoiy6L
One conflict, content: issues/build/a-metal-only-row-cannot-be-disabled.md. Both sides edited its "Measured" paragraph, on neighbouring lines. Main cut the line citing issues/build/a-readbacks-kernel-records-never-count-as-kernel-output.md, a file #616 deleted; this side renamed `schedule` to `registered` on the line after it. Both edits stand: the citation is gone and the line reads `registered.contains`. None of the eight files #616 deleted is cited by path or by bare name anywhere in the merged tree. Every other file merged without a conflict, and the two that both sides edited were read for what the edits mean together: - tests/toyos.rs: main's hunks are the METAL rows' judges, the C corpus's expectation reader, the xHCI handoff judge and `metal::run` without its `RUST_SKIP` argument; this side's are the registration tables, the selection and the shard partition. The metal arm of `main()` calls this side's `registered` and main's `metal::run`, and no line of it is in both. - tests/checks.rs: main's metal-judge checks follow this side's selection and registration checks, and the `--metal --list` check calls main's `metal::run` with this side's `selected`. #616 brought no tier, reach-flag or schedule wording: its patch, searched whole for them, has none, and a sweep of every CLAUDE.md, .claude/agents/*.md, README.md and issues/ for `tier`, `--nightly`, `--weekly`, `Fast`, `Nightly`, `Weekly`, `Local` and the removed names finds the same lines before and after the merge. The rust gitlink is 90697f14 on both sides and does not move. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016t9wjdQkB8SH7bmfUoiy6L
The tiers are gone: each screen row names the profile it boots. The four new rows name theirs (`virt_el1_smp` boots `VirtTcg`, the other three `VirtEl2`), and each of their functions takes the row's profile, as `virt_job` now does. `virt_job` keeps this branch's one CPU and its judge, `judge_virt_job`, and takes main's `virt_copyout`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016t9wjdQkB8SH7bmfUoiy6L
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016t9wjdQkB8SH7bmfUoiy6L
tests/toyos.rs, ten hunks: #625 drops the tier from every registration, and this branch deletes the kernel's page cache, write-back, /log mount and boot-volume rows and adds fsd's and blockd's. Each hunk keeps this branch's rows and comments, and no row carries a tier. home_overwrite_reads_back's tier change goes with the tiers, and its comment stays this branch's. issues/filesystem/home-budget-refusal-retried-is-red-on-every-nightly.md: modified on main (it drops "(nightly tier)") and deleted here with home_budget_refusal_retried in c191577. The deletion stands, since nothing on either side runs the test it names. tests/checks.rs: #616's metal_judges_read_the_page_for_what_only_the_page_carries planted "Syncing filesystems..." as the tail of a stop that never reached its last word. This branch deletes that line from the kernel's stop, and the stop record is what readers of the stop order against. The fixture is now a stop record from the T14's readback at 10dc46c. The rust gitlink does not conflict. Main's pin is 90697f1401a, the same as at the last merge base, and this branch's c4c65e3e87a contains it. The quiesce-last staging issue: STAGED is 42010 ms now, the stop's own budgets plus PARK, but it is still an in-guest deadline that both sides of the staging panic on. The issue therefore stays. Its slug named ten seconds, which the tree now refutes, so the file is renamed the-quiesce-last-staging-dies-on-a-guest-clock-deadline.md with a heading that names STAGED. It gives up the clause about quiesce_twice's WAITS_WITHIN, which exists on neither side. Nothing cites it under either name. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016t9wjdQkB8SH7bmfUoiy6L
#625 deleted the test tiers; the files both sides touched merge line by line with no conflict, and no reference to a module this branch deletes arrives with it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016t9wjdQkB8SH7bmfUoiy6L
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016t9wjdQkB8SH7bmfUoiy6L
The one conflict is the machine-test table: #625 drops every row's tier, so `blocking_read_window` and this branch's `handler_post_without_a_pass` keep their rows without one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016t9wjdQkB8SH7bmfUoiy6L
922 commits of main since 8ee3c51. What main deleted takes the branch's hunks on it with it, and what main changed under the branch is taken as main wrote it. Conflicts, per file: - tests/toyos.rs, tests/common/power.rs, tests/common/faults.rs, tests/common/qemu.rs: main's as written (#660 cut the guest suite to what only a booted machine answers, #625 deleted the tiers). The branch's hunks there had no home: its five `isa_` guest tests and `crash_report_reads_no_kernel_memory` with their helpers (`isa_ports`, `isa_verdict`, `isa_status_byte`, `wait_for_obf`), which stood on the tier tables, `Profile::MetalNoUsb`, `BootOptions::i8042`, `qmp_send_keys`, `logstream::stage` and the `i8042-fault` and `i8042-budget-expired` actuators, all gone; `panic_ignores_keys` and its edits to `panicked()`, `PANIC_REBOOTING` and `await_reset`, whose `panic_reboots` family main cut; and its deletions of `screen_pager_keys`, `screen_paged_scrollback` and `check_no_stale_cells`, which main had already deleted. The commit after this one puts the dropped tests' behaviours on main's tiers. `tests/toyos-rust-tests/src/bin/isa_grant.rs` goes with the harness that gave it its roles, and comes back there. - tests/test-durations: deleted by #639; the branch's two removed rows have no file. - src/sourcegate.rs: `ARCH_RULES` went with #624; the branch's row has no table. - issues/build/assembly-outside-an-arch-module-in-userland-and-guest-probes.md: main rewrote the one line the branch reworded. - kernel/src/sched/driver.rs: `irq_ring`'s `UserDev` arm went with #634, and `isa::drain_pending` with it. The row's handler posts its claim's watch itself (`IrqWatch::post_in_place`), and the first interrupt is announced at the holder's read, both as `pcidev` does on main. - kernel/src/arch/{x86_64,aarch64}/pio.rs: #647 deleted both, their `EXISTS` and `out*` being dead. They come back holding only what the `isa` claim needs of an architecture. - kernel/src/panic_reboot.rs: main's `PANIC_KEYS` goes with the key the panic path no longer reads, and the line it kept for a machine that reads none is the one line now ("the bound is over"); the reset is `power::reset_now` (#647) and the raw writes are under the console's registers (#675). - kernel/src/arch/x86_64/i8042/mod.rs, aarch64/keyboard_controller.rs: main's `poll_byte` and `PANIC_KEYS` go with the pager. - kernel/src/arch/x86_64/idt/mod.rs: `log_nest` went on main. - kernel/src/actuator.rs: main's cut of the i8042's actuators stands. - issues/kernel/the-kernel-is-small-interrupts-post-and-threads-wait.md: main's stage 6 with the branch's stage 7 after it, and main's three "#592's i8042 stage" read "stage 7.2". Stage 7.2 loses its clause about `i8042-trace` and `shell_type_once`, which main deleted. What the merge had to change beside them, to build and to stay true on main: - `kernel/src/device.rs`: `Isa` joins the classes whose `Claimed::Class` drop cancels nothing, a match main added. - The straddle actuator is the i8042 driver's own module (`i8042::straddle`), reached from `isa::claim` through one arch function, and it raises the driver's flood itself at each answered claim: main deleted `i8042-fault`, the flood the branch's test was staged with, and the guest's keys with it. `i8042-withheld` leaves the controller unprobed, where the branch used `i8042-budget-expired`. - `panic-reboot-fast` comes back, which main deleted with the tests that armed it: `screen_fatal_behind_a_painter` proved its CPU watches the reset bound by the pager's second page, and with no pager the reset is the proof. It runs on the profile whose keys reach the i8042 and presses one inside the bound, which is what `panic_ignores_keys` asserted. `Profile::Gop`, which nothing else boots, goes. - `screen_panic_muted` reads the arm line as it is now written. - main's `report_line` and `heartbeat` are gone, so nothing reads the i8042's status port off `IRQ_CPU` and the quarantine's doc says so. - The port grant's pure half is `toyos_userbound::port`: the bitmap as the processor reads it, which rows a switch opens and closes, and the decode of a refused `in` or `out`. A grantable port is a `u8`, so one past the bitmap is no row. `percpu` embeds the bitmap in the TSS and `pio` is what is left of the architecture. - A mint no longer clears the row's record: its release cleared it, and an interrupt taken with no claim on the row is the next holder's to read. - `toyos-tco`'s doc of the panic bound and the guest-suite track's two pager lines named what this branch deletes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013UDZQ6fSKw14e4w2TKTRfm
Delete the Fast / Nightly / Weekly / Local test tiers. A run now takes the whole suite, or whatever its filter names; each nightly guest shard runs everything, on one daily schedule.
What went
src/tiers.rs:Tier,Reach,Schedule,for_filterand their tests.Tiercolumn on everyMACHINE_TESTSandSCREEN_TESTSrow intests/toyos.rs. Also gone:SHARED_TIERcheck_shard_partitionNOT runlinesTally::holding_backand itsrelegatedfield, with thenot run without --nightlyblocks and theheld back forsuffix on the result line--nightly/--weeklyinsrc/testargs.rs, and their two refusals (--nightlybeside--weekly, either one beside--metal). Their tests are deleted too, and the flags are dropped from the fixture argv lists. A--nightlytyped now is refused as an unknown flag.src/ci.rs:guest_reach,reach_of_event,reach_of_schedule,NIGHTLY_CRON/WEEKLY_CRON, and their three tests, including the one that parsednightly.yml's crons.guest <i>/<n>now runs--shard i/n --jobs 1..github/workflows/nightly.yml: the two crons become one,0 3 * * *.tests/checks.rsnightly_tier_is_announced.faults.rs"Nightly." paragraphbuild.rs's paragraph on what a CI shard chargesnightly.yml's header clause on when it runsCLAUDE.md(briefed) andtests/CLAUDE.mdissues/kernel/toyos-runs-on-arm64.mdstage 8 no longer names a tier or an aarch64 CI lane. Its exit is one manual whole-suite run on the M4 host, after the track's stages.What replaced
LocalEach
SCREEN_TESTSrow names theqemu::Profileit boots, where theTiercolumn was. The screen task hands that profile torun_screen_test, and every body boots it rather than a literal of its own.virt_jobandvirt_selftesttake it as a parameter, andvirt_job's cached test binary isvirt_copyout(arch): one cache per architecture behind an exhaustive match, so a boot cannot be served the other architecture's binary.MACHINE_TESTSrows carry only(name, Sched).Selection is
select(shared, filter, sharded)intests/toyos.rs:kept(filter, name)passes, meaning the filter matches and no redlist row disables it.profile.arch()is notci::GUEST_ARCH.GUEST_ARCHis the constant the guest job's instrument step reads too.The architecture is stated once, by
Profile::arch(), and read off the profile the body actually boots. A row cannot say aarch64 while its body boots x86. The one body that boots a second machine isscreen_gop_firmware_mode: its row namesGop, and it also bootsMetalby literal. A different-arch literal there would fail that boot on a shard. It could not be skipped.Every shard prints one line naming the screen rows it drops for their architecture (
arch_drop_line: the rowsselect(.., false)takes andselect(.., true)does not), whether or not anything is left to run. An empty selection has the one message it always had, "No enabled test matches filter".What stayed
The refusal of a name registered twice stays as
registered(), which now answers aResultso the refusal is testable.--listprints bare names: 517, 12 of themvirt_.What the prompts and issues say now
A search of every
CLAUDE.md,.claude/agents/*.md,README.mdandissues/fortier,--nightly,--weekly,Fast/Nightly/Weekly/Local,src/tiers.rs,in_tierandTier::found no prompt,CLAUDE.mdorREADME.mdthat names a test tier; thetierleft in those is model tiers and the compiler's target tiers. In all, 29 issue files and one prompt line changed..claude/agents/orchestrator.md, "Runs": one line, "A run is the whole suite, or a positional filter that reaches any enabled test." The orchestrator is the only role that runs guest tests, and "enabled" is there because asrc/redlist.rsrow still disables a test in every run.src/tiers.rsorFAST_CEILING_MS; one of them is the stage 8 bullet above.issues/boot-media/a-disk-whose-port-went-away-panics-the-boot-at-roots-hold.md,issues/boot-media/screen-diag-boot-leaves-no-i8042-line-on-the-panel.mdandissues/filesystem/home-budget-refusal-retried-is-red-on-every-nightly.md("(nightly tier)");issues/kernel/a-log-rings-owner-is-named-only-when-logd-reads-its-registration.md("(fast tier)");issues/filesystem/blockd-survives-its-death-reds-on-a-replacement-that-reorders-acknowledged-writes.md("The nightly-tier test" is "The test");issues/hardware/tearing-is-what-gop-cannot-give-back.md(", Nightly" in a registration citation).issues/kernel/a-claims-own-refusals-are-read-by-nothing.md,issues/kernel/nothing-asserts-that-a-claim-answers-no-configuration-write.md,issues/kernel/nothing-reaches-the-msi-arm-of-a-claimed-function.md.--nightly:issues/build/which-pass-drain-irqs-is-entered-from-is-gated-only-by-a-nightly-guest.mdandissues/build/a-settled-thread-join-taking-the-table-lock-again-is-gated-by-nothing.md, which also says "the guestfpu_isolation" where it said "the nightly guest".issues/build/lan-talk-host-closes-judges-a-fixed-ten-second-window.md("a loaded suite"),issues/build/parallel-tests-red-under-other-suites.md("a loaded full suite"),issues/build/qemu-drops-console-output-the-harness-is-slow-to-read.md("a full suite"),issues/build/the-console-loses-typed-keystrokes-under-host-load.md("runs" for "runs of the Fast tier").issues/build/log-reserve-window-negative-times-out-beside-other-guests.mdandissues/build/process-stats-exits-101-beside-other-guests.md.--nightlyremoved from the command:issues/build/usb-transport-break-flushedstick-can-break-after-the-reboot.md.issues/build/the-shard-split-prices-a-boot-and-not-the-image-behind-it.md(the clause tying the profile to the ten-second Fast ceiling, and the sentence arguing a second profile from that ceiling and the tier gate) andissues/build/idle-stack-guard-price-nearly-doubled-since-its-return.md(the closing sentence on relegation and the per-PR gate).issues/build/a-metal-only-row-cannot-be-disabled.md:scheduleisregisteredin its three citations, the function this branch replaced.--nightlycommand that ran and its outcome, and others call the run a "fast tier"); the audio gate's own fast and thorough modes (issues/audio/gate-a-suspend-structure-verdict-unread.md,issues/audio/hda-has-no-jack-detection-volume-or-keys.md,issues/audio/desktop-session-put-26ms-of-silence.md); andissues/build/there-is-no-network-gate.md's plan for a Fast and a Thorough split, which is the owner's to decide.Size
Net −348: 41 files changed, +678/−1026 (
git diff --shortstat origin/main...HEADat head68340f068,origin/main3af470121). Production (src/,.github/,CLAUDE.md): 7 files, +17/−343. Tests (tests/): 4 files, +611/−609. Prompts and issues (.claude/,issues/): 30 files, +50/−74.Gates (head 68340f0, origin/main 3af4701 merged)
cargo run -- --ci hostexits 0:[ci] Host: 54 step(s), all green.cargo test --test toyos-build -- --listexits 0: 517 names, 12 of themvirt_, the same 517 names and the same redlist rows as at11e543ae1.The merge of origin/main
origin/mainat3af470121(#616, the metal judges) is merged. The one conflict wasissues/build/a-metal-only-row-cannot-be-disabled.md: main cut the line citing an issue #616 deleted, and this branch renamedscheduletoregisteredon the line after it. Both edits stand, and no file cites any of the eight documents #616 deleted, by path or by bare name. The merge changes none of the branch's hunks and drops none of main's: overgit diff -U0, merge minus main and the branch's own patch (11e543ae1against theace064f9dit had last merged) have onegit patch-id --stable,22f8051e, and merge minus branch and main's own patch have one,7ebcbfca. No file the branch touched is a file main deleted, so no file is excluded. Altering one line of the conflicted file's hunk in either diff text moves its id (c38d66df,90da2bbb), so the equality is not vacuous.tests/toyos.rsandtests/checks.rsare the two files both sides edited and merged without a conflict; their hunks do not overlap, andcargo test --test toyos-checksruns both sides' new cases in one binary, 19 passed.tests/common/faults.rs,src/testargs.rsandsrc/build.rsare byte-identical to7d98ba5b. #616 adds no tier, reach-flag or schedule wording: a sweep of everyCLAUDE.md,.claude/agents/*.md,README.mdandissues/fortier,--nightly,--weekly,Fast,Nightly,Weekly,Localand the removed names finds the same lines before and after the merge, so this round edits nothing else.Tests and negative controls
checks::a_run_selects_by_filter_and_shardruns against the real tables plus one fixture shared test. It checks:GUEST_ARCHel2_drop)virt_el2filter takes nothingvirt_el2_dropunderel2_drop, and nothing undersshd_checks::a_name_registered_twice_is_refusedchecks three things:virt_el2_drop) is refusedEach mutation below was applied as a checked patch (
git apply --check), built (build exit 0 each time), run, and reverted, leaving the tree clean.At
7d98ba5b:arch_drop_line:select(shared, filter, false)→select(shared, filter, true)a shard that drops the rows of another architecture said nothingAt
60e667d2(kept,registeredandselectare unchanged since):kept:name.contains(f)→name.starts_with(f)el2_drop, unshardedregistered: the refusal dropped (names.insert(name);)shared_onetwice answeredOk(305)select: the shard's arch filter droppedvirt_rows takenvirt_el2_drop's row namesProfile::Gopvirt_el2_dropno longer foreignFrom the first round, all red (exit 101):
keptignores the redlistA whole-change revert is not a usable negative control here: the test and
selectdo not exist on the base.Measured cost of running everything
7d98ba5b: 495 passed of 495.2d45623a:host,build,tcg, both portability jobs and 11 of the 12guestjobs passed.guest (4)failed onscreen_loader_linesalone, 21 of its 22 tests passing:the panel carried 26 rows at the GOP query and 41 at the loader's last line, a growth of 15, where the loader printed 14 lines between them, 14 rows at 240 columns. The same message reds main's nightly (run 36550208853 at7e151819,guest (11)), andscreen_loader_linesis one of the names inissues/build/parallel-tests-red-under-other-suites.md.virt_rows, and no shard log names avirt_row.guestjob,guest (4), took 27 m 53 s, against the 60-minute job timeout.Unsure / not measured
MACHINE_TESTSrow carries no profile and is always kept on a shard. No machine test bootsvirttoday. One that did would fail on a shard, loudly.testargs.rsa_readback_directory_alone_selects_no_tier,toyos.rs"no other tier" in the metal registration doc) is not the tier system and stays.7d98ba5b, so no CI shard has printed the drop line; only the host test checks it.check_c_result's expectation reader, which an ordinary guest run exercises.🤖 Generated with Claude Code
https://claude.ai/code/session_016t9wjdQkB8SH7bmfUoiy6L