Agentplane Task Closure Recovery
Use This Skill When
agentplane finish,integrate,task hosted-close, ortask hosted-close-prfails.- A
task-close/*PR is duplicated, closed, obsolete, or still open after hosted closure. pr openfails because the remote branch already exists.- A task is DONE locally but artifacts, branch state, or hosted closure disagree.
- Direct-mode finish is blocked by unrelated dirty task artifacts.
First Classification
- Read workflow mode:
agentplane config show
- Identify the task state:
agentplane task show <task-id>
agentplane task verify-show <task-id>
git status --short --untracked-files=no
git rev-parse --abbrev-ref HEAD
- Query incident advice:
agentplane incidents advise <task-id>
Direct Mode
Expected close path:
agentplane verify <task-id> --ok --by CODER --note "..."
agentplane finish <task-id> --author CODER --body "Verified: ..." --result "..." --commit <git-rev>
If finish is blocked:
- Check whether dirty files belong to the active task or another active task.
- Check whether policy/incident mirrors were generated by finish and need allowed staging.
- Do not manually edit
.agentplane/tasks.json. - Do not use branch_pr close-tail commands in direct mode.
Branch PR Mode
Classify before recovery:
- Implementation PR branch:
task/<task-id>/<slug> - Closure PR branch:
task-close/<task-id>/<sha> - Base-side closure already landed: task README has DONE status and close commit exists on main.
Useful commands:
gh pr list --state all --head "task-close/<task-id>/<sha>"
gh pr view <number> --json state,mergedAt,headRefName,baseRefName,url
git ls-remote --heads origin "task/<task-id>/*"
git ls-remote --heads origin "task-close/<task-id>/*"
Known Recovery Patterns
Remote Branch Already Exists
If pr open fails after trying to push:
- Compare local branch tip to the remote branch tip.
- If they match, continue PR creation instead of forcing another push.
- If they differ, stop and classify divergence before overwriting anything.
Obsolete Close Tail
If hosted closure already landed on main:
- Treat the canonical close commit on base as a no-op condition.
- Do not create a new manual close-tail PR.
- Clean up only branches/PRs that are proven obsolete.
Dirty Base After Closure
If close paths wrote task artifacts or incident mirrors:
- Confirm the dirty paths are allowed for the closure operation.
- Stage only closure-scoped artifacts.
- Keep unrelated active task dirtiness untouched.
Verification
Minimum evidence:
- task state before and after
- branch/PR state before recovery
- exact command that changed state
- final
git status --short --untracked-files=no - a focused regression test when code changed
Record recovery facts in the task README Findings; promote reusable external incidents only through the incident workflow.