docs(api): documenteer entity codes als verplicht response-veld

Aparte 'Entity codes' sectie legt uit dat PBI/Story/Task elk een
verplichte code hebben (max 30 chars, regex), per-product uniek,
stabiel bij re-parenting, met auto-generatie als POST-body de
code weglaat. Voorbeeld response in /next-story en /sprint/tasks
gebruikt nu T-42 i.p.v. ST-356.1 voor task-code.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Janpeter Visser 2026-05-04 08:37:02 +02:00
parent 081a0a51c3
commit 658e42a70a

View file

@ -29,6 +29,15 @@ De API gebruikt **lowercase** statussen. De database gebruikt UPPER_SNAKE; de ve
| Task status | `todo`, `in_progress`, `review`, `done` | | Task status | `todo`, `in_progress`, `review`, `done` |
| Story status | `open`, `in_sprint`, `done` | | Story status | `open`, `in_sprint`, `done` |
## Entity codes
PBI's, stories en tasks hebben elk een verplichte `code` (max 30 chars, regex `^[A-Za-z0-9._-]+$`) die als stabiele identifier dient binnen het product:
- **Auto-generatie** wanneer niet meegegeven: `PBI-N`, `ST-N` (3-digit padded), `T-N` — eigen sequence per product.
- **Uniek per `(product_id, code)`** voor alle drie entiteiten.
- **Stabiel bij re-parenting**: een task die naar een andere story wordt verplaatst behoudt zijn `code` (Jira-stijl).
- POST-body `code` is **optioneel** (server vult bij ontbreken); response bevat `code` altijd.
## Foutcodes ## Foutcodes
| Code | Betekenis | | Code | Betekenis |
@ -142,7 +151,7 @@ Hoogst geprioriteerde open story in de actieve sprint.
"tasks": [ "tasks": [
{ {
"id": "...", "id": "...",
"code": "ST-356.1", "code": "T-42",
"title": "Store stores/solo-store.ts", "title": "Store stores/solo-store.ts",
"description": "...", "description": "...",
"implementation_plan": null, "implementation_plan": null,