Repository navigation
Integration tests outside the kernel are cut, and unit and module tests hold what they checked - #893
Conversation
|
Plan accepted by the orchestrator (the owner handed technical calls to the orchestrator: "youre the new owner now"). Build it as surveyed: 15 delete, 21 replace, 192 keep (10 narrowed), each replacement landing with its cut. Rulings on the open points:
The test image configs, |
…ts hold what they checked The test sweep the orchestrator accepted on #893, under the owner's testing ruling (#890): a test that installs or launches software and drives it through steps, or integrates userspace programs, is cut; where what it checked matters, a unit or module test of its program holds it. Deleted, held already: consent_prompt, netstack_socket_churn, netstack_streams_e1000e, https_fetch, machine_shutdown, acpi_press_across_a_lock_wait, block_grants_reach_their_partitions, toyfetch_reports, shipped_client_departures, launch_authority, fs_large_file, home_backing_revoked, nvme_home_roundtrip and proctest. Replaced, each by the test that now holds it: netstack_streams (an echo past both windows in the node tests, judged against RFC 9293), libc_sockets (the stream-end rule moves into the SDK, read by libc and std alike), acpi_power_button (acpi_press_is_one_sci, the kernel's SCI), lent_device_memory_refused and lent_window_refused (the kernel asked directly, and fileserver's hello decision), nvme_disk_keeps_log_and_home (nvme_disk_boots), update_writes_the_idle_slot_through_the_block_service (update-install, over memory, judged by toyos-fat32-check), audio_idle_suspend and hda_client_stall (soundserver's wait, fill and deferral decisions), soundserver_log_stall (the SDK's lane against a full ring), fs_share, fs_escape, fs_stream_offset (fileserver::bounds), fs_cache_eviction (the cache's read-back), fs_turns (std's turnstile) and toybox_file_tools (toybox-applets). Narrowed to the kernel's arms: iommu_virtio_platform, usbd_drives_the_spare, process_tree, disk_backtrace, endowment_denied, file_mtime, fs_truncate_persist, hierarchy_paths, lseek_past_eof and stat_identity. Kept: launch_toctou, app_view and process_tree's launcher arms, recorded in the supervisor track's stage 2 as owed a cut; acpi_server_events, acpi_tables_loaded and battery_read, whose replacement needs an extract of the T14's tables; hosted_clang_hello, a module test of the hosted toolchain. Gone with the cuts: the consent, block-grant, log-stall and slots images, logkeeper's --stall-until, Profile::Desktop and HeadlessE1000e, BootOptions::second_slot and acpi_tables, Plan::second, run_test_paced, the HTTPS harness server and its dev-dependencies. The Disk trait moves into toyos-disk, so the new host crates link no SDK. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015xhaydXCVRNscoccHYFUWy
f7b22aa to
5affa67
Compare
|
Review of #893 at Net lines ( BLOCKER
NOTE
SEND BACK |
…ts hold what they checked The test sweep the orchestrator accepted on #893, under the owner's testing ruling (#890): a test that installs or launches software and drives it through steps, or integrates userspace programs, is cut; where what it checked matters, a unit or module test of its program holds it. Deleted, held already: consent_prompt, netstack_streams_e1000e, https_fetch, machine_shutdown, acpi_press_across_a_lock_wait, block_grants_reach_their_partitions, toyfetch_reports, shipped_client_departures, fs_large_file, home_backing_revoked and nvme_home_roundtrip. Replaced, each by the test that now holds it: netstack_streams (an echo past both windows in the node tests, judged against RFC 9293), libc_sockets (the stream-end rule moves into the SDK, read by libc and std alike; a datagram send's bind of a socket never bound moves into libc's dgramreq, host-tested), acpi_power_button (acpi_press_is_one_sci, the kernel's SCI), lent_device_memory_refused and lent_window_refused (the kernel asked directly, and fileserver's hello decision), nvme_disk_keeps_log_and_home (nvme_disk_boots), update_writes_the_idle_slot_through_the_block_service (update's install, over memory, judged by toyos-fat32-check), audio_idle_suspend and hda_client_stall (soundserver's wait, fill and deferral decisions), soundserver_log_stall (the SDK's lane against a full ring), fs_share, fs_escape, fs_stream_offset (fileserver::bounds), fs_cache_eviction (the cache's read-back), fs_turns (std's turnstile) and toybox_file_tools (toybox's cp, mv and hexdump). Narrowed to the kernel's arms: iommu_virtio_platform, usbd_drives_the_spare, process_tree, disk_backtrace, endowment_denied, file_mtime, fs_truncate_persist, hierarchy_paths, lseek_past_eof and stat_identity. process_tree's std arms, a launch under a place this process cannot copy refused rather than spawned directly and a named image run under its program's name, move into std's launch_route, where every launch not made is decided. Kept: launch_toctou, app_view and process_tree's launcher arms, recorded in the supervisor track's stage 2 as owed a cut; acpi_server_events, acpi_tables_loaded and battery_read, recorded in the ACPI track, whose replacement reads the firmware's own tables as the loader dumps them; hosted_clang_hello, a module test of the hosted toolchain. The lifts that let a host reach the decisions: fileserver::bounds, std's launch_route and turns, libc's dgramreq, and toybox's and update's own files compiled by #[path] in the test packages toybox-copies and update-copies, as toyos-libc-copies compiles libc's. A link's target stays UTF-8 alone; a path the server resolves is held canonical where it is resolved. The Disk trait moves into toyos-disk, which diskserver and update share, so update-copies links no SDK. Gone with the cuts: the consent, block-grant, log-stall and slots images, logkeeper's --stall-until, Profile::Desktop and HeadlessE1000e, BootOptions::second_slot and acpi_tables, Plan::second, run_test_paced, bootlog's lines_of, the HTTPS harness server and its dev-dependencies. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015xhaydXCVRNscoccHYFUWy
5affa67 to
ff1a11d
Compare
The chain's links now spawn each other directly, so the depth refusal is a link's own line, "link <k>: its next link was refused: ...", which starts with the prefix of a link's index line. The reader took the index prefix first and parsed "<k>: its next ..." as a number, which panicked on the T14 at ff1a11d (process_tree.rs:309:33, ParseIntError InvalidDigit). Before the narrowing the refusal came from the shell a link started, so the collision never arose. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015xhaydXCVRNscoccHYFUWy
The sweep cut `toybox` from the shell row's `starts` with the depth
chain that launched shells, but `a_detached_program_outlives_its_shell`
still has a shell detach `/system/bin/cat`, a launch of the `toybox` row.
On the T14 the supervisor refused it ("shell in the machine's session may
not start toybox: its caller's row does not list it"), the shell exited
126, and process_tree panicked at its detach assertion.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015xhaydXCVRNscoccHYFUWy
|
T14, |
|
Review of #893 at Net lines (
Round 2's BLOCKERs
BLOCKER
NOTE
SEND BACK |
…s edition, and the ACPI exit is narrowed to extracts - toybox-copies' granted-roster test writes two distinct non-zero clocks at the header's ABI offsets and asserts those values; the all-zero header it decoded before held nothing a swap of the two would break. - toyos-std-copies compiles launch_route.rs and turns.rs at edition 2024, std's own, as toybox-copies and update-copies match their programs'. - The ACPI track's exit asks of committed extracts only what an extract can hold, each query method and the battery's and adapter's, and names the metal rows that keep each block's load and \_S5; the loader dump is dropped, as the orchestrator ruled on #893. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015xhaydXCVRNscoccHYFUWy
|
Review of #893 at Net lines ( Round 3's findings
BLOCKER
NOTE
SEND BACK |
tests/toyos.rs: the testcases metal arm keeps #874's test_rs_wake_onto_busy and drops test_rs_audio_idle_suspend and its comment, which this branch deletes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015xhaydXCVRNscoccHYFUWy
…h block's load The AMD bench loads none of its tables and hands over no \_S5: its DSDT is refused (acpiserver-refuses-the-amd-benchs-dsdt-for-a-read-in-memory-mapped-io), so it holds neither. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015xhaydXCVRNscoccHYFUWy
|
Review of #893 at Net lines ( Round 4's findings
The T14 run at the head, read from its readback
The run is sound. It is not yet evidence: the body does not carry it (first BLOCKER). BLOCKER
NOTE
SEND BACK |
|
Review of #893 at Net lines ( Round 5's findings
MaskingI scanned all thirteen published files in LinksAll 59 distinct evidence links in the body resolve at their pinned commits, both BLOCKERNone. NOTENone. LAND |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015xhaydXCVRNscoccHYFUWy
#893 cut acpi_power_button and acpi_press_across_a_lock_wait and replaced the latter's held arm with acpi_press_is_one_sci's press arm; this branch had cut acpi_press_across_a_lock_wait too. The conflicts take main's side in tests/common/qemu.rs (both sides dropped acpi_tables; main also drops second_slot), tests/guest/rust-tests/src/bin/acpi_mediated.rs (the press arm; this branch's RegisterCached rename auto-merges) and tests/toyos.rs's RUST_SKIP comment. In tests/common/power.rs acpi_power_button goes with main, which leaves power::acpi_tables_loaded with no caller, since this branch's acpi_tables_on_metal reads each bench's blocks itself: it goes, with ACPI_TABLE, ACPI_S5_HANDED and slp_typ_a. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015xhaydXCVRNscoccHYFUWy
The test sweep the orchestrator accepted on this pull request, built, and answered in its second through fifth rounds. Every test the owner's testing ruling refuses — it integrates userspace programs, or installs or launches software and drives it through steps — is cut. Where what it checked matters, a unit or module test of its program now holds it, and each of those is red under a mutation of the property it holds. The plan, with every test's verdict, is test-sweep-survey.md; this body is what landed and how it differs from the plan. It sits on #889, which deleted
proctestandlaunch_authority, and #897, which cutnetstack_socket_churn: those three are theirs, not this branch's.The rulings it follows
reviewer.md's Tests): integration between modules is tested only for the kernel; an integration test refused there is cut, and a unit or module test of its program holds what mattered.launch_toctou,app_viewandprocess_tree's launcher arms stay until the supervisor track's stage 2, recorded there;hosted_clang_hellostays, a module test of the hosted toolchain; the 18 tracks that owe refused tests are a separate issues-only pull request.netstack_streamsreplacement replayed a recorded Linux TCP peer; it is replaced instead by a node test judged against RFC 9293.Counts
hosted_clang_hellokept, as ruled;proctestandlaunch_authorityby #889,netstack_socket_churnby #897launch_toctou,app_view(stage 2, as ruled);acpi_server_events,acpi_tables_loaded,battery_read(the ACPI track, as ruled)process_treekeeps its launcher arms, as ruled, and the shell'sdetach)Deleted: what each checked is held already (11)
consent_promptlib/manifest/src/consent.rs,grants.rs;system/compositor/desktop's prompt-layer tests;spawn_image_objectnetstack_streams_e1000enetstack_streams' replacement; the 82574 bysystem/netstack/i219's host testshttps_fetchring_kat, now a shared-boot member;random_draws,wall_clock_now; the node testsmachine_shutdownmachine_shutdown_wire_held,_kept,_at_the_seal;acpi_mediated_access,acpi_supply_outlives_holder;system/acpiserver/aml/tests/evaluate.rsacpi_press_across_a_lock_waitsystem/acpiserver/src/sci.rs,host.rs;acpi_mediated_accessblock_grants_reach_their_partitionssystem/diskserver/src/main.rs's tests;port_badgetoyfetch_reportsapps/toyfetch/src/render.rs;counters_readshipped_client_departuressystem/soundserver/src/client.rs;cpal_drop_unreleasedfs_large_filelib/bcachefs/tests/integration.rshome_backing_revokedsystem/fileserver/src/data.rsnvme_home_roundtripsystem/fileserver/src/data.rs,cache.rsReplaced: the test that now holds it (16)
Every replacement is a host test but four, each the kernel's own. Why each of the four needs QEMU or the T14, and why no cheaper tier reaches it:
acpi_press_is_one_sci(QEMU): a press of the fixed power button reaches theacpiclaim's holder as one SCI, its line masked until the holder serves it. No type reaches it: it is the kernel's interrupt path at run time. No host test: the kernel's SCI and its mask have no host build. No metal row: nothing presses the T14's button but a hand, and the owner forbids a row that needs one (the ACPI track's 2026-10-05 rulings); QEMU raises the event on demand.lent_device_memory_refused, rewritten (QEMU): the probe asksSharedMemory::lentof a BAR of a function no program of the boot holds, and is answeredNotRam. No host test:fstatof a lent BAR is the kernel's object table at run time. No metal row: the T14's only such unheld function is its I219, and a kernel that dies on this takes the bench's machine down with it; QEMU's virtio NIC is that function here.nvme_disk_boots(QEMU): a machine whose one NVMe disk is all it has, with no USB controller, boots the image off it to ready, clean. No host test: the firmware that reads the disk and the loader and kernel it hands the image to have no host build. No metal row: the T14 boots from a stick beside an NVMe disk that is another system's.lent_window_refused, rewritten (T14 shared member): a pipe end answeredNotRam, a region twice the windowLength. It stays where it ran, on the T14'stestcasesboot, and run 1 below read it exitcode=0.netstack_streamssystem/netstack/node/tests/streams.rsan_echo_past_both_windows_arrives_whole_both_ways_and_ends_in_both_fins, judged against RFC 9293 §3.8.6 and §3.6; two connects queued before an accept were alreadylisteners.rs'a_connect_between_two_accepts_is_queued_not_resetlibc_socketstoyos::net(read_end,write_refused,StreamRefusal) and its SDK tests, which libc'ssocket.rsand std'sconnection.rsboth read;sendto_unbound.c's bind of a datagram socket never bound, at its firstsendtoor a connectedsend(which issendtoto the peer), by libc'sdgramreq.rsandsdk/libc/arch'sdatagram_sends: one bind, at any address to port 0, before the first datagram alone, none for a bound socket, and nothing sent after a refused bind. That two such sockets hold two ports is netstack's draw, held bysystem/netstack/node/tests/datagram.rsa_socket_holds_the_port_it_named_or_the_one_its_draw_picked; the option rule bysocket_optionsacpi_power_buttonacpi_press_is_one_sci(QEMU, above). The supervisor's stop on a press goes to stage 2lent_device_memory_refusedfileserver::bounds::hellolent_window_refusednvme_disk_keeps_log_and_homenvme_disk_boots(QEMU, above). Persistence bysystem/fileserver/src/data.rsand logkeeper'sstore.rsupdate_writes_the_idle_slot_through_the_block_servicesrc/install/, compiled on the host bysystem/update/copies(update-copies): a signed image installed over memory, the table marked at its version, ROOT byte for byte, the volume judged bytoyos-fat32-checkand its three files read back; an image another key signed writes nothing. The supervisor's grant goes to stage 2audio_idle_suspendsystem/soundserver/src/mix.rswith_no_client_the_mix_loop_arms_no_timer_and_fills_nothinghda_client_stallmix.rsa_ring_defers_no_period_for_a_stalled_client_and_resumes_from_the_whole_ringsoundserver_log_stallsdk/toyos/src/log/proof.rsa_full_lane_counts_the_mix_thread_s_line_and_returnsfs_sharesystem/fileserver/src/bounds.rs: handshake, hello and stream bounds, machine-wide and per sharefs_cache_evictionsystem/fileserver/src/cache.rsevery_evicted_clean_block_reads_back_off_the_disk_byte_for_bytefs_escapebounds.rsa_path_on_the_wire_that_climbs_or_is_absolute_is_refused, the checkresolvemakes first; the floor byresolve.rs. A link's target is not resolved and is held to UTF-8 alone:a_link_s_target_is_taken_absolute_or_climbingfs_stream_offsetbounds.rsan_offset_past_the_largest_a_file_has_is_refused, which also takeslseek_past_eof's/homeceilingfs_turnssdk/std/sys/turns.rsthe_value_goes_to_the_tickets_in_the_order_they_were_taken, throughsdk/std/copiestoybox_file_toolscp.rs,mv.rsandhexdump.rs, compiled on the host bysystem/toybox/copies(toybox-copies):cppast its flush interval and every refusal leaving no partial,mvrefusing a rename with no copy behind it,hexdumpagainst a recorded macOSxxdNarrowed: the kernel's arms stay (10)
iommu_virtio_platformlib/virtio/src/tests.rs; what stays counts the kernel's own virtio drivers and the kernel's hand-over and refusalsusbd_drives_the_sparelib/xhci,lib/xhci/sim/tests; usbd's No-Op by interrupt stays as its smokeprocess_treea_place_without_dup_is_refusedanda_named_image_is_spawned_directlysdk/std/sys/launch_route.rs, throughsdk/std/copies:the_supervisor_is_asked_only_by_a_launch_of_its_row_s_own_program(16);a_launch_whose_place_cannot_be_copied_is_refused_and_not_spawned_directly(24);a_named_image_runs_under_its_program_s_name, theargv[0]check (25).MAX_DEPTHis reached by direct spawns of itself, with no shelldisk_backtracesymbolizelib/symbols/tests/name.rs,system/symbolize's testsendowment_deniedpswith and withoutROSTERthe_roster_is_a_right_and_the_header_is_not; the rosterpsreads by toybox'sroster.rsthroughtoybox-copies: a refused roster is no row (13), and a granted one's two clocks are read from their own fields (27)file_mtime/homeand/logdata.rsa_write_s_stamp_keeps_its_nanosecond_across_a_remount(02),fat.rsthe_flush_stamps_its_even_second_and_not_the_write_s(03)fs_truncate_persist/homedata.rshierarchy_paths/appsand/homelib/manifest,data.rslseek_past_eof/homedata.rs; the ceiling bybounds.rsstat_identity/homeand/logdata.rs,fat.rs,volume.rs; a link's target, absolute or climbing, bybounds.rs(23)Production changes, per decision
Each lifts a decision out of code a host cannot build into code it can, so the tests above reach it. Behaviour is main's but where a bullet says otherwise.
fileserver::bounds: the handshake, hello and stream bounds, the lent-window answer, the file-offset bound, a request path's decode and the check a resolved path is held to, out ofmain.rs, which calls them. One declaration ofMAX_SERVED,MAX_HANDSHAKES,MAX_STREAMSand their shares. A path off the wire is UTF-8 (path), andresolveholds it canonical first (relative), as main did; a link's target is never resolved, soSYMLINKtakes an absolute or climbing target as main did. Round 1 had decoded every path as canonical, which refused such a target: mutation 23 is that decode, and the new test is red under it.system/update/src/install/, a module ofupdate, over anyDisk;update-copiescompiles it by#[path]and holds its tests, astoyos-libc-copiesholds libc's. A test package becauseupdatelinks the SDK and reads its key withenv!, which a host's test step sets for no package, and its tests live there and not inupdate's files becausebuild/userlandhost.rsrunscargo teston a program whose own files hold a test.toyos-disk(lib/disk): theDisktrait, its block and its errors, moved out ofdiskserver::disk, which re-exports them; diskserver and update share it, andupdate-copieslinks no SDK through it.cp.rs,mv.rsandhexdump.rsstay toybox's, and the rosterpsdecodes moves into itsroster.rs;toybox-copiescompiles the four by#[path]and holds their tests, for the same two reasons as update's, toybox building on no host (issues/apps-that-build-or-run-on-toyos-alone.md).mv's refusal andhexdump's request parsing return their words instead of exiting, andmainsays them as main's did,hexdump's bareUsage:line included.sdk/std/sys/launch_route.rsdecides where a spawn goes, what a launch not made leaves the caller (unmade: the direct spawn, or a refusal, a place the launch could not copy refused as its copy was and never spawned directly), and what a direct spawn runs under which name (image_and_name);process.rsbuildsRouted::Directonly throughunmade.sdk/std/sys/turns.rsis a value held in ticket order. Both name onlycoreand std'ssync, sosdk/std/copies(toyos-std-copies) compiles them on a host, at std's own edition, 2024. One change of words: a command that provided a connector, run where no launcher is held, is refusedPermissionDeniedas before, now with its reason.dgramreq.rs: a datagram send's order, a bind of a socket never bound and then the send, over a traitsocket.rs's socket entry implements with netstack's calls;toyos-libc-copiescompiles it.streamend.rsand std'sconnection.rs, where it was written twice, intotoyos::net.mix.rs.--stall-untilandOrigin::waiting;Plan::second(only the harness set it).Harness, images and helpers removed
tests/images/{consentcase,blockgrantcase,logstallcase,slotscase}.tomland theirALL_CONFIGSrows;Profile::Desktop,HeadlessE1000e,Nic::E1000e;BootOptions::second_slot,acpi_tables;QemuInstance::screendump_file,reset_on_reboot,await_boot,boot_image;run_test_pacedfolded intorun_test;QmpInput::point,click,screendump;compile_own_c;tests/common/https.rsand therustls,rcgen,toyos-desktopdev-dependencies; the guest crate'sureq,rustls,diskserver,toyos-blockring,toyos-gpt,inspect,toyos-desktop; the audio judges and their host checks for the cut rows;build/bootlog.rs'slines_of, whose one reader waslog_stall_on_metal;tests/guest/c/{addr_order,nodelay_kept,sendto_unbound,stream_ends}.c;stream_ends.rs,lent_hello.rs; thesymbolizeandtoyfetchrows oftestcases.toml, andnetcase.toml's e1000e claim;proctreecase.toml's rows forfs_share.ON_DEMANDandhostedclangcase.tomlstay withhosted_clang_hello.Gates
At head
59697d07833b1e80e532a6dda4e3f26dde01b570,origin/main347e3313d(#874, #896) merged in (main has since gained #887, issues only, which merges clean), every log masked as rootCLAUDE.mdmasks what is posted (exits). The merge's one conflict istests/toyos.rs'stestcasesmetal arm: it keeps #874'stest_rs_wake_onto_busyand dropstest_rs_audio_idle_suspendand its comment. Round 6's other commit narrows the ACPI issue's sentence, below.cargo run -- --ci host: EXIT=0 ("Host: 76 step(s), all green", line 8974). logcargo test --test toyos-build: EXIT=0 ("52 passed, 52 total", line 703;acpi_mediated_access, which A wake to another CPU that is busy is drained at its next preemption point and runs within a bound #874 changed and which auto-merged with this branch's rewrite, passes at line 370). logtestcasesboot, staged bycargo test --test toyos-build -- --metal --metal-readback <dir> boot:testcases: EXIT=2, staged 2 images and judging nothing (log, request). Its derived member list carriestest_rs_wake_onto_busyand notest_rs_audio_idle_suspend(members); the orchestrator ran it as run 4 below.df92d1c4c, round 5's head:cargo test -p toyos-std-copies(its edition moved from 2021 to std's 2024), EXIT=0, 6 passed (log). Atb1d430bea, round 3's head:cargo run -- --build-only --arch aarch64, EXIT=0 (log).0dba06f1f, round 5's commit, mutation 27 by its script, the same steps as below:27-ps-swaps-the-header-s-clocks.patch,cargo test -p toybox-copies -- --exact roster_reading::a_granted_roster_is_its_header_and_each_whole_entry, green 0, mutated 101, reverted and clean (log). The test now writes two distinct non-zero clocks at the header's ABI offsets; before, it decoded an all-zero header and compared it with itself.ff1a11dbd, the round before, the mutations, each the test green on the tree (an--exactfilter, its one test run), the patch applied and shown to build, the same test run, the patch reverted and the tree shown clean, by one script: summary, logs.01-cache-flush-writes-nothing.patchcargo test -p fileserver --lib -- --exact cache::tests::every_evicted_clean_block_reads_back_off_the_disk_byte_for_byte02-data-write-stamps-whole-seconds.patchcargo test -p fileserver --lib -- --exact data::tests::a_write_s_stamp_keeps_its_nanosecond_across_a_remount03-fat-level-keeps-a-stale-stamp.patchcargo test -p fileserver --lib -- --exact fat::tests::the_flush_stamps_its_even_second_and_not_the_write_s04-fileserver-answers-a-device-window.patchcargo test -p fileserver --lib -- --exact bounds::tests::a_hello_whose_window_is_no_region_of_window_bytes_is_let_go_unanswered05-fileserver-stream-past-the-largest-offset.patchcargo test -p fileserver --lib -- --exact bounds::tests::an_offset_past_the_largest_a_file_has_is_refused06-fileserver-path-not-held-canonical.patchcargo test -p fileserver --lib -- --exact bounds::tests::a_path_on_the_wire_that_climbs_or_is_absolute_is_refused07-fileserver-share-served-past-its-part.patchcargo test -p fileserver --lib -- --exact bounds::tests::a_hello_past_the_server_s_bound_or_its_share_s_part_is_refused_before_its_window_is_asked08-log-lane-refusal-uncounted.patchcargo test -p toyos --lib -- --exact log::proof::a_full_lane_counts_the_mix_thread_s_line_and_returns09-update-marks-the-running-slot.patchcargo test -p update-copies -- --exact installing::a_signed_image_is_written_into_the_idle_slot_and_marked10-cp-leaves-its-partial.patchcargo test -p toybox-copies -- --exact copying::a_refused_copy_leaves_the_destination_as_it_was_and_no_partial11-mv-asks-no-source-before-the-rename.patchcargo test -p toybox-copies -- --exact moving::a_missing_source_is_refused_before_anything_is_renamed12-hexdump-pads-a-column-too-many.patchcargo test -p toybox-copies -- --exact dumping::a_dump_is_xxd_s_byte_for_byte_whole_and_in_a_window13-ps-reads-a-refused-roster-as-empty.patchcargo test -p toybox-copies -- --exact roster_reading::a_refused_roster_is_no_row14-soundserver-idle-arms-a-timer.patchcargo test -p soundserver -- --exact mix::tests::with_no_client_the_mix_loop_arms_no_timer_and_fills_nothing15-soundserver-ring-defers-a-period.patchcargo test -p soundserver -- --exact mix::tests::a_ring_defers_no_period_for_a_stalled_client_and_resumes_from_the_whole_ring16-std-supervisor-takes-an-extra-slot.patchcargo test -p toyos-std-copies -- --exact launch_route::tests::the_supervisor_is_asked_only_by_a_launch_of_its_row_s_own_program17-std-turnstile-lets-the-releaser-barge.patchcargo test -p toyos-std-copies -- --exact turns::tests::the_value_goes_to_the_tickets_in_the_order_they_were_taken18-stream-reset-read-as-other.patchcargo test -p toyos --lib -- --exact net::tests::a_read_of_zero_is_the_peer_s_fin_only_while_the_send_pipe_is_read19-netstack-drops-what-the-pipe-refused.patchcargo test -p toyos-net-node --test streams -- --exact an_echo_past_both_windows_arrives_whole_both_ways_and_ends_in_both_fins20-kernel-leaves-the-sci-unmasked.patchcargo test --test toyos-build -- acpi_press_is_one_sci21-kernel-calls-a-bar-shared-memory.patchcargo test --test toyos-build -- lent_device_memory_refused22-kernel-needs-a-usb-controller.patchcargo test --test toyos-build -- nvme_disk_boots23-fileserver-link-target-held-canonical.patchcargo test -p fileserver --lib -- --exact bounds::tests::a_link_s_target_is_taken_absolute_or_climbing24-std-uncopied-place-spawned-directly.patchcargo test -p toyos-std-copies -- --exact launch_route::tests::a_launch_whose_place_cannot_be_copied_is_refused_and_not_spawned_directly25-std-named-image-is-argv0.patchcargo test -p toyos-std-copies -- --exact launch_route::tests::a_named_image_runs_under_its_program_s_name26-libc-unbound-send-binds-nothing.patchcargo test -p toyos-libc-copies -- --exact datagram_sends::a_socket_never_bound_is_bound_to_a_port_the_stack_chooses_before_its_first_sendEvery mutated arm built; 20 reds by the hang ceiling, an SCI that is never masked again storming the guest, and 22 by the kernel's panic before ready. Round 2's review named two patches with no test to turn red:
process.rs's dup failure routed to the direct spawn, whose decision is nowlaunch_route::unmade's, so its patch is 24; andsocket.rs's bind block deleted, which is nowdgramreq::send_to's, so its patch is 26.Round 3 changes
process_tree.rsalone, and round 4proctreecase.tomlalone, which no mutation touches; round 5 touches no file a patch above names.ff1a11dbd,git grep -wof every deleted, replaced and renamed name, bare, outsideissues/at the head: nothing. outputThe T14
Run 1, at
ff1a11dbd. The orchestrator ran the four boots staged there (boot:testcases boot:proctreecase usbd_drives_the_type_c_controller hda_tone): 248 of 249 rows passed, among them every row thetestcasesboot changed,launch_toctou,port_badge,app_view,usbd_drives_the_type_c_controllerandhda_tone.process_treewas red:test_rs_process_tree exited 101, panicking atprocess_tree.rs:309:33: a link's index: ParseIntError { kind: InvalidDigit }. The kernel half of its judge held: one depth refusal,spawn: refused under pid 79 at depth 65, more than 64 below the supervisor. judge log, the boot's kernel log (line 488 is the refusal, 490 the panic).Root cause, in this branch's narrowing. The chain's links now spawn each other directly, so the depth refusal is a link's own line,
link <k>: its next link was refused: ..., which starts with the prefix of a link's index line. The reader tried the index prefix first and parsed<k>: its next ...as a number. The fix (b1d430bea) reads the refusal before the index. As a host measurement, not a suite row, classify.rs runs the reader atff1a11dbdand at the fix over the lineslink()prints for a 62-link chain: the old reader panics with the T14's message, EXIT=101; the new one stops at link 62 on the refusal, EXIT=0 (output).Run 2, at
b1d430bea:boot:proctreecase. 3 passed, 1 failed. The chain arm passed on the T14 ("a chain of 62 links stopped at a depth refusal (link 62: its next link was refused: out of memory) and died whole"), as did both ends of B, theMANAGE-only place and the pipe; the judge's kernel half held again (two loader refusals ofno_such_program, one depth refusal at 65).process_treewas red at its last arm:process_tree.rs:351:5: the shell's detach failed: ExitStatus(ExitStatus(126)). judge log, the boot's kernel log (lines 552–558).Root cause, in this branch's image edit. The supervisor said it at line 553:
launcher: shell in the machine's session may not start toybox: its caller's row does not list it. The sweep (ff1a11dbd) cuttoyboxfromproctreecase.toml's[programs.shell] startswith the depth chain that launched shells, buta_detached_program_outlives_its_shellhas a shelldetach /system/bin/cat, a launch of thetoyboxrow (/bin/catlinks to/system/bin/toybox). The launch was refused,detachexited 126. The fix (aa6816c10) putstoyboxback in the shell row'sstarts, and the config's header says why the row lists it.The rest of
process_tree's path, read for the same break. Every launch the test makes, by caller row and session: test-runner (machine session) launchescat(A's under-B launch, the pipe arm, and B's D and E through A's launcher copy) andshell; the shell, aloginrow in the machine's session, launchescat, opening a login session. Every other child is a direct spawn, which no row decides. The scratch launchcheck rendersproctreecase.tomlthrough the build's ownmanifest_and_symlinksand asks the supervisor's owntoyos_manifest::launch::may_starteach of those three: atb1d430beathe shell's launch ofcatisErr(NotListed), EXIT=1, the T14's refusal (output); ataa6816c10all three are allowed, the shell's asOpening(Not), EXIT=0 (output). That a shell's launch in this boot opens a login session that is answered, run 2 already shows:app_view's shells launchedgrantsin one and passed. Past the detach, the arm asks the roster for one livecat: D and E are killed and waited by then, and a launchedcatruns under the namecat(run 2's kernel log, lines 354–357).The cheapest tier. The supervisor's decision is host code, and the launchcheck above runs it on the host over the image's rendered manifest; it is evidence, not a suite row, because what it checks is one line of one test image that reading sees.
process_treeas a whole runs on no QEMU image (tests/toyos.rs:testcases.tomlgives no launcher, declaredcator shell), so its green arm is theproctreecaseboot ataa6816c10, staged bycargo test --test toyos-build -- --metal --metal-readback <dir> boot:proctreecase: EXIT=2, staged and judging nothing (log, request); its derived system config listsstarts = ["toybox", "shell", "grants"]for the shell. Run 2 is the negative control, run 3 the green arm.Run 3, at
aa6816c10:boot:proctreecase. The orchestrator ran the staged boot,cargo run -p toyos-metal -- --image <dir>/proctreecase/image.img --readback <dir>/proctreecase --fat32-check(request), and judged it withcargo test --test toyos-build -- --metal --metal-readback <dir> boot:proctreecase: EXIT=0 (the orchestrator's comment above), "4 passed, 0 failed, 1 boot(s)":process_tree,launch_toctou,port_badgeandapp_view(judge log, verdict:passed). The boot's supervisor saysbuild aa6816c1083174337e5271c55567b3672920e33d clean(line 322 of the boot's kernel log); the depth refusal at 65 is line 488, the chain stopping at link 62 line 551,a detached cat outlived its shellline 555,process_tree: PASSline 556 andexit=0line 558. Nothing this branch changed since touches a file that boot's image builds from; the merge of #874 changes the kernel it builds, and run 5 below repeats it at the head.Rows removed:
shipped_client_departures,audio_idle_suspend,hda_client_stall,soundserver_log_stall,fs_share, and thelogstallcaseboot with them.Run 4, at
59697d078:boot:testcases(thetestcasesandtestcases-watchdogboots), run by the orchestrator. Judgecargo test --test toyos-build -- --metal --metal-readback <dir> boot:testcases: EXIT=0, 245 passed, 0 failed, 2 boot(s). Both verdicts readpassed, and both supervisors readbuild 59697d07833b… clean. It is the T14 green arm for the rewrittenlent_window_refusedand the mergedwake_onto_busy(logs).Run 5, at
59697d078:boot:proctreecase, staged by the orchestrator from this head (cargo test --test toyos-build -- --metal --metal-readback <dir> boot:proctreecase, EXIT=2, staged) and run. Judge EXIT=0, 4 passed, 0 failed, 1 boot:process_tree,launch_toctou,port_badgeandapp_vieware green on #874's kernel, and the supervisor readsbuild 59697d07833b… clean(logs).The three ACPI rows
acpi_server_events,acpi_tables_loadedandbattery_readdrive acpiserver on a T14 boot, which the testing ruling refuses, and stay: nothing else reads the T14's firmware. They are recorded inissues/toyos-runs-the-machine-in-acpi-mode-and-interprets-its-aml.md, owner its interpreter stage, with the orchestrator's oracle ruling. A definition block's load takes the whole block, and the track's "Extracts only" keeps whole tables out of the tree, so each block's load and\_S5stay held by the T14's metal row that loads its own tables whole,acpi_tables_loaded, under the orchestrator's ruling on round 3's review. The AMD bench holds neither: acpiserver refuses its DSDT and loads none of its tables (issues/acpiserver-refuses-the-amd-benchs-dsdt-for-a-read-in-memory-mapped-io.md). The exit asks only what extracts can hold: extracts of the T14's tables, masked, committed with their provenance; host tests that evaluate each query method the controller raises, and the battery's and adapter's methods, over a scripted host and controller; andacpi_server_eventsandbattery_readleavetests/toyos.rsin that diff. No loader path dumps tables for fixtures, and no reading taken under another OS is a fixture.What I am unsure of
process_treekeeps the shell'sdetach. The plan gave it to a host test of the shell's parser, but the shell builds on no host and its tokenizer reads the environment and the last status: lifting it is a redesign of the shell. I readdetachas a launch under the supervisor, which the ruling keeps until stage 2, and recorded it there.unmadeandsend_toare what decides, and a mutation there is red; a patch toprocess.rsorsocket.rsthat skipped them would build a second route a reader sees, and no host test reaches those files.issues/soundservers-mix-pass-has-no-host-test.mddescribes. They hold what the two rows judged (no timer and no fill with no client; no deferral on a ring; a resume primes the whole ring); the whole pass with a fake device stays that issue's.libc_sockets' "a stream and its duplicate are one socket" is held by the type:TcpStream::duplicateclones the oneArcof each shared field, and no host test reaches it.lent_window_refused's kernel half is a T14 shared member, so its mutation can only redden there; fileserver's half is mutation 04.Net lines (
git diff --shortstat origin/main...HEAD): 117 files changed, 2225 insertions(+), 6731 deletions(-): tests +916 −5839 (tests/, the test packages' files,sdk/libc/archandsystem/netstack/node/testscounted as tests), production +1274 −892 (the moved files counted on both sides, and the test modules of the lifted ones counted as production),issues/+35.🤖 Generated with Claude Code
https://claude.ai/code/session_015xhaydXCVRNscoccHYFUWy