* feat(code): add parseCodeNumber helper to lib/code.ts
Pure helper that extracts the trailing numeric sequence from a code string
(ST-007 → 7, T-42 → 42). Non-conforming codes fall back to Number.MAX_SAFE_INTEGER
so they sort to the end. Includes 5 unit tests.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat(tasks): add code field to BacklogTask type and all task selects
Adds `code: string | null` to BacklogTask interface and includes it in
all Prisma task.findMany selects (backlog API, stories tasks API, page
hydration routes). Updates coerceTaskPayload and test fixtures to match.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat(sort-order): derive story/task sort_order from parseCodeNumber(code)
All create paths (createStoryAction, saveTask, createTaskAction,
materializeIdeaPlanAction) and code-edit paths (updateStoryAction, saveTask
update) now set sort_order = parseCodeNumber(code) instead of last+1.
Removes stale last-record queries from create paths.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix(sort-order): decouple sprint membership actions from sort_order
createSprintAction and addStoryToSprintAction no longer write sort_order
when adding stories to a sprint. sort_order is derived from code via
parseCodeNumber, so membership should only set sprint_id + status.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* refactor(ordering): remove priority from all story/task orderBy
Story- en taak-ordering is nu puur sort_order asc (created_at als
tiebreaker). PBI-ordering (priority + sort_order) blijft ongewijzigd.
Gewijzigd: backlog/route, pbis/stories/route, claude-context/route,
next-story/route, workspace/route, tasks/route, sprint-runs (query +
in-memory sort), solo-workspace-server, page.tsx (app + mobile + sprint),
store compareStory, actions/sprints story-query, next-story test.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* refactor(dnd): remove drag-and-drop reorder for stories and tasks
- Remove reorderStoriesAction, reorderTasksAction, reorderSprintStoriesAction
- Delete REST route app/api/stories/[id]/tasks/reorder/route.ts
- Remove DnD from backlog story-panel and task-panel (flat list)
- Remove reorder-within-sprint branch from sprint-board-client handleDragEnd
- Switch SortableSprintRow to plain SprintRow using useDraggable (membership drag kept)
- Remove all DnD from task-list (status toggle + edit kept)
- Remove story-order/task-order/sprint-story-order/sprint-task-order mutation types and store handlers
- Remove related tests for deleted reorder route; fix sprint store tests
* feat(backlog): toon code-badge op backlog-taakkaarten
Geeft code={task.code} door aan <BacklogCard> in TaskCard (task-panel.tsx).
BacklogCard rendert de CodeBadge al conditionally — alleen de prop ontbrak.
* feat(migration): backfill story/task sort_order from code numeric suffix
One-time Prisma migration that sets sort_order = trailing numeric part
of code for all existing stories and tasks, consistent with
parseCodeNumber (fallback = Number.MAX_SAFE_INTEGER for non-conforming
codes). PBIs are intentionally excluded.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* docs+tests(sort-order): update for code-binding order on stories/tasks
- Rewrite docs/patterns/sort-order.md: float-insertion PBI only; story/task
sort_order = parseCodeNumber(code), never drag/membership mutated
- Update plan-to-pbi-flow.md: sort_order auto, sprint_id param, priority=label
- Update make-plan.md: priority=label, array order = execution order
- Update rest-contract.md: fix sprint-tasks ordering, remove reorder endpoint
- Add ADR-0011: code is bindende volgordesleutel voor stories/taken
- Regenerate docs/INDEX.md via npm run docs
- Remove reorderStoriesAction/reorderTasksAction mocks from backlog tests
- Remove dnd-kit mocks from task-panel test (panel no longer uses dnd)
- Extend materializeIdeaPlanAction test: assert sort_order=parseCodeNumber(code)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2.8 KiB
2.8 KiB
ADR-0011: code is de bindende volgordesleutel voor stories en taken; priority is label
Status
accepted
Context
Vóór dit besluit werden stories en taken geordend op [priority ASC, sort_order ASC].
Gebruikers konden de volgorde via drag-and-drop aanpassen (float-insertion in sort_order).
Dit leidde tot meerdere problemen:
- Onvoorspelbare uitvoervolgorde voor de AI-agent: een agent die taken aanmaakt via
create_task(in call-volgorde) zag die volgorde ongedaan gemaakt zodra een andere agent of gebruiker depriorityaanpaste. - Divergentie tussen
codeensort_order:codereflecteerde de aanmaak-volgorde (T-1,T-2, …), maarsort_orderkon na herordening compleet anders zijn. - DnD-reorder voor stories/taken was overbodig: de enige betekenisvolle volgorde voor een AI-gedreven sprint is de creatie-volgorde van taken — handmatige herordening voegde verwarring toe zonder toegevoegde waarde.
Beslissing
codeis de bindende volgordesleutel voor stories en taken.sort_orderis een numerieke spiegel vancode, berekend viaparseCodeNumber(code)uitlib/code.ts. Hierbij extraheertparseCodeNumberhet trailertal van de code-string (bijv."ST-042"→42,"T-7"→7).sort_orderwordt automatisch gezet bijcreate(server berekent de waarde) en bij code-edit (PATCH met nieuwcode). Sprint-membership-acties latensort_orderongemoeid.- Drag-and-drop herordening van stories en taken is verwijderd. Enkel PBI-ordering gebruikt nog float-insertion (zie ADR-0002).
priorityis een puur label (urgentie-aanduiding voor de gebruiker). Geen enkeleorderByop stories of taken gebruikt nogpriority.
Gevolgen
Positief
- De uitvoervolgorde van taken is deterministisch en gelijk aan de aanroep-volgorde van
create_task— agents kunnen dit betrouwbaar afleiden zonder extra queries. codeensort_orderzijn altijd in sync — geen divergentie meer na herordening.- Minder complexiteit: geen reorder-route, geen reorder-server-actions, geen DnD-context in backlog-story-panel en task-panel.
Negatief
- Gebruikers kunnen de volgorde van stories en taken niet handmatig herordenen via slepen.
Volgorde aanpassen vereist nu het wijzigen van de
code(of het aanmaken in de gewenste volgorde). Dit is een bewuste trade-off ten gunste van voorspelbaarheid voor de agent. parseCodeNumberretourneert0voor codes zonder numeriek suffix (bijv."CUSTOM-FOO"). Zulke codes clusteren bij positie 0 — vermijdbaar door codes met een numeriek suffix te gebruiken.
Zie ook
- ADR-0002: float sort_order voor drag-and-drop (PBI-ordering)
- docs/patterns/sort-order.md — implementatiepatroon
lib/code.ts—parseCodeNumber-helper