diff --git a/docs/architecture/auth-and-sessions.md b/docs/architecture/auth-and-sessions.md index 4d633c3..7a0cf72 100644 --- a/docs/architecture/auth-and-sessions.md +++ b/docs/architecture/auth-and-sessions.md @@ -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. diff --git a/docs/architecture/data-model.md b/docs/architecture/data-model.md index 7051a38..f8d372e 100644 --- a/docs/architecture/data-model.md +++ b/docs/architecture/data-model.md @@ -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 | 1–4, 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)` ---