一键导入
suede-ship-gate
Make CI hold the line: path-aware builds, required checks, branch protection, duplicate pipeline repair, and merge gates that do not deadlock.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Make CI hold the line: path-aware builds, required checks, branch protection, duplicate pipeline repair, and merge gates that do not deadlock.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
The pack's contract/customer-service negotiator, proven outside a repo: scans an Amazon account for restocking fees, short refunds, and forgotten or overpriced digital subscriptions (Prime Video Channels like Britbox/Starz/AMC+/Paramount+, Audible membership, Kindle Unlimited, Prime itself) — money Amazon is quietly holding or billing that the owner never noticed — then drives Amazon's live chat to get fees waived, refunds issued, or unused subscriptions canceled and the last charge refunded. Recovered $448.31 in one sitting — including a full refund on an item Amazon had already denied once, with no return required. Use this whenever the user mentions Amazon returns, restocking fees, an Amazon refund that looks short, a forgotten subscription (Britbox, Starz, Audible, Kindle Unlimited, etc.), disputing an Amazon charge, checking whether a return was fully refunded, auditing recurring Amazon charges, or asks something like 'did I get charged for that return', 'am I still paying for Britbox', or 'is Amazon sti
The pack's contract negotiator, generalized beyond Amazon: a recurring-charge auditor that finds forgotten, unused, or overpriced subscriptions across any service (Netflix, Spotify, Hulu, Disney+, gym memberships, SaaS tools, news sites, app subscriptions) and either cancels them directly or negotiates a refund/waiver through that service's own support channel. Complements amazon-returns-recovery, which stays scoped to Amazon returns/restocking fees and Amazon-billed subscriptions (Prime Video Channels, Audible, Kindle Unlimited) — this skill covers everything billed outside Amazon: direct-bill streaming and software, App Store and Google Play subscriptions, and PayPal-billed recurring payments. Use this whenever the user wants to audit recurring charges generally, asks what subscriptions they're paying for, mentions a specific non-Amazon subscription (Netflix, Spotify, a gym, a SaaS tool, etc.), wants to find and cancel unused subscriptions, or asks something like 'what am I still paying for', 'find my subsc
Umbrella workflow for 25 public skills: copy, design, code review, SEO, launch packaging, MCP QA, iOS conversion, and creator workflows.
Claude-directed parallel OpenAI Codex CLI worker fleet for bulk generation. Use when a job is high-volume, well-specified, and splits into independent worker-sized tasks (content batches, test generation, bulk refactors) and Codex CLI is installed and logged in. Claude decomposes, briefs, spawns codex exec runs in parallel, and review-gates every output. NOT FOR: multi-lane Claude agents coordinating one complex change (use suede-agent-teams); low-volume, judgment-dense copy Claude should write itself (use suede-copy or johnny-suede-write).
Design and write polished product surfaces people understand fast: landing pages, dashboards, campaigns, restyles, UI copy, and visual QA.
Make Suede interfaces feel intentional: tokens, color, components, type, motion, dark mode, and visual QA for shipped screens.
| name | suede-ship-gate |
| description | Make CI hold the line: path-aware builds, required checks, branch protection, duplicate pipeline repair, and merge gates that do not deadlock. |
Set up CI and branch protection that actually block a bad merge — in any repo, any stack. The output is a working pipeline plus the exact protection settings, not advice.
Runs only when asked. This skill never auto-fires on a commit, push, or other side effect of unrelated work — invoke it explicitly (set up CI, protect main, fix this hanging check).
Run this in whatever folder you point it at. Detect first, never assume. Nothing here is hardcoded to a specific project, monorepo layout, or package manager.
From the repo root, inventory:
package.json, requirements.txt / pyproject.toml, go.mod, Cargo.toml, Gemfile. A repo may hold one app or many; build for what's actually there.package-lock.json (npm), pnpm-lock.yaml (pnpm), yarn.lock (yarn), bun.lockb (bun). Two lockfiles in one app is a bug to fix first (Lane 3)..github/workflows/*. Do not duplicate a job that already exists — extend or reconcile it..nvmrc, package.json engines, .python-version, pytest.ini/pyproject. Pin CI to these; never hardcode a guess.vercel.json / .vercel, netlify.toml, a Dockerfile. If the platform skips non-prod builds (e.g. Vercel ignoreCommand kills previews), CI is the only pre-merge build signal — so a build job is mandatory.scripts / test config and use the real ones (test, test:run, lint, build). Don't invent commands.Do not write a single workflow line until this inventory is complete.
Path-filtered jobs skip when their paths aren't touched. A skipped job that is a required status check leaves the PR pending forever. So never require the path-filtered jobs directly. Instead add one aggregator that depends on all of them:
ci-success:
if: always()
needs: [<every app job>]
runs-on: ubuntu-latest
steps:
- name: Gate on all jobs
run: |
for r in ${{ join(needs.*.result, ' ') }}; do
[ "$r" = "success" ] || [ "$r" = "skipped" ] || { echo "blocked by: $r"; exit 1; }
done
In branch protection, require only ci-success — never the individual jobs. This is the single thing that makes "protect main" work with change-based CI.
changes job (dorny/paths-filter or native paths:). Add an escape hatch so edits to the workflow file itself run everything.ci-success.npm ci, pnpm i --frozen-lockfile, yarn --immutable, bun install --frozen-lockfile). Two lockfiles means CI can install a different tree than ships — resolve before wiring CI..nvmrc / engines / .python-version, falling back to the platform default. Never a hardcoded guess that drifts from prod.permissions: contents: read unless a job genuinely needs more.ci-success, require branches up to date before merge, optional required PR review, block force-push and deletion, optionally include administrators.npm ci with no committed lockfile, or a lockfile for a different manager → fails or installs the wrong tree.node-version / python-version that doesn't match the app → green in CI, broken in prod.paths: never match → always skipped → a "green" check that tested nothing.The excuses that precede a broken gate:
.github/workflows/.gh api calls, if asked).End with a Simple explanation (plain, for a 10-year-old): one short paragraph, no jargon, saying what the gate now does and what it blocks — e.g. "Before anyone's changes join the main project, a robot builds and tests them. If the robot fails, the merge button locks."
Fictional repo acme-notes — a single Next.js 14 app at the repo root, npm, no CI yet. This is what Step 0 through Output actually produce.
Step 0 — Detect (inventory)
package.json with "next": "14.2.3". No monorepo, no apps/* split.package-lock.json present. No pnpm-lock.yaml or yarn.lock alongside it — clean..github/workflows/ does not exist. Nothing to extend or duplicate.package.json has "engines": { "node": ">=20.9.0" }. No .nvmrc. Pin CI to 20.9.0.vercel.json present with the standing ignoreCommand that kills preview builds ([ "$VERCEL_ENV" != "production" ] && exit 0 || exit 1). Previews never build on Vercel — CI is the only pre-merge build signal. Build job is mandatory, not optional.package.json scripts are build, lint (next lint), and test (vitest run). No test:run alias, no separate typecheck script — tsc --noEmit is not wired up as its own script, so it's added as a CI step directly.Deliverable 1 — workflow file (.github/workflows/ci.yml)
name: CI
on:
pull_request:
push:
branches: [main]
permissions:
contents: read
jobs:
changes:
runs-on: ubuntu-latest
outputs:
app: ${{ steps.filter.outputs.app }}
steps:
- uses: actions/checkout@v4
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
app:
- '**'
- '!**.md'
- '.github/workflows/ci.yml'
app:
needs: changes
if: needs.changes.outputs.app == 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20.9.0'
cache: 'npm'
- run: npm ci
- run: npm run lint
- run: npx tsc --noEmit
- run: npm run test
- run: npm run build
ci-success:
if: always()
needs: [app]
runs-on: ubuntu-latest
steps:
- name: Gate on all jobs
run: |
for r in ${{ join(needs.*.result, ' ') }}; do
[ "$r" = "success" ] || [ "$r" = "skipped" ] || { echo "blocked by: $r"; exit 1; }
done
One app, so path-filtering exists mainly as the escape hatch (doc-only edits skip the app job; workflow-file edits always run it). ci-success is still required, not app directly — a single-app repo can still deadlock if app ever gains its own paths: filter later, so the aggregator habit holds even here.
Deliverable 2 — branch-protection settings
Apply to main:
ci-success only (not app, not changes).gh api repos/acme/acme-notes/branches/main/protection \
--method PUT \
-H "Accept: application/vnd.github+json" \
-f 'required_status_checks[strict]=true' \
-f 'required_status_checks[contexts][]=ci-success' \
-f 'enforce_admins=true' \
-f 'required_pull_request_reviews[required_approving_review_count]=1' \
-F 'restrictions=null' \
-f 'allow_force_pushes=false' \
-f 'allow_deletions=false'
Deliverable 3 — short report
Repo:
acme-notes(single Next.js app, npm, Vercel). Package manager: npm, one lockfile,npm cimatches. CI added:.github/workflows/ci.yml— one path-filteredappjob (lint, typecheck, test, build) behind aci-successaggregator. Required check:ci-successonly. Node pinned: 20.9.0, frompackage.jsonengines(no.nvmrcfound). Fix first: nothing blocking — no dual lockfiles, no existing workflow to reconcile, no runtime mismatch. Note: Vercel previews are disabled byignoreCommand, so this CI build is the only pre-merge proof the app compiles. Do not treat "Vercel deployed" as a build signal for PRs.Simple explanation: Before any change joins the main project, a robot installs it, checks the code style, checks the types, runs the tests, and builds it. If any step fails, the merge button locks. Nothing reaches the live site without passing through the robot first.
After a deploy lands:
Ship verdict after post-deploy: verified (all checks pass) | watch (minor anomalies, monitoring) | rollback (critical failure, initiate rollback immediately).
Generate; don't enforce. This skill writes workflow files and tells you the protection settings — it does not push, flip branch protection, or change repo access on its own. Verify the detected stack before applying. Works in any repo: it detects rather than assumes Suede or any specific project.