workflow-release-prep — Local working tree → merge-ready PR
Degree of freedom: MIXED.
- Review & readiness (Phases 1–2): HIGH freedom — judge whether the
change is coherent and safe.
- Git operations (Phases 0, 3–5): LOW freedom — commit / push / PR
mechanics run exactly, in order. A wrong branch or a force-push is
real damage.
Apply-now, end to end. Take everything in the local working tree —
uncommitted + staged + untracked + unpushed commits, reviewed together as
one release unit — and drive it to a merge-ready PR against main.
Do not merge. This orchestrates existing skills rather than
re-implementing them: hand deep passes to the specialists, own the
sequence and the go/no-go.
Scope is the local working tree only — not open PRs, not
merged-unreleased work. One developer's pending change, prepared properly.
This skill vs neighbors
| Skill |
Owns |
| workflow-release-prep (this) |
Whole dirty tree → merge-ready PR; sequence + verdict |
workflow-pr |
Lifecycle of an already-committed / existing PR, including merge |
workflow-launch-ready |
Product launch sweep (SEO / PWA / i18n), not git prep |
workflow-quality-gate |
Pre-release quality sweep; does not commit or open a PR |
workflow-git-commit |
Conventional commit messages only |
audit-code-review |
Quality / security / maintainability of a named diff |
split-to-prs (Cursor extra) |
Slice one pile into reviewable PRs — wait for approval |
babysit (Cursor extra) |
Keep an open PR green (comments / conflicts / CI) |
housekeep-backlog |
What's not done across the repo |
docs-adr |
Decisions made along the way |
Pre-release trio: housekeep-backlog (what's parked) → this skill
(what's done, onto a PR) → docs-adr (decisions).
How to reason
- Observe — unstaged + staged + untracked + unpushed as one unit
- Interpret — one reviewable concern, or several tangled together?
- Classify — GO / SPLIT / BLOCKED
- Severity — a secret or broken test blocks; formatting churn does not
Worked example
Observe: feature + leftover console.log + an unrelated lockfile bump.
Interpret: two concerns; debug residue is a completeness fail.
Classify: SPLIT the lockfile; remove the log; then GO.
Gate: do not open a PR around the leftover debug print.
Phase 0 — Snapshot the working tree [LOW freedom — run exactly]
Establish what's pending before touching anything:
git status and git branch --show-current — confirm you are not
on main / master. If you are, stop and create a feature branch
first. Committing release prep straight to main is the failure this
guards.
git diff (unstaged) + git diff --staged — the complete change set,
reviewed as one.
git log origin/main..HEAD --oneline (fall back to origin/master if
that is the default) — already-committed, unpushed work on this branch
is part of the release unit.
git status --porcelain — untracked files are easy to forget to add.
State the full pending scope: modified, staged, unstaged, untracked, and
unpushed-committed. That aggregate is what gets reviewed.
Phase 1 — Review the whole change together [HIGH freedom]
Read audit-code-review and run it on the aggregate diff. Do not
duplicate its quality / security / maintainability logic.
Then add the release lens a single-diff review misses:
- Coherence — one logical unit, or several unrelated ones tangled
together? If several → Phase 2 splits them.
- Completeness — half-finished work about to ship? Cross-check the
markers
housekeep-backlog / plan-stub-checker hunt: new
TODO / FIXME, console.log / debug prints, commented-out code,
.skiped tests, stubbed handlers. Release prep is when these must not
slip through.
- Accidental inclusions — secrets or keys (→
plan-secrets-audit if
suspected; never commit them), .env files, large binaries,
editor / OS cruft, debug config, unrelated formatting churn.
- Migration / flag safety — if the diff touches schema or flags, is
it backward-compatible for the deploy window? Unsure →
plan-data-integrity / workflow-feature-flag.
Phase 2 — Reason about readiness, then decide split [HIGH freedom]
Run this chain before proceeding:
- Observe — what does the aggregate contain, across how many concerns?
- Interpret — one reviewable PR, or unrelated changes a reviewer
cannot evaluate together?
- Decide — single PR, or split? If it spans multiple unrelated
concerns or is large enough to be unreviewable, hand to
split-to-prs and prepare each separately. A 2000-line PR mixing
a feature, a refactor, and a dependency bump is three PRs.
- Gate — is anything blocking release (secret, broken test,
half-finished feature)? If yes, surface it and stop before
committing — do not prepare a PR around a known problem.
Self-critique before committing [LOW freedom — do not skip]
Challenge the change against this rubric. If any item fails, fix or
surface it before Phase 3:
- Complete — nothing half-implemented, no debug residue, no
stubbed-and-forgotten path.
- Clean — no secrets, no accidental files, no unrelated churn
padding the diff.
- Coherent — one logical unit per PR (or split decided).
- Tested — the change is covered, or the coverage gap is named
(→
plan-test-coverage). Existing tests are not broken.
- Safe — migrations backward-compatible; flags default off; no
breaking API change to a live consumer without a note.
Phase 3 — Commit [LOW freedom — run exactly]
Stage deliberately (git add the intended files — not blanket
git add . if untracked cruft exists). Hand message-writing to
workflow-git-commit for conventional-commit format. One commit per
logical change; a split PR set gets its own commits per PR. Never bundle
unrelated changes in one commit.
Phase 4 — Push & open the PR [LOW freedom — run exactly]
- Push the feature branch (
git push -u origin <branch>). Never
force-push a shared branch.
- Open the PR against main via
workflow-pr, with a complete
description: what changed and why, how it was tested, any migration /
flag / rollout notes, and links to the relevant docs-adr or BL-
backlog items if this closes them. A reviewer should not have to
reverse-engineer intent.
- Confirm the repo's aggregator / required checks fire on the PR
(
housekeep-gates / workflow-quality-gate if those exist here).
This skill does not run those sweeps; it makes sure they are wired
to fire.
Phase 5 — Drive to merge-ready [LOW freedom — hand off]
Hand to babysit to keep the PR merge-ready: address bot / review
feedback, resolve straightforward conflicts, fix red CI, loop until
green and reviewed. Stop at merge-ready — do not merge. The human
(or a separate release step) makes the merge call. This job ends at
"green, reviewed, and waiting for the button."
Definition of Done
Output format
- Pending scope — files by state; what's included
- Review summary —
audit-code-review findings + release-lens
findings, severity-ordered
- Readiness verdict — GO / SPLIT / BLOCKED, with the self-critique
rubric result
- Actions taken — commits made, branch pushed, PR link
- Merge-ready status — CI state, outstanding review items, what
remains before the human merges
Stop at merge-ready. Handoffs: audit-code-review, split-to-prs,
workflow-git-commit, workflow-pr, babysit, plan-secrets-audit
(if secrets suspected).
1---2name: workflow-release-prep3description: Apply-now: take the local working tree to a merge-ready PR against main — review, self-critique, split if needed, commit, push, open PR, drive CI green. Do not merge. Use when "prepare this for a PR", "get my working tree merge-ready". Existing PR → workflow-pr. Product launch → workflow-launch-ready.4license: MIT5---67# workflow-release-prep — Local working tree → merge-ready PR89**Degree of freedom: MIXED.**1011- Review & readiness (Phases 1–2): **HIGH freedom** — judge whether the12 change is coherent and safe.13- Git operations (Phases 0, 3–5): **LOW freedom** — commit / push / PR14 mechanics run exactly, in order. A wrong branch or a force-push is15 real damage.1617Apply-now, end to end. Take everything in the **local working tree** —18uncommitted + staged + untracked + unpushed commits, reviewed together as19one release unit — and drive it to a merge-ready PR against main.20**Do not merge.** This orchestrates existing skills rather than21re-implementing them: hand deep passes to the specialists, own the22sequence and the go/no-go.2324Scope is the **local working tree only** — not open PRs, not25merged-unreleased work. One developer's pending change, prepared properly.2627## This skill vs neighbors2829| Skill | Owns |30|---|---|31| **workflow-release-prep** (this) | Whole dirty tree → merge-ready PR; sequence + verdict |32| `workflow-pr` | Lifecycle of an **already-committed** / existing PR, including merge |33| `workflow-launch-ready` | Product launch sweep (SEO / PWA / i18n), not git prep |34| `workflow-quality-gate` | Pre-release *quality* sweep; does not commit or open a PR |35| `workflow-git-commit` | Conventional commit messages only |36| `audit-code-review` | Quality / security / maintainability of a named diff |37| `split-to-prs` (Cursor extra) | Slice one pile into reviewable PRs — wait for approval |38| `babysit` (Cursor extra) | Keep an **open** PR green (comments / conflicts / CI) |39| `housekeep-backlog` | What's *not* done across the repo |40| `docs-adr` | Decisions made along the way |4142Pre-release trio: `housekeep-backlog` (what's parked) → this skill43(what's done, onto a PR) → `docs-adr` (decisions).4445## How to reason46471. **Observe** — unstaged + staged + untracked + unpushed as one unit482. **Interpret** — one reviewable concern, or several tangled together?493. **Classify** — GO / SPLIT / BLOCKED504. **Severity** — a secret or broken test blocks; formatting churn does not5152## Worked example5354> **Observe:** feature + leftover `console.log` + an unrelated lockfile bump.55> **Interpret:** two concerns; debug residue is a completeness fail.56> **Classify:** SPLIT the lockfile; remove the log; then GO.57> **Gate:** do not open a PR around the leftover debug print.5859---6061## Phase 0 — Snapshot the working tree [LOW freedom — run exactly]6263Establish what's pending before touching anything:6465- `git status` and `git branch --show-current` — confirm you are **not**66 on `main` / `master`. If you are, stop and create a feature branch67 first. Committing release prep straight to main is the failure this68 guards.69- `git diff` (unstaged) + `git diff --staged` — the complete change set,70 reviewed as one.71- `git log origin/main..HEAD --oneline` (fall back to `origin/master` if72 that is the default) — already-committed, unpushed work on this branch73 is part of the release unit.74- `git status --porcelain` — untracked files are easy to forget to add.7576State the full pending scope: modified, staged, unstaged, untracked, and77unpushed-committed. That aggregate is what gets reviewed.7879---8081## Phase 1 — Review the whole change together [HIGH freedom]8283Read **`audit-code-review`** and run it on the **aggregate** diff. Do not84duplicate its quality / security / maintainability logic.8586Then add the release lens a single-diff review misses:8788- **Coherence** — one logical unit, or several unrelated ones tangled89 together? If several → Phase 2 splits them.90- **Completeness** — half-finished work about to ship? Cross-check the91 markers `housekeep-backlog` / `plan-stub-checker` hunt: new92 `TODO` / `FIXME`, `console.log` / debug prints, commented-out code,93 `.skip`ed tests, stubbed handlers. Release prep is when these must not94 slip through.95- **Accidental inclusions** — secrets or keys (→ `plan-secrets-audit` if96 suspected; **never commit them**), `.env` files, large binaries,97 editor / OS cruft, debug config, unrelated formatting churn.98- **Migration / flag safety** — if the diff touches schema or flags, is99 it backward-compatible for the deploy window? Unsure →100 `plan-data-integrity` / `workflow-feature-flag`.101102---103104## Phase 2 — Reason about readiness, then decide split [HIGH freedom]105106Run this chain before proceeding:1071081. **Observe** — what does the aggregate contain, across how many concerns?1092. **Interpret** — one reviewable PR, or unrelated changes a reviewer110 cannot evaluate together?1113. **Decide** — single PR, or split? If it spans multiple unrelated112 concerns or is large enough to be unreviewable, hand to113 **`split-to-prs`** and prepare each separately. A 2000-line PR mixing114 a feature, a refactor, and a dependency bump is three PRs.1154. **Gate** — is anything blocking release (secret, broken test,116 half-finished feature)? If yes, surface it and **stop before117 committing** — do not prepare a PR around a known problem.118119## Self-critique before committing [LOW freedom — do not skip]120121Challenge the change against this rubric. If any item fails, fix or122surface it before Phase 3:123124- **Complete** — nothing half-implemented, no debug residue, no125 stubbed-and-forgotten path.126- **Clean** — no secrets, no accidental files, no unrelated churn127 padding the diff.128- **Coherent** — one logical unit per PR (or split decided).129- **Tested** — the change is covered, or the coverage gap is named130 (→ `plan-test-coverage`). Existing tests are not broken.131- **Safe** — migrations backward-compatible; flags default off; no132 breaking API change to a live consumer without a note.133134---135136## Phase 3 — Commit [LOW freedom — run exactly]137138Stage deliberately (`git add` the intended files — not blanket139`git add .` if untracked cruft exists). Hand message-writing to140**`workflow-git-commit`** for conventional-commit format. One commit per141logical change; a split PR set gets its own commits per PR. Never bundle142unrelated changes in one commit.143144---145146## Phase 4 — Push & open the PR [LOW freedom — run exactly]147148- Push the feature branch (`git push -u origin <branch>`). Never149 force-push a shared branch.150- Open the PR against main via **`workflow-pr`**, with a complete151 description: what changed and why, how it was tested, any migration /152 flag / rollout notes, and links to the relevant `docs-adr` or `BL-`153 backlog items if this closes them. A reviewer should not have to154 reverse-engineer intent.155- Confirm the repo's aggregator / required checks fire on the PR156 (`housekeep-gates` / `workflow-quality-gate` if those exist here).157 This skill does not run those sweeps; it makes sure they are wired158 to fire.159160---161162## Phase 5 — Drive to merge-ready [LOW freedom — hand off]163164Hand to **`babysit`** to keep the PR merge-ready: address bot / review165feedback, resolve straightforward conflicts, fix red CI, loop until166green and reviewed. **Stop at merge-ready — do not merge.** The human167(or a separate release step) makes the merge call. This job ends at168"green, reviewed, and waiting for the button."169170---171172## Definition of Done173174- [ ] Working tree snapshotted; confirmed on a feature branch, not main175- [ ] Full pending scope (unstaged + staged + untracked + unpushed)176 reviewed as one unit via `audit-code-review`177- [ ] Release-lens checks done: coherence, completeness, no debug / stub178 residue, no accidental inclusions, migration / flag safety179- [ ] Self-critique rubric passed (complete / clean / coherent / tested /180 safe); blockers surfaced, not papered over181- [ ] Split decision made; multi-concern work routed to `split-to-prs`182- [ ] Committed via `workflow-git-commit` (conventional, one logical183 unit per commit)184- [ ] Pushed to a feature branch (no force-push); PR opened via185 `workflow-pr` with a complete description186- [ ] Aggregator / required checks confirmed firing on the PR187- [ ] Driven to merge-ready via `babysit`; **not** merged188189## Output format1901911. **Pending scope** — files by state; what's included1922. **Review summary** — `audit-code-review` findings + release-lens193 findings, severity-ordered1943. **Readiness verdict** — GO / SPLIT / BLOCKED, with the self-critique195 rubric result1964. **Actions taken** — commits made, branch pushed, PR link1975. **Merge-ready status** — CI state, outstanding review items, what198 remains before the human merges199200Stop at merge-ready. Handoffs: `audit-code-review`, `split-to-prs`,201`workflow-git-commit`, `workflow-pr`, `babysit`, `plan-secrets-audit`202(if secrets suspected).