Disable flaky netd_refused_accept (hung 2341s waiting on a wake) - #579
Conversation
Orchestrator Fast tier at #562's head 2a9c77e timed the test out at "timed out after 2341s, with the guest still talking 8s ago", stuck on the wake for the connection an accept refused for room left; #562 touches nothing this test runs. A flaky test is disabled at once behind its filed issue (issues/kernel/netd-refused-accept-hung-waiting-for-a-wake-that-never-came.md), which also records the unconfirmed reading that the host's dial ended on a reset rather than a graceful close, returning netd's listener to Listen with no wake owed — not established without a kept console. A second, unrelated sighting from the same run: the hang cost the full 39-minute ceiling backstop rather than the much smaller GUEST_QUIET silence window, because the guest's periodic console lines never let it go quiet. tests/CLAUDE.md already documents this as intended, so it is filed as a tooling note on the cost rather than a defect (issues/build/a-stuck-but-chatty-guest-costs-the-full-ceiling-backstop-before-the-harness-ends-it.md). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W6rME2DoqwjcYFStYHHY4j
Review, round 1, at 11ada4eCI: These facts in the netd issue were checked against the tree and the log and hold:
Every BLOCKER
NOTE
REMOVE
SEND BACK |
…'s area and owner, and two removed claims The deleted tooling issue restated tests/CLAUDE.md's own design and owed nothing. In its place: GUEST_WEDGED's own doc says the wedged-but-chatty backstop is "Not budget-scaled", but ceiling_verdict's backstop is ceiling.max(GUEST_WEDGED) and ceiling is already width/host-scaled, so once a scaled ceiling exceeds 300s the backstop is that scaled ceiling, not the number the doc names — exactly the 2341s netd_refused_accept paid. The netd issue moves to issues/hardware/ beside its listener siblings, takes their owner line, and its exit condition now names the instrument it needs: netcase_against_host drops result.serial on its error path, so no kept console can exist until that path keeps it. Also removed: the "likely ended on a reset" claim (Ok cannot tell a reset from a FIN), "held by the orchestrator" on an expected-red entry, and both files' scratchpad-path citations, keeping the quoted FAIL line as the evidence. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W6rME2DoqwjcYFStYHHY4j
Review, round 2, at 9ac43dbCI: Round 1
The contradiction, checked against every caller of the backstop
BLOCKER
NOTE
REMOVE
SEND BACK |
… prose, and stop the netd issue asserting a reset The harness issue's exit condition could close while the contradiction it named stood, and both its branches were already ruled out by qemu.rs's own comment on `ceiling_verdict`'s backstop (:696-701): the pairing with `ceiling` is intended, so the backstop already is the scaled ceiling once that ceiling exceeds GUEST_WEDGED — exactly what the 2341s netd_refused_accept paid. So the issue is deleted, and the prose that called that backstop "Not budget-scaled" (qemu.rs:517, :522, :525-528), or its destination "the GUEST_WEDGED backstop" (:662-663), or its ceiling-below-backstop shape "every real test has" (:818-819), is deleted rather than rewritten: it was false of the tree, not the tree's own guard. The netd issue's last sentence claimed "which path the reset actually took" was left unestablished — but Ok(585728) cannot tell a reset from a graceful close, so no reset was ever established to have a path. Deleted along with the rest of that clause. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W6rME2DoqwjcYFStYHHY4j
Review, round 3, at 5a38b52CI: Round 2
The five deleted qemu.rs sentencesAll five were false or misleading, so deleting them was right:
What is left reads grammatically and leaves nothing dangling. Some of it is still false, below. BLOCKERNone. NOTE
REMOVE
LAND AFTER NAMED CHANGES |
…ceiling_self_check gets the case that would have caught the round-2 NOTE Each was false whenever a ceiling exceeds GUEST_WEDGED, the same falsehood already deleted elsewhere in round 2 or contradicted by ceiling_verdict's own backstop computation (ceiling.max(GUEST_WEDGED)): a talking guest is not always spared by `ceiling`, GUEST_WEDGED does not judge every talking guest, a new check's price is not this constant alone, and screendump_while_rendering's backstop is not GUEST_WEDGED but ceiling.max(GUEST_WEDGED). ceiling_self_check gained the case the NOTE named: a ceiling above GUEST_WEDGED with a guest talking past GUEST_WEDGED but still short of that ceiling must not be ended at GUEST_WEDGED. Mutating qemu.rs:685's `let backstop = ceiling.max(GUEST_WEDGED);` to `let backstop = GUEST_WEDGED;` fails the new case with "a guest talking past GUEST_WEDGED but short of a higher ceiling was ended anyway — the backstop did not follow a ceiling above GUEST_WEDGED"; restoring the line turns it green again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W6rME2DoqwjcYFStYHHY4j
Brings in #572 (host QEMU's edk2), #580 and #579 (disabled reds), #549 (a kill never waits on its victim) and #566 (metaltalk redial). - src/redlist.rs: one row each for user_copy_races_munmap and quiesce_leaves_the_volume_whole, which both sides added. main's new rows stay (netd_refused_accept, quiesce_wakes_on_the_last_teardown, root_chunk_refused_on_a_usb_stick, syscall_window_nmi). The rows for tests or issues this branch deleted go (hda_tone, doom_sound_flood, latency_wake, sched_check_build), and so does lan_swap, whose issue main deleted with swap_netd's and swap_crash_rolls_back's rows. - The two issue files both sides added take main's text. - tests/common/power.rs: main's woken_by_the_held_thread, shared by the new quiesce_wakes_on_the_last_teardown, without the two clock verdicts this branch took off QEMU (stopped_the_machine in stopped_boot, and woken_by_its_threads). - tests/common/qemu.rs: qemu_command takes main's firmware_vars and has no audio_wav, so profile_argv passes six paths. The too_many_arguments allow goes, because seven parameters do not trigger it. - kill_while_blocked.rs: main's text. After #549 a kill does not park in retire_task, so this branch's doc for arm 4 was false. main's arm also has no clock. - tests/toyos.rs check_rust_result: this branch's single-print form, which already carries the stdout main added. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W6rME2DoqwjcYFStYHHY4j
Summary
netd_refused_accepthung 2341s in a Fast-tier orchestrator run at PR No QEMU test measures time, and audio is judged on metal only #562'shead
2a9c77ee(FAIL netd_refused_accept: timed out after 2341s, with the guest still talking 8s ago), stuck on the wake for the connection an acceptrefused for room left. No QEMU test measures time, and audio is judged on metal only #562 touches nothing this test runs, so per CLAUDE.md
a flaky test is disabled at once behind its filed issue.
cargo run -- --known-red netd_refused_accept(
src/redlist.rs), pointing atissues/hardware/netd-refused-accept-hung-waiting-for-a-wake-that-never-came.md.Round 3
tests/common/qemu.rspassages the round-3 review named: the
GUEST_WEDGEDdoc comment's"Width is what a ceiling on a slow guest..." paragraph and its "Price a
new waiting check against this number" line,
ceiling_verdict's "So aguest still talking is now never ended by
ceiling..." sentence, andscreendump_while_rendering's "or the [GUEST_WEDGED] backstop" — allfalse once a ceiling exceeds
GUEST_WEDGED, since the real backstop isceiling.max(GUEST_WEDGED).ceiling_self_checkgained the case the round-3 NOTE named: a ceilingabove
GUEST_WEDGEDwith a guest still talking pastGUEST_WEDGEDbutshort of that ceiling must not be ended at
GUEST_WEDGED. Mutatingqemu.rs:685'slet backstop = ceiling.max(GUEST_WEDGED);tolet backstop = GUEST_WEDGED;fails the new case (checks::serial_vocabulary)with "a guest talking past GUEST_WEDGED but short of a higher ceiling was
ended anyway — the backstop did not follow a ceiling above GUEST_WEDGED";
restoring the line turns it green again.
Test plan
cargo run -- --known-red netd_refused_acceptreports the testdisabled, pointing at the new issue file.
cargo test -p toyos-build --lib— exit 0, 398 passed, 0 failed, 2ignored.
cargo test --test toyos-build -- --list— exit 0.cargo test --test toyos-checks -- serial_vocabulary— exit 0 (green);exit 101 with the named mutation applied, restored and re-verified
green.
🤖 Generated with Claude Code
https://claude.ai/code/session_01W6rME2DoqwjcYFStYHHY4j