2.0 KiB
2.0 KiB
id, title, status, wave, depends_on, plan, spec
| id | title | status | wave | depends_on | plan | spec | |
|---|---|---|---|---|---|---|---|
| 21-work-item-mutations | Constrained work-item mutations | done | 11 |
|
plan.md | ../../specs/azure-devops-integration/spec.md |
Task 21: Constrained Work-Item Mutations
Acceptance
- Board update requests accept only revision, column/split state, and
assign_current_user/unassign; title, tags, descriptions, effort, and browser-supplied identities are rejected. - Assign to me resolves the current PAT identity server-side and every mutation
keeps the
/revoptimistic concurrency test plus board-derived field paths. - Conflict and permission failures preserve readable board/detail data and return codes the frontend can distinguish.
Verification
go test ./internal/azuredevops -run 'TestBoardWorkItemPatch(AssignCurrentUser|Unassign|RejectsUnsupportedFields)|TestServiceUpdateBoardWorkItemIdentity'fromapps/backend.
Files Likely Touched
apps/backend/internal/azuredevops/board_models.goapps/backend/internal/azuredevops/client.goapps/backend/internal/azuredevops/rest_client.goapps/backend/internal/azuredevops/rest_client_test.goapps/backend/internal/azuredevops/service_board.goapps/backend/internal/azuredevops/service_board_test.goapps/backend/internal/azuredevops/mock_client.goapps/backend/internal/azuredevops/controller.goapps/web/lib/types/azure-devops.tsapps/web/lib/api/domains/azure-devops-api.ts
Dependencies
Task 20.
Parallelism
Sequential. It narrows the existing public mutation contract.
Inputs
- Spec: constrained update request, permissions, conflicts, assignment scenarios.
- Existing board field resolution and revision-safe JSON Patch tests.
Risks
- Keep move behavior compatible with split columns while removing obsolete title/tag mutation paths from API types, mocks, and tests together.
Output Contract
Report rejected/allowed fields, identity resolution, RED/GREEN commands, files changed, compatibility risks, and update task/plan status.