Skip to main content
skill CX Codex

jackin-merge-pr — Claude Code skill: pre-merge gate for PRs

Runs the jackin❯ pre-merge gates, retires the roadmap item into docs, then squash-merges the pull request. Explicit invocation only.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add jackin-project/jackin-dev --skill jackin-merge-pr -a claude-code
Open on GitHub

What jackin-merge-pr does

This skill handles the last stretch of a jackin❯ pull request: gates first, docs second, merge last. It does not restate the repository rules, it sequences them. Agent rules under .github/ load on their own, and PULL_REQUESTS.md is reused as-is.

Here is the order. The skill resolves the PR from the current branch or from the argument, reads gh pr view and gh pr diff, and classifies blast radius. A diff that touches a versioned schema, the auth surface or .github/workflows/**, or that needs a force-push, counts as high — that pauses for one explicit confirmation. Then gh pr checks <PR>: pending checks are polled until green unless --no-poll is passed, and a failing check stops the run. Nothing is re-run locally; the CI result is trusted.

Roadmap retirement comes next. cargo xtask roadmap retire <slug> --plan prints the worklist, the agent moves operator detail into guides/ or commands/ and design detail into reference/, repoints inbound links, and --apply drops the meta.json entry and the page — it fails when a link still points at the dead slug. A partial ship goes through --partial. The merge is a squash with a body file built by jackin-pr-trailers. Authorization does not carry over from an earlier session: without a clear go-ahead for this PR, and with red CI, the skill halts.

What it helps with

  • get a PR through the pre-merge gates without re-running CI by hand
  • retire a finished roadmap item into docs and delete its page
  • find every inbound link to a slug before removing it
  • build a squash body with DCO and Co-authored-by trailers
  • halt a merge when a check fails and no bypass was approved

Example prompts for the agent

  • Merge the PR for the current branch with jackin-merge-pr
  • Run jackin-merge-pr 412 --no-poll and report the check status
  • Use jackin-merge-pr with --admin lint for that failing check

How to install jackin-merge-pr

1Skills CLI (Vercel)

npx skills add jackin-project/jackin-dev --skill jackin-merge-pr -a claude-code

2Manually: put the files in place

~/.claude/skills/jackin-merge-pr/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/jackin-merge-pr/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about jackin-merge-pr

How do I install jackin-merge-pr in Claude Code?

Run npx skills add jackin-project/jackin-dev --skill jackin-merge-pr -a claude-code. The skill lands at ~/.claude/skills/jackin-merge-pr/SKILL.md.

What does jackin-merge-pr do?

It runs the pre-merge gates, retires the roadmap item into docs and squash-merges the PR. You have to invoke it yourself; it never fires on its own.

What do --no-poll and --admin mean?

--no-poll skips waiting on pending CI and reports instead. --admin <check> authorizes bypassing one named failing check, and still needs the confirmation.

Source text

SKILL.md · Apache-2.0
---
name: jackin-merge-pr
description: Use only when the user explicitly requests this skill. Runs the jackin❯ pre-merge gate, retires the roadmap item into docs, and squash-merges a pull request.
argument-hint: "[PR] [--no-poll] [--admin <check>]"
disable-model-invocation: true
license: Apache-2.0
user-invocable: true
---

# jackin-merge-pr

Sequence the jackin❯ pre-merge gates **fail-closed**, retire the roadmap item into docs, then squash-merge. Reuses the `.github/` agent rules (auto-loaded) and `PULL_REQUESTS.md` — sequences them, never restates them.

## When to use

- Operator runs `jackin-merge-pr [<PR>]` to merge a jackin❯ PR (defaults to the current branch's PR).

## When NOT to use

- Opening or iterating a PR → `jackin-create-pr` / `jackin-propose`.

## Arguments

- `--no-poll` — do not wait on pending CI; stop and report instead.
- `--admin <check>` — authorize bypassing one named failing check (still needs the high-blast-radius confirm).

## Red flags — STOP

- No clear authorization for **this** PR and it is high-blast-radius → STOP, confirm first.
- Any required CI check failing → STOP (no `--admin` bypass without `--admin <check>` + confirm).
- Roadmap item not retired / not status-moved when the PR ships or advances it → STOP, fix first.

## Process

1. **Resolve PR.** Current branch's PR or the arg. Read `gh pr view` and `gh pr diff`.
2. **Blast-radius classify.** *High* if the diff touches a versioned schema, auth/security surface, `.github/workflows/**`, or needs a force-push / `--admin`. High → pause for one explicit confirm. Normal → proceed (invoking the skill is the go).
3. **CI gate.** `gh pr checks <PR>`: if pending, **poll until green** (unless `--no-poll`); if any check fails, STOP. Trust CI — which runs `cargo xtask schema-check` plus the test/clippy/fmt jobs — no local re-run.
4. **Roadmap retirement.** Does this PR ship the **last** piece of its roadmap item?
   - **Yes** → `[bin]` `cargo xtask roadmap retire <slug> --plan` prints the worklist: the page content, every inbound link (`grep <slug>`), and the `meta.json` entry. `[agent]` Do the judgment moves — operator detail → `guides/`/`commands/`, design detail → `reference/`, write the `## Completed` bullet in `roadmap/index.mdx`, repoint inbound links; commit `docs:`. `[bin]` `cargo xtask roadmap retire <slug> --apply` removes the `meta.json` entry, deletes the `.mdx`, runs the audit, and **fails if any inbound link still points at the dead slug**. Run the `bun` docs gate; push.
   - **Partial** → `cargo xtask roadmap retire <slug> --partial` sets `**Status**: Partially implemented` and keeps the page; name the remaining phases; commit; push.
5. **Metadata reconcile.** Title/body match the final diff? Squash writes the title verbatim into history. Fix via `gh pr edit` if stale; surface the change in your reply.
6. **Squash-merge.** Build a body file (prose summary, no checklists), append trailers via `cargo run -p jackin-pr-trailers -- --body-file`, then `gh pr merge <PR> --squash --body-file`. Confirm the title carries `(#N)`.
7. **Report.** Merged SHA and what retirement did.

## Common mistakes

- Carrying a prior session's "just merge everything" as authorization — it does not carry forward.
- Merging on pending/failing CI, or `--admin`-bypassing without explicit per-check opt-in.
- Leaving a `Status: Resolved` roadmap page instead of retiring it into docs.
- Squash title missing the `(#N)` suffix or the DCO / Co-authored-by trailers.

## Tooling

Bundles `jackin-pr-trailers`. `cargo xtask roadmap retire <slug> --plan` gives the agent the retirement worklist; `--apply` does the mechanical removal + audit and fails on a dangling link; `--partial` sets the Status. The content moves themselves are the agent's judgment. CI runs `cargo xtask schema-check` (the 5-artifact gate); this skill only reads its result.

© jackin-project · Apache-2.0 · jackin-project/jackin-dev

Similar skills

All skills for Git and GitHub →

From the same set3

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor