A go/no-go launch review that runs against your real repo: vulnerable dependencies, leaked secrets, lock-taking migrations rehearsed on a scratch Postgres, rollback, observability, config drift and a staging load test, each ending in evidence.
Eight skills that review a release the way a senior SRE would, as scripts against your own repository, each ending in a machine-checked gate that prints PASS, FAIL or BLOCKED with file, line and evidence. Write the readiness contract (tier, SLO, release base, staging host, waivers); look up every locked dependency in OSV and scan the working tree and full git history for live credentials; review pending Postgres migrations for locks, rewrites and renames the running code still reads, then rehearse them on a throwaway Postgres with seed rows, recording locks, measured table rewrites and a down/up round trip; prove the previous release can be redeployed onto the new schema, with backups and a runbook; find swallowed errors, missing timeouts and missing error tracking; compare the env vars the code reads against what production defines; load-test staging open-loop against your SLO; and roll it all into one evidence-bound go/no-go report that refuses stale gates. Covers Node/TypeScript and Python services on Postgres. Python 3 standard library only, no installs. It reviews code and configuration, not business logic or authorization, and the report says what it did not check. Requires an AI that can run commands on your computer (Claude Code, Codex or Cursor). The worked example is a fictional invoicing API; every skill reads your own contract first.
Ledgerline is not a real company. An invoicing API: Express and Postgres, a Python worker and a Vite client. Ledgerline is built as a real git repository with 29 planted defects, plus a fixed twin. The whole chain ran on both from a clean checkout, using the scripts exactly as the skills ship them.
Launch candidate: NO-GO, with all 29 planted findings raised
| Gate |
|---|
| Skill |
|---|
| Status |
|---|
| Blocker |
|---|
| Major |
|---|
| Minor |
|---|
| contract | readiness-contract | PASS | 0 | 0 | 0 |
| dependencies | dependency-secret-scan | FAIL | 1 | 1 | 4 |
| secrets | dependency-secret-scan | FAIL | 3 | 0 | 0 |
| migrations | migration-safety | FAIL | 3 | 4 | 4 |
| rollback | rollback-path | FAIL | 2 | 3 | 2 |
| observability | observability-coverage | FAIL | 0 | 6 | 1 |
| config | config-drift | FAIL | 2 | 0 | 6 |
| load-test | staging-load-test | FAIL | 0 | 2 | 0 |
Fixed twin: GO, with every gate PASS (3 minor notes)
From the report
MIG-RENAME-COLUMN · db/migrations/20260915_004_customer_email.sql:2
customers.email -> email_address; code still uses 'email': src/routes/customers.js:6
Fix: Expand/contract: add the new name, dual-write, move reads, drop the old one in a later release.
MIG-REHEARSAL-FAILED · db/migrations/20260910_003_invoice_currency.sql
Statement at line 3: column "currency" of relation "invoices" contains null values.
Fix: Fix the migration; it fails on a database shaped like production.
SECRET-STRIPE-LIVE · src/stripe.js
sk…(45 chars, sha256 3454fdc6) in git history only: deleted from HEAD, still recoverable.
Fix: Revoke and rotate it at the provider first (deleting the file does not revoke it), then move it to the secret store.
CONFIG-PUBLIC-SECRET · web/src/config.ts:2
VITE_STRIPE_SECRET_KEY: the VITE_ prefix bundles it into browser JavaScript.
Fix: Move the secret server-side (no public prefix) and rotate it.
The load test in the proof runs against a local stand-in server shipped with the fixture, not a real deployment, and the report labels it LOCAL.
Optional
Questions or a problem with 1.0.0? Email support@skillme.dev.
Arranged in the author's recommended order. Walk through them in sequence, or open any one on its own.
Starts a production readiness review of a real repository – detects the stack (Node/TS or Python, framework, Postgres, migration tool, deploy target, CI), probes which tools the machine has.
Runs the two supply-side launch gates on a real repository – parses every lockfile (npm, pnpm, yarn, pip requirements, Poetry, uv, Pipfile), checks lock drift and unpinned or git-sourced dependencies.
Reviews the Postgres migrations a release will run before they reach production – finds the statements that lock or rewrite busy tables (index builds without CONCURRENTLY, NOT NULL columns without defaults, type changes, SET NOT NULL.
Checks whether a release can be undone before it ships – that the previous version is still redeployable (immutable image tags or a platform with native rollback).
Checks that a service's failures will be seen before launch – inventories HTTP routes (Express, Fastify, Hono, Nest, Next.js route handlers and API routes, SvelteKit endpoints, Nuxt server routes, FastAPI, Flask, Django) and background jobs.
Compares the environment variables a service actually reads (process.env, import.meta.env, os.environ, os.getenv, destructuring, with or without defaults) against .env.example and against the variable NAMES exported from each deployed environment.
Load-tests a staging service against its contract SLO before launch with an open-loop, fixed-arrival-rate generator (Python standard library, no k6 or Locust install) – weighted scenarios, warm-up excluded.
Turns the production readiness gates into one go/no-go decision with evidence – reads every gate file, rejects gates run on a different commit or before uncommitted changes, re-applies the contract's current waivers (owner, reason, expiry.