21a2185f86
Sentinel-released processes exposed a second bare-sample assertion in the same file. The unread-dot check ran a synchronous .count() 140ms after the running dot cleared: 15.91s poll "dot should disappear" -> 2 16.05s ... -> 0 (running dot gone) 16.05s bare .count() for unread dot -> 0 FAIL "Finished — unread" is an event-driven transition that lands just after the running dot clears. The old fixed `sleep 5` happened to leave enough slack between the two that a single sample usually caught it; releasing the process deterministically removed that incidental slack and made the latent race deterministic instead. Poll for it, matching how sidebar-states.spec.ts already asserts this exact dot. The split-tile assertion at line 234 stays a bare sample on purpose — it asserts an absence (toBe(0)), where polling would only wait for something that must never appear.