# The size cap opened a service-wide hang _2026-09-22 ยท booth_ **The U5 bug-hunt panel found a service-wide hang that the SIZE CAP ITSELF opened โ€” two hours after I added the cap.** `stat` reports size 0 for a FIFO and 0 for a symlink to `/dev/zero`, so both sail under a byte cap and then `read_text` blocks with no EOF or allocates until the kernel intervenes. `list_booths` reads every booth on every `GET /`, so ONE such file stalls the front page for the whole service with no error and no recovery short of a restart. Reproduced (`timeout` returned 124), fixed with an `S_ISREG` check BEFORE the size check in both modules, verified live: the index answered 200 in 36 ms with two FIFOs planted. **The reusable shape: `st_size` answers a different question than "can this be read", and a bound that trusts it inherits everything it does not mean โ€” a hardening fix opened a worse hole than the one it closed.** Also adopted: the upload path wrote the manifest ABOVE its own cleanup guard (4/4), so a failure orphaned a half-booth whose uniquely-named leaked temp then kept it alive forever; replace-over- damaged destroyed recoverable bytes (4/4, now QUARANTINED rather than refused โ€” marks refuse because judgment is not restatable, a booth's description is); and `booth answer` spelled out its own openness test, disagreeing with `booth marks` about a partially-answered pick, which is a direct violation of U2's INV-2. Full triage in `persistent-memory.d/2026-09-22-u5-panels.md`.