docs(naming): drop scrum4me- prefix from doc filenames
This commit is contained in:
parent
6c49a5013d
commit
f5ff3673e2
35 changed files with 198 additions and 193 deletions
|
|
@ -71,7 +71,13 @@
|
|||
"Bash(Sort-Object)",
|
||||
"PowerShell(Push-Location \"C:\\\\Users\\\\Madhu\\\\Projects\\\\scrum4me-mcp\"; npx tsc --noEmit; $result = $?; Pop-Location; Write-Output \"typecheck ok: $result\")",
|
||||
"PowerShell(git *)",
|
||||
"mcp__scrum4me__verify_task_against_plan"
|
||||
"mcp__scrum4me__verify_task_against_plan",
|
||||
"Bash(mkdir -p docs/plans/archive)",
|
||||
"Bash(rmdir .Plans)",
|
||||
"Bash(mv .Plans/2026-04-27-claude-md-workflow-update.md docs/plans/archive/)",
|
||||
"Bash(mv .Plans/2026-04-27-insert-milestone-tool.md docs/plans/archive/)",
|
||||
"Bash(mv .Plans/2026-04-27-m8-realtime-solo.md docs/plans/archive/)",
|
||||
"Bash(xargs sed *)"
|
||||
]
|
||||
},
|
||||
"enableAllProjectMcpServers": true,
|
||||
|
|
|
|||
|
|
@ -30,8 +30,8 @@ Read `CLAUDE.md` and the relevant files in `docs/` before changing behavior. The
|
|||
When changing behavior, API responses, dependencies, environment variables, deployment behavior, or analytics, update the matching docs in the same change:
|
||||
|
||||
- `README.md` for setup, dependencies, deployment, and API overview.
|
||||
- `docs/scrum4me-functional-spec.md` for user-facing/API requirements.
|
||||
- `docs/scrum4me-architecture.md` for stack, access model, data model, env vars, and deployment.
|
||||
- `docs/functional-spec.md` for user-facing/API requirements.
|
||||
- `docs/architecture.md` for stack, access model, data model, env vars, and deployment.
|
||||
- `docs/patterns/` when a reusable implementation rule changes.
|
||||
- `CLAUDE.md` and this file when an agent instruction would have prevented the issue.
|
||||
|
||||
|
|
|
|||
32
CLAUDE.md
32
CLAUDE.md
|
|
@ -24,16 +24,16 @@ Lees het relevante document voordat je aan een feature begint. Nooit gokken over
|
|||
|
||||
| Document | Gebruik voor |
|
||||
|---|---|
|
||||
| `docs/scrum4me-functional-spec.md` | Acceptatiecriteria, randgevallen, user flows |
|
||||
| `docs/scrum4me-architecture.md` | Stack, datamodel, Prisma schema, Zustand stores |
|
||||
| `docs/scrum4me-backlog.md` | Welke task bouwen, volgorde, "done when"-criteria |
|
||||
| `docs/scrum4me-personas.md` | Lars (primair), Dina, Remi — gebruik bij UI-beslissingen |
|
||||
| `docs/scrum4me-product-backlog.md` | Historische domein-backlog (referentie); seed wordt sinds ST-004 gegenereerd uit `scrum4me-backlog.md` via `prisma/seed-data/parse-backlog.ts` |
|
||||
| `docs/functional-spec.md` | Acceptatiecriteria, randgevallen, user flows |
|
||||
| `docs/architecture.md` | Stack, datamodel, Prisma schema, Zustand stores |
|
||||
| `docs/backlog.md` | Welke task bouwen, volgorde, "done when"-criteria |
|
||||
| `docs/personas.md` | Lars (primair), Dina, Remi — gebruik bij UI-beslissingen |
|
||||
| `docs/product-backlog.md` | Historische domein-backlog (referentie); seed wordt sinds ST-004 gegenereerd uit `backlog.md` via `prisma/seed-data/parse-backlog.ts` |
|
||||
| `docs/API.md` | REST-API contract voor Claude Code — endpoints, status-enums, foutcodes, voorbeeld-curls |
|
||||
| `docs/scrum4me-styling.md` | **Lees dit voor elk component** — MD3-kleuren, shadcn patronen |
|
||||
| `docs/styling.md` | **Lees dit voor elk component** — MD3-kleuren, shadcn patronen |
|
||||
| `docs/agent-instruction-audit.md` | Waarom de agent-instructies zijn aangescherpt; checklist voor toekomstige wijzigingen |
|
||||
| `docs/plans/<milestone-key>-*.md` | Implementatieplan per milestone — Bestanden, Stappen, Aandachtspunten, Verificatie. Lees vóór je aan een ST begint. Milestone-key matcht backlog-header (`M9`, `M3.5`, `PBI-9`, …). |
|
||||
| [`madhura68/scrum4me-mcp`](https://github.com/madhura68/scrum4me-mcp) | MCP-server repo: native tools voor Claude Code, schema-sync via git submodule |
|
||||
| [`madhura68/mcp`](https://github.com/madhura68/mcp) | MCP-server repo: native tools voor Claude Code, schema-sync via git submodule |
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -59,9 +59,9 @@ Werken aan een task kan via twee tracks. Track A heeft de voorkeur als je in Cla
|
|||
|
||||
### Track B — manueel (Codex of zonder MCP)
|
||||
|
||||
1. Lees de task in `scrum4me-backlog.md`
|
||||
2. Zoek de bijbehorende feature-spec in `scrum4me-functional-spec.md`
|
||||
3. Lees het relevante patroon in `docs/patterns/` en styling in `docs/scrum4me-styling.md` als dat van toepassing is
|
||||
1. Lees de task in `backlog.md`
|
||||
2. Zoek de bijbehorende feature-spec in `functional-spec.md`
|
||||
3. Lees het relevante patroon in `docs/patterns/` en styling in `docs/styling.md` als dat van toepassing is
|
||||
4. Bouw — test — verifieer de "Done when"-criteria
|
||||
5. Vraag of de code correct is
|
||||
6. Commit (zie Commit Strategy hieronder)
|
||||
|
|
@ -87,7 +87,7 @@ Vercel Analytics (@vercel/analytics/next)
|
|||
|
||||
> ⚠️ **Stylingregel:** Gebruik **nooit** `bg-blue-500` of willekeurige Tailwind-kleuren.
|
||||
> Gebruik altijd semantische MD3-tokens: `bg-primary`, `bg-status-done`, `bg-priority-critical`.
|
||||
> Zie `scrum4me-styling.md` voor alle patronen.
|
||||
> Zie `styling.md` voor alle patronen.
|
||||
|
||||
> ⚠️ **Next.js-versie:** Lees `node_modules/next/dist/docs/` bij twijfel — API's kunnen afwijken van trainingsdata.
|
||||
|
||||
|
|
@ -119,7 +119,7 @@ Lees het relevante patroon vóór je begint. Nooit uit het hoofd schrijven.
|
|||
| Middleware (route protection) | `docs/patterns/middleware.md` |
|
||||
| QR-pairing (unauth-SSE + pre-auth cookie) | `docs/patterns/qr-login.md` |
|
||||
| Bidirectionele async-comms MCP-agent ↔ user | `docs/patterns/claude-question-channel.md` |
|
||||
| **Entity Dialog (verplicht voor élke create/edit/detail-dialog)** | `docs/patterns/dialog.md` — bron-of-truth; per entiteit één profile-doc (bv. `docs/scrum4me-task-dialog.md`) |
|
||||
| **Entity Dialog (verplicht voor élke create/edit/detail-dialog)** | `docs/patterns/dialog.md` — bron-of-truth; per entiteit één profile-doc (bv. `docs/task-dialog.md`) |
|
||||
| Status-enum mapping (DB ↔ API) | `lib/task-status.ts` |
|
||||
| Client/server module-boundary | `*-server.ts` bevat DB-calls of node-only deps; `*.ts` is pure (client-safe). Nooit `import { ... } from '@/lib/foo-server'` in een client-component, anders krijg je `Module not found: 'dns'`/`'pg'`-style runtime fouten |
|
||||
|
||||
|
|
@ -146,7 +146,7 @@ Volledige Zod-schema in `lib/env.ts`. `.env.example` is de canonieke lijst voor
|
|||
- **Toegangsmodel:** product-scoped resources gebruiken `productAccessFilter(userId)` tenzij het expliciet een eigenaarsactie is
|
||||
- **Bulk-ID's:** reorder- en beslissingsacties valideren dat alle meegegeven IDs binnen dezelfde parent-scope vallen voordat er geschreven wordt
|
||||
- **Foreign keys:** denormalized keys zoals `story.product_id` worden afgeleid uit de database-parent (`pbi.product_id`), nooit uit client-input
|
||||
- **Demo-check (drie lagen — ST-1110):** write-acties zijn drielaags afgedekt: (1) middleware-guard in `proxy.ts` blokkeert non-GET op `/api/*` voor demo; (2) elke Server Action / Route Handler controleert `session.isDemo` vóór schrijven; (3) write-knoppen in UI zijn `disabled` met `<DemoTooltip show={isDemo}>`. Zie `docs/scrum4me-architecture.md#demo-user-policy` en `docs/plans/ST-1110-demo-readonly.md`
|
||||
- **Demo-check (drie lagen — ST-1110):** write-acties zijn drielaags afgedekt: (1) middleware-guard in `proxy.ts` blokkeert non-GET op `/api/*` voor demo; (2) elke Server Action / Route Handler controleert `session.isDemo` vóór schrijven; (3) write-knoppen in UI zijn `disabled` met `<DemoTooltip show={isDemo}>`. Zie `docs/architecture.md#demo-user-policy` en `docs/plans/ST-1110-demo-readonly.md`
|
||||
- **Foutberichten:** Nederlands voor eindgebruikers — comments in code: Engels
|
||||
- **Dependencies:** elke geïmporteerde runtime package staat direct in `dependencies`, niet alleen transitief in `package-lock.json`
|
||||
- **Docs-sync:** elke gedrags-, dependency-, API- of deploymentwijziging werkt README, relevante docs en patterns bij in dezelfde change
|
||||
|
|
@ -269,7 +269,7 @@ docs(ST-XXX): document profile feature
|
|||
|
||||
## MCP-integratie
|
||||
|
||||
Scrum4Me heeft een eigen MCP-server in repo [`madhura68/scrum4me-mcp`](https://github.com/madhura68/scrum4me-mcp) die de REST-API als native tools voor Claude Code aanbiedt. Schema's worden gedeeld via een git submodule (`vendor/scrum4me`), niet gedupliceerd.
|
||||
Scrum4Me heeft een eigen MCP-server in repo [`madhura68/mcp`](https://github.com/madhura68/mcp) die de REST-API als native tools voor Claude Code aanbiedt. Schema's worden gedeeld via een git submodule (`vendor/scrum4me`), niet gedupliceerd.
|
||||
|
||||
### Tools beschikbaar in Claude Code (18)
|
||||
|
||||
|
|
@ -320,7 +320,7 @@ Dit blijft gelden als je tussen jobs door commits, branches of pushes hebt gedaa
|
|||
|
||||
### Schema-drift bewaking
|
||||
|
||||
Wekelijks (maandag 08:00 Amsterdam) draait de remote agent `trig_015FFUnxjz9WMuhhWNGBQKFD` die `vendor/scrum4me` syncet en `prisma:generate` + `tsc --noEmit` uitvoert in scrum4me-mcp. Als die agent drift rapporteert, hoort dat **vóór** een Scrum4Me-PR met schema-wijziging gemerged kan worden — anders breekt de MCP-server stilletjes op runtime.
|
||||
Wekelijks (maandag 08:00 Amsterdam) draait de remote agent `trig_015FFUnxjz9WMuhhWNGBQKFD` die `vendor/scrum4me` syncet en `prisma:generate` + `tsc --noEmit` uitvoert in mcp. Als die agent drift rapporteert, hoort dat **vóór** een Scrum4Me-PR met schema-wijziging gemerged kan worden — anders breekt de MCP-server stilletjes op runtime.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -336,7 +336,7 @@ Wekelijks (maandag 08:00 Amsterdam) draait de remote agent `trig_015FFUnxjz9WMuh
|
|||
|
||||
## Definition of Done (MVP)
|
||||
|
||||
M7 (MCP-server) is post-MVP en heeft eigen acceptatie in `docs/scrum4me-backlog.md`.
|
||||
M7 (MCP-server) is post-MVP en heeft eigen acceptatie in `docs/backlog.md`.
|
||||
|
||||
- [ ] Alle 62 tasks (ST-001 t/m ST-612) afgerond
|
||||
- [ ] Volledige Lars-flow zonder fouten (ST-612)
|
||||
|
|
|
|||
|
|
@ -155,7 +155,7 @@ Verwacht: alle 69 tests slagen, 0 failures.
|
|||
bash scripts/test-api.sh
|
||||
```
|
||||
|
||||
De curl-tests dekken alle 7 API-endpoints: auth (401), demo-blokkering (403), inputvalidatie (400) en happy paths. Zie `docs/scrum4me-test-plan.md` voor het volledige testplan.
|
||||
De curl-tests dekken alle 7 API-endpoints: auth (401), demo-blokkering (403), inputvalidatie (400) en happy paths. Zie `docs/test-plan.md` voor het volledige testplan.
|
||||
|
||||
## Database
|
||||
|
||||
|
|
@ -279,7 +279,7 @@ De productieomgeving is gericht op Vercel + Neon.
|
|||
|
||||
### Documentatie
|
||||
|
||||
- [Functionele specificatie](docs/scrum4me-functional-spec.md)
|
||||
- [Technische architectuur](docs/scrum4me-architecture.md)
|
||||
- [Backlog](docs/scrum4me-backlog.md)
|
||||
- [Functionele specificatie](docs/functional-spec.md)
|
||||
- [Technische architectuur](docs/architecture.md)
|
||||
- [Backlog](docs/backlog.md)
|
||||
- [Agent-instructie audit](docs/agent-instruction-audit.md)
|
||||
|
|
|
|||
|
|
@ -401,13 +401,13 @@ curl -N -i -b /tmp/jar http://localhost:3000/api/auth/pair/stream/<pairingId>
|
|||
### `POST /api/auth/pair/claim`
|
||||
|
||||
Cookie-auth. Atomisch consume van een approved pairing → schrijft de echte
|
||||
`scrum4me-session` cookie zodat de desktop is ingelogd.
|
||||
`session` cookie zodat de desktop is ingelogd.
|
||||
|
||||
**Auth:** `s4m_pair`-cookie.
|
||||
**Body:** `{ "pairingId": "cmoh..." }`.
|
||||
|
||||
**Response 200:** `{ "ok": true }` plus
|
||||
- `Set-Cookie: scrum4me-session=...; HttpOnly; SameSite=Lax` — paired-sessie met `paired: true` en `pairedExpiresAt = now + 8h` payload-velden.
|
||||
- `Set-Cookie: session=...; HttpOnly; SameSite=Lax` — paired-sessie met `paired: true` en `pairedExpiresAt = now + 8h` payload-velden.
|
||||
- `Set-Cookie: s4m_pair=...; Max-Age=0` — pre-auth cookie wordt gewist.
|
||||
|
||||
**Foutcodes:**
|
||||
|
|
@ -427,7 +427,7 @@ curl -i -X POST -b /tmp/jar -c /tmp/jar \
|
|||
|
||||
## Notifications — Vraag-antwoord-kanaal (M11)
|
||||
|
||||
Endpoints voor de Claude vraag-antwoord-flow. De **MCP-tools** in de scrum4me-mcp-repo (`ask_user_question`, `get_question_answer`, `list_open_questions`, `cancel_question`) zijn de primaire schrijf-interface; de endpoints hieronder zijn voor de browser-UI en cron.
|
||||
Endpoints voor de Claude vraag-antwoord-flow. De **MCP-tools** in de mcp-repo (`ask_user_question`, `get_question_answer`, `list_open_questions`, `cancel_question`) zijn de primaire schrijf-interface; de endpoints hieronder zijn voor de browser-UI en cron.
|
||||
|
||||
### `GET /api/realtime/notifications`
|
||||
|
||||
|
|
|
|||
|
|
@ -12,18 +12,7 @@ Auto-generated on 2026-05-02 from front-matter and headings.
|
|||
|
||||
## Specifications
|
||||
|
||||
| Title | Status | Updated |
|
||||
|---|---|---|
|
||||
| [Scrum4Me — Technische Architectuur](./scrum4me-architecture.md) | active | 2026-05-03 |
|
||||
| [Scrum4Me — Implementatie Backlog](./scrum4me-backlog.md) | active | 2026-05-03 |
|
||||
| [Scrum4Me — Functionele Specificatie](./scrum4me-functional-spec.md) | active | 2026-05-03 |
|
||||
| [PbiDialog Profiel](./scrum4me-pbi-dialog.md) | active | 2026-05-03 |
|
||||
| [DevPlanner — User Personas](./scrum4me-personas.md) | active | 2026-05-03 |
|
||||
| [DevPlanner — Product Backlog](./scrum4me-product-backlog.md) | active | 2026-05-03 |
|
||||
| [StoryDialog Profiel](./scrum4me-story-dialog.md) | active | 2026-05-03 |
|
||||
| [Scrum4Me — Styling & Design System](./scrum4me-styling.md) | active | 2026-05-03 |
|
||||
| [TaskDialog Profiel](./scrum4me-task-dialog.md) | active | 2026-05-03 |
|
||||
| [Scrum4Me — API Test Plan](./scrum4me-test-plan.md) | active | 2026-05-03 |
|
||||
_No specs yet._
|
||||
|
||||
## Plans
|
||||
|
||||
|
|
@ -69,6 +58,16 @@ Auto-generated on 2026-05-02 from front-matter and headings.
|
|||
|---|---|---|---|
|
||||
| [Agent Instruction Audit](./agent-instruction-audit.md) | `agent-instruction-audit.md` | active | 2026-05-03 |
|
||||
| [Scrum4Me REST API](./API.md) | `API.md` | active | 2026-05-03 |
|
||||
| [Scrum4Me — Technische Architectuur](./architecture.md) | `architecture.md` | active | 2026-05-03 |
|
||||
| [Scrum4Me — Implementatie Backlog](./backlog.md) | `backlog.md` | active | 2026-05-03 |
|
||||
| [Scrum4Me — Functionele Specificatie](./functional.md) | `functional.md` | active | 2026-05-03 |
|
||||
| [Material Design 3 Color Scheme Documentation](./MD3_Color_Scheme_Documentation.md) | `MD3_Color_Scheme_Documentation.md` | active | 2026-05-03 |
|
||||
| [Obsidian as Personal Authoring Layer](./obsidian-authoring.md) | `obsidian-authoring.md` | active | 2026-05-02 |
|
||||
| [PbiDialog Profiel](./pbi-dialog.md) | `pbi-dialog.md` | active | 2026-05-03 |
|
||||
| [DevPlanner — User Personas](./personas.md) | `personas.md` | active | 2026-05-03 |
|
||||
| [DevPlanner — Product Backlog](./product-backlog.md) | `product-backlog.md` | active | 2026-05-03 |
|
||||
| [Solo Paneel — Implementatie-specificatie](./solo-paneel-spec.md) | `solo-paneel-spec.md` | active | 2026-05-03 |
|
||||
| [StoryDialog Profiel](./story-dialog.md) | `story-dialog.md` | active | 2026-05-03 |
|
||||
| [Scrum4Me — Styling & Design System](./styling.md) | `styling.md` | active | 2026-05-03 |
|
||||
| [TaskDialog Profiel](./task-dialog.md) | `task-dialog.md` | active | 2026-05-03 |
|
||||
| [Scrum4Me — API Test Plan](./test-plan.md) | `test-plan.md` | active | 2026-05-03 |
|
||||
|
|
|
|||
|
|
@ -23,13 +23,13 @@ Dit document legt vast welke wijzigingen zijn gecontroleerd, welke documentatie
|
|||
|
||||
| Wijziging | Code-locatie | Documentatie bijgewerkt |
|
||||
|---|---|---|
|
||||
| Reorder-acties valideren alle IDs binnen de juiste parent-scope | `actions/stories.ts`, `actions/sprints.ts` | `docs/scrum4me-architecture.md`, `docs/patterns/server-action.md`, `docs/patterns/sort-order.md`, `CLAUDE.md`, `AGENTS.md` |
|
||||
| Sprint afronden accepteert alleen stories uit de actieve sprint | `actions/sprints.ts` | `docs/scrum4me-architecture.md`, `docs/patterns/server-action.md`, `AGENTS.md` |
|
||||
| Todo-promotie gebruikt scoped todo lookup en `pbi.product_id` als bron van waarheid | `actions/todos.ts` | `docs/scrum4me-architecture.md`, `docs/patterns/server-action.md`, `CLAUDE.md`, `AGENTS.md` |
|
||||
| `GET /api/products` retourneert ook gedeelde producten via `product_members` | `app/api/products/route.ts` | `README.md`, `docs/scrum4me-functional-spec.md`, `docs/scrum4me-backlog.md`, `docs/patterns/route-handler.md` |
|
||||
| `sharp` is directe runtime dependency | `package.json`, `package-lock.json` | `README.md`, `docs/scrum4me-architecture.md`, `CLAUDE.md` |
|
||||
| Vercel Analytics is toegevoegd aan de root layout | `app/layout.tsx`, `package.json`, `package-lock.json` | `README.md`, `docs/scrum4me-architecture.md`, `CLAUDE.md` |
|
||||
| `.env.example` ontbrak ondanks verwijzingen in architectuurdocs | `.env.example` | `README.md`, `docs/scrum4me-architecture.md` |
|
||||
| Reorder-acties valideren alle IDs binnen de juiste parent-scope | `actions/stories.ts`, `actions/sprints.ts` | `docs/architecture.md`, `docs/patterns/server-action.md`, `docs/patterns/sort-order.md`, `CLAUDE.md`, `AGENTS.md` |
|
||||
| Sprint afronden accepteert alleen stories uit de actieve sprint | `actions/sprints.ts` | `docs/architecture.md`, `docs/patterns/server-action.md`, `AGENTS.md` |
|
||||
| Todo-promotie gebruikt scoped todo lookup en `pbi.product_id` als bron van waarheid | `actions/todos.ts` | `docs/architecture.md`, `docs/patterns/server-action.md`, `CLAUDE.md`, `AGENTS.md` |
|
||||
| `GET /api/products` retourneert ook gedeelde producten via `product_members` | `app/api/products/route.ts` | `README.md`, `docs/functional-spec.md`, `docs/backlog.md`, `docs/patterns/route-handler.md` |
|
||||
| `sharp` is directe runtime dependency | `package.json`, `package-lock.json` | `README.md`, `docs/architecture.md`, `CLAUDE.md` |
|
||||
| Vercel Analytics is toegevoegd aan de root layout | `app/layout.tsx`, `package.json`, `package-lock.json` | `README.md`, `docs/architecture.md`, `CLAUDE.md` |
|
||||
| `.env.example` ontbrak ondanks verwijzingen in architectuurdocs | `.env.example` | `README.md`, `docs/architecture.md` |
|
||||
|
||||
## Preventieve regels
|
||||
|
||||
|
|
@ -52,9 +52,9 @@ Concrete regels:
|
|||
Een codewijziging is niet klaar als de documentatie een oud contract beschrijft. Agents moeten bij elke wijziging nagaan of deze plekken geraakt worden:
|
||||
|
||||
- `README.md`: setup, scripts, dependencies, deployment, API-overzicht.
|
||||
- `docs/scrum4me-functional-spec.md`: functionele eisen en API-contracten.
|
||||
- `docs/scrum4me-architecture.md`: stack, datamodel, securitymodel, env vars, deployment.
|
||||
- `docs/scrum4me-backlog.md`: "done when"-criteria en scope van backlog-items.
|
||||
- `docs/functional-spec.md`: functionele eisen en API-contracten.
|
||||
- `docs/architecture.md`: stack, datamodel, securitymodel, env vars, deployment.
|
||||
- `docs/backlog.md`: "done when"-criteria en scope van backlog-items.
|
||||
- `docs/patterns/`: herbruikbare implementatiepatronen.
|
||||
- `CLAUDE.md` en `AGENTS.md`: agent-regels die de fout in de toekomst voorkomen.
|
||||
|
||||
|
|
@ -110,7 +110,7 @@ Sinds ronde 1 (2026-04-25) is er substantieel werk geland dat de agent-workflow
|
|||
- **ST-512** REST API uitgebreid met `code`, `description`, `implementation_plan` in alle endpoints
|
||||
- **ST-513** API hardening voor Claude Code: `GET /api/health`, `GET /api/products/:id/claude-context`, lowercase status-enums op de API-grens, `StoryLog.metadata` JSONB, validatie-fouten van `400` → `422`, nieuwe `docs/API.md`
|
||||
- **PR #2 Codex-review-saga** — 8 testbestanden faalden bij de contract-flip; tests werden niet meebijgewerkt. Twee P2-issues van Codex: malformed JSON moet `400` blijven (P2.1), en `status: review` werd geaccepteerd terwijl de sprint-UI er niet mee om kan gaan (P2.2)
|
||||
- **M7: scrum4me-mcp** — aparte MCP-server repo (`madhura68/scrum4me-mcp`) met 9 tools en 1 prompt voor Claude Code, schema gedeeld via git submodule
|
||||
- **M7: mcp** — aparte MCP-server repo (`madhura68/mcp`) met 9 tools en 1 prompt voor Claude Code, schema gedeeld via git submodule
|
||||
- **lib/code.ts vs lib/code-server.ts** — gesplitst om client-bundle vrij te houden van `pg` (gaf eerst `Module not found: 'dns'` build-error)
|
||||
- **Wekelijkse schema-drift cron** (`trig_015FFUnxjz9WMuhhWNGBQKFD`) — remote agent die ma 08:00 Amsterdam de MCP-submodule syncet en typecheckt
|
||||
|
||||
|
|
@ -121,10 +121,10 @@ Sinds ronde 1 (2026-04-25) is er substantieel werk geland dat de agent-workflow
|
|||
| Lowercase status-enums op REST-grens, mappers naar DB-enum | `lib/task-status.ts`, `app/api/tasks/[id]/route.ts`, `app/api/sprints/[id]/tasks/route.ts`, `app/api/products/[id]/next-story/route.ts` | `docs/API.md`, `CLAUDE.md` |
|
||||
| 400 (malformed JSON) gescheiden van 422 (zod-validatie) | `app/api/tasks/[id]/route.ts`, `app/api/stories/[id]/tasks/reorder/route.ts`, `app/api/todos/route.ts`, `app/api/stories/[id]/log/route.ts` | `docs/API.md`, `CLAUDE.md` |
|
||||
| `status: review` geweigerd door PATCH `/api/tasks/:id` zolang sprint-UI geen REVIEW rendert | `app/api/tasks/[id]/route.ts` | `docs/API.md` |
|
||||
| Entity codes (Product/PBI/Story) met auto-default + retry-on-P2002 | `actions/products.ts`, `actions/pbis.ts`, `actions/stories.ts`, `lib/code.ts`, `lib/code-server.ts` | `docs/scrum4me-backlog.md` (ST-511) |
|
||||
| Entity codes (Product/PBI/Story) met auto-default + retry-on-P2002 | `actions/products.ts`, `actions/pbis.ts`, `actions/stories.ts`, `lib/code.ts`, `lib/code-server.ts` | `docs/backlog.md` (ST-511) |
|
||||
| `StoryLog.metadata` JSONB | `prisma/schema.prisma`, `prisma/migrations/20260426214905_add_story_log_metadata/`, `app/api/stories/[id]/log/route.ts` | `docs/API.md` |
|
||||
| Health- en bundled-context endpoints voor Claude Code | `app/api/health/route.ts`, `app/api/products/[id]/claude-context/route.ts` | `docs/API.md`, `CLAUDE.md` |
|
||||
| MCP-server gepubliceerd als aparte repo | `madhura68/scrum4me-mcp` (extern) | `CLAUDE.md` (sectie MCP-integratie), `docs/scrum4me-backlog.md` (M7) |
|
||||
| MCP-server gepubliceerd als aparte repo | `madhura68/mcp` (extern) | `CLAUDE.md` (sectie MCP-integratie), `docs/backlog.md` (M7) |
|
||||
|
||||
## Nieuwe preventieve regels
|
||||
|
||||
|
|
@ -159,7 +159,7 @@ API exposeert lowercase, DB houdt UPPER_SNAKE. Conversie uitsluitend via `lib/ta
|
|||
Naast bestaande lint/test/build-stappen voor MCP-relevante wijzigingen ook:
|
||||
|
||||
```bash
|
||||
# In scrum4me-mcp na een schema-wijziging in Scrum4Me:
|
||||
# In mcp na een schema-wijziging in Scrum4Me:
|
||||
npm run sync-schema && npm run prisma:generate && npm run typecheck
|
||||
```
|
||||
|
||||
|
|
@ -169,7 +169,7 @@ De wekelijkse cron doet dit automatisch, maar ad-hoc checken is nog steeds verst
|
|||
|
||||
`CLAUDE.md` is uitgebreid met:
|
||||
|
||||
- Specificatiedocumenten-rij voor `madhura68/scrum4me-mcp`
|
||||
- Specificatiedocumenten-rij voor `madhura68/mcp`
|
||||
- Dual-track workflow (Track A: MCP-prompt; Track B: manueel)
|
||||
- Twee patroon-rijen: `lib/task-status.ts` en client/server module-boundary
|
||||
- Vier nieuwe conventies: entity codes in commits, lowercase API-status, error-code split, test-pariteit
|
||||
|
|
|
|||
|
|
@ -572,7 +572,7 @@ sequenceDiagram
|
|||
D->>S: POST /api/auth/pair/claim<br/>Cookie: s4m_pair, body: { pairingId }
|
||||
S->>S: atomic UPDATE WHERE status=approved AND token-hash<br/>→ status=consumed
|
||||
S->>S: getIronSession.save { userId, paired: true, pairedExpiresAt }
|
||||
S-->>D: 200, Set-Cookie: scrum4me-session<br/>+ s4m_pair cleared
|
||||
S-->>D: 200, Set-Cookie: session<br/>+ s4m_pair cleared
|
||||
D->>D: redirect /dashboard
|
||||
```
|
||||
|
||||
|
|
@ -1194,7 +1194,7 @@ De bestaande `notify_task_change`-trigger op `tasks` vuurt automatisch de pg_not
|
|||
|
||||
### Hybride-ready
|
||||
|
||||
De huidige implementatie verwacht een lokale Claude Code-sessie die `wait_for_job` aanroept vanuit `madhura68/scrum4me-mcp`. Toekomstige uitbreiding naar Vercel Sandbox (serverless agent) vereist alleen een nieuw claim-endpoint — het datamodel en SSE-flow zijn ongewijzigd.
|
||||
De huidige implementatie verwacht een lokale Claude Code-sessie die `wait_for_job` aanroept vanuit `madhura68/mcp`. Toekomstige uitbreiding naar Vercel Sandbox (serverless agent) vereist alleen een nieuw claim-endpoint — het datamodel en SSE-flow zijn ongewijzigd.
|
||||
|
||||
## Environment variables
|
||||
|
||||
|
|
@ -31,7 +31,7 @@ De MVP is klaar wanneer Lars — de primaire persona — de volledige cyclus kan
|
|||
| M4: Claude Code REST API | Alle endpoints, tokenbeheer | ST-401 – ST-410 |
|
||||
| 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 |
|
||||
| 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 `mcp`) | ST-701 – ST-710 |
|
||||
| M8: Realtime Solo Paneel | Live updates voor stories/tasks via SSE + Postgres LISTEN/NOTIFY | ST-801 – ST-806 |
|
||||
| M9: Actief Product Backlog | Persistente actieve PB-keuze, gesplitste navigatie, disabled-states | ST-901 – ST-907 |
|
||||
| M10: Password-loze inlog via QR-pairing | Mobiel als bevestigingskanaal voor desktop-login zonder wachtwoord | ST-1001 – ST-1008 |
|
||||
|
|
@ -481,9 +481,9 @@ De MVP is klaar wanneer Lars — de primaire persona — de volledige cyclus kan
|
|||
|
||||
### M7: MCP-server voor Claude Code
|
||||
|
||||
Aparte repo: [`madhura68/scrum4me-mcp`](https://github.com/madhura68/scrum4me-mcp). Native Prisma-toegang (geen REST-tussenlaag), stdio-transport, Scrum4Me-schema gevendord als git submodule. Tokens hergebruikt uit `api_tokens`. v1 is alleen dev-flow tools — geen PBI/sprint-creatie of profielbeheer.
|
||||
Aparte repo: [`madhura68/mcp`](https://github.com/madhura68/mcp). Native Prisma-toegang (geen REST-tussenlaag), stdio-transport, Scrum4Me-schema gevendord als git submodule. Tokens hergebruikt uit `api_tokens`. v1 is alleen dev-flow tools — geen PBI/sprint-creatie of profielbeheer.
|
||||
|
||||
- [x] **ST-701** Repo-skeleton scrum4me-mcp
|
||||
- [x] **ST-701** Repo-skeleton mcp
|
||||
- npm init, tsconfig strict, .gitignore, MCP SDK 1.29, Prisma 7, zod, tsx; lege `src/index.ts` die op stdio start
|
||||
- Done when: `npx tsx src/index.ts` print `running on stdio` zonder crash; `tsc --noEmit` slaagt
|
||||
|
||||
|
|
@ -555,7 +555,7 @@ Filtering server-side: alleen events binnen de actieve sprint van een product wa
|
|||
- Done when: twee tabs van Solo Paneel — mutatie in tab A komt binnen 1–2s in tab B zonder refresh
|
||||
|
||||
- [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)
|
||||
- Sectie "Realtime updates" in `docs/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).
|
||||
|
|
@ -568,7 +568,7 @@ Eén "actief Product Backlog" per gebruiker — persistent in DB. De NavBar word
|
|||
|
||||
- [x] **ST-901** Database — `user.active_product_id`
|
||||
- Voeg `active_product_id String? @db.Uuid` toe aan `User` met FK naar `Product.id` en `onDelete: SetNull`; migratie `add_user_active_product_id`; index op `active_product_id` voor join-performance
|
||||
- Done when: `npx prisma migrate dev` slaagt; `prisma studio` toont kolom; `npx prisma validate` zonder fouten; submodule `vendor/scrum4me` in scrum4me-mcp draait `prisma generate` + `tsc --noEmit` zonder fouten
|
||||
- Done when: `npx prisma migrate dev` slaagt; `prisma studio` toont kolom; `npx prisma validate` zonder fouten; submodule `vendor/scrum4me` in mcp draait `prisma generate` + `tsc --noEmit` zonder fouten
|
||||
|
||||
- [x] **ST-902** Server Actions — actief product zetten en wissen
|
||||
- `actions/active-product.ts` met `setActiveProduct(productId)` en `clearActiveProduct()`; Zod + auth + `productAccessFilter`; demo-gebruikers mogen wisselen (sessie-effect alleen, geen DB-write); `archiveProduct` en `leaveProduct` zetten `active_product_id` op `null` als het hetzelfde product betreft
|
||||
|
|
@ -592,7 +592,7 @@ Eén "actief Product Backlog" per gebruiker — persistent in DB. De NavBar word
|
|||
|
||||
- [x] **ST-907** Documentatie en tests
|
||||
- Functional spec: nieuw hoofdstuk "Actief Product Backlog" (concept, menugedrag, edge cases); README: navigatie-screenshot bijwerken; `docs/patterns/` indien nieuwe patroon (n.v.t. tenzij dropdown-switcher een herbruikbaar component wordt); jest-tests in `__tests__/actions/active-product.test.ts` voor setActive (toegang, demo, archived); Playwright/manueel scenario: log in → activeer PB → wissel via dropdown → archiveer → verifieer auto-clear
|
||||
- Done when: `npm run lint && npx tsc --noEmit && npm test && npm run build` groen; spec-secties geschreven; `vendor/scrum4me`-submodule in scrum4me-mcp gesynced
|
||||
- Done when: `npm run lint && npx tsc --noEmit && npm test && npm run build` groen; spec-secties geschreven; `vendor/scrum4me`-submodule in mcp gesynced
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -649,13 +649,13 @@ Volledige flow + threat-model: `docs/patterns/qr-login.md` (op te leveren in ST-
|
|||
- [ ] **ST-1007** Desktop UI: QR-render + SSE-listener op `/login`
|
||||
- **Dependency:** `qrcode.react` (client SVG; mobileSecret blijft op desktop in JS-geheugen)
|
||||
- **`app/login/qr-login-button.tsx`:** Client Component; klik → POST `pair/start` (`credentials: 'same-origin'` zodat `s4m_pair`-cookie wordt geaccepteerd) → render QR met `qrUrl` (fragment-URL) → open `EventSource('/api/auth/pair/stream/<pairingId>', { withCredentials: true })` → bij `approved` event POST `pair/claim` (cookie-only) → bij succes `router.push('/dashboard')`; aftellende timer (2 min); bij timeout "Vernieuwen"-knop; cleanup bij unmount/redirect
|
||||
- **`app/login/page.tsx`:** knop "Inloggen via mobiel" naast bestaande wachtwoord-form (MD3-tokens uit `docs/scrum4me-styling.md`)
|
||||
- **`app/login/page.tsx`:** knop "Inloggen via mobiel" naast bestaande wachtwoord-form (MD3-tokens uit `docs/styling.md`)
|
||||
- A11y: QR heeft alt-tekst met de URL voor screenreaders/copy-paste (de hash-suffix is onderdeel van die alt-tekst, niet van de page-URL die in browsergeschiedenis komt)
|
||||
- Done when: end-to-end happy path werkt op localhost (twee browsers): A toont QR → B scant + bevestigt → A redirect naar `/dashboard` met `session.paired === true`; QR vernieuwt na expiry; geen secret zichtbaar in DevTools Network-tab onder URL-kolommen
|
||||
|
||||
- [ ] **ST-1008** Documentatie + acceptatietest
|
||||
- **`docs/API.md`:** drie nieuwe endpoints (start/stream/claim) met request/response, cookie-mechaniek, foutcodes (400/401/403/404/410/422/429), curl-voorbeelden inclusief `--cookie-jar`
|
||||
- **`docs/scrum4me-architecture.md`:** sectie "QR-pairing flow" met sequence-diagram + threat-model; expliciete subsectie *"Waarom geen secret in URL"* — fragments worden niet naar server gestuurd; SSE/claim authenticeren via HttpOnly cookie zodat secret-materiaal niet in access logs / reverse-proxy logs / observability-tools / browsergeschiedenis kan belanden
|
||||
- **`docs/architecture.md`:** sectie "QR-pairing flow" met sequence-diagram + threat-model; expliciete subsectie *"Waarom geen secret in URL"* — fragments worden niet naar server gestuurd; SSE/claim authenticeren via HttpOnly cookie zodat secret-materiaal niet in access logs / reverse-proxy logs / observability-tools / browsergeschiedenis kan belanden
|
||||
- **`docs/patterns/qr-login.md`:** nieuw pattern-doc voor toekomstige features die hetzelfde unauth-SSE-via-pre-auth-cookie-patroon willen hergebruiken
|
||||
- **`CLAUDE.md`:** verwijzing naar het nieuwe pattern-doc in de patterns-tabel
|
||||
- **Acceptatietest:** zeven scenario's handmatig: happy path, demo-block, replay, expiry tijdens pending, expiry tussen approve+claim, ontbrekende cookie op SSE/claim, secret niet aanwezig in `nginx`/Vercel access logs (controle via runtime-logs MCP-tool)
|
||||
|
|
@ -677,7 +677,7 @@ Persistent vraag-antwoord-kanaal tussen Claude Code (via MCP) en de actieve Scru
|
|||
- **Migratie:** `prisma migrate dev --name add_claude_questions`
|
||||
- Done when: migratie slaagt; `psql LISTEN scrum4me_changes` toont nieuwe `entity: 'question'`-payload bij INSERT; bestaande solo-realtime-flow ongewijzigd; submodule sync na merge
|
||||
|
||||
- [ ] **ST-1102** MCP-tools voor Claude (in scrum4me-mcp-repo)
|
||||
- [ ] **ST-1102** MCP-tools voor Claude (in mcp-repo)
|
||||
- **`ask_user_question`** (write): input `{ story_id, question, options?, task_id?, wait_seconds? }`; insert pairing + optioneel pollen tot `wait_seconds` (max 600); demo-blok via `requireWriteAccess`; access-check via `userCanAccessProduct(story.product_id, ...)`
|
||||
- **`get_question_answer`** (read): haalt status + antwoord op een specifieke vraag op
|
||||
- **`list_open_questions`** (read): lijst van eigen vragen (laatste 50, status open of answered)
|
||||
|
|
@ -702,7 +702,7 @@ Persistent vraag-antwoord-kanaal tussen Claude Code (via MCP) en de actieve Scru
|
|||
- **`stores/notifications-store.ts`** — Zustand store volgens `solo-store.ts`-patroon: `init`, `add`, `update`, `remove`, `optimisticAnswer`, `rollbackAnswer`; selectors `openCount`, `forYouCount`
|
||||
- **`lib/realtime/use-notifications-realtime.ts`** — analoog aan `useSoloRealtime`; EventSource op `/api/realtime/notifications` met reconnect-backoff
|
||||
- **`components/notifications/notifications-bridge.tsx`** — Server Component die initial-data fetcht en aan store geeft; mount in `app/(app)/layout.tsx` naast `<SoloRealtimeBridge />`
|
||||
- **`components/shared/notifications-bell.tsx`** — Bell-icon (Lucide) met badge in NavBar (links van avatar); MD3-tokens uit `docs/scrum4me-styling.md`
|
||||
- **`components/shared/notifications-bell.tsx`** — Bell-icon (Lucide) met badge in NavBar (links van avatar); MD3-tokens uit `docs/styling.md`
|
||||
- **`components/notifications/notifications-sheet.tsx`** — shadcn Sheet van rechts; lijst gegroepeerd per product; story-assignee krijgt visuele *"wacht op jou"*-emphase
|
||||
- **`components/notifications/answer-modal.tsx`** — shadcn Dialog; story-context-link, vraag-tekst, RadioGroup (als options) of Textarea (free-text), submit via `useTransition` + Server Action; demo-blok met tooltip
|
||||
- Done when: bell + badge zichtbaar; klik opent Sheet met items; submit verwijdert item optimistisch; tweede tab van zelfde user ziet nieuwe vraag binnen 1-2s; demo-modus rendert maar Verstuur disabled
|
||||
|
|
@ -722,7 +722,7 @@ Persistent vraag-antwoord-kanaal tussen Claude Code (via MCP) en de actieve Scru
|
|||
|
||||
- [ ] **ST-1108** Documentatie + acceptatietest
|
||||
- **`docs/API.md`:** secties "SSE — Notifications" + "Cron — Expire questions" met curl-voorbeelden
|
||||
- **`docs/scrum4me-architecture.md`:** sectie "Vraag-antwoord-kanaal Claude ↔ user" met Mermaid sequence-diagram + threat-model + "Waarom hergebruik scrum4me_changes-kanaal"
|
||||
- **`docs/architecture.md`:** sectie "Vraag-antwoord-kanaal Claude ↔ user" met Mermaid sequence-diagram + threat-model + "Waarom hergebruik scrum4me_changes-kanaal"
|
||||
- **`docs/patterns/claude-question-channel.md`:** nieuw herbruikbaar pattern-doc voor toekomstige bidirectionele async-communicatie tussen MCP-agents en interactieve users
|
||||
- **`CLAUDE.md`:** rij in Implementatiepatronen-tabel voor het nieuwe pattern
|
||||
- **Acceptatietest** zes scenario's: sync happy (wait_seconds), async happy (geen wait), demo-block, access-isolation, expiry via cron, race op double-submit
|
||||
|
|
@ -476,7 +476,7 @@ Wanneer Claude Code tijdens het implementeren van een story een keuze niet uit d
|
|||
**Data:**
|
||||
- Nieuw: `claude_questions` (id, story_id, task_id?, product_id, asked_by, question, options?, status, answer?, answered_by?, answered_at?, created_at, expires_at)
|
||||
- Postgres-trigger op `claude_questions` publiceert via `pg_notify('scrum4me_changes', ...)`
|
||||
- Nieuwe MCP-tools in scrum4me-mcp: `ask_user_question`, `get_question_answer`, `list_open_questions`, `cancel_question`
|
||||
- Nieuwe MCP-tools in mcp: `ask_user_question`, `get_question_answer`, `list_open_questions`, `cancel_question`
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -17,7 +17,7 @@ source of truth is the committed `.md` file — rendered on GitHub, read by
|
|||
agents (Claude Code, Codex) directly from the file system, and indexed by
|
||||
`scripts/generate-docs-index.mjs`.
|
||||
|
||||
Note: the `scrum4me-mcp` server does **not** expose `docs/` content. Its
|
||||
Note: the `mcp` server does **not** expose `docs/` content. Its
|
||||
20 tools serve database state (products, sprints, stories, tasks, jobs,
|
||||
questions) via Prisma. Documentation reaches the agent only through the
|
||||
file-system tools, so the canonical Markdown is the one and only channel.
|
||||
|
|
@ -53,7 +53,7 @@ Reasons:
|
|||
|
||||
### Two repos, two vaults
|
||||
|
||||
The MCP server lives in a separate repo (`scrum4me-mcp`) with its own
|
||||
The MCP server lives in a separate repo (`mcp`) with its own
|
||||
`CLAUDE.md`, tools, and tests. Open it as a **separate** Obsidian vault
|
||||
when you work there. Each `.obsidian/` directory is per-folder and stays
|
||||
gitignored on both sides; cross-repo notes belong in whichever vault you
|
||||
|
|
@ -62,7 +62,7 @@ opened first, not in some shared third location.
|
|||
Schema-related ADRs are an exception: the MCP server consumes the
|
||||
Scrum4Me Prisma schema via the `vendor/scrum4me/` git submodule, so the
|
||||
*decision* about the schema belongs in this repo's `docs/adr/`. The
|
||||
mirror in `scrum4me-mcp` only needs an `npm run sync-schema` after the
|
||||
mirror in `mcp` only needs an `npm run sync-schema` after the
|
||||
ADR lands here, not its own ADR.
|
||||
|
||||
## Link style
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ Specifiek voor M11. Kopieer en pas aan:
|
|||
+ `answer-modal.tsx`: Bell met badge, slide-over met item-list, Dialog
|
||||
met free-text/options-radio
|
||||
|
||||
### MCP-tools (scrum4me-mcp)
|
||||
### MCP-tools (mcp)
|
||||
- `src/tools/ask-user-question.ts`: write-tool met optionele `wait_seconds`-
|
||||
polling (intern setInterval tot status verandert of timeout)
|
||||
- `src/tools/get-question-answer.ts`: read-tool voor latere session-pickup
|
||||
|
|
@ -146,7 +146,7 @@ Specifiek voor M11. Kopieer en pas aan:
|
|||
|
||||
## Referenties
|
||||
|
||||
- Volledige flow + threat-model: `docs/scrum4me-architecture.md` § Vraag-
|
||||
- Volledige flow + threat-model: `docs/architecture.md` § Vraag-
|
||||
antwoord-kanaal Claude ↔ user
|
||||
- Endpoint-contract: `docs/API.md` § Notifications + Cron
|
||||
- LISTEN/NOTIFY-pattern: `app/api/realtime/solo/route.ts` (M8 ST-802) — zelfde
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ Deze pagina is **bindend** voor elke create/edit/detail-dialog in Scrum4Me, onge
|
|||
|
||||
> **Doel:** elke dialog voelt identiek aan voor de gebruiker, hergebruikt dezelfde primitives, en heeft de drielaagse demo-policy + auth-scoping standaard ingebakken.
|
||||
|
||||
Voor entity-specifieke afwijkingen of velden: schrijf één begeleidende doc per entiteit (zie sectie [§ Per-entiteit profile](#per-entiteit-profile-verplicht)). Voorbeeld: `docs/scrum4me-task-dialog.md` is het Task-profiel.
|
||||
Voor entity-specifieke afwijkingen of velden: schrijf één begeleidende doc per entiteit (zie sectie [§ Per-entiteit profile](#per-entiteit-profile-verplicht)). Voorbeeld: `docs/task-dialog.md` is het Task-profiel.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -25,10 +25,10 @@ Voor entity-specifieke afwijkingen of velden: schrijf één begeleidende doc per
|
|||
| 1.2 | Gebruik composition via de **`render`-prop** (zie `CLAUDE.md` "UI Library Conventions"). Nooit Radix' `asChild`. | Project gebruikt `@base-ui/react`, niet Radix |
|
||||
| 1.3 | Mode (`create` vs `edit` vs `detail`) wordt afgeleid uit één input — een prop, een `state`-object of een `searchParam`. **Niet** twee aparte componenten. | Voorkomt code-duplicatie en inconsistente labels/footer-layouts |
|
||||
| 1.4 | Auth-scoping op elke server action via `productAccessFilter(userId)` (of het scope-helper-equivalent). Cross-tenant writes mogen onmogelijk zijn. | `CLAUDE.md` "Toegangsmodel" + `docs/patterns/server-action.md` |
|
||||
| 1.5 | **Drielaagse demo-policy** (verplicht — zie § 6) op elke write-actie. | `CLAUDE.md` "Demo-check" + `docs/scrum4me-architecture.md#demo-user-policy` |
|
||||
| 1.5 | **Drielaagse demo-policy** (verplicht — zie § 6) op elke write-actie. | `CLAUDE.md` "Demo-check" + `docs/architecture.md#demo-user-policy` |
|
||||
| 1.6 | Validatie via één gedeeld zod-schema (`lib/schemas/<entity>.ts`) — gebruikt door zowel form als server action. | `CLAUDE.md` "Validatie" |
|
||||
| 1.7 | Foutcodes volgen de project-conventie (§ 5). | `CLAUDE.md` "Foutcodes API" |
|
||||
| 1.8 | Geen willekeurige Tailwind-kleuren (`bg-blue-500` etc.). Alleen MD3-tokens uit `app/styles/theme.css`. | `docs/scrum4me-styling.md` |
|
||||
| 1.8 | Geen willekeurige Tailwind-kleuren (`bg-blue-500` etc.). Alleen MD3-tokens uit `app/styles/theme.css`. | `docs/styling.md` |
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -304,7 +304,7 @@ Voor state-based pattern: het record komt al uit de parent (in-memory store of s
|
|||
|
||||
## 12 — Per-entiteit profile (verplicht)
|
||||
|
||||
Voor elke entiteit met een dialog hoort één profiel-doc te bestaan: `docs/<scrum4me-<entity>-dialog>.md` (of vergelijkbaar). Het profiel **vult de generieke spec aan** en bevat **alleen** de entity-specifieke onderdelen.
|
||||
Voor elke entiteit met een dialog hoort één profiel-doc te bestaan: `docs/<<entity>-dialog>.md` (of vergelijkbaar). Het profiel **vult de generieke spec aan** en bevat **alleen** de entity-specifieke onderdelen.
|
||||
|
||||
### Verplichte secties van het entity-profile
|
||||
|
||||
|
|
@ -389,8 +389,8 @@ Reviewer en bouwer lopen deze door vóór merge:
|
|||
## 15 — Referenties
|
||||
|
||||
- `CLAUDE.md` — UI Library Conventions, Demo-check, Foutcodes API, Validatie
|
||||
- `docs/scrum4me-styling.md` — MD3-tokens, kleurklassen
|
||||
- `docs/scrum4me-architecture.md` — Demo user policy, scope-helpers
|
||||
- `docs/styling.md` — MD3-tokens, kleurklassen
|
||||
- `docs/architecture.md` — Demo user policy, scope-helpers
|
||||
- `docs/patterns/server-action.md` — Server Action template (auth + Zod)
|
||||
- `docs/patterns/zustand-optimistic.md` — voor lijst-views die de dialog aanroepen
|
||||
- `docs/scrum4me-task-dialog.md` — voorbeeld-profile voor entiteit "Task"
|
||||
- `docs/task-dialog.md` — voorbeeld-profile voor entiteit "Task"
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ export interface SessionData {
|
|||
|
||||
export const sessionOptions: SessionOptions = {
|
||||
password: process.env.SESSION_SECRET!,
|
||||
cookieName: 'scrum4me-session',
|
||||
cookieName: 'session',
|
||||
cookieOptions: {
|
||||
secure: process.env.NODE_ENV === 'production',
|
||||
httpOnly: true,
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ Drie tijden in escalerende volgorde, alle korter dan de reguliere sessie:
|
|||
|
||||
## Referenties
|
||||
|
||||
- Volledige flow + threat-model: `docs/scrum4me-architecture.md` § QR-pairing flow
|
||||
- Volledige flow + threat-model: `docs/architecture.md` § QR-pairing flow
|
||||
- Endpoint-contract: `docs/API.md` § Auth — QR-pairing
|
||||
- LISTEN/NOTIFY-pattern: `app/api/realtime/solo/route.ts` (M8 ST-802) — zelfde
|
||||
ReadableStream + heartbeat + hard-close + abort-cleanup, alleen ander channel
|
||||
|
|
|
|||
|
|
@ -124,5 +124,5 @@ Specifiek voor PbiDialog (boven op de algemene out-of-scope-lijst in `docs/patte
|
|||
- `components/shared/pbi-status-select.tsx` — PBI-status-select
|
||||
- `lib/task-status.ts` — `PbiStatusApi`-mapper
|
||||
- `docs/patterns/dialog.md` — generieke spec (bron-of-truth)
|
||||
- `docs/scrum4me-architecture.md` — datamodel `Pbi`
|
||||
- `docs/scrum4me-styling.md` — MD3-tokens, status- en priority-kleuren
|
||||
- `docs/architecture.md` — datamodel `Pbi`
|
||||
- `docs/styling.md` — MD3-tokens, status- en priority-kleuren
|
||||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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**
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 } }`
|
||||
|
|
|
|||
|
|
@ -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 1–2s 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
|
||||
|
||||
|
|
|
|||
|
|
@ -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) |
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ last_updated: 2026-05-03
|
|||
>
|
||||
> **Scope v1:** geen REVIEW-status, geen multi-product aggregatie, geen taak-level overrides. Story-level assignment volstaat. Desktop-first conform ST-606 — onder 1024px tonen we dezelfde "te smal scherm"-melding als de rest van de app.
|
||||
>
|
||||
> **Versie:** v2 — verwerkt antwoorden uit `scrum4me-backlog.md` over sessie-flag, bestaande Server Actions en desktop-first scope.
|
||||
> **Versie:** v2 — verwerkt antwoorden uit `backlog.md` over sessie-flag, bestaande Server Actions en desktop-first scope.
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -167,5 +167,5 @@ Specifiek voor StoryDialog (boven op de algemene out-of-scope-lijst in `docs/pat
|
|||
- `components/markdown.tsx` — gedeelde markdown-wrapper
|
||||
- `lib/task-status.ts` — status-enum-mapper
|
||||
- `docs/patterns/dialog.md` — generieke spec (bron-of-truth)
|
||||
- `docs/scrum4me-architecture.md` — datamodel `Story`
|
||||
- `docs/scrum4me-styling.md` — MD3-tokens, status- en priority-kleuren
|
||||
- `docs/architecture.md` — datamodel `Story`
|
||||
- `docs/styling.md` — MD3-tokens, status- en priority-kleuren
|
||||
|
|
@ -130,6 +130,6 @@ Specifiek voor TaskDialog (boven op de algemene out-of-scope-lijst in `docs/patt
|
|||
## Referenties
|
||||
|
||||
- `docs/patterns/dialog.md` — generieke spec (bron-of-truth voor alles wat hier niet beschreven is)
|
||||
- `docs/scrum4me-architecture.md` — datamodel `Task`
|
||||
- `docs/scrum4me-styling.md` — MD3-tokens, status- en priority-kleuren
|
||||
- `docs/architecture.md` — datamodel `Task`
|
||||
- `docs/styling.md` — MD3-tokens, status- en priority-kleuren
|
||||
- `lib/task-status.ts` — enum-mapper DB ↔ API
|
||||
Loading…
Add table
Add a link
Reference in a new issue