Mark a task as complete. Closes the task and commits .dots/ changes on the current branch.
From sdlcnpx claudepluginhub jwilger/claude-code-plugins --plugin sdlctask-id/completeCompletes partially implemented features: assesses gaps, implements missing pieces, hardens code, adds tests/docs, runs suite, and reports status changes with filled gaps list.
/completeCompletes Git worktree task: verifies phases, commits changes excluding planning files, merges to target branch, removes worktree, deletes branch.
/completeCompletes a task by marking it done, guiding learnings capture via prompts, showing unblocked tasks, and suggesting next steps like archiving or ready tasks.
/completeMarks task as complete after verifying acceptance criteria, tests, no issues; moves directory to completed/, updates project_state.md, suggests next task.
/completeComplete any issue type per its workflow requirements
Mark a task as complete. Closes the task and commits the .dots/ changes on the current branch so they can be included in a PR.
/sdlc:pr — Close the task, then create the PR. The .dots/ changes travel with the PR and land on main when merged.Note: /sdlc:pr automatically closes the task as part of its workflow. Use /sdlc:complete directly only when you need to close a task independently of PR creation.
$ARGUMENTS may contain:
<task-id> - Explicit task ID to completeIf task ID provided as argument, use it. Otherwise, extract from current branch:
BRANCH=$(git branch --show-current)
# Extract task ID from branch name (e.g., feature/myproject-add-login-abc123 → myproject-add-login-abc123)
TASK_ID=$(echo "$BRANCH" | sed 's/^feature\///')
# Verify task exists
dot show "$TASK_ID" &>/dev/null || {
echo "Error: Task $TASK_ID not found"
echo "Usage: /sdlc:complete [task-id]"
echo " or run from a feature branch"
exit 1
}
TASK_INFO=$(dot show "$TASK_ID" --json)
TASK_TITLE=$(echo "$TASK_INFO" | jq -r '.title')
TASK_STATUS=$(echo "$TASK_INFO" | jq -r '.status')
PARENT_ID=$(echo "$TASK_INFO" | jq -r '.parent // empty')
If the task is already closed, inform the user and stop.
dot off "$TASK_ID" -r "Completed"
If this task has a parent, check if all sibling tasks are now complete:
if [ -n "$PARENT_ID" ]; then
CHILDREN=$(dot tree "$PARENT_ID" --json | jq -r '.children[] | .status')
INCOMPLETE=$(echo "$CHILDREN" | grep -cv "closed")
if [ "$INCOMPLETE" -eq 0 ]; then
echo "All child tasks of $PARENT_ID are complete!"
fi
fi
If all children are done, use AskUserQuestion:
Question: All child tasks complete. Close parent task $PARENT_ID?
If user chooses "Yes":
dot off "$PARENT_ID" -r "All child tasks completed"
Stage and commit the .dots/ changes on the current branch:
git add .dots/
git commit -m "chore: close task $TASK_ID"
This ensures the task closure is part of the branch. When included in a PR and merged, main will reflect the task as closed.
Task completed!
Task: <task-id> - <title>
Status: closed
<if parent was also closed>
Parent task also closed: <parent-id>
</if>
The .dots/ changes have been committed on this branch.
Next:
- /sdlc:pr # Create PR (includes task closure)
- dot ready # See tasks ready to start
- /sdlc:work # Start next task
dot ls to see all tasks