docs(naming): drop scrum4me- prefix from doc filenames

This commit is contained in:
Janpeter Visser 2026-05-03 00:32:32 +02:00
parent 6c49a5013d
commit f5ff3673e2
35 changed files with 198 additions and 193 deletions

View file

@ -16,8 +16,8 @@ Inloggen op een (publieke) desktop zonder wachtwoord: desktop toont QR, telefoon
- `desktopToken` reist alleen via HttpOnly cookie `s4m_pair` met `Path=/api/auth/pair`, `Max-Age=120`, `SameSite=Lax`
- Twee gescheiden hashes in DB scheiden mobiel-bewijs (`secret_hash`) van desktop-bewijs (`desktop_token_hash`)
Backlog-entries: zie [scrum4me-backlog.md § M10](../scrum4me-backlog.md#m10-password-loze-inlog-via-qr-pairing).
Functional spec: zie [scrum4me-functional-spec.md § F-01b](../scrum4me-functional-spec.md#f-01b-inloggen-via-mobiel-qr-pairing).
Backlog-entries: zie [backlog.md § M10](../backlog.md#m10-password-loze-inlog-via-qr-pairing).
Functional spec: zie [functional-spec.md § F-01b](../functional-spec.md#f-01b-inloggen-via-mobiel-qr-pairing).
**Implementatie-volgorde** (commit-strategy uit CLAUDE.md):
@ -37,7 +37,7 @@ ST-1006 staat bij de API-laag (niet bij UI) omdat het een Route Handler is; ST-1
**Bestanden**
- `prisma/schema.prisma` — nieuw model `LoginPairing` + back-relation op `User`
- `prisma/migrations/<timestamp>_add_login_pairing/migration.sql` — model + trigger
- `vendor/scrum4me`-submodule in repo `scrum4me-mcp` — schema-sync ná merge
- `vendor/scrum4me`-submodule in repo `mcp` — schema-sync ná merge
**Stappen**
@ -93,7 +93,7 @@ ST-1006 staat bij de API-laag (niet bij UI) omdat het een Route Handler is; ST-1
- `desktop_ip` houdt op 45 tekens om IPv6 te accommoderen (`xxxx:xxxx:…:255.255.255.255`).
- Geen index op `user_id` nodig voor v1 — er is geen lookup-pad "geef alle pairings van user X" (komt pas bij remote-revoke in M+1).
- Trigger emit ook bij DELETE niet nodig — pairings worden niet gedelete'd, ze gaan naar `consumed`/`cancelled`.
- `vendor/scrum4me`-submodule in scrum4me-mcp moet ná merge op `main` direct gesynced worden, anders breekt de wekelijkse drift-check (`trig_015FFUnxjz9WMuhhWNGBQKFD`). Dit was ook een aandachtspunt bij ST-901.
- `vendor/scrum4me`-submodule in mcp moet ná merge op `main` direct gesynced worden, anders breekt de wekelijkse drift-check (`trig_015FFUnxjz9WMuhhWNGBQKFD`). Dit was ook een aandachtspunt bij ST-901.
**Verificatie**
- `npx prisma migrate dev` slaagt
@ -661,7 +661,7 @@ ST-1006 staat bij de API-laag (niet bij UI) omdat het een Route Handler is; ST-1
- De `session.isDemo` check overneemt: als de approver een demo-user is — wat ST-1005 al blokkeert — komen we hier niet eens, maar `is_demo` doorzetten is een extra vangnet.
**Verificatie**
- Handmatig: na approve in mobiele tab, POST naar `/api/auth/pair/claim` met de cookie van start → 200 + `Set-Cookie: scrum4me-session=...`
- Handmatig: na approve in mobiele tab, POST naar `/api/auth/pair/claim` met de cookie van start → 200 + `Set-Cookie: session=...`
- `curl -X POST` zonder cookie → 401
- Tweede claim → 410
@ -776,7 +776,7 @@ ST-1006 staat bij de API-laag (niet bij UI) omdat het een Route Handler is; ST-1
<QrLoginButton />
```
MD3-tokens uit `docs/scrum4me-styling.md`; geen willekeurige Tailwind-kleuren.
MD3-tokens uit `docs/styling.md`; geen willekeurige Tailwind-kleuren.
4. **A11y**: QR-component krijgt `aria-label="QR-code voor mobiel inloggen"` en de URL wordt visueel als kopieer-bare tekst onder de QR getoond zodat screenreaders en gebruikers met cameraproblemen de URL handmatig kunnen openen.
@ -798,7 +798,7 @@ ST-1006 staat bij de API-laag (niet bij UI) omdat het een Route Handler is; ST-1
**Bestanden**
- `docs/API.md` — drie nieuwe endpoints
- `docs/scrum4me-architecture.md` — sectie "QR-pairing flow" + threat-model
- `docs/architecture.md` — sectie "QR-pairing flow" + threat-model
- `docs/patterns/qr-login.md` — nieuw pattern-doc
- `CLAUDE.md` — verwijzing naar het pattern-doc in de patterns-tabel
- `__tests__/integration/qr-pairing-e2e.test.ts` — optioneel, alleen als de test-infra het toelaat
@ -807,7 +807,7 @@ ST-1006 staat bij de API-laag (niet bij UI) omdat het een Route Handler is; ST-1
1. **`docs/API.md`** — drie endpoints documenteren met request/response, foutcodes (400/401/403/404/410/422/429), curl-voorbeelden inclusief `--cookie-jar`. Voeg een sectie *"Cookie-mechaniek"* toe die uitlegt dat `s4m_pair` een tijdelijke pre-auth cookie is, anders dan de iron-session cookie.
2. **`docs/scrum4me-architecture.md`** — sectie *"QR-pairing flow"* met:
2. **`docs/architecture.md`** — sectie *"QR-pairing flow"* met:
- Sequence-diagram (mermaid of ASCII analoog aan M8)
- Threat-model:
- **Replay**: atomic `updateMany` met `status='approved'` voorkomt dubbele claim
@ -835,13 +835,13 @@ ST-1006 staat bij de API-laag (niet bij UI) omdat het een Route Handler is; ST-1
7. **Secret niet in access logs** — controleer Vercel runtime-logs (via `mcp__a1fa0fcf-…__get_runtime_logs`) en lokale dev-logs; zoek op de secret-string en op `s=`-substrings; verwacht: 0 hits
**Aandachtspunten**
- Zorg dat de runtime-logs MCP-controle in `docs/scrum4me-test-plan.md` belandt zodat hij bij elke release herhaalbaar is.
- Zorg dat de runtime-logs MCP-controle in `docs/test-plan.md` belandt zodat hij bij elke release herhaalbaar is.
- `docs/patterns/qr-login.md` mag refereren naar bestaande pattern-docs (iron-session, route-handler) zonder ze te dupliceren.
**Verificatie**
- `npm run lint && npx tsc --noEmit && npm test && npm run build` groen
- Alle zeven scenario's handmatig groen, beschreven in een test-rapport-sectie
- `vendor/scrum4me`-submodule in scrum4me-mcp gesynced ná schema-merge
- `vendor/scrum4me`-submodule in mcp gesynced ná schema-merge
---
@ -875,7 +875,7 @@ docs(ST-1008): add qr-login pattern doc
**Pre-merge gates** (uit CLAUDE.md DoD):
- `npm run lint && npm test && npm run build` groen op CI
- Schema-wijziging in ST-1001 → wekelijkse drift-check `trig_015FFUnxjz9WMuhhWNGBQKFD` mag niet rood staan; `vendor/scrum4me`-submodule in scrum4me-mcp meebewegen na merge
- Schema-wijziging in ST-1001 → wekelijkse drift-check `trig_015FFUnxjz9WMuhhWNGBQKFD` mag niet rood staan; `vendor/scrum4me`-submodule in mcp meebewegen na merge
**Wanneer dit aanpassen:** zodra het Vercel-account naar Pro gaat — zie CLAUDE.md.

View file

@ -13,7 +13,7 @@ Persistent vraag-antwoord-kanaal tussen Claude Code (via MCP) en de actieve Scru
Eerste concrete uitwerking van strategische **richting B** (verdiepen van de unieke AI-driven dev-flow).
Backlog-entries: zie [scrum4me-backlog.md § M11](../scrum4me-backlog.md#m11-claude-vraagt-gebruiker-antwoordt) (op te leveren in ST-1108).
Backlog-entries: zie [backlog.md § M11](../backlog.md#m11-claude-vraagt-gebruiker-antwoordt) (op te leveren in ST-1108).
**Beveiligingsuitgangspunten:**
- Atomic answer via `updateMany WHERE status='open'` — concurrent dubbele submit kan niet
@ -34,7 +34,7 @@ Backlog-entries: zie [scrum4me-backlog.md § M11](../scrum4me-backlog.md#m11-cla
**Bestanden**
- `prisma/schema.prisma` — model `ClaudeQuestion` + relations op `User`/`Story`/`Task`/`Product`
- `prisma/migrations/<ts>_add_claude_questions/migration.sql` — table-DDL + trigger
- `vendor/scrum4me`-submodule in `scrum4me-mcp` — schema-sync ná merge
- `vendor/scrum4me`-submodule in `mcp` — schema-sync ná merge
**Stappen**
@ -113,16 +113,16 @@ Backlog-entries: zie [scrum4me-backlog.md § M11](../scrum4me-backlog.md#m11-cla
---
## ST-1102 — MCP-tools (in `scrum4me-mcp`-repo)
## ST-1102 — MCP-tools (in `mcp`-repo)
**Bestanden**
- `scrum4me-mcp/src/tools/ask-user-question.ts` — nieuw
- `scrum4me-mcp/src/tools/get-question-answer.ts` — nieuw
- `scrum4me-mcp/src/tools/list-open-questions.ts` — nieuw
- `scrum4me-mcp/src/tools/cancel-question.ts` — nieuw
- `scrum4me-mcp/src/index.ts` — register de vier tools
- `scrum4me-mcp/scripts/smoke-test.ts` — uitbreiden met question-roundtrip
- `scrum4me-mcp/README.md` — tool-tabel uitbreiden
- `mcp/src/tools/ask-user-question.ts` — nieuw
- `mcp/src/tools/get-question-answer.ts` — nieuw
- `mcp/src/tools/list-open-questions.ts` — nieuw
- `mcp/src/tools/cancel-question.ts` — nieuw
- `mcp/src/index.ts` — register de vier tools
- `mcp/scripts/smoke-test.ts` — uitbreiden met question-roundtrip
- `mcp/README.md` — tool-tabel uitbreiden
**Stappen**
@ -162,7 +162,7 @@ Backlog-entries: zie [scrum4me-backlog.md § M11](../scrum4me-backlog.md#m11-cla
- MCP Inspector toont 4 nieuwe tools (totaal 13)
- Smoke-test groen: ask + answer roundtrip binnen 5s
- Demo-token op `ask_user_question` of `cancel_question` geeft `PERMISSION_DENIED`
- `tsc --noEmit` clean op `scrum4me-mcp`
- `tsc --noEmit` clean op `mcp`
---
@ -288,7 +288,7 @@ Backlog-entries: zie [scrum4me-backlog.md § M11](../scrum4me-backlog.md#m11-cla
**Aandachtspunten**
- Bell-icon en avatar moeten visueel balanceren — hoogte/padding gelijktrekken
- MD3-tokens uit `docs/scrum4me-styling.md`: badge `bg-error text-error-foreground` voor critical-count, `bg-primary` voor neutraal. Geen willekeurige Tailwind-kleuren
- MD3-tokens uit `docs/styling.md`: badge `bg-error text-error-foreground` voor critical-count, `bg-primary` voor neutraal. Geen willekeurige Tailwind-kleuren
- Optimistic-answer in store: voor het Server Action-resultaat zet item op pending; bij error rollback met sonner-error-toast
- Sheet-content blijft open zodat de user meerdere vragen achter elkaar kan beantwoorden (zelfde patroon als ST-358 openstaande-stories-sheet)
- ARIA: bell-icon heeft `aria-label="Notificaties — N open vragen"`, badge `role="status"`
@ -379,17 +379,17 @@ Backlog-entries: zie [scrum4me-backlog.md § M11](../scrum4me-backlog.md#m11-cla
**Bestanden**
- `docs/API.md` — secties "SSE — Notifications" + "Cron — Expire questions"
- `docs/scrum4me-architecture.md` — sectie "Vraag-antwoord-kanaal" met sequence-diagram
- `docs/architecture.md` — sectie "Vraag-antwoord-kanaal" met sequence-diagram
- `docs/patterns/claude-question-channel.md` — herbruikbaar pattern-doc
- `docs/scrum4me-backlog.md` — M11-tabel-rij + M11-sectie
- `docs/backlog.md` — M11-tabel-rij + M11-sectie
- `prisma/seed-data/parse-backlog.ts``M11: 'ACTIVE'`, `M10: 'COMPLETED'`, `M3.5: 'COMPLETED'`
- `CLAUDE.md` — pattern-doc verwijzing in Implementatiepatronen-tabel
**Stappen**
1. Backlog-tabel-rij + M11-sectie in `docs/scrum4me-backlog.md` (mirror M10-format met **Implementatieplan:** verwijzing naar dit doc)
1. Backlog-tabel-rij + M11-sectie in `docs/backlog.md` (mirror M10-format met **Implementatieplan:** verwijzing naar dit doc)
2. `docs/scrum4me-architecture.md` § "Vraag-antwoord-kanaal":
2. `docs/architecture.md` § "Vraag-antwoord-kanaal":
- Mermaid sequence-diagram: Claude → MCP → DB → trigger → SSE → user → Server Action → DB → trigger → polling-tool
- Threat-model-tabel (replay, demo-block, access-leak, expiry, race)
- "Waarom hergebruik scrum4me_changes-kanaal" sub-sectie
@ -415,7 +415,7 @@ Backlog-entries: zie [scrum4me-backlog.md § M11](../scrum4me-backlog.md#m11-cla
- Backlog-parser-self-test: `npx tsx prisma/seed-data/parse-backlog.ts` toont M11 met `priority=4 sprint=ACTIVE`
- 6/6 acceptatie-scenario's groen
- `npm run lint && npx tsc --noEmit && npm test && npm run build` clean
- `vendor/scrum4me`-submodule sync in scrum4me-mcp na merge
- `vendor/scrum4me`-submodule sync in mcp na merge
---
@ -423,13 +423,13 @@ Backlog-entries: zie [scrum4me-backlog.md § M11](../scrum4me-backlog.md#m11-cla
Per [CLAUDE.md → Branch & PR Strategy](../../CLAUDE.md#branch--pr-strategy-strict--kostenbeheersing):
- **Eén branch op Scrum4Me**: `feat/M11-claude-questions` afgesplitst van `main` ná M10-merge
- **Aparte branch op scrum4me-mcp**: `feat/M11-question-tools`
- **Aparte branch op mcp**: `feat/M11-question-tools`
- Commits chronologisch per stap met ST-code in titel:
```
chore(M11): swap demo-active sprint from M10 to M11
feat(ST-1101): add ClaudeQuestion model + notify_question_change trigger
feat(ST-1102): add 4 MCP question tools (in scrum4me-mcp)
feat(ST-1102): add 4 MCP question tools (in mcp)
feat(ST-1103): add answerQuestion server action
feat(ST-1104): add /api/realtime/notifications user-scoped SSE
feat(ST-1104): filter entity='question' from solo-realtime stream

View file

@ -11,7 +11,7 @@ applies_to: [M9]
Eén "actief Product Backlog" per gebruiker, persistent op `User.active_product_id`. NavBar wordt: Producten | Product Backlog | Sprint | Solo | Todo's. Zonder actief PB zijn Backlog/Sprint/Solo disabled. Sprint is alleen klikbaar als er een sprint met status `ACTIVE` bestaat. Vervangt de bestaande `last_product`-cookieflow.
Backlog-entries: zie [scrum4me-backlog.md § M9](../scrum4me-backlog.md#m9-actief-product-backlog).
Backlog-entries: zie [backlog.md § M9](../backlog.md#m9-actief-product-backlog).
---
@ -29,7 +29,7 @@ Backlog-entries: zie [scrum4me-backlog.md § M9](../scrum4me-backlog.md#m9-actie
3. `npx prisma migrate dev --name add_user_active_product_id`.
**Aandachtspunten**
- `vendor/scrum4me`-submodule in repo `scrum4me-mcp` heeft hetzelfde schema. Na merge moet daar `prisma generate && tsc --noEmit` slagen, anders breekt de wekelijkse drift-check (`trig_015FFUnxjz9WMuhhWNGBQKFD`).
- `vendor/scrum4me`-submodule in repo `mcp` heeft hetzelfde schema. Na merge moet daar `prisma generate && tsc --noEmit` slagen, anders breekt de wekelijkse drift-check (`trig_015FFUnxjz9WMuhhWNGBQKFD`).
- Geen seed-wijziging nodig — `null` is correcte initiële staat.
**Verificatie**

View file

@ -74,7 +74,7 @@ const pbiIdsToMarkDone = candidatePbis
## Opvolgactie buiten deze repo
[`madhura68/scrum4me-mcp`](https://github.com/madhura68/scrum4me-mcp): de `create_pbi` tool kan straks optioneel `status` accepteren. Submodule (`vendor/scrum4me`) moet gesynced worden na merge zodat de drift-bewaking maandag groen blijft.
[`madhura68/mcp`](https://github.com/madhura68/mcp): de `create_pbi` tool kan straks optioneel `status` accepteren. Submodule (`vendor/scrum4me`) moet gesynced worden na merge zodat de drift-bewaking maandag groen blijft.
## Verificatie (end-to-end)

View file

@ -61,7 +61,7 @@ Drie-laagse bescherming:
| ST-1110.5 | `feat(ST-1110.5)` | 12 component/pagina-bestanden |
| ST-1110.5 tests | `test(ST-1110.5)` | `__tests__/api/pair-claim.test.ts`, `__tests__/api/pair-start.test.ts` |
| ST-1110.6 | `test(ST-1110.6)` | `__tests__/proxy/demo-guard.test.ts` |
| ST-1110.7 | `docs(ST-1110.7)` | `docs/scrum4me-architecture.md`, dit bestand |
| ST-1110.7 | `docs(ST-1110.7)` | `docs/architecture.md`, dit bestand |
## Aandachtspunten toekomstige stories

View file

@ -23,7 +23,7 @@ applies_to: [ST-1111]
| ST-1111.2 API: ClaudeJob status mappers | `a1b1f69` |
| ST-1111.3 Server actions: enqueue + cancel | `9d9fb4b` |
| ST-1111.4 SSE: ClaudeJob events op solo-stream + initial state | `ece0aa9` |
| ST-1111.5 MCP-tools (scrum4me-mcp repo — aparte PR) | — |
| ST-1111.5 MCP-tools (mcp repo — aparte PR) | — |
| ST-1111.6 UI: 'Voer uit' + cancel in TaskDetailDialog | `b9c65eb` |
| ST-1111.7 UI: status-pill op SoloTaskCard | `dace427` |
| ST-1111.8 Tests: mappers + actions | `2c2a246` |
@ -50,7 +50,7 @@ Omdat `claude_jobs` geen row-trigger heeft (zoals `tasks` en `stories`), stuurt
await prisma.$executeRaw`SELECT pg_notify('scrum4me_changes', ${JSON.stringify(payload)}::text)`
```
Voordeel: expliciete controle over het payload-shape (met `type` i.p.v. `entity`). Nadeel: MCP-tools in de `scrum4me-mcp`-repo moeten hun eigen NOTIFY-aanroep hebben bij `update_job_status`.
Voordeel: expliciete controle over het payload-shape (met `type` i.p.v. `entity`). Nadeel: MCP-tools in de `mcp`-repo moeten hun eigen NOTIFY-aanroep hebben bij `update_job_status`.
### SSE-routing

View file

@ -159,7 +159,7 @@ Plaatsing:
**Live updates:** bestaande `useClaudeJobsStore` (Zustand, populated uit SSE) — alleen `kind` toevoegen aan filter-helpers.
### Stap 6 — MCP-tools (`scrum4me-mcp` repo, aparte PR)
### Stap 6 — MCP-tools (`mcp` repo, aparte PR)
**Wijziging 1 — bestaande tool uitbreiden:**
@ -211,10 +211,10 @@ Korte prompt-flow:
1. `wait_for_job({ accept_kinds: ['PLANNING'], wait_seconds: 600 })` — claim
2. Lees `planning_target` uit response (PBI of STORY) + `existing_*`
3. **Lees lokale docs uit Scrum4Me-checkout:**
- `docs/scrum4me-functional-spec.md` (functioneel kader)
- `docs/scrum4me-architecture.md` (technisch kader)
- `docs/functional-spec.md` (functioneel kader)
- `docs/architecture.md` (technisch kader)
- `docs/patterns/*.md` (relevante patterns op basis van target-titel/-beschrijving)
- `docs/scrum4me-styling.md` als target UI-werk betreft
- `docs/styling.md` als target UI-werk betreft
4. Bedenk children:
- Voor `STORY`-target: 3-7 taken met titel, korte beschrijving, `implementation_plan` (verwijst naar relevante patterns + bestanden), priority
- Voor `PBI`-target: 2-5 stories met titel, beschrijving in user-story-format, acceptance_criteria, priority
@ -236,7 +236,7 @@ Bij failure: `update_job_status({ status: 'FAILED', error })` + toast voor user.
| Status-pill rendering per status | `__tests__/components/shared/planning-job-pill.test.tsx` |
| Knop disabled-state in StoryDialog/PbiDialog bij actieve job | `__tests__/components/backlog/dialog-planning-button.test.tsx` |
MCP-tools testen in `scrum4me-mcp` repo (aparte PR).
MCP-tools testen in `mcp` repo (aparte PR).
---
@ -260,17 +260,17 @@ MCP-tools testen in `scrum4me-mcp` repo (aparte PR).
| `components/backlog/pbi-list.tsx` | MODIFY | Status-pill op pbi-card |
| `components/shared/planning-job-pill.tsx` | NEW | Generic pill-component |
| `docs/patterns/claude-agent-roles.md` | NEW | Pattern-doc: één table, kind-enum, accept_kinds-arg, lokale agent-prompts |
| `docs/scrum4me-architecture.md` | MODIFY | Sectie "Claude Agents" uitbreiden — twee rollen, schema, queue, prompts |
| `docs/scrum4me-pbi-dialog.md` | MODIFY | Sectie "Speciale gedragingen → Planning-trigger" toevoegen |
| `docs/scrum4me-story-dialog.md` | MODIFY | Idem |
| `docs/scrum4me-task-dialog.md` | MODIFY | Vermelden dat tasks ook door planning-agent kunnen ontstaan |
| `docs/architecture.md` | MODIFY | Sectie "Claude Agents" uitbreiden — twee rollen, schema, queue, prompts |
| `docs/pbi-dialog.md` | MODIFY | Sectie "Speciale gedragingen → Planning-trigger" toevoegen |
| `docs/story-dialog.md` | MODIFY | Idem |
| `docs/task-dialog.md` | MODIFY | Vermelden dat tasks ook door planning-agent kunnen ontstaan |
| `__tests__/actions/claude-jobs-planning.test.ts` | NEW | |
| `__tests__/lib/claude-job-status.test.ts` | MODIFY | `kind`-mapping testen |
| `__tests__/api/realtime-solo-planning.test.ts` | NEW | |
| `__tests__/components/shared/planning-job-pill.test.tsx` | NEW | |
| `__tests__/components/backlog/dialog-planning-button.test.tsx` | NEW | |
### scrum4me-mcp repo (aparte PR, na Scrum4Me-merge)
### mcp repo (aparte PR, na Scrum4Me-merge)
| File | Action |
|---|---|
@ -290,12 +290,12 @@ MCP-tools testen in `scrum4me-mcp` repo (aparte PR).
4. **Status-pill component + tests** (Stap 5a) — losstaande primitive
5. **Trigger-knoppen in StoryDialog + PbiDialog** (Stap 5b) — UI-trigger werkt, agent nog niet
6. **Pause** — verifieer end-to-end met handmatig insert in `claude_jobs` (kind=PLANNING) of via mock-MCP-call
7. **MCP-PR in scrum4me-mcp repo** (Stap 6) — `wait_for_job` uitbreiden, types updaten
7. **MCP-PR in mcp repo** (Stap 6) — `wait_for_job` uitbreiden, types updaten
8. **Lokaal `/generate-plan`-command schrijven + testen** (Stap 7) — agent claimt, leest, schrijft
9. **End-to-end test** (Stap 8) — story → klik knop → agent rendert taken → SSE → live in TaskPanel
10. **Docs-PR** — pattern-doc `claude-agent-roles.md`, architecture-update, dialog-profielen aanvullen
Branch-naming: `feat/M15-planning-agent` (Scrum4Me) + `feat/planning-agent` (scrum4me-mcp).
Branch-naming: `feat/M15-planning-agent` (Scrum4Me) + `feat/planning-agent` (mcp).
Conform CLAUDE.md "branch-per-milestone": commits accumuleren lokaal, pushen pas na gebruikerstest.

View file

@ -28,7 +28,7 @@ Doel: CLAUDE.md weerspiegelt de werkelijke 2026-04-27 workflow zonder dat het ee
1. Workflow-sectie — MCP-first met expliciete fallback
2. Conventies — uitbreiden met status-enums, foutcodes, test-pariteit, entity codes in commits
3. Implementatiepatronen — rij voor `lib/task-status.ts` en `lib/code-server.ts`-boundary toevoegen
4. Nieuwe sectie "MCP-integratie" — wat staat er, hoe te gebruiken, link naar scrum4me-mcp repo
4. Nieuwe sectie "MCP-integratie" — wat staat er, hoe te gebruiken, link naar mcp repo
5. Definition of Done — markeer expliciet als MVP-scope; M7 is post-MVP en heeft eigen acceptatie
**Niet**:
@ -45,7 +45,7 @@ Voeg toe onder de bestaande tabel:
| Document | Gebruik voor |
|---|---|
| `https://github.com/madhura68/scrum4me-mcp` | MCP-server repo: tools, prompts, schema-sync workflow |
| `https://github.com/madhura68/mcp` | MCP-server repo: tools, prompts, schema-sync workflow |
(`docs/API.md` staat er al — laten staan.)
@ -65,7 +65,7 @@ Vervang de 7-stap manual loop door een dual-track:
```
**Track B — manueel (Codex of zonder MCP)**:
- Lees task in `docs/scrum4me-backlog.md`
- Lees task in `docs/backlog.md`
- Volg verder de bestaande 7-stappen-loop
### 3. Sectie "Implementatiepatronen" — uitbreiden
@ -93,7 +93,7 @@ Korte sectie (~15 regels):
```markdown
## MCP-integratie
Scrum4Me heeft een eigen MCP-server (repo: `madhura68/scrum4me-mcp`)
Scrum4Me heeft een eigen MCP-server (repo: `madhura68/mcp`)
die deze API exposed als native tools voor Claude Code.
### Tools beschikbaar in Claude Code
@ -110,7 +110,7 @@ die deze API exposed als native tools voor Claude Code.
### Schema-drift bewaking
Wekelijks (maandag 08:00 Amsterdam) draait een remote agent
(`trig_015FFUnxjz9WMuhhWNGBQKFD`) die `vendor/scrum4me` syncet en
`prisma:generate + typecheck` uitvoert in scrum4me-mcp. Als die agent
`prisma:generate + typecheck` uitvoert in mcp. Als die agent
een drift-rapport opent, hoort dat **vóór** een Scrum4Me-PR met
schema-wijziging gemerged kan worden — zodat de MCP-server niet
stilletjes breekt op runtime.
@ -118,7 +118,7 @@ stilletjes breekt op runtime.
### 6. Sectie "Definition of Done" — kop verduidelijken
Wijzig `## Definition of Done``## Definition of Done (MVP)` en voeg eronder een korte zin toe: *"M7 (MCP-server) is post-MVP en heeft eigen acceptatie in `docs/scrum4me-backlog.md`."*
Wijzig `## Definition of Done``## Definition of Done (MVP)` en voeg eronder een korte zin toe: *"M7 (MCP-server) is post-MVP en heeft eigen acceptatie in `docs/backlog.md`."*
## Bijwerken van auditdoc
@ -127,7 +127,7 @@ Voeg een sectie aan `docs/agent-instruction-audit.md` toe (datum: 2026-04-27) me
- Aanleiding: ST-509/511/512/513 + M7 + PR #2 review-saga
- Gecontroleerde wijzigingen: zelfde tabel-stijl als 2026-04-25
- Nieuwe regels: status-enums op API-grens, error-code split 400/422, test-pariteit bij contract-wijziging, client/server module-boundary
- Verwijzing naar scrum4me-mcp repo en schema-drift cron
- Verwijzing naar mcp repo en schema-drift cron
## Volgorde van uitvoering
@ -140,7 +140,7 @@ Voeg een sectie aan `docs/agent-instruction-audit.md` toe (datum: 2026-04-27) me
## Wat het NIET oplost
- `AGENTS.md` (Codex) blijft achter; los aan te pakken indien gewenst
- Eventuele drift in `docs/scrum4me-functional-spec.md` rond status-enums — niet onderzocht; te volgen bij volgende audit
- Eventuele drift in `docs/functional-spec.md` rond status-enums — niet onderzocht; te volgen bij volgende audit
- Geen check of de losse pattern-files in `docs/patterns/` nog kloppen — ook volgende audit
## Geschatte size

View file

@ -17,12 +17,12 @@ Eén commando dat een specifieke milestone (PBI + stories + tasks) uit de backlo
Twee bronnen denkbaar:
- **`.Plans/<datum>-<slug>.md`** — freeform plan-tekst, niet gestructureerd, niet gecommit
- **`docs/scrum4me-backlog.md`** — al strict gestructureerd, gecommit, single source of truth voor alle bestaande seed-pipelines
- **`docs/backlog.md`** — al strict gestructureerd, gecommit, single source of truth voor alle bestaande seed-pipelines
Voorstel: het script leest de **backlog**. Workflow blijft natuurlijk:
1. Plan schrijven naar `.Plans/<naam>.md` (lokaal, draft)
2. Milestone-sectie + stories formaliseren in `docs/scrum4me-backlog.md` (PR)
2. Milestone-sectie + stories formaliseren in `docs/backlog.md` (PR)
3. Na merge: `npm run db:insert-milestone -- M8 [--product SCRUM4ME]`
Eén canonical bron, geen ambiguïteit, en de bestaande parser doet 90% van het werk al.
@ -49,7 +49,7 @@ Default product code: SCRUM4ME
Logica:
1. Parse args; valideer dat milestone-key matcht `^M[\d.]+$`
2. `loadBacklog(repoRoot, { strict: false })`
3. Zoek milestone op `key`; faal helder met "milestone <key> not found in docs/scrum4me-backlog.md" als ie er niet in staat
3. Zoek milestone op `key`; faal helder met "milestone <key> not found in docs/backlog.md" als ie er niet in staat
4. Lookup product via `code` (default `SCRUM4ME`); faal als niet gevonden
5. Upsert PBI:
- `where: { product_id_code: { product_id, code: milestone.key } }`

View file

@ -26,13 +26,13 @@ Vercel-deploys ondersteunen geen stateful native WebSockets in serverless of Edg
**Voorgestelde keuze: A — SSE met Postgres LISTEN/NOTIFY.**
Reden:
- Eén bron van waarheid: de DB. Web-mutations, REST-API én MCP schrijven allemaal naar Postgres; een trigger NOTIFY't onafhankelijk van de schrijver. Geen coördinatie nodig met scrum4me-mcp.
- Eén bron van waarheid: de DB. Web-mutations, REST-API én MCP schrijven allemaal naar Postgres; een trigger NOTIFY't onafhankelijk van de schrijver. Geen coördinatie nodig met mcp.
- Geen externe dienst, geen extra dep, geen kosten erbij.
- Neon ondersteunt LISTEN/NOTIFY op directe verbindingen. `DIRECT_URL` is al geconfigureerd.
- Naar de client toe: éénrichtingsverkeer — server pusht events, client doet mutaties via bestaande Server Actions/REST. SSE volstaat dus; we hoeven geen full-duplex.
- Voor de gebruiker is het verschil onmerkbaar: realtime updates komen binnen, browsers ondersteunen `EventSource` native.
We kiezen B (polling) niet omdat het meer DB-load geeft en je Pusher-achtige latency niet haalt. We kiezen C niet vanwege coördinatieoverhead met de MCP-server (extra publish-step in scrum4me-mcp).
We kiezen B (polling) niet omdat het meer DB-load geeft en je Pusher-achtige latency niet haalt. We kiezen C niet vanwege coördinatieoverhead met de MCP-server (extra publish-step in mcp).
## Architectuur
@ -132,7 +132,7 @@ Strategie: combineer (a) trigger zet `product_id` en `assignee_id` in de payload
- Done when: open Solo paneel in twee tabs, mutate task in tab A, zie status flippen in tab B binnen 12s zonder refresh
### ST-806 Documentatie + acceptatietest
- Update `docs/scrum4me-architecture.md`: nieuwe sectie "Realtime updates" met diagram en filtering-regels
- Update `docs/architecture.md`: nieuwe sectie "Realtime updates" met diagram en filtering-regels
- Update `CLAUDE.md`: vermelding dat Solo Paneel realtime is + dat MCP-writes vanzelf doorkomen
- Update `docs/API.md`: korte note over `/api/realtime/solo` (Bearer auth, SSE format)
- E2E-acceptatie: lijst van scenario's (zelfde gebruiker twee tabs, MCP-write, REST-write, story-claim, network-flap) handmatig getest
@ -140,7 +140,7 @@ Strategie: combineer (a) trigger zet `product_id` en `assignee_id` in de payload
## Backlog-edits
In `docs/scrum4me-backlog.md`:
In `docs/backlog.md`:
1. **Milestone-overzicht** — rij toevoegen onder M7:
```
@ -152,9 +152,9 @@ In `docs/scrum4me-backlog.md`:
## Wijzigingen elders
- `.env.example` blijft ongewijzigd (DIRECT_URL stond er al)
- `docs/scrum4me-architecture.md` — sectie "Realtime updates" met diagram en regel "alle UPDATE-triggers zitten op tasks/stories; nieuwe entiteiten erbij vragen om uitbreiding van de trigger-functie"
- `docs/architecture.md` — sectie "Realtime updates" met diagram en regel "alle UPDATE-triggers zitten op tasks/stories; nieuwe entiteiten erbij vragen om uitbreiding van de trigger-functie"
- Geen wijziging in `lib/code.ts` of `lib/code-server.ts` — dit is server-only realtime
- Schema-drift agent in scrum4me-mcp pikt de migratie automatisch op (geen Prisma-modelwijziging maar wel een nieuwe migratie); typecheck blijft groen omdat we geen Prisma Client-wijziging hebben
- Schema-drift agent in mcp pikt de migratie automatisch op (geen Prisma-modelwijziging maar wel een nieuwe migratie); typecheck blijft groen omdat we geen Prisma Client-wijziging hebben
## Risico's en mitigaties

View file

@ -35,7 +35,7 @@ Elke stap kost tokens en latency. Als de bestandsboom, naamgeving of inhoud ondu
| Plek | Bestanden | Regels totaal | Grootste bestand |
|---|---:|---:|---|
| Root (CLAUDE.md, README.md, AGENTS.md, Brainstorm.md) | 4 | 679 | CLAUDE.md (340) |
| `docs/` (root, exclusief subdirs) | 13 | 5.873 | scrum4me-architecture.md (1.247) |
| `docs/` (root, exclusief subdirs) | 13 | 5.873 | architecture.md (1.247) |
| `docs/patterns/` | 11 | 1.013 | dialog.md (387) |
| `docs/plans/` | 8 | 2.121 | M10-qr-pairing-login.md (885) |
| `.Plans/` (parallelle plan-historie) | 3 | ~600 | — |
@ -60,23 +60,23 @@ Bij elke turn die met `CLAUDE.md` start, wordt minimaal 340 regels orientation i
| Bestand | Regels | Waar het thuishoort |
|---|---:|---|
| `scrum4me-architecture.md` | 1.247 | `docs/architecture/` — splitsen (zie §4) |
| `scrum4me-functional-spec.md` | 650 | `docs/specs/functional.md` |
| `scrum4me-backlog.md` | 751 | `docs/backlog/index.md` |
| `scrum4me-product-backlog.md` | 454 | `docs/backlog/product-historical.md` (referentie, zie noot in CLAUDE.md) |
| `scrum4me-personas.md` | 138 | `docs/specs/personas.md` |
| `scrum4me-styling.md` | 670 | `docs/design/styling.md` |
| `architecture.md` | 1.247 | `docs/architecture/` — splitsen (zie §4) |
| `functional-spec.md` | 650 | `docs/specs/functional.md` |
| `backlog.md` | 751 | `docs/backlog/index.md` |
| `product-backlog.md` | 454 | `docs/backlog/product-historical.md` (referentie, zie noot in CLAUDE.md) |
| `personas.md` | 138 | `docs/specs/personas.md` |
| `styling.md` | 670 | `docs/design/styling.md` |
| `MD3_Color_Scheme_Documentation.md` | 941 | `docs/design/md3-color-scheme.md` (overlapt deels met `styling.md` — kandidaat voor merge) |
| `scrum4me-test-plan.md` | 454 | `docs/qa/api-test-plan.md` |
| `scrum4me-pbi-dialog.md` | 120 | `docs/specs/dialogs/pbi.md` |
| `scrum4me-story-dialog.md` | 163 | `docs/specs/dialogs/story.md` |
| `scrum4me-task-dialog.md` | 127 | `docs/specs/dialogs/task.md` |
| `test-plan.md` | 454 | `docs/qa/api-test-plan.md` |
| `pbi-dialog.md` | 120 | `docs/specs/dialogs/pbi.md` |
| `story-dialog.md` | 163 | `docs/specs/dialogs/story.md` |
| `task-dialog.md` | 127 | `docs/specs/dialogs/task.md` |
| `solo-paneel-spec.md` | 771 | `docs/specs/solo-panel.md` |
| `API.md` | 520 | `docs/api/rest-contract.md` |
| `agent-instruction-audit.md` | 173 | `docs/decisions/agent-instructions.md` (ADR-stijl) |
| `erd.svg`, `icons.html` | — | `docs/assets/` |
**Patroon dat opvalt:** alles met prefix `scrum4me-` — dat prefix is overbodig, je staat al in `docs/` van de Scrum4Me-repo. Verwijderen scheelt visuele ruis bij `ls`.
**Patroon dat opvalt:** alles met prefix `` — dat prefix is overbodig, je staat al in `docs/` van de Scrum4Me-repo. Verwijderen scheelt visuele ruis bij `ls`.
**Inconsistente capitalization:** één bestand `MD3_Color_Scheme_Documentation.md` (snake + UpperCamel), de rest kebab. Eén bestand `API.md` (UPPER), de rest lowercase.
@ -100,7 +100,7 @@ Bij elke turn die met `CLAUDE.md` start, wordt minimaal 340 regels orientation i
### 2.6 Cross-referenties en dode links
- CLAUDE.md verwijst naar `docs/scrum4me-architecture.md#demo-user-policy` — die anchor bestaat (regel 1068 `## Demo-user policy (ST-1110)`), dus dit is OK; maar er bestaat geen lint die garandeert dat dit zo blijft als de header verandert.
- CLAUDE.md verwijst naar `docs/architecture.md#demo-user-policy` — die anchor bestaat (regel 1068 `## Demo-user policy (ST-1110)`), dus dit is OK; maar er bestaat geen lint die garandeert dat dit zo blijft als de header verandert.
- ST-1109-pbi-status.md verwijst naar `~/.claude/plans/welke-rioriteiten-heeft-een-mighty-shell.md` — externe locatie buiten de repo, plus typo "rioriteiten". Een agent kan die niet lezen.
- README.md verwijst niet naar CLAUDE.md/AGENTS.md (mensbezoekers vinden de agent-instructie laag niet).
- Geen enkel doc heeft een "Zie ook"-blok aan de onderkant. Cross-navigatie tussen patroon ↔ spec ↔ plan moet de agent zelf reconstrueren.
@ -148,7 +148,7 @@ In volgorde van belangrijkheid:
│ │ └── project-structure.md (uit §Projectstructuur)
│ │
│ ├── specs/
│ │ ├── functional.md (huidige scrum4me-functional-spec.md)
│ │ ├── functional.md (huidige functional-spec.md)
│ │ ├── personas.md
│ │ ├── solo-panel.md
│ │ └── dialogs/
@ -190,8 +190,8 @@ In volgorde van belangrijkheid:
│ │ └── 0005-agent-instructions.md (was agent-instruction-audit.md)
│ │
│ ├── backlog/
│ │ ├── index.md (huidige scrum4me-backlog.md)
│ │ └── product-historical.md (huidige scrum4me-product-backlog.md)
│ │ ├── index.md (huidige backlog.md)
│ │ └── product-historical.md (huidige product-backlog.md)
│ │
│ ├── plans/
│ │ ├── M9-active-product-backlog.md
@ -219,7 +219,7 @@ In volgorde van belangrijkheid:
└── docs/patterns/test.md (WEG — junk)
```
**Prefix `scrum4me-` overal weg.** Je staat in de Scrum4Me-repo.
**Prefix `` overal weg.** Je staat in de Scrum4Me-repo.
**Alle bestandsnamen kebab-case, lowercase.** Geen `API.md`, geen `MD3_…`.
---
@ -344,7 +344,7 @@ Elke fase is een eigen branch + PR. Geen big-bang. Volgorde gekozen zodat agents
### Fase 2 — Naamgeving normaliseren
- `scrum4me-` prefix overal weg via `git mv` (1 commit per groep — backlog/specs/personas/styling/dialogs).
- `` prefix overal weg via `git mv` (1 commit per groep — backlog/specs/personas/styling/dialogs).
- `API.md``api/rest-contract.md`.
- `MD3_Color_Scheme_Documentation.md``design/md3-color-scheme.md`.
- `Tweede Claude Agent — Planning Agent.md``plans/tweede-claude-agent-planning.md`.
@ -359,7 +359,7 @@ Elke fase is een eigen branch + PR. Geen big-bang. Volgorde gekozen zodat agents
### Fase 4 — Splits monolithische docs
- `scrum4me-architecture.md` (1.247 r) opdelen in 6 docs onder `docs/architecture/`.
- `architecture.md` (1.247 r) opdelen in 6 docs onder `docs/architecture/`.
- Originele file wordt 20 regels: titel + "Dit document is opgesplitst — zie:" + lijst met nieuwe paden.
- Idem voor `solo-paneel-spec.md` als dat onderdelen heeft die naar specs én patterns kunnen.
@ -403,7 +403,7 @@ Elke fase is een eigen branch + PR. Geen big-bang. Volgorde gekozen zodat agents
| Doc-bestanden zonder front-matter | 36 | 0 |
| Junk-bestanden | 3 (test.md, Brainstorm.md, .Plans/) | 0 |
| Bestandsnamen met spaties of niet-ASCII | 1 | 0 |
| Filename-prefixen die geen informatie toevoegen (`scrum4me-`) | 8 | 0 |
| Filename-prefixen die geen informatie toevoegen (``) | 8 | 0 |
| Documenten >800 regels | 4 | 0 (na splitsing) |
| Dode interne links | onbekend | 0 (na lint) |

View file

@ -1,6 +1,6 @@
---
spec_version: 1
spec_type: scrum4me-pbi-bulk-create
spec_type: pbi-bulk-create
generated_at: 2026-05-02
language: en
notes: |
@ -45,12 +45,12 @@ no index, no machine-readable status. After this PBI, the agent reads
`AGENTS.md`) carries YAML front-matter with at minimum
`title`, `status`, `audience`, `language`, `last_updated`. Add
`related`, `when_to_read`, `do_not_read_for` where useful.
- **Naming:** lowercase kebab-case. No `scrum4me-` prefix. No spaces in
- **Naming:** lowercase kebab-case. No `` prefix. No spaces in
filenames. No UPPER. Files matching `_*.md` are personal sidecar and
excluded from the index.
- **Commits:** one commit per logical layer. Use `docs(<story-slug>):`
as the prefix when no ST-code applies. Reference the matching story
slug from this spec (e.g. `docs(naming): drop scrum4me- prefix`).
slug from this spec (e.g. `docs(naming): drop prefix`).
- **Pushing:** never push without explicit user approval. Local commits
on the feature branch only. The branch convention is
`feat/docs-restructure-<phase-slug>` (one branch per story).
@ -135,7 +135,7 @@ pbi:
- English for new/touched docs (UI strings stay Dutch).
- YAML front-matter on every doc (title, status, audience, language,
last_updated; related/when_to_read/do_not_read_for where useful).
- kebab-case, lowercase, no scrum4me- prefix, no spaces.
- kebab-case, lowercase, no prefix, no spaces.
- One commit per logical layer (`docs(<story-slug>):` prefix).
- No pushes without user approval.
- Update every internal link in the same commit as a rename.
@ -250,11 +250,11 @@ pbi:
- slug: naming-normalization
title: "Phase 2 — Normalize file naming"
description: |
Drop the `scrum4me-` prefix. Lowercase everything. Remove the
Drop the `` prefix. Lowercase everything. Remove the
space + em-dash filename. Rename Next.js 16 middleware to proxy.
After this story all filenames are kebab-case and grep-friendly.
acceptance_criteria: |
- No file under docs/ starts with `scrum4me-`.
- No file under docs/ starts with ``.
- No file under docs/ uses UPPER, snake_case, or contains spaces.
- docs/patterns/middleware.md is renamed to docs/patterns/proxy.md.
- Every internal link to renamed files is updated in the same
@ -263,24 +263,24 @@ pbi:
priority: 2
tasks:
- title: "Rename docs/scrum4me-* (drop prefix)"
- title: "Rename docs/* (drop prefix)"
description: "8 spec/backlog/styling files at docs/ root."
implementation_plan: |
git mv docs/scrum4me-architecture.md docs/architecture.md
git mv docs/scrum4me-backlog.md docs/backlog.md
git mv docs/scrum4me-functional-spec.md docs/functional.md
git mv docs/scrum4me-pbi-dialog.md docs/pbi-dialog.md
git mv docs/scrum4me-personas.md docs/personas.md
git mv docs/scrum4me-product-backlog.md docs/product-backlog.md
git mv docs/scrum4me-story-dialog.md docs/story-dialog.md
git mv docs/scrum4me-styling.md docs/styling.md
git mv docs/scrum4me-task-dialog.md docs/task-dialog.md
git mv docs/scrum4me-test-plan.md docs/test-plan.md
git mv docs/architecture.md docs/architecture.md
git mv docs/backlog.md docs/backlog.md
git mv docs/functional-spec.md docs/functional.md
git mv docs/pbi-dialog.md docs/pbi-dialog.md
git mv docs/personas.md docs/personas.md
git mv docs/product-backlog.md docs/product-backlog.md
git mv docs/story-dialog.md docs/story-dialog.md
git mv docs/styling.md docs/styling.md
git mv docs/task-dialog.md docs/task-dialog.md
git mv docs/test-plan.md docs/test-plan.md
# update every internal link
grep -rln "scrum4me-" docs/ CLAUDE.md AGENTS.md README.md \
| xargs sed -i '' 's|scrum4me-||g'
grep -rln "" docs/ CLAUDE.md AGENTS.md README.md \
| xargs sed -i '' 's|||g'
npm run docs:index
commit: docs(naming): drop scrum4me- prefix from doc filenames
commit: docs(naming): drop prefix from doc filenames
priority: 2
- title: "Lowercase API.md and MD3 file"