Community编程与开发github.com

tderoussel/ship-gate

Verification gate for a Next.js-on-Vercel + Supabase + GitHub Actions stack, to run before claiming anything is shipped, deployed, live, merged, passing, or done. Use before saying a change is in production, before merging a PR, before reporting CI green, and before writing any status into a document — even if the user does not ask for verification. Trigger phrases include "is it live", "did it deploy", "ship it", "merge it", "is CI green", "confirm prod", "did that work". Encodes traps where the obvious check returns a false pass.

ship-gate 是什么?

ship-gate is a Claude Code agent skill that verification gate for a Next.js-on-Vercel + Supabase + GitHub Actions stack, to run before claiming anything is shipped, deployed, live, merged, passing, or done. Use before saying a change is in production, before merging a PR, before reporting CI green, and before writing any status into a document — even if the user does not ask for verification. Trigger phrases include "is it live", "did it deploy", "ship it", "merge it", "is CI green", "confirm prod", "did that work". Encodes traps where the obvious check returns a false pass.

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/tderoussel/agent-skills/tree/main/skills/ship-gate

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Ship gate

Every rule here exists because the obvious check once returned a false pass. Run the gate before the claim, not after.

Adapt the specifics to your stack; the shape — what would make this claim false? — is the transferable part.

The claim rule

A claim about production requires a query against production.

A passing test is not prod. A merged PR is not prod. A green deploy is not prod. Each of those is a claim about a different system than the one you are asserting on.

If no human has eyeballed the result, it is not "verified" — say what you actually checked instead.

Deploy verification

  • Know what actually triggers a deploy. On a git-integrated host it is the push, not a CLI invocation. Deploying by CLI when the project deploys by push produces a build that is not the one users get.
  • Check the account that owns the project. A locally logged-in CLI may be authenticated as a personal account that does not own the production project — every command then succeeds against the wrong target, silently.
  • Verify with commit status against the deployed SHA, not a dashboard glance.
  • Confirm the deployment that is current production, not merely one that is READY. Several can be ready at once.
  • Edge/serverless functions deploy separately from the app. A merged PR does not deploy an edge function; check its version explicitly.
  • Client-only changes may need no function deploy — don't wait for one that will never come.
  • Re-fetch the live manifest before asserting a version. Parallel work bumps versions underneath you.

CI verification

  • Gate on every required context, not the first green one.
  • Never gate on a piped command. some-check | tail reports the exit code of tail, masking the real failure. In shells without PIPESTATUS (zsh differs from bash here), this is easy to get wrong — check the command's own status.
  • steps: 0 means the job never ran, not that it passed. A checks API can report a conclusion for a job that did no work.
  • A suspiciously fast failure with no steps is usually a billing or permissions problem, not a YAML problem.
  • Re-running only failed jobs replays a stale snapshot of the branch. Update the branch first, then re-run.
  • A checks list omits jobs that were never created. Absence of a failure is not evidence of a pass.
  • gh pr create requires an explicit --base. Chained heredocs around it can fail silently.

Type and lint gates

  • Large TypeScript projects may need an increased Node heap; without it tsc dies in a way that looks like a code error.
  • Know which directories your typechecker and linter actually cover. Edge-function directories are frequently excluded from both. If they run on a different runtime, check them with that runtime's own checker — a test job is not a type gate.
  • Build in worktrees or clean checkouts, not a working directory with uncommitted drift.

Database

  • Never push schema or run migrations casually against production. Apply schema through the reviewed path the project has chosen, once.
  • Call new stored procedures against the real database before believing them. Mocks hide runtime errors that only appear with real types and real ambiguity.
  • If the test suite mocks the database globally, a passing unit test proves nothing about the database.
  • Never compare-and-set on a trigger-managed column — the trigger changes it underneath the write.
  • Measure a change's blast radius against production data before merging. A filter that looks narrow against a local seed can match a very different share of real rows.

Environment traps

  • Never assume the machine's timezone — run date. Date-dependent tests fail on the offset, and the failure looks like a code bug.
  • An unset git identity can block deploys and surface as an unrelated network error.
  • Set host environment variables from a file rather than inline assignment; shells and CLIs can embed trailing newlines that corrupt the value invisibly.
  • Scheduled-job success is not job-effect success: a runner reporting succeeded means the invocation returned, not that the work happened. Verify the effect.

Output

State each gate as PASS (evidence) or NOT CHECKED (why).

Never imply a gate ran when it did not. If any gate fails or is unchecked, say plainly that the change is not verified — withholding the claim is correct.

Individual skills in this repo

This repo contains 8 individual skills — each has its own dedicated page.

tderoussel/codebase-audit

Runs a ranked, evidence-backed audit of a product, codebase, or subsystem, ending in a verify list that separates proven findings from inferred ones. Use when the user asks for an audit, a gap analysis, a deep read, a bug hunt, a readiness check, a re-audit, a state reconciliation, or asks what they are not seeing. Trigger phrases include "audit", "gap analysis", "what am I missing", "deep audit", "readiness", "bug hunt", "review the whole thing". Produces findings and a verify list; does not fix.

tderoussel/competitive-teardown

Researches a competing product against your own and produces a ranked build-or-ignore verdict, plus optional comparison-page copy. Use when the user names a competitor or asks how their product stacks up against one. Trigger phrases include "vs us", "competitor", "what does X have", "should we copy", "competitive gap", "teardown", "are we behind". Produces a ranked verdict with effort estimates and an explicit not-worth-copying list.

tderoussel/decision-council

Run a structured multi-perspective review of a decision instead of getting one agreeable answer. Use when the user says run a council, get me perspectives on this, should I do X, stress-test this decision, or is this a good idea.

tderoussel/fleet-brief

Authors a workstream brief for dispatching multiple parallel build agents across one codebase, with per-lane file ownership, shared-ground warnings, and a derived DO-NOT list. Use whenever work is about to be split across concurrent agents, workers, lanes, or waves — even if the user does not say "write a brief". Trigger phrases include "fan out", "parallel agents", "orchestrate this", "split into lanes", "workstreams", "run these in parallel", "review-gated build". Produces the brief; does not dispatch.

tderoussel/inbox-triage

Triage an email inbox — sort what needs a reply, draft the replies, flag what needs a decision, and surface what can be ignored or unsubscribed. Use when the user says triage my inbox, do my email, what's in my inbox, or clean up my email.

tderoussel/overnight-build

Composes an autonomous unattended Claude Code build prompt that survives usage-limit resets via BUILD_LOG.md checkpointing, plus the launcher that restarts it. Use when the user asks for an overnight build, an autonomous build, a build to run while they sleep, an unattended or unsupervised session, or any long build they will not be monitoring. Trigger phrases include "overnight build", "run overnight", "build while I sleep", "autonomous build", "let it run", "unattended". Produces a single copyable prompt; does not run the build.

tderoussel/session-log

Write a durable record of a work session — what was built, root-caused, or shipped — into the project's notes. Use when the user says log this session, write a session log, record this, or when a substantial piece of work has just finished and needs to be handed off to a future session.

tderoussel/vault-doctor

Audits and repairs an Obsidian vault's structural health — broken [[wikilinks]], ambiguous duplicate filenames, missing or malformed frontmatter, stale status markers, and hub notes whose state sections have gone cold. Use when the user asks about vault health, broken links, vault cleanup, dead links, orphan notes, tag consistency, or says the vault feels messy or out of date. Trigger phrases include "vault health", "broken links", "clean up the vault", "audit the vault", "is the vault current". Read-only by default; every repair is proposed before it is made.

相关技能