| name | to-quality-pr |
| description | Quality-gated ship: run ensure-quality, then commit dirty gated work and open a triage PR whose body is the gate summary (LOW_RISK_MERGE / MEDIUM_REVIEW / HIGH_HOLD). Guardrail against AI slop leaving the machine. Use when the user asks to to-quality-pr, quality PR, gate and PR, ship a PR, or open a PR after changes; after finishing substantive or AI-generated work when the next step is a pull request; prefer this over committing or opening a PR without a quality gate. |
To quality PR
Ship guardrail: gate first, then PR.
Runs ensure-quality to completion, then commits the gated worktree and opens a pull request whose description is the gate output in a triage-first format.
Reviewers should decide merge-now vs inspect-first from the PR header alone.
Does not re-implement the gate.
Anti-slop / review / test / docs / lint live only in ensure-quality.
Stages (order): ensure-quality → ship (branch → commit → push → PR).
Load reference/ship.md and reference/pr-body.md only when ship runs.
When to run
Fire this skill when any of these hold:
- The user asks for to-quality-pr / quality PR / gate and PR / ship a PR / open a PR after changes.
- You finished substantive or AI-generated source changes and the natural next step is a pull request.
- You would otherwise commit and open a PR without a quality gate.
Prefer ensure-quality alone when the user wants a local gate only (no commit, no PR).
Skip auto-invoke for pure Q&A, exploration with no edits, or when the user said to keep iterating without shipping.
Preconditions
- Synthesize intent the same way ensure-quality requires - authoritative acceptance criteria for the gate.
- Confirm ship target. Record base branch (same default resolution as ensure-quality's fixed-point base) and whether the user named a PR title or branch.
- Dirty scope. Note that ship will include all work ensure-quality gated (committed-since-fixed-point plus unstaged/staged fixes the gate applied).
Completion: intent written; ship target named; then enter the pipeline.
Pipeline
1. Ensure quality
Read and execute .cursor/skills/ensure-quality/SKILL.md fully for this worktree.
Honor its HITL pauses; do not ship past unresolved ask-user findings.
Capture its Summary fields verbatim for the PR body - do not invent a second risk score.
If Summary Ship readiness is blocked (or the gate aborts): stop.
Leave the worktree dirty.
Emit a short blocked report (intent, risk, remaining findings).
Do not commit.
Do not push.
Do not open a PR.
If the gate reports ready with an empty diff (nothing to gate): stop and say so - no empty PR.
2. Ship
Only when ensure-quality ended Ship readiness: ready with a non-empty gated change set.
- Read
reference/ship.md and follow it (branch, commit, push).
- Read
reference/pr-body.md, map Summary → triage verdict + body, open the PR.
- Return the PR URL and the triage verdict to the user.
Completion: PR URL exists (or ship blocked with a concrete git/gh error); verdict stated; worktree clean relative to the pushed commit unless the user forbade commit.
Triage verdict (summary)
Derived in reference/pr-body.md from ensure-quality Risk (+ caution signal):
| Verdict | Meaning for reviewers |
|---|
LOW_RISK_MERGE | Skim intent + diffstat; merge if CI green |
MEDIUM_REVIEW | Read Caution and linked hunks before merge |
HIGH_HOLD | Do not merge until Caution is checked; open as draft unless the user already approved shipping high risk |
Empty Caution on Medium or High is a skill failure - rewrite before gh pr create.