From 413e8ad86119de4a4edb5c9ba3a7328a9be36146 Mon Sep 17 00:00:00 2001 From: janpeter visser Date: Mon, 27 Apr 2026 18:10:00 +0200 Subject: [PATCH] =?UTF-8?q?chore(backlog):=20mark=20ST-801=E2=80=93806=20a?= =?UTF-8?q?s=20done?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- docs/scrum4me-backlog.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/scrum4me-backlog.md b/docs/scrum4me-backlog.md index 3d0350c..56ea814 100644 --- a/docs/scrum4me-backlog.md +++ b/docs/scrum4me-backlog.md @@ -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 1–2s 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