Dev ship
Use when shipping — merge PR to develop, update project board, clean up feature branchFrom its SKILL.md
npx -y skills add learnzdevelopmenthub/paadhai --skill dev-shipAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
4.3 KB, as published. Nobody here has run it
dev-ship: Merge PR + Board Update
Merge the approved PR, move issue to Done on the project board, clean up the feature branch.
Prerequisites: PR must exist and CI must be passing. Run /paadhai:dev-audit first if not done.
PREAMBLE — Announcement Banner
[SHELL] Detect context:
BRANCH=$(git branch --show-current)
If branch matches feature/* or fix/*:
- Extract issue number from branch name (e.g.,
feature/42-add-login→42) - [SHELL] Fetch issue title:
gh api repos/{config.repo.owner}/{config.repo.name}/issues/<number> --jq '.title'
Display (with issue context):
────────────────────────────────────────
dev-ship | Issue #<number> — <title>
7 steps | Branch: <branch>
────────────────────────────────────────
Display (no issue context — not on feature/fix branch):
────────────────────────────────────────
dev-ship
7 steps | Branch: <branch>
────────────────────────────────────────
If gh api fails, degrade gracefully — show banner without issue title.
STEP 1 — Load Config
[READ] .paadhai.json — hard stop if missing:
No
.paadhai.jsonfound. Run/paadhai:project-initfirst.
Store:
{config.repo.owner}/{config.repo.name}{config.repo.develop_branch}{config.github.project_id}/{config.github.status_field_id}{config.github.statuses.done}{config.branches.feature}
STEP 2 — Display Context
[SHELL] Get current PR:
gh pr view --json number,title,baseRefName,state,statusCheckRollup \
--jq '{number: .number, title: .title, base: .baseRefName, state: .state, ci: (.statusCheckRollup | map(.conclusion) | unique)}'
Display:
PR #<number> : <title>
Target branch : {config.repo.develop_branch}
CI status : <status>
If CI is not passing → stop:
CI checks are not passing. Fix CI before merging. Run /dev-pr to re-poll.
STEP 3 — Final Confirmation
G-09: "Merge PR #<n> to {config.repo.develop_branch}? (yes/no)"
Wait for explicit "yes". Do not proceed without it.
STEP 4 — Execute (after G-09)
All at once — no intermediate confirmations.
[DELEGATE][FAST-MODEL] 4a. Squash merge PR:
gh pr merge <pr-number> --squash --delete-branch
[DELEGATE][FAST-MODEL] 4b. Move issue to Done on project board:
ITEM_ID=$(gh api graphql \
-f query='{ repository(owner: "{config.repo.owner}", name: "{config.repo.name}") { projectsV2(first: 1) { nodes { items(first: 100) { nodes { id content { ... on Issue { number } } } } } } } }' \
--jq '.data.repository.projectsV2.nodes[0].items.nodes[] | select(.content.number == <issue-number>) | .id')
gh api graphql -f query="mutation { updateProjectV2ItemFieldValue(input: { projectId: \"{config.github.project_id}\", itemId: \"$ITEM_ID\", fieldId: \"{config.github.status_field_id}\", value: { singleSelectOptionId: \"{config.github.statuses.done}\" } }) { projectV2Item { id } } }"
If GraphQL fails → warn but do not block. Merge is the critical path.
STEP 5 — Local Cleanup
[SHELL] Switch to develop and pull:
git checkout {config.repo.develop_branch}
git pull origin {config.repo.develop_branch}
[SHELL] Delete local feature branch:
git branch -d <branch-name>
STEP 6 — Display Results
✓ PR #<number> merged (squash) → {config.repo.develop_branch}
✓ Feature branch deleted (local + remote)
✓ Issue #<issue-number> → Done
STEP 7 — Milestone Check
[SHELL] Check remaining open issues in this milestone:
gh api "repos/{config.repo.owner}/{config.repo.name}/milestones" \
--jq '.[] | select(.title == "<milestone>") | {open: .open_issues, closed: .closed_issues}'
If open issues remain:
Milestone <milestone>: <open> open issues remain.
Suggested next: /dev-start #<next-issue-number>
If all closed:
All issues in <milestone> are closed.
Ready to release: run /dev-release when ready.