chore(backlog): mark ST-801–806 as done

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Janpeter Visser 2026-04-27 18:10:00 +02:00
parent ba05684a2d
commit 413e8ad861

View file

@ -524,27 +524,27 @@ Transport: Server-Sent Events (Vercel ondersteunt geen stateful WebSockets). Bro
Filtering server-side: alleen events binnen de actieve sprint van een product waar de gebruiker eigenaar of lid van is, plus `assignee_id == userId` (eigen kolommen) of `assignee_id IS NULL` (claim-lijst).
- [ ] **ST-801** Postgres LISTEN/NOTIFY-infrastructuur
- [x] **ST-801** Postgres LISTEN/NOTIFY-infrastructuur
- Migratie met `notify_solo_change()`-functie + `AFTER INSERT/UPDATE/DELETE`-triggers op `tasks` en `stories`; payload bevat `op`, `entity`, `id`, `product_id`, `sprint_id`, `assignee_id`, `fields` (gewijzigde kolommen)
- Done when: `psql $DIRECT_URL -c "LISTEN scrum4me_solo;"` toont een payload bij een UI-mutatie
- [ ] **ST-802** SSE-route `/api/realtime/solo`
- [x] **ST-802** SSE-route `/api/realtime/solo`
- `app/api/realtime/solo/route.ts`, `runtime: 'nodejs'`, `maxDuration: 300`; auth via iron-session, query-param `product_id`, opent `pg.Client` op `DIRECT_URL` met `LISTEN`; heartbeat 25s; hard close 240s; in-handler filtering op product/sprint/assignee
- Done when: `curl -N` op localhost levert binnen 1s een event op na een task-mutatie via UI
- [ ] **ST-803** Client hook `useSoloRealtime(productId)`
- [x] **ST-803** Client hook `useSoloRealtime(productId)`
- `lib/realtime/use-solo-realtime.ts`; opent `EventSource`, exponential backoff reconnect (1s → 30s); Page Visibility API voor pauseren/hervatten; cleanup op unmount
- Done when: tab wisselen sluit/opent connectie zichtbaar in DevTools Network
- [ ] **ST-804** Solo-store realtime-acties
- [x] **ST-804** Solo-store realtime-acties
- `applyTaskUpdate`, `applyTaskCreate`, `applyTaskDelete`, `applyStoryAssignment`, `markPending`/`clearPending` om eigen optimistic-echo te onderdrukken
- Done when: unit-test op solo-store met gesimuleerde events laat juiste eindstate zien
- [ ] **ST-805** Wire-up in SoloBoard + UI-indicator
- [x] **ST-805** Wire-up in SoloBoard + UI-indicator
- `components/solo/solo-board.tsx` roept de hook aan; klein "live"/"verbinden..."-statusindicator; toast bij langer dan 5s disconnected
- Done when: twee tabs van Solo Paneel — mutatie in tab A komt binnen 12s in tab B zonder refresh
- [ ] **ST-806** Documentatie + acceptatietest
- [x] **ST-806** Documentatie + acceptatietest
- Sectie "Realtime updates" in `docs/scrum4me-architecture.md` met diagram en filtering-regels; vermelding in `CLAUDE.md`; korte note over `/api/realtime/solo` in `docs/API.md`; handmatig E2E-scenario's gedraaid (zelfde gebruiker twee tabs, MCP-write, REST-write, story-claim, network-flap)
- Done when: alle scenario's lopen door zonder onverwachte gedragingen