A one-off accuracy audit of 117 open defect records. Each was read
against the code it cites at origin/main db0cf63,
with the owner's uncommitted requirements/ and claude-questions.md beside it.
After rebasing onto a8ea09d (#978, #981), each record whose cited code
#978 changed was read again.
Deleted, fixed:
- netstack-watches-both-pipes-of-every-connection-on-every-pass: c91e72b
gave a pipe end's leaving its own watch (kernel/src/pipe.rs) and made
netstack submit only a changed or answered watch (watches.rs `Armed`).
The commit named the record and left it.
- shell-c-discards-the-cwd-its-launch-carried: `shell -c` runs in its
launch's directory since b3770cf.
- std-answers-every-spawn-refusal-but-notfound-as-other: std's spawn maps
each refusal by name, and every SyscallError through to_io_error, since
61a283a.
Deleted, superseded:
- kernel_stack_addr-names-an-offset-not-an-address: the field is still
`kernel_stack_addr` (sdk/abi/src/boot.rs:9), and #583, its named owner,
merged without the rename. The rename is a stated step of
the-loader-does-only-what-must-precede-the-handover.md, which carries it.
- os-toyos-io-traits-keep-a-posix-name: the traits still exist, and now name
a real descriptor. The owner's 2026-10-21 answers supersede the 2026-08-19
"fds belong only in libc jargon" ruling (64f806d) the record rested on:
keep C numbering and dup2 conventions in userland, including Rust/C
descriptor interoperability; Rust std's C-style descriptor interoperation
uses the same userland adaptation; one descriptor-inheritance rule honored
by both libc spawning and Rust Command. #978 implements that, and the
kernel handle has its own word, std::os::toyos::io::AsRawHandle.
- logkeeper-flushes-the-records-its-own-refused-flush-made: the measured
loop was the kernel's retry of a budget-refused fsync, whose four records
made logd's next round flush again. That retry and its records went with
the durability ledger (80a1f1c) and the kernel's USB storage
(13ed7b4). logkeeper ends its volume on a refused append or flush
(system/logkeeper/src/main.rs:625-632) and warns of a slow round once,
behind its `degraded` latch (:633-643); the file server logs only an
operation that failed (system/fileserver/src/data.rs:136, 461), and a
failed flush ends the volume. No current route is known.
The rest have code or a test that no longer exists:
- log-flush-retry-deadman-arm: the kernel's fsync deadman went with the
durability ledger (80a1f1c), its kernel USB with usbd (13ed7b4), and
the test with 9ebf080.
- metal-device-probe-usbread-answered-iofailed-once-beside-other-guests: one
sighting through the kernel's usb-storage, gone with 13ed7b4; test
deleted 24aa318.
- netstack-refused-accept-hung-waiting-for-a-wake-that-never-came: netd and
its listen.rs are gone, the test was deleted (7967fba), and so is
netcase_against_host.
- process-stats-exits-101-beside-other-guests: both recorded reds were the
test's own premise; the test is deleted (4a5b228).
- screen-diag-boot-leaves-no-i8042-line-on-the-panel: the kernel's i8042
and its health line left for ps2server (febfd21); test deleted.
Corrected and kept, each with what remains:
- io-uring-enter-trips-the-one-queue-invariant becomes
a-wait-was-registered-while-its-task-still-read-waiting: the assertion is
now Watch::register's; every recorded route is gone; the cause never was
found.
- libc-loses-the-kernels-word-on-three-write-paths becomes ...-two-...:
send's stream arm answers through stream_errno; sendto's datagram arm and
stdio's sys_write and sys_read still drop the kernel's word.
- std-calls-undated-what-it-did-not-stat becomes
std-set-times-answers-ok-and-sets-nothing: the mtime half is fixed.
- remove-dir-all-empties-a-directory-and-leaves-it: std's is fixed; pkg's
remove_tree still gives that as its reason.
- netstack-holds-a-pending-request-for-a-client-that-left: the connect half
is gone; the waiting receive is still unwatched.
- netstack-keeps-receiving-for-a-client-that-closed-its-receive-end,
netstack-socket-ids-are-ambient, netstack-lookup-slots-have-no-per-client-share,
netstacks-places-are-one-number-for-every-client, most-t14-leases-land-one-dhcp-retry-late:
restated for regions, badges and netstack.
- smp-ap-hole-and-log-reserve-window-red-under-a-loaded-host: the ROOT read
half is gone; the first spawn's WouldBlock is kept.
- soundserver-past-due-wake-max-1: only the null sink's wait still does it.
- std-says-a-launch-moves-its-handles-...: the std comment moved into
toyos::spawn, where it is right; provide's doc is still wrong.
- std-maps-a-device-error-to-other-not-uncategorized: the consumers that
kept Other load-bearing are gone.
- sharedmemory-slices-rest-on-a-size-nobody-checks: a peer's region maps
through `lent`, which checks it; `adopt` does not.
- sshserver-authorized-keys-unprotected: installed packages no longer see
/state; every shipped program still does.
- libc-munmap-refuses-part-of-a-mapping: the owner ruled on 2026-10-21 that
whole-mapping-only unmap is not the final contract and the refusal is to
be revised, so the "rule it final" exit goes.
- libc-refuses-what-toyos-cannot-yet-answer: after #978 F_DUPFD_CLOEXEC,
F_DUPFD's lowest free and F_GETFD's EBADF hold; the fcntl bullet keeps
record locks and F_GETFL, F_SETFL, F_GETOWN, F_SETOWN.
- Sites, names and paths moved for: kernel-text-is-writable...,
libc-answers-einval..., libc-answers-epipe..., libc-host-tests...,
listing-home..., logkeeper-ends..., map-mmio..., metalprobes-usb-read...,
mio-deregister..., no-console..., one-diskserver-session...,
one-write-far-past..., probe-mounts-on-a-checksum, sshserver-holds-one-channel...,
sshserver-still-speaks-rsa, std-lookup-host..., null-sink-applies-one-connect
(annotated, not re-seen).
parallel-tests-red-under-other-suites.md loses its pointer to a deleted
record. no-physical-memory-fairness is owner-held and untouched; 58 records
are still valid and 9 uncertain (stdio-buffering's deleted-file citation
now names its deleting commit), both unchanged; four were already deleted
on main (#971, #980, #978). The per-record table with
file and line evidence is in the pull request.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
What this is
A bounded, one-off accuracy audit of batch 2 of the open
kind: defectrecords inissues/(117 files), as the owner directed: stale claims misdirect planning and review. Each record's concrete claims were read againstorigin/mainatdb0cf636d16d265ac400ab5f32658ed81f5cd632, beside the owner's uncommittedrequirements/andclaude-questions.mdin the primary checkout. I then rebased ontoa8ea09d209c514fdcffcdbe58f3c1826e6aa40e9, after #978 (the userland fd table) and #981 (batch 0) landed, and read again every record whose cited code #978 changed. No code changes and no guest or metal runs.Result
no-physical-memory-fairness, which has uncommitted owner edits; untouchedDecisions worth review:
shell-c-discards-the-cwd-its-launch-carriedandstd-answers-every-spawn-refusal-but-notfound-as-otherare deleted although their exits also asked for a guest probe. Reading the code is enough to establish both fixes, and rootCLAUDE.mdasks for no test of what inspection establishes.netstack-watches-both-pipes-of-every-connection-on-every-passwas fixed by c91e72b, whose message names it but did not delete it. Both exit clauses are met (kernel/src/pipe.rs's leaving watch,system/netstack/src/watches.rs'sArmed, which is host-tested).metal-device-probe-usbread…,netstack-refused-accept…,process-stats…) were deleted only because both the code path and the test they describe are gone. Where a mechanism might still exist (log-reserve-window-negative…,metal-job-reboot…,so-cache-refusals…,stdio-buffering…,null-sink-applies-one-connect,pulling-the-boot-stick…,spawned-process-never-starts,process-start-skew…), the record stays and is classed as uncertain.blockd, a guest QEMU trace,dns_resolve). Where a unit or module test can establish the claim, the new exit asks for that test.libc-munmap-refuses-part-of-a-mappingloses its "or the owner rules the refusal final" alternative. The record now states the owner's 2026-10-21 ruling itself: whole-mapping-only unmap is not the final contract, and the refusal is to be revised.logkeeper-flushes-the-records-its-own-refused-flush-madeis deleted as superseded, not renamed. Its measured loop (the kernel's fsync retry) is gone, and no current route is known; the commit message carries the evidence.kernel_stack_addr…stands deleted because the loader record carries its rename, while the field itself still exists.libc-close-of-a-socket-ends-the-process.os-toyos-io-traits-keep-a-posix-nameis deleted on the owner's 2026-10-21 answers (C numbering and Rust/C descriptor interoperability in userland, one adaptation shared by std and libc, one inheritance rule). Those answers supersede the 2026-08-19 "fds belong only in libc jargon" ruling (64f806d); fd: one descriptor table numbers every raw fd, and a child's descriptors are its fd:<n> endowments #978 implements them and gives the kernel handleAsRawHandle. The traits themselves still exist. It also narrowslibc-refuses-what-toyos-cannot-yet-answer's fcntl bullet and the example inlibc-answers-einval…. The other records it touched (std-says-a-launch-moves…,std-set-times…, the libc socket records,mio-deregister…at the new mio pin) still hold as corrected.parallel-tests-red-under-other-suites.md(another batch's file) loses a pointer to a deleted record.no-console-between-boot-and-terminal.mdpointed at the deletedscreen-diag-boot…record and now cites the commit instead. A code comment (system/pkg/src/main.rs:201-202,system/netstack/src/serve.rs:34) still cites two slugs I kept, so no code changes were needed.Found on the way
The home paths I found in records outside this batch are already masked on main (#981). No path under
/Users/is left inissues/.Checks
Final commit
0a6275f27on basea8ea09d20, on the dev host (macOS):cargo test --libexited 0 with 366 passed (log). These are the build system's tests, which are what a documentation-only change runs undercargo run -- --ci host, includinglicence::tests::every_pending_exception_cites_an_issue_that_exists. It also exited 0 atfff4f5680before review r1 (log).cargo run -- --ci hostatb00918e0d(the same audit on basedb0cf636d) exited 1 (log). Its documentation-scope steps both passed: "the build system" and "the licences of what ships". It then failed in the kernel-loom controls withNo space left on device (os error 28)on the shared disk, so the environment caused that red, not this change. I did not rerun it: nothing outsideissues/is touched.Table: table.md.
Per-record classification (117). Evidence is file and line at db0cf63; records #978 touched were reread at a8ea09d.
Object::opaquedescriptor in the fd table andclosereleases it (sdk/libc/src/socket.rs:103-129); #978 filed libc-close-of-a-socket-is-unproven-on-a-connected-socket for the guest caseArmed, host-tested at :97, :105); both exit clauses met; the commit named the record but did not delete it-cwith no set_current_dir (b3770cf); the exit's guest probe is not owed for what inspection establishestoyos::spawn::Refused(Invalid -> InvalidInput) and everySyscallErrorthroughto_io_error(sdk/std/sys/pal/mod.rs:23-37), since 61a283a; the cited spawn_cwd test is gone and the exit's assertion is a match inspection establisheskernel_stack_addr); the rename is a step of issues/the-loader-does-only-what-must-precede-the-handover.md:175degraded(:633-643); the file server logs only failures (system/fileserver/src/data.rs:136, 461); no current route knownnetcase_against_hostgone from tests/AsRawHandlekernel/pure/sched/watch.rs:132"a task waits on at most one watch"; root cause never foundkernel_leafpaging.rs:66-67 is Perrcode::of(sdk/libc/src/errcode.rs), still_ => EINVAL; after #978 libc's own descriptor table answers EMFILE (posix_io.rsfd_errno), the kernel handle table's ResourceExhausted still reaches EINVALroundandlround; rest holdsstream_errno(socket.rs:363-366, 539-549); sendto's UDPDatagrams::sendsocket.rs:170 `map_err(F_DUPFD_CLOEXECworks,F_DUPFDanswers the lowest free at or above its floor (sdk/toyos/src/fd/table.rs:68-71, 117-119), andF_GETFD/F_SETFDof an unheld descriptor answerEBADF(sdk/libc/src/posix_io.rs:472-481); record locks and F_GETFL/F_SETFL/F_GETOWN/F_SETOWN remain; every other name still in refused.rsError::LimitExceeded, not userland/fsd's ResourceExhausted; readdir_bound covers only /tmp; /home's NotFound not re-measured (uncertain half kept)createerror -> None, no retry; logd/userland/logdandpolicy::fategone (system/logkeeper/src/main.rs:612-645: any refused append or flush ends the volume); kernel usb-storage gone (13ed7b4)iommu_unit::register_window(iommu_unit.rs:35,78-83),vtd::window/pcidev::probe_dwordgone; ECAM windows now checked against DIRECT_MAP_WINDOW (drivers/acpi.rs:139-142)deregister_handle(selector.rs:247-251) only drops the registration; drain loop (:205-) matches by token alone; text named deregister_fd, POLL_ADD, CQE, pin e8068c2Sockets::receiving(serve.rs:124) is still unwatched;Sockets::connectingno longer existsshutdown_readonly sets the client's ownread_shut(sdk/toyos/src/net/stream.rs:465-470), so netstack keeps receiving into the ring and the peer is not told; cited test is nowa_client_that_leaves_with_text_unread_resetsnetstack_socket_churncut (c6a2861); host tests listeners.rs:613,633,797 holdevery_boot_config_runs_logkeeper(build/build.rs:3005); screen_diag_boot's record deleted, so its pointer now names the deleting committoyos_blockserve::Sessions::pull(lib/blockserve/src/sessions.rs:212-226), run by each disk driver (system/nvme); still only the ring's DEPTH boundvolume_from_another_diskgonermdir(path)(in 3831f29); residual: system/pkg/src/main.rs:201-204 keepsremove_treewith a doc comment giving this defect as its reason (its other reason, an explicit stack, stands)lent, which judges its size against fstat (sdk/toyos/src/shm.rs:55-62);adopt(:46-53) is still safe with an unchecked size, held only by its doc; aliasing premise unchangedspawn_supervisorpanics on any refusal (kernel/src/loader/mod.rs:487); tests deletedarmednow arms the next future grid point when past due (system/soundserver/src/mix.rs:185-192); the null sink's wait keeps.saturating_sub(now).max(1)(:765); userland/soundd paths goneuserland/sshdnamedrsa; Cargo.lock:3356Other"DNS lookup failed: no results" (connection.rs:671), butnet_err_to_ionow names eight kinds (:17-29); netd is netstack;dns_resolve/DNS_NO_ADDRESSno longer in tests/Io => Otherholds (sdk/std/sys/pal/mod.rs:33); every load-bearing consumer it names is gone (logd policy.rs, tests/common/volumes.rs; noErrorKind::Otherin system/), so the reason it was kept no longer appliestoyos::spawn::Spawn::ask_launcher(sdk/toyos/src/spawn.rs:197-268, 61a283a), whose prose is right;CommandExt::provide(sdk/std/os/process.rs:41-43) still points atendow's "after a successful spawn" (:25); #978 touches the fileso-cache-tinygoneanswer()Vec via listing::whole, name Vecexpect("dlsym: RTLD_DEFAULT not implemented")_service,_hints, port 0, SOCK_STREAM; gai_strerror one text socket.rs:825now, no history across lookups#!handling in kernel, system or sdk*-unknown-none-elfscreendump_until("PANIC:")then asserts the armed lineadmit_thread_insert-> Nonecountrecords_startunder target_arch🤖 Generated with Claude Code