Shipping a PR

SkillDev tools

Use when finished work needs to ship as a pull request, or when the ask is about a PR — creating one, bringing it up to date, adding screenshots, watching its checks, or addressing its review comments. Not for reviewing a PR you are not shipping.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Shipping a PR skill

What this skill tells your AI

The instructions your AI receives, as published by jetbrains/thinkrail in packages/pi-thinkrail-workflow/skills/shipping-a-pr/SKILL.md and read by ahel’s review.

The PR lifecycle: ship the workspace's finished work as a pull request and keep that PR healthy until it is mergeable. One workflow, five phases as sibling docs — enter at the phase the ask names.

The done bar (applies to every phase)

A PR is done when every check it has is green — a repo with no CI is reported as exactly that, never silently treated as green — and the user has the link plus its current state; never at "PR opened", "pushed", or "comment replied". Every phase below therefore ends in checks.md, which declares this workflow's terminal state.

Observed, never assumed (applies to every phase)

Git and GitHub state is concurrent and mutable: the base moves, CI lags, mergeability is computed lazily, and this workflow's own steps dirty the tree they just checked. Three rules hold at every step of every phase:

  • Verify at the point of action. An irreversible step — push, gh pr create, gh pr edit, replying to a thread, declaring done — re-checks the exact state it consumes immediately before running. A gate passed earlier does not survive the mutations made since it passed.
  • Fetch, don't remember. Remote state is read fresh and completely at the moment it's needed: the current body before editing it, --paginate on every listing, git fetch before reasoning about the base.
  • Indeterminate is not affirmative. A pending or still-computing answer (an UNKNOWN merge state, queued checks) is polled until it resolves; done is declared only from observed affirmative state, never from the absence of a bad signal.

Classify the ask

The askPhase doc
Create a PR — the work is finishedcreating.md
Bring the PR up to date / resolve conflicts with its basesyncing.md
Add or refresh screenshots on a PRscreenshots.md
Monitor CI / investigate or fix failing checkschecks.md
Address review commentsreview-comments.md

Read and follow the selected phase doc — the gates and mechanics live only there; never run a phase from this spine's summary. A compound ask ("rebase, verify, and create a PR") is one flow: start at the earliest phase named; the docs chain forward on their own. If the work itself isn't finished — the ask bundles new design or implementation before the ship — that part is not this workflow's; route it per choosing-a-workflow first and come back here when it lands.

Working files

Ephemeral files this workflow uses, all under the workspace's gitignored .thinkrail/context/:

  • pr-body.md — the PR body draft; always passed via --body-file, never inline.
  • pr-shots/ — staged before/after screenshots awaiting attachment.

Both are deleted when the phase that made them completes (screenshots stay while the user is uploading by hand — see screenshots.md).

Ending

Every path ends in checks.md; its terminal state is the only way this workflow finishes.

Signals

GitHub stars
459
Forks
36
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
shipping-a-pr
Source
github.com/jetbrains/thinkrail