Two modelled states made real, after being told they were only modelled

Pushed back on for parking suspend/resume and the input transport as "downstream of measurements". The pushback was right on both counts and the reasons differ.

Suspend/resume was never blocked by anything external. The worker owns its guest threads. Execution::Suspended had been derived, documented and inert for a day - a value describing a behaviour rather than causing one, which is the exact failure this log keeps recording about other people's code.

The obvious implementation is a trap worth writing down: suspending a thread at an arbitrary instruction can catch it holding the host C runtime's heap lock, and then the next allocation anywhere in the worker blocks forever - including on the thread that would issue the resume. Not a stopped worker; an unrecoverable one, and only sometimes.

So threads park cooperatively at the trampoline, the single place every guest call passes through, where a thread holds no guest lock. The cost is real and stated: a thread that stops calling imports never parks. The difference from a silent hole is that this one is counted - backgrounded: 2 of 3 live guest thread(s) parked.

The input transport was an inconsistency, not a judgement. The event queue was built with no deliverable events - raise, withhold, count, wait for a measurement - and then the input transport was refused because nothing could consume it. Same shape, opposite answer. Either both were premature or neither was.

What building it bought before any measurement: Focus stopped being a tested function with no observable effect. What a title may see is now decided in the window and nothing downstream can widen it - the shell's button always stripped, a neutral pad when the shell has focus rather than the last state held forever.

The same mistake twice in one day

Two process-wide statics, two pairs of tests touching them, two races under the parallel harness - and both times the failure read as the mechanism being broken rather than the tests being wrong. Merging each pair into one test fixed both. Worth watching for: a static plus #[test] is a race unless the tests are one test.

What the corpus says to scaffold next

Import lists across four titles, by library: libSceAgc 268, libc 222, libSceNpCppWebApi 143, libkernel 119, libSceAmpr 106, libScePosix 61. The shell-adjacent ones are much smaller - libSceSystemService 19, libSceUserService 16, libSceSaveData_native 16 - which is worth knowing before deciding where "scaffolding the firmware" should start.

The most interesting single name in it is sceUserServiceGetUserName: a confirmed import whose answer is a string somebody typed into the shell's own settings pane. The connection this project argued for in the morning, available to build in the afternoon.