docs(M8): add Realtime Solo Paneel milestone with ST-801..ST-806 (#6)
Plan voor live updates in het Solo Paneel: Server-Sent Events op een Node.js-runtime route die luistert naar Postgres NOTIFY's op tasks/ stories. Eén bron van waarheid (DB) — werkt onafhankelijk of een mutatie van de web-UI, REST API of MCP-server komt. Zes stories: - ST-801 trigger-functie + triggers - ST-802 SSE-route /api/realtime/solo - ST-803 useSoloRealtime hook - ST-804 solo-store realtime-acties - ST-805 wire-up + UI-indicator - ST-806 documentatie + acceptatie Volledig plan in .Plans/2026-04-27-m8-realtime-solo.md (lokaal). Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
743af199da
commit
d6c6a3e928
1 changed files with 35 additions and 0 deletions
|
|
@ -24,6 +24,7 @@ De MVP is klaar wanneer Lars — de primaire persona — de volledige cyclus kan
|
||||||
| M5: Todo-lijst | Todo CRUD, promotie naar PBI/story; Data Table + detail-kaart | ST-501 – ST-506, ST-509 – ST-510 |
|
| M5: Todo-lijst | Todo CRUD, promotie naar PBI/story; Data Table + detail-kaart | ST-501 – ST-506, ST-509 – ST-510 |
|
||||||
| M6: Polish & Launch-ready | Foutafhandeling, toegankelijkheid, CI/CD, beveiliging | ST-601 – ST-612 |
|
| M6: Polish & Launch-ready | Foutafhandeling, toegankelijkheid, CI/CD, beveiliging | ST-601 – ST-612 |
|
||||||
| M7: MCP-server voor Claude Code | Native MCP-laag bovenop Scrum4Me-DB (aparte repo `scrum4me-mcp`) | ST-701 – ST-710 |
|
| M7: MCP-server voor Claude Code | Native MCP-laag bovenop Scrum4Me-DB (aparte repo `scrum4me-mcp`) | ST-701 – ST-710 |
|
||||||
|
| M8: Realtime Solo Paneel | Live updates voor stories/tasks via SSE + Postgres LISTEN/NOTIFY | ST-801 – ST-806 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -515,6 +516,40 @@ Aparte repo: [`madhura68/scrum4me-mcp`](https://github.com/madhura68/scrum4me-mc
|
||||||
- `scripts/smoke-test.ts` valideert read-tools tegen live DB
|
- `scripts/smoke-test.ts` valideert read-tools tegen live DB
|
||||||
- Done when: smoke-test groen; MCP Inspector toont 9 tools + 1 prompt
|
- Done when: smoke-test groen; MCP Inspector toont 9 tools + 1 prompt
|
||||||
|
|
||||||
|
### M8: Realtime Solo Paneel
|
||||||
|
|
||||||
|
Live updates voor stories en tasks in het Solo Paneel zonder pagina-refresh. Wanneer Claude Code (via MCP), Codex (via REST) of een andere browser-tab een task/story muteert, ziet de gebruiker het binnen 1–2 seconden in zijn kanban-bord.
|
||||||
|
|
||||||
|
Transport: Server-Sent Events (Vercel ondersteunt geen stateful WebSockets). Bron: Postgres `LISTEN/NOTIFY` via row-level triggers op `tasks` en `stories`. Eén-richting (server → client) — mutaties blijven via Server Actions/REST/MCP.
|
||||||
|
|
||||||
|
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
|
||||||
|
- 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`
|
||||||
|
- `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)`
|
||||||
|
- `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
|
||||||
|
- `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
|
||||||
|
- `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
|
||||||
|
- 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
|
||||||
|
|
||||||
|
Volledig plan in `.Plans/2026-04-27-m8-realtime-solo.md` (lokaal, niet gecommit).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v2 Backlog (na MVP)
|
## v2 Backlog (na MVP)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue