docs(data-model): sync schema gaps — sprint dates, task verify_required/repo_url, product auto_pr, claude_jobs pr_url/retry_count, PBI notify trigger

This commit is contained in:
Janpeter Visser 2026-05-03 03:31:23 +02:00
parent 152ed44e84
commit fcff3fd0fa
2 changed files with 24 additions and 3 deletions

View file

@ -107,11 +107,13 @@ claude_jobs
claimed_by_token_id (FK → api_tokens, nullable)
claimed_at, started_at, finished_at
plan_snapshot: String? — bevroren snapshot van task.implementation_plan bij claim
branch, pushed_at, summary, error
branch, pushed_at, pr_url, summary, error
retry_count: Int (default 0) — telt pogingen na FAILED reset
verify_result: VerifyResult? (ALIGNED|PARTIAL|EMPTY|DIVERGENT)
@@index([user_id, status])
@@index([task_id, status])
@@index([status, claimed_at]) — voor stale-claim cleanup
@@index([status, finished_at]) — voor cleanup/rapportage queries
```
**VerifyResult enum** — vergelijking van de git-diff in de worktree versus `plan_snapshot`:
@ -123,7 +125,9 @@ claude_jobs
| `EMPTY` | Geen codewijzigingen in de diff — blocker, tenzij de task `verify_only=true` heeft |
| `DIVERGENT` | Diff bevat significant meer dan het plan — review extra zorgvuldig |
**`verify_only` op Task** — wanneer `true` mag de agent de task als DONE markeren ook als de diff leeg is. Bedoeld voor taken die expliciet om verificatie (niet implementatie) vragen.
**`verify_only` op Task** — wanneer `true` mag de agent de task als DONE markeren ook als de diff leeg is. Bedoeld voor taken die expliciet om verificatie (niet implementatie) vragen. Zie ook `verify_required` in `data-model.md` voor de enum-variant die de drempel fijner instelt.
**`pr_url` op ClaudeJob** — URL van de automatisch aangemaakte PR na push. Aanwezig wanneer `product.auto_pr = true` en de push slaagde; anders `null`.
**`pushed_at`** — timestamp waarop de agent de feature-branch naar origin heeft gepusht. Aanwezig zodra de push slaagde; absent als er geen wijzigingen waren of de push mislukte.
@ -153,6 +157,10 @@ Twee Postgres-triggers houden `task.status` in sync met `claude_job.status` zoda
De bestaande `notify_task_change`-trigger op `tasks` vuurt automatisch de pg_notify naar `/api/realtime/solo` zodat de UI direct synct — geen extra plumbing in de SSE-handler nodig.
### PBI realtime notify
`prisma/migrations/20260502190200_add_pbi_notify_trigger` voegt `notify_pbi_change()` toe plus trigger `pbis_notify_change` (AFTER INSERT/UPDATE/DELETE op `pbis`). Payload: `{ op, entity:'pbi', id, product_id, title, code, priority, status, sort_order, created_at, changed_fields? }`. Clients die het `scrum4me_changes`-kanaal luisteren ontvangen zo backlog-mutaties zonder polling. De Solo-SSE-route filtert `entity:'pbi'`-events op `product_id`; de backlog-store verwerkt ze via `handleBacklogEvent()`.
### 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.

View file

@ -63,7 +63,8 @@ related: [auth-and-sessions.md](./auth-and-sessions.md)
| user_id | String | FK → users, not null | |
| name | String | not null, max 200 | Uniek per gebruiker |
| description | String | nullable, max 1000 | |
| repo_url | String | nullable | Gevalideerde URL |
| repo_url | String | nullable | Gevalideerde URL; default voor MCP-job branch/push |
| auto_pr | Boolean | default false | Wanneer true opent de agent automatisch een PR na push |
| definition_of_done | String | not null, max 500 | Vaste instelling per product |
| archived | Boolean | default false | |
| created_at | DateTime | default now() | |
@ -143,6 +144,8 @@ related: [auth-and-sessions.md](./auth-and-sessions.md)
| product_id | String | FK → products (cascade delete) | |
| sprint_goal | String | not null, max 500 | |
| status | Enum | ACTIVE \| COMPLETED | |
| start_date | Date | nullable | Geplande startdatum (UI-weergave, niet enforced) |
| end_date | Date | nullable | Geplande einddatum (UI-weergave, niet enforced) |
| created_at | DateTime | default now() | |
| completed_at | DateTime | nullable | |
@ -164,9 +167,19 @@ related: [auth-and-sessions.md](./auth-and-sessions.md)
| priority | Int | 14, not null | |
| sort_order | Float | not null | |
| status | Enum | TO_DO \| IN_PROGRESS \| REVIEW \| DONE | |
| verify_required | Enum | `VerifyRequired` — zie onder | Default `ALIGNED_OR_PARTIAL` |
| repo_url | String | nullable | Override van `product.repo_url` voor cross-repo MCP-jobs |
| created_at | DateTime | default now() | |
| updated_at | DateTime | auto-update | |
**`VerifyRequired` enum** — stuurt de drempel waaraan de agent-verify moet voldoen vóór DONE:
| Waarde | Betekenis |
|---|---|
| `ALIGNED` | Diff moet volledig overeenkomen met `plan_snapshot` |
| `ALIGNED_OR_PARTIAL` | Gedeeltelijke dekking is acceptabel (default) |
| `ANY` | Elke niet-lege diff volstaat |
**Indexes:** `(story_id, priority, sort_order)`, `(sprint_id, status)`
---