diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 41bd3a1..f065e36 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -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, diff --git a/AGENTS.md b/AGENTS.md index f427c45..1f9f198 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -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. diff --git a/CLAUDE.md b/CLAUDE.md index 9c68dc4..4bd92a2 100644 --- a/CLAUDE.md +++ b/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/-*.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 ``. 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 ``. 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) diff --git a/README.md b/README.md index 9f86591..944608f 100644 --- a/README.md +++ b/README.md @@ -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) diff --git a/docs/API.md b/docs/API.md index 1fe6d32..4065a47 100644 --- a/docs/API.md +++ b/docs/API.md @@ -401,13 +401,13 @@ curl -N -i -b /tmp/jar http://localhost:3000/api/auth/pair/stream/ ### `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` diff --git a/docs/INDEX.md b/docs/INDEX.md index 89575cb..0a4a44b 100644 --- a/docs/INDEX.md +++ b/docs/INDEX.md @@ -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 | diff --git a/docs/agent-instruction-audit.md b/docs/agent-instruction-audit.md index ab69675..c0bf687 100644 --- a/docs/agent-instruction-audit.md +++ b/docs/agent-instruction-audit.md @@ -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 diff --git a/docs/scrum4me-architecture.md b/docs/architecture.md similarity index 99% rename from docs/scrum4me-architecture.md rename to docs/architecture.md index 9d94693..7c18ead 100644 --- a/docs/scrum4me-architecture.md +++ b/docs/architecture.md @@ -572,7 +572,7 @@ sequenceDiagram D->>S: POST /api/auth/pair/claim
Cookie: s4m_pair, body: { pairingId } S->>S: atomic UPDATE WHERE status=approved AND token-hash
→ status=consumed S->>S: getIronSession.save { userId, paired: true, pairedExpiresAt } - S-->>D: 200, Set-Cookie: scrum4me-session
+ s4m_pair cleared + S-->>D: 200, Set-Cookie: session
+ 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 diff --git a/docs/scrum4me-backlog.md b/docs/backlog.md similarity index 97% rename from docs/scrum4me-backlog.md rename to docs/backlog.md index 60a44a4..6b1bdda 100644 --- a/docs/scrum4me-backlog.md +++ b/docs/backlog.md @@ -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/', { 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 `` - - **`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 diff --git a/docs/scrum4me-functional-spec.md b/docs/functional.md similarity index 99% rename from docs/scrum4me-functional-spec.md rename to docs/functional.md index 406f19e..b7ee8d9 100644 --- a/docs/scrum4me-functional-spec.md +++ b/docs/functional.md @@ -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` --- diff --git a/docs/obsidian-authoring.md b/docs/obsidian-authoring.md index 61aa6b7..0ebf44f 100644 --- a/docs/obsidian-authoring.md +++ b/docs/obsidian-authoring.md @@ -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 diff --git a/docs/patterns/claude-question-channel.md b/docs/patterns/claude-question-channel.md index c810928..e2dd9bf 100644 --- a/docs/patterns/claude-question-channel.md +++ b/docs/patterns/claude-question-channel.md @@ -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 diff --git a/docs/patterns/dialog.md b/docs/patterns/dialog.md index db4a387..d355359 100644 --- a/docs/patterns/dialog.md +++ b/docs/patterns/dialog.md @@ -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/.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/-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/<-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" diff --git a/docs/patterns/iron-session.md b/docs/patterns/iron-session.md index bb80e8f..be71b66 100644 --- a/docs/patterns/iron-session.md +++ b/docs/patterns/iron-session.md @@ -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, diff --git a/docs/patterns/qr-login.md b/docs/patterns/qr-login.md index 2253017..21160f0 100644 --- a/docs/patterns/qr-login.md +++ b/docs/patterns/qr-login.md @@ -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 diff --git a/docs/scrum4me-pbi-dialog.md b/docs/pbi-dialog.md similarity index 97% rename from docs/scrum4me-pbi-dialog.md rename to docs/pbi-dialog.md index 5e297ea..2f453c5 100644 --- a/docs/scrum4me-pbi-dialog.md +++ b/docs/pbi-dialog.md @@ -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 diff --git a/docs/scrum4me-personas.md b/docs/personas.md similarity index 100% rename from docs/scrum4me-personas.md rename to docs/personas.md diff --git a/docs/plans/M10-qr-pairing-login.md b/docs/plans/M10-qr-pairing-login.md index f00e94c..000bad7 100644 --- a/docs/plans/M10-qr-pairing-login.md +++ b/docs/plans/M10-qr-pairing-login.md @@ -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/_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 ``` - 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. diff --git a/docs/plans/M11-claude-questions.md b/docs/plans/M11-claude-questions.md index 7da48b0..35fa267 100644 --- a/docs/plans/M11-claude-questions.md +++ b/docs/plans/M11-claude-questions.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/_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 diff --git a/docs/plans/M9-active-product-backlog.md b/docs/plans/M9-active-product-backlog.md index 1c9ae50..6ad7d55 100644 --- a/docs/plans/M9-active-product-backlog.md +++ b/docs/plans/M9-active-product-backlog.md @@ -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** diff --git a/docs/plans/ST-1109-pbi-status.md b/docs/plans/ST-1109-pbi-status.md index 6b160b5..19cfc4c 100644 --- a/docs/plans/ST-1109-pbi-status.md +++ b/docs/plans/ST-1109-pbi-status.md @@ -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) diff --git a/docs/plans/ST-1110-demo-readonly.md b/docs/plans/ST-1110-demo-readonly.md index d6c77a6..78fa669 100644 --- a/docs/plans/ST-1110-demo-readonly.md +++ b/docs/plans/ST-1110-demo-readonly.md @@ -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 diff --git a/docs/plans/ST-1111-claude-job-trigger.md b/docs/plans/ST-1111-claude-job-trigger.md index dd18563..b918369 100644 --- a/docs/plans/ST-1111-claude-job-trigger.md +++ b/docs/plans/ST-1111-claude-job-trigger.md @@ -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 diff --git a/docs/plans/Tweede Claude Agent — Planning Agent.md b/docs/plans/Tweede Claude Agent — Planning Agent.md index d59d925..106c9e6 100644 --- a/docs/plans/Tweede Claude Agent — Planning Agent.md +++ b/docs/plans/Tweede Claude Agent — Planning Agent.md @@ -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. diff --git a/docs/plans/archive/2026-04-27-claude-md-workflow-update.md b/docs/plans/archive/2026-04-27-claude-md-workflow-update.md index f434d4f..a5306c1 100644 --- a/docs/plans/archive/2026-04-27-claude-md-workflow-update.md +++ b/docs/plans/archive/2026-04-27-claude-md-workflow-update.md @@ -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 diff --git a/docs/plans/archive/2026-04-27-insert-milestone-tool.md b/docs/plans/archive/2026-04-27-insert-milestone-tool.md index ddd2522..3a45f1b 100644 --- a/docs/plans/archive/2026-04-27-insert-milestone-tool.md +++ b/docs/plans/archive/2026-04-27-insert-milestone-tool.md @@ -17,12 +17,12 @@ Eén commando dat een specifieke milestone (PBI + stories + tasks) uit de backlo Twee bronnen denkbaar: - **`.Plans/-.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/.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 not found in docs/scrum4me-backlog.md" als ie er niet in staat +3. Zoek milestone op `key`; faal helder met "milestone 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 } }` diff --git a/docs/plans/archive/2026-04-27-m8-realtime-solo.md b/docs/plans/archive/2026-04-27-m8-realtime-solo.md index 27ca6ab..11ef2fc 100644 --- a/docs/plans/archive/2026-04-27-m8-realtime-solo.md +++ b/docs/plans/archive/2026-04-27-m8-realtime-solo.md @@ -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 diff --git a/docs/plans/docs-restructure-ai-lookup.md b/docs/plans/docs-restructure-ai-lookup.md index 543473d..81f1560 100644 --- a/docs/plans/docs-restructure-ai-lookup.md +++ b/docs/plans/docs-restructure-ai-lookup.md @@ -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) | diff --git a/docs/plans/docs-restructure-pbi-spec.md b/docs/plans/docs-restructure-pbi-spec.md index f9247b6..9b6e231 100644 --- a/docs/plans/docs-restructure-pbi-spec.md +++ b/docs/plans/docs-restructure-pbi-spec.md @@ -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():` 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-` (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():` 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" diff --git a/docs/scrum4me-product-backlog.md b/docs/product-backlog.md similarity index 100% rename from docs/scrum4me-product-backlog.md rename to docs/product-backlog.md diff --git a/docs/solo-paneel-spec.md b/docs/solo-paneel-spec.md index c82fc85..261ca92 100644 --- a/docs/solo-paneel-spec.md +++ b/docs/solo-paneel-spec.md @@ -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. --- diff --git a/docs/scrum4me-story-dialog.md b/docs/story-dialog.md similarity index 98% rename from docs/scrum4me-story-dialog.md rename to docs/story-dialog.md index 9926650..69e957b 100644 --- a/docs/scrum4me-story-dialog.md +++ b/docs/story-dialog.md @@ -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 diff --git a/docs/scrum4me-styling.md b/docs/styling.md similarity index 100% rename from docs/scrum4me-styling.md rename to docs/styling.md diff --git a/docs/scrum4me-task-dialog.md b/docs/task-dialog.md similarity index 97% rename from docs/scrum4me-task-dialog.md rename to docs/task-dialog.md index c1431fd..7c4a636 100644 --- a/docs/scrum4me-task-dialog.md +++ b/docs/task-dialog.md @@ -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 diff --git a/docs/scrum4me-test-plan.md b/docs/test-plan.md similarity index 100% rename from docs/scrum4me-test-plan.md rename to docs/test-plan.md