Repository navigation
feat(spaces): let claimed tasks move between Kanban columns and let any writer take a claim over - #835
Merged
Conversation
…yone take a claim over The board sent the target's completion state with every move, and the server checked the claim whenever that field was present. Every move of a claimed task therefore failed with 409, even between open columns and even for the holder, because the board only sent the claim ID when the target was done. The claim now guards a completion change (and any call that names a claim), compared against the current state inside the locked transaction; moves that keep the state also keep the completion time. The board sends completion only when it changes, with the reader's own claim ID in both directions. Claims are coordination, not a lock: every writer may now take over another account's claim (release --force, and a new force flag on completion and moves that names the exact observed claim). Completing or reopening someone else's claimed task from the board, list, calendar tray or details asks once and then takes over and completes in one request; cancel leaves the card in place. Take-overs are recorded as task.taken_over activity with the previous holder, and the holder's next claim-bound call still gets 409 "Task claim is no longer active".
…transfers take a claim over
A worker whose claim was taken over through the details' Take over button
got "Task is claimed; release its current claim ..." on its next call,
because the task was claimed again right away. That told it to release
someone else's claim instead of the documented "Task claim is no longer
active". A call that names a claim other than the current one now gets
that answer; competing claims keep "Task is claimed".
Wormhole transfers still refused every claimed task, the same kind of
dead end the board fix removed. A transfer ends the claim because the
task leaves the Space whose grants backed it, so it is now guarded like
completion: the holder sends its claim ID, and anyone else takes the
exact claim over after one question ("Claimed by X – take over and
move?"). The source Space's activity records the take-over.
The board leaves out `completed` on drops it believes keep the state, so
a board that missed a completion could leave a completed task in an open
column. A move without `completed` now follows the target column's done
state on the server, which owns that rule.
The details panel sent a confirmed take-over to whatever item it showed
once the dialog closed; it now drops the answer when the item changed.
… longer has The Spaces workflow Help no longer says that only admins can take a claim over, so the help-writing check found one "Adminzugriff" and one "admins" fewer than its baseline lists and reported the lines as stale.
ValentinKolb
enabled auto-merge
October 10, 2026 04:49
github-merge-queue
Bot
removed this pull request from the merge queue due to failed status checks
Oct 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Outcome
409.task.taken_overactivity with the previous holder. The previous holder's nextprogress,releaseordonecall with the ended claim ID gets409"Task claim is no longer active", also when the task has been claimed again since. Before, it got "Task is claimed; release its current claim …", which told it to release someone else's claim.completednow follows the target column's done state on the server, so a stale board can no longer leave a completed task in an open column.forceonPOST …/items/:itemId/move,POST …/completed,task.set-completedandcld spaces done --force, plus an optional{ claimId, force }body on the wormhole transfer route.release --force/task.releasewithforcenow need write access instead of admin access.Root cause
The board sent the target column's completion state with every move, and the server checked the claim whenever
completedwas present, not only when it changed. The board sent the claim ID only when the target was a done column. Every move of a claimed task therefore hit the claim check and failed, even between open columns and even for the holder.The server now checks the claim only for a change of completion state (or when a call names a claim), against the current state inside the locked transaction. A move that keeps the state also keeps the completion time. The board sends
completedonly when it changes, with the reader's own claim ID in both directions. Wormhole transfers end the claim because the task leaves the Space whose grants backed it, so they are guarded like completion.The details panel used to send a confirmed take-over to whatever item it showed once the dialog closed; it now drops the answer when the item changed.
Documentation
docs-site/apps-content/en/spaces.md(claim semantics, take-over, wormhole transfers, move withoutcompleted, CLI and capability notes).spaces-workflow.help.md; the help-writing baseline loses the two "admins"/"Adminzugriff" findings the new text no longer has.packages/spaces/src/cli-references/index.md, capability and OpenAPI descriptions.cloud-devskill unchanged: this is Spaces-owned claim behavior, not a cross-cutting platform invariant or development workflow.Verification
Rebased onto
mainat 433d13e, then:bun run check: 24/24 rules pass (incl. typecheck, localization, help-writing, capability-presentation).bun run test --integration --filter packages/spacesagainst the local test infrastructure: 28/28 suites pass, includingtask-work.integration.test.ts(moves between open columns by holder and colleague, a done-to-done move keeping the completion time, take-over activity, ended-claim409) andwormholes.test.ts(holder transfer, forced take-over of the exact claim, refusal without the claim).wormholes,capabilities,cli(92 pass, 7 skipped integration-gated),ItemDetailPanel/ItemRow/ClaimControls/Calendarrender (56 pass), and theclaim-take-over,kanban-drop-indicator,feedback-channels,list-filter-interactions,list-searchbehavior tests (18 pass).git diff --checkand Biome on the changed files are clean.kanban-board.browser-suite.ts) and the full repository test run; the gate runs both.Three later
maincommits (mail, ai, dashboard) touch none of these files; the merge queue re-runs the gate on the merge result.