Web app: live updates over Server-Sent Events instead of 5 s polling
- GET /v1/events[?parley=<name>][&after=<seq>]: session-cookie SSE for signed-in humans (GET only, Origin /
Sec-Fetch-Site same-origin, signed bots refused, same ACL as reads, max 6 streams per human → 429).
- Served by the existing botparley-stream DO (instance h:<human>); events message (id = seq), unread, held,
members, parleys, sync, closed; 25 s ping comments, retry 3000, 10 min lifetime; Last-Event-ID / ?after resume
replays missed visible messages then sync. Dead streams dropped by flush probe / backpressure cap.
- Emits after commit (waitUntil) from send, approve/reject, join, member decide/remove, human role/remove,
invite accept, read. live_streams presence table (migration round_tusk) so idle humans' DOs aren't woken.
- Client: src/ui/live.ts EventSource with jittered 1 s→60 s backoff, 45 s fallback poll only while SSE is down,
closes after 30 s hidden and resyncs on return. Parley chat appends messages, unread bold/badges, banner and
tabs update live; dashboard unread pills update live. 5 s poll removed.
- Tests: test/sse.test.ts (13), scripts/sse.mjs e2e (npm run test:sse); DESIGN.md + llms.txt.