2026-09-07 - Two probes for the heaviest premises orbistoun is blocked on
Authored two non-invasive behavioural sections to settle the top two
premises in docs/backlog/022, and documented them in
docs/backlog/023 and docs/decisions/D321.
What was added
016-syncbounds(four checks): the bounds of the semaphore and event-flag primitives015-syncproves work.sema-bad-handleandevent-flag-bad-handlerecord the code each family returns for an invalid handle, which answers D540's "do the two families agree" by inspection of the twoerrrecords.sema-countsettles whether the poll'sneedargument is a count or a flag.event-flag-waitmodesweeps candidate wait-mode values to find which bits the platform understands, where only AND has ever been modelled.019-posixerr(two checks): the failure convention of the POSIX-named exports, the heaviest single ask in022.fd-encodingprovokesposix_read/posix_writeon descriptor -1;pthread-encodingprovokes a write lock while a read lock is held. Each records the raw code and a classified encoding (posix/vendor/other), in two independent families so the result is a convention rather than a point.
Both sections were wired into registry.c (016 after
sync, 019 after relational) and sections.h, and the
generated counts updated: 233 -> 239 checks, 46 -> 48
sections.
The two calls worth knowing
sceKernelWaitSemais measured throughsceKernelPollSema.022names Wait, but Wait blocks and its timeout unit is the unestablished thing, so the sameneed-count and bad-handle questions are asked through the non-blocking Poll, and Wait is not added toplatform.hat all (D321). Reviewable: it is a deliberate divergence from the literal ask, on the no-block rule.- The POSIX exports are resolved by name, reusing
017-posix's pattern, so nothing enters the census. On the host they resolve to realread/writeand the existing rwlock stubs, which makes the host the known-good POSIX baseline.
Surprises
- No WSL distribution is installed on this machine, and there
is no native C compiler (no clang/gcc/make on PATH). So
make host/make checkcould not be run at all, and the two sections have not been compiled. Validation was the Rust gates instead -guards,caps,counts,surface,doccheck,decisions,protocolall pass, which covers the check tables, the cross-symbol guards, the capability ordering and the counts, but not the compile. Amake checkon a toolchain machine is still owed. - The Rust gates overflow the stack on Windows. Every
gate shares a parser that is fine on Linux's 8 MB main-thread stack and
blows Windows' 1 MB one. Building the tool with
RUSTFLAGS="-C link-arg=/STACK:67108864"fixes it; without that every gate prints only "has overflowed its stack" and looks like a failure. - The decision-index splitter read D321's status as
"blocked" because the word appeared in the title, and its
status regex greps the first six lines and takes the first keyword it
finds - the exact trap its own comments warn about. Renaming the title
to avoid the word fixed it to
assumed.