From arcforge
Verifies tests pass on completed feature branches (no .arcforge-epic), presents merge/PR/keep/discard options, executes git workflows, creates GitHub PRs via gh, and cleans up worktrees.
npx claudepluginhub gregoryho/arcforge --plugin arcforgeThis skill uses the workspace's default tool permissions.
Guide completion of development work by presenting clear options and handling chosen workflow.
Mandates invoking relevant skills via tools before any response in coding sessions. Covers access, priorities, and adaptations for Claude Code, Copilot CLI, Gemini CLI.
Share bugs, ideas, or general feedback.
Guide completion of development work by presenting clear options and handling chosen workflow.
Core principle: Verify tests → Present options → Execute choice → Clean up.
Do NOT use for epic worktrees with .arcforge-epic → use arc-finishing-epic.
Before presenting options, verify tests pass:
# Auto-detect test command from project files
if [ -f package.json ]; then
npm test
elif [ -f Cargo.toml ]; then
cargo test
elif [ -f pyproject.toml ] || [ -f setup.py ]; then
pytest
elif [ -f go.mod ]; then
go test ./...
else
echo "No test command detected. Specify manually."
fi
If tests fail:
Tests failing (<N> failures). Must fix before completing:
[Show failures]
Cannot proceed with merge/PR until tests pass.
Stop. Don't proceed to Step 2.
If tests pass: Continue to Step 2.
# Try common base branches
git merge-base HEAD main 2>/dev/null || git merge-base HEAD master 2>/dev/null
Or ask: "This branch split from main - is that correct?"
Present exactly these 4 options:
Implementation complete. What would you like to do?
1. Merge back to <base-branch> locally
2. Push and create a Pull Request
3. Keep the branch as-is (I'll handle it later)
4. Discard this work
Which option?
Don't add explanation - keep options concise.
# Switch to base branch
git checkout <base-branch>
# Pull latest
git pull
# Merge feature branch
git merge <feature-branch>
# Verify tests on merged result
<test command>
# If tests pass
git branch -d <feature-branch>
Then: Cleanup worktree (Step 5)
# Push branch
git push -u origin <feature-branch>
# Create PR
gh pr create --title "<title>" --body "$(cat <<'EOF'
## Summary
<2-3 bullets of what changed>
## Test Plan
- [ ] <verification steps>
EOF
)"
Keep worktree until PR merged.
Report: "Keeping branch . Worktree preserved at ."
Don't cleanup worktree.
Confirm first:
This will permanently delete:
- Branch <name>
- All commits: <commit-list>
- Worktree at <path>
Type 'discard' to confirm.
Wait for exact confirmation.
If confirmed:
git checkout <base-branch>
git branch -D <feature-branch>
Then: Cleanup worktree (Step 5)
For Options 1 and 4:
Check if in worktree:
git worktree list | grep $(git branch --show-current)
If yes:
git worktree remove <worktree-path>
For Option 3: Keep worktree.
| Option | Merge | Push | Keep Worktree | Cleanup Branch |
|---|---|---|---|---|
| 1. Merge locally | ✓ | - | - | ✓ |
| 2. Create PR | - | ✓ | ✓ | - |
| 3. Keep as-is | - | - | ✓ | - |
| 4. Discard | - | - | - | ✓ (force) |
Branch merged → <base-branch>
Branch: <feature-branch> (deleted)
Worktree: <path> (removed if applicable)
Commits: [N commits merged]
Next: Start next task, or check project status
Pull request created → #<PR-number>
URL: <PR-URL>
Branch: <feature-branch>
Worktree: <path> (kept for now)
Next: Review PR, then merge/close and clean up worktree
Branch preserved for future work
Branch: <feature-branch>
Worktree: <path> (kept)
Next: Resume work on branch or run this skill again when ready
Work discarded
Branch: <feature-branch> (deleted)
Worktree: <path> (removed if applicable)
Next: Start fresh or check project status
Never:
.arcforge-epic existsAlways:
Skipping test verification
Open-ended questions
Automatic worktree cleanup
No confirmation for discard
Called by:
Pairs with: