Repository navigation
Harness: metal boots taken whole by name, a stalled wait carries what the guest said, a guest test boots the console image - #768
Conversation
…what the guest said, and a guest test boots the console image The suite takes every word that is nobody's value as a filter, and a word `boot:<name>` under `--metal` takes that boot whole: its shared members as the whole profile chunks them, and every row with an arm on it. `metal::select` is the one selection, after chunking, so `shared-2` is a name; a word that takes nothing is refused by name in both suites. The line that said the shared boots' members are not filtered by name was false and is gone with the two per-table filters it stood beside. `await_guest`'s stall puts the last forty lines the guest said during the wait under its sentence, with the count of what was cut, through the one `window` the never-announced verdict already cut by. `console_image_boots` boots `console/system.toml`'s image on the metal-sim shape with no display and waits for `console: ready`. Nothing is typed at its shell: its only input is the i8042, and issues/the-console-loses-typed-keystrokes-under-host-load.md is open. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RvnWQFcMuGqTHYhvSnTe8A
…n's bounded count on a held wire is filed `tests/checks.rs` still passed the filter `c_corpus_metal` no longer takes, so `toyos-checks` did not compile at 23857ec. issues/the-power-offs-last-drain-gives-up-on-a-wire-whose-holder-cannot-run.md files what the review of #767 read in `serial::flush_final`: read from the code, not run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RvnWQFcMuGqTHYhvSnTe8A
|
The three mutation patches the body's gates name. Each was made against
diff --git a/tests/common/metal.rs b/tests/common/metal.rs
index 1217c55b1..ef147fd3b 100644
--- a/tests/common/metal.rs
+++ b/tests/common/metal.rs
@@ -204,7 +204,7 @@ pub fn select(
let named = |name: &str| all || names.iter().any(|word| name.contains(word));
let mut taken: Vec<SharedBoot> =
- whole.iter().filter(|boot| boots.contains(&boot.boot.as_str())).cloned().collect();
+ whole.iter().filter(|_| false).cloned().collect();
let by_name: Vec<SharedBoot> = shared
.iter()
.cloned()
diff --git a/tests/toyos.rs b/tests/toyos.rs
index cc34a7854..e8f1d5998 100644
--- a/tests/toyos.rs
+++ b/tests/toyos.rs
@@ -1774,7 +1774,7 @@ fn console_image_boots() -> Result<(), String> {
BootOptions { profile: qemu::Profile::Metal, ready_marker: bootlog::COMPLETE, ..Default::default() },
);
let mut console = format!("{}\n", qemu.boot_log());
- await_marker(&mut qemu, &mut console, "console: ready ", "the console to take its panel")?;
+ await_marker(&mut qemu, &mut console, "console: never ", "the console to take its panel")?;
serial::Serial::named("the console image's boot", console).must_be_clean()
}
diff --git a/console/system.toml b/console/system.toml
index 65be9a1a6..57ba9737b 100644
--- a/console/system.toml
+++ b/console/system.toml
@@ -16,7 +16,7 @@
assets = ["assets"]
[boot]
-start = ["logkeeper", "diskserver", "fileserver", "console"]
+start = ["logkeeper", "diskserver", "fileserver"]
# `/system/bin/console` owns the screen and provides the surface its shell and the
# shell's children inherit. No compositor here, so nothing receives one. |
|
Review of Net: 8 files, +305 −101 ( BLOCKER
NOTE
1. The selector, ruled
2. The stall tail, ruledBounded at 40 lines with the count of what was cut; one cut ( 3.
|
…the filed reading turns on the seal - tests/checks/qemu.rs: step 6 of ceiling_self_check is deleted. It tested that `window` keeps the tail under its count, which a reader of the eight moved lines checks, and it held the tail's wording a second time. `window` has no caller outside its module again and is private. - tests/common/metal.rs: `run`'s "nothing to run" guard is deleted: `select` refuses every word that takes nothing and no word takes the whole profile, so nothing reaches it. `select`'s doc no longer promises a refusal of a boot taken whole beside a member that lands on its label: `batches` refuses it, naming the label and neither word. - src/testargs.rs: `parse`'s header said every refusal costs only a message. Under --metal a word that takes nothing is refused by `select`, after the shared binaries are built; the header says so. - The filed reading: preemption goes off where `seal_shut` takes the controller lock, not at `drain_inline`, and nothing keeps klogd from running between the two. The claim, the unknown and the exit's actuator are restated on the seal, and four citations are corrected to the lines they quote. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RvnWQFcMuGqTHYhvSnTe8A
|
Review of Net: 7 files, +301 −106 ( Round 1's BLOCKERs
Round 1's NOTEs
BLOCKERNone at this head. NOTE
The owner's ruling on fewer, fuller T14 bootsNothing in this diff has to be undone for either step. Step A (rows moved onto existing boots): LAND AFTER NAMED CHANGES |
#767 gave this wait a capture of its own, from the boot log's end. That is where await_guest's window starts, so with the harness-wide tail a stalled wait here said its lines twice. The local one goes; the wait is a bare `?` again. acpi_lock_given_back_on_one_cpu shares the function. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RvnWQFcMuGqTHYhvSnTe8A
Three harness clean-ups and one filed reading. Head
e9185c18f, which holdsorigin/main8a883a142merged in (5939e8f19, clean) and one commit over it. The landing rests on CI ate9185c18f:host,toolchain / buildandguest / suitehave not run at this head when this is written; what has is under "Gates".What changed, per decision
1.
--metaltakes named boots whole, in one invocation. No existing word did it: the one filter was a substring applied to members before chunking, soshared-2was nobody's name.--metala wordboot:<name>takes that boot whole: its shared members as the whole profile chunks them, and every row with an arm on it (which brings that row's other boots).cargo test --test toyos-build -- --metal --metal-readback <dir> boot:shared boot:shared-2 control_regsstages, and over the answered directory judges, those.metal::select(tests/common/metal.rs) is the one selection, and the chunking moves into it;shared_metalandc_corpus_metallose their filter parameters. Four guards that selection made unreachable are deleted: the three "boot with no jobs" ones andrun's "nothing to run".boot:without--metalis refused at parse.parserefuses before any lock or build; under--metala word that takes nothing is refused byselect, which needs the corpus' built names, so that refusal comes after the shared binaries' build (63 s cold,metal-dead-boot.log).parse's header says so.batchesastwo shared boots are both named "…", which names the label and neither word.select's doc promises nothing about it.2. A stalled wait says what the guest said.
await_guest'sSTALLEDputs the last 40 lines the guest said during the wait under its sentence, with the count of what was cut. The sentence stays the first line, which is what the summary and the stall classifier read.windowis the tailWaitVerdict::for_testalready cut by, factored out and private to its module, so there is one cut and one place that holds its wording. No check holds it: that it keeps the tail under the count is read off eight moved lines.acpi_mediated_access's wait (.map_err(… "since its boot the guest said" …)and its comment, −3; theawait_guestcall ends in?again). That capture began at the boot log's end, whereawait_guest's window begins, so a stalled wait there would have said its lines twice.acpi_lock_given_back_on_one_cpuruns the same function.run_test_paced's ceiling (its capture isTestResult::serial), and the three callers that append their whole capture after the error (judge_virt_job,iommu_virtio_platform, and since A pipe watch can ask whether the other end is gone, and netstack decides a client has left by it #760netstack_socket_churn's wait for the lease), whose captures open with the boot log the window does not hold. Read in the mergedtests/toyos.rs: no other wait appends what the tail already says; the otherawait_guestcaller,the_others_halt_first, is a bare?.3.
console_image_boots: a headless guest boot ofconsole/system.toml's image, onProfile::Metal(a panel for/system/bin/consoleto claim, the 16550 as console,-display none), waiting forconsole: readyand a clean console.shutdown. The console's shell reads the i8042 and nothing else, and the tests that typed at it were deleted as red under host load:issues/the-console-loses-typed-keystrokes-under-host-load.mdandissues/the-console-input-path-can-stop-after-a-ps2-overflow.mdare open, their exits unmet.metalimage::deriverefuses a config that starts no runner and this image runs no job list and hands no machine back.screen_console_shell(deleted958ada05eas a filed flake under other worktrees' suites) read the panel on flat 30 s ceilings; this reads the console only, underawait_guest's liveness guard. Under the development machine's load it is unmeasured.4. Filed:
issues/the-power-offs-last-drain-gives-up-on-a-wire-whose-holder-cannot-run.md, the reading #767's review (comment 6058801505) named inserial::flush_final. Read from the code, not run. The reading turns on the seal: preemption goes off wherexhci::seal_shuttakes the controller lock, nothing keepsklogdfrom running betweendrain_inlineand it, and the exit's actuator stagesklogdinside its hold at the seal. Its citations were read, by me and by review round 2, at6e3cb894f, whose kernel wasd78350c71's; the merge brought #767's and #766's kernel changes under them and the line numbers were not read again at this head.Review round 1, per finding
ceiling_self_checkmut-window.patchwith it;windowis private;rg 'last 40|lines in it' tests srcfindstests/common/qemu.rs:410aloneselect's doc is dropped (−2)console.rs:94,machine.rs:94,serial.rs:278-279,xhci/mod.rs:1550parse's headerhost, no guest suite6e3cb894fby CI run 37773729360 (round 2 judged it so); owed again ate9185c18fReview round 2 (comment 6059791981, LAND AFTER NAMED CHANGES), per finding
mainorigin/main8a883a142merged (5939e8f19), the.map_errand its comment deleted ine9185c18f(tests/toyos.rs+1 −3). The two tests that share the function ran green at this head, belowed80f9099; #766 and #760 sincecargo metadata --lockedandtoyos-checksgreen on the merged tree, below.hostandguest / suiteate9185c18fare the measurement of the restorigin/main; CI run 37773729360 under "Gates", the round-1 table and "Unsure"; three whole-capture callersFriction removed against lines added
git diff --shortstat origin/main...e9185c18f: 7 files, +302 −109.tests/checks.rs,tests/checks/metal.rs,testargs' tests)map_err, deleted hereHarness code outside checks: item 1 +115 −81, item 2 +23 −15.
Gates
At
e9185c18f, on the development machine, one script (176 s), each line the command's own exit; the tree was clean after it:cargo metadata --lockedcargo test --test toyos-checkstest result: ok. 37 passed; 0 failed; 0 ignored; 0 measured; 0 filtered outcargo test --test toyos-build -- acpi_mediated_access acpi_lock_given_back_on_one_cpuPASS acpi_mediated_access (3s),PASS acpi_lock_given_back_on_one_cpu (138s)(135 s of that the cold build of its binary),test result: ok. 2 passed, 2 total; both under TCG, each printingacpi: the Global Lock given back for a holder that left it taken (the machine is stopping)These two are green arms only: what the deletion changes is the text of a red, and no stall was provoked on this wait. The tail itself was read red under
mut-stall.patchonconsole_image_boots, below.Not run at
e9185c18f:cargo run -- --ci host,toolchain / build, the whole guest suite. They are CI's.At
6e3cb894f, CI run 37773729360 (pull_request, the merge of6e3cb894fintoed80f9099, all three jobssuccess):host(cargo run -- --ci host, clippy in it)[ci] Host: 78 step(s), all greentoolchain / buildsuccessguest / suite, under KVMPASS console_image_boots (3s);test result: ok. 33 passed, 33 totalOn the tree
6e3cb894fcommits, on the development machine (run before that commit, over795a74859; the script's diff of the tree before and after is identical):cargo test --lib testargstest result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 387 filtered outcargo test --test toyos-checks metal_wordsundermut-selector.patchtest checks::metal_words_take_rows_members_and_whole_boots ... FAILED,left: Ok(("", "")),right: Ok(("", "shared=test_rs_a1+test_rs_a2"));0 passed; 1 failedAt
23857ec9d. Between it and6e3cb894fthe harness moved by a doc comment insrc/testargs.rs,pub fn windowmadefn window, a doc sentence and the deleted "nothing to run" guard intests/common/metal.rs, and the deleted check step; since then by the merge and this round's −3. None of these rows was run again:cargo test --test toyos-build -- console_image_boots machine_shutdowntest result: ok. 3 passed, 3 total:console_image_boots (3s),machine_shutdown, andmachine_shutdown_short_stop, which the second word is part of… -- console_image_boots no_such_testNo test matches filter "no_such_test"… -- boot:sharedboot:shared names a boot of the metal profile, and a run without --metal has none … add --metal… -- console_image_bootsundermut-stall.patchSTALLED: waiting for the console to take its panel — it went quiet,(the last 40 of the 59 lines in it), the tail's last lineconsole: ready 1920x1080 (240x67 cells) …; the log endsexit status: 1… -- console_image_bootsundermut-console-image.patchlogkeeper:with noconsole: ready; the log endsexit status: 1… -- --metal --metal-readback <dir> boot:shared-99boot:shared-99 names no boot of the metal profile, whose boots are {…}, printed11:35:09by a run whose first build line is11:34:06… -- --metal --metal-readback <dir> boot:shared-2 boot:ccorpus control_regs1 registration(s) and 159 shared member(s) over 3 boot(s):ccorpus: 137 job(s),shared-2: 22 job(s),testcases: 7 job(s); the log endsexit status: 2No T14 run was made or is asked for; the staged images were removed. The three mutation patches are in the first comment;
git apply --checkof each exits 0 ate9185c18f, and none was run again here.When #764 meets this
#764 (
wt/toyos-amls2, open):issues/no-harness-path-boots-the-console-image.mdis not onmain, and this does not meet its exit as written (ashutdowntyped andguest-shutdownread). What this gives it: the hand boots are replaced, andconsole_image_bootstakes oneawait_markeron its hand-over line, after which deletingacpiserverfromconsole/'s[boot] startreds a test. Onmainthe console image starts noacpiserver, so that line cannot be asserted here. The issue's body and exit are the orchestrator's to narrow or keep.Unsure
console_image_bootsunder a loaded development machine, the condition its predecessor was deleted under: unmeasured. Its readings are one under TCG, three tests wide on a quiet machine, and one under KVM inside CI's whole suite (job 113300721222).--ci host: CI ate9185c18f. Run 37773729360 measured this branch overed80f9099, before The AML interpreter is walked in declaration order and says what a call took #766, A pipe watch can ask whether the other end is gone, and netstack decides a client has left by it #760, The power-off says what it has to say above the console's last drain, and a one-CPU row reds without it #767 and munmap and a FIXED mmap take only the length the mapping was asked for #765.drain_for_the_stopparking on the wire and on nothing read between there and the seal taking preemption away.acpiserveris in the console image, a QMP power-button press (asacpi_power_buttonmakes) may reachguest-shutdownwith no keyboard, which would be a headless power-off of that image though not its shell'sshutdown.🤖 Generated with Claude Code
https://claude.ai/code/session_01RvnWQFcMuGqTHYhvSnTe8A