
Finishing A Development Branch
- 30 installs
- 36 repo stars
- Updated July 14, 2026
- oimiragieo/agent-studio
Helps with ai & agent building tasks.
About
finishing-a-development-branch is a Claude Code skill in the AI & Agent Building category.
- finishing-a-development-branch
- AI & Agent Building
- AI-coding skill
Finishing A Development Branch by the numbers
- 30 all-time installs (skills.sh)
- Ranked #9,316 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/oimiragieo/agent-studio --skill finishing-a-development-branchAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 30 |
|---|---|
| repo stars | ★ 36 |
| Last updated | July 14, 2026 |
| Repository | oimiragieo/agent-studio ↗ |
What it does
Helps with ai & agent building tasks.
Files
Finishing a Development Branch
Overview
Guide completion of development work by presenting clear options and handling chosen workflow.
Core principle: Verify tests -> Present options -> Execute choice -> Clean up.
Announce at start: "I'm using the finishing-a-development-branch skill to complete this work."
The Process
Step 1: Verify Tests
Before presenting options, verify tests pass:
# Run project's test suite
npm test / cargo test / pytest / go test ./...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.
Step 2: Determine Base Branch
# Try common base branches
git merge-base HEAD main 2>/dev/null || git merge-base HEAD master 2>/dev/nullOr ask: "This branch split from main - is that correct?"
Step 3: Present Options
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.
Step 4: Execute Choice
Option 1: Merge Locally
# 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)
Option 2: Push and Create PR
# 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
)"Then: Cleanup worktree (Step 5)
Option 3: Keep As-Is
Report: "Keeping branch <name>. Worktree preserved at <path>."
Don't cleanup worktree.
Option 4: Discard
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)
Step 4.5: Cleanup Scan (MANDATORY)
Run this before ANY commit, regardless of which option was chosen.
4.5.1 — Project root scan:
ls -1 | grep -vE '^(\.|node_modules|src|tests|scripts|dist|build|docs|package\.json|package-lock\.json|pnpm-lock\.yaml|tsconfig|eslint|prettier|jest|vitest|README|LICENSE|CHANGELOG|CLAUDE\.md|\.env)'If this outputs anything, those files are AI slop. Delete or move them before proceeding.
4.5.2 — Prune stale worktrees:
git worktree prune4.5.3 — Clean temp directory:
ls .claude/context/tmp/ 2>/dev/null && echo "Temp files exist — delete if from this session"4.5.4 — Log to session gap log if slop was found:
echo '{"timestamp":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","type":"cleanup","agent":"developer","description":"Deleted AI slop from project root: <filenames>","context":"finishing-a-development-branch cleanup scan"}' >> .claude/context/runtime/session-gap-log.jsonl4.5.5 — Queue reflection if slop was found (append to reflection-spawn-request.json):
{
"id": "<uuid>",
"trigger": "ai-slop-found",
"priority": "low",
"context": "Cleanup scan found unexpected files in project root. Investigate which task created them."
}See .claude/rules/cleanup-always.md for the full slop pattern list and correct file destinations.
Step 5: Cleanup Worktree
For Options 1, 2, 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.
Quick Reference
| Option | Merge | Push | Keep Worktree | Cleanup Branch |
|---|---|---|---|---|
| 1. Merge locally | Yes | - | - | Yes |
| 2. Create PR | - | Yes | Yes | - |
| 3. Keep as-is | - | - | Yes | - |
| 4. Discard | - | - | - | Yes (force) |
Common Mistakes
Skipping test verification
- Problem: Merge broken code, create failing PR
- Fix: Always verify tests before offering options
Open-ended questions
- Problem: "What should I do next?" -> ambiguous
- Fix: Present exactly 4 structured options
Automatic worktree cleanup
- Problem: Remove worktree when might need it (Option 2, 3)
- Fix: Only cleanup for Options 1 and 4
No confirmation for discard
- Problem: Accidentally delete work
- Fix: Require typed "discard" confirmation
Red Flags
Never:
- Proceed with failing tests
- Merge without verifying tests on result
- Delete work without confirmation
- Force-push without explicit request
Always:
- Verify tests before offering options
- Present exactly 4 options
- Get typed confirmation for Option 4
- Clean up worktree for Options 1 & 4 only
Integration
Called by:
- subagent-driven-development (Step 7) - After all tasks complete
- executing-plans (Step 5) - After all batches complete
Pairs with:
- using-git-worktrees - Cleans up worktree created by that skill
Documentation Gate (BLOCKING — must pass before commit)
Before ANY commit on a feature/skill/agent branch:
- [ ] CHANGELOG.md — entry added under
[Unreleased]with today's date - [ ] README.md — updated if agent/skill counts changed or new user-facing capability added
- [ ] .env.example — commented entry added for EVERY new API key, token, or env var introduced
- [ ] Skill/agent description — frontmatter
description:accurately reflects new capabilities
If any item is unchecked → DO NOT COMMIT. Update docs first.
Iron Laws
1. ALWAYS run the full test suite and verify it passes before offering any merge/PR option — presenting merge options with failing tests leads to broken main branches and failed CI pipelines. 2. NEVER force-push to main/master or squash commits without explicit user request — these operations rewrite history and can permanently destroy teammates' work. 3. ALWAYS present exactly the 4 structured options (merge, PR, keep, discard) — open-ended "what next?" questions cause confusion and missed cleanup steps. 4. NEVER delete a branch or discard work without typed confirmation from the user — accidental deletion of uncommitted work is irreversible. 5. ALWAYS clean up the worktree for Options 1 and 4 but preserve it for Options 2 and 3 — orphaned worktrees accumulate and confuse future git operations.
Anti-Patterns
| Anti-Pattern | Why It Fails | Correct Approach |
|---|---|---|
| Skipping test verification before merge | Broken code lands on main; CI fails after the fact | Always run test suite first; gate options on passing tests |
| Presenting open-ended completion questions | Developer doesn't know available paths; worktrees left orphaned | Present exactly 4 numbered options with clear labels |
| Deleting branch without confirmation | Developer loses in-progress work permanently | Require typed "discard" confirmation for Option 4 |
| Cleaning up worktree for Option 2 (PR) | Kills local context before PR review is complete | Only remove worktree for Options 1 and 4 |
| Merging directly without pulling latest base | Merge conflicts or stale base; CI detects drift | git pull on base branch before git merge |
Memory Protocol (MANDATORY)
Before starting: Read .claude/context/memory/learnings.md
After completing:
- New pattern ->
.claude/context/memory/learnings.md - Issue found ->
.claude/context/memory/issues.md - Decision made ->
.claude/context/memory/decisions.md
ASSUME INTERRUPTION: If it's not in memory, it didn't happen.
Invoke the finishing-a-development-branch skill and follow it exactly as presented to you
'use strict';
/**
* Post-execute hook for finishing-a-development-branch
* Auto-generated by enterprise-bundle-scaffolder
*
* Records metrics after skill execution.
*/
function postExecute(_context) {
// Record execution metrics
return { ok: true, skill: 'finishing-a-development-branch' };
}
module.exports = { postExecute };
'use strict';
/**
* Pre-execute hook for finishing-a-development-branch
* Auto-generated by enterprise-bundle-scaffolder
*
* Validates inputs before skill execution.
*/
function preExecute(context) {
// Validate skill invocation context
if (!context || typeof context !== 'object') {
return { allow: true, message: 'finishing-a-development-branch: no context to validate' };
}
return { allow: true };
}
module.exports = { preExecute };
finishing-a-development-branch Research Requirements
Generated: 2026-02-28
Skill Description
Complete development with structured merge/PR options. Use when ready to merge or submit work.
Research Areas
- Current best practices for finishing-a-development-branch
- Industry standards and tooling
- Integration patterns
Source References
- To be populated by skill-updater research phase
finishing-a-development-branch Rules
Purpose
Complete development with structured merge/PR options. Use when ready to merge or submit work.
Best Practices
- Verify tests pass before any merge option
- Present all 4 options (merge, PR, keep, discard)
- Clean up worktrees after completion
Integration Points
See SKILL.md for complete documentation.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "finishing-a-development-branch Input Schema",
"description": "Input validation schema for finishing-a-development-branch skill",
"type": "object",
"required": [],
"properties": {},
"additionalProperties": true
}
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "finishing-a-development-branch Output Schema",
"description": "Output validation schema for finishing-a-development-branch skill",
"type": "object",
"required": ["success"],
"properties": {
"success": {
"type": "boolean",
"description": "Whether the skill executed successfully"
},
"result": {
"type": "object",
"description": "The skill execution result",
"additionalProperties": true
},
"error": {
"type": "string",
"description": "Error message if execution failed"
}
},
"additionalProperties": true
}
#!/usr/bin/env node
/**
* Finishing A Development Branch - Main Script
* Complete a development branch with structured merge or PR options — verifies tests pass, lint is clean, reviews diff summary, then commits and opens PR or merges
*/
const options = Object.fromEntries(
process.argv
.slice(2)
.filter(arg => arg.startsWith('--'))
.map(flag => [flag.replace(/^--/, ''), true])
);
if (options.help) {
console.log('Finishing A Development Branch - Main Script');
process.exit(0);
}
console.warn('WARNING: This skill is currently a scaffold and has no implementation.');
process.exit(1);
finishing-a-development-branch Implementation Template
Goal
- Define target outcome and acceptance criteria.
TDD
1. Red 2. Green 3. Refactor
Verification
- lint
- format
- targeted tests