Production Audit
Use this skill when the user asks whether an application is ready to ship, what
could break in production, or what must be fixed before a launch. This is a
maintainer-safe rewrite of the stale community production-audit idea: it keeps
the useful production-readiness lens and removes unpinned external execution and
third-party data sharing.
When to Use
- The user asks "is this production-ready", "what would break in prod", "what
did we miss", "audit this repo", or "ready to ship?"
- A feature was merged and needs a pre-deploy or post-merge risk pass.
- A public launch, demo, customer rollout, or investor walkthrough is close.
- CI is green but the user wants production risk, not only test status.
- A deployed URL, release branch, PR, or current checkout is available for
evidence gathering.
When Not to Use
- During active implementation when the right lens is line-level secure coding;
use
security-review first.
- For pure libraries, templates, docs-only repos, or scaffolds unless the user
wants packaging/release readiness rather than application readiness.
- When the user asks for a formal compliance audit. This skill is engineering
triage, not legal, financial, medical, or regulatory certification.
- When the only available evidence is a product idea with no repo, deployment,
CI, or runtime surface.
How It Works
Build the audit from local and user-authorized evidence. Do not run unpinned
remote code, upload repository contents to third-party services, or call
external scanners unless the user explicitly approves that specific tool and
data flow.
Use this order:
- Establish the release surface.
- Read recent changes and current branch state.
- Inspect runtime, auth, data, payment, background-job, AI, and deployment
boundaries that actually exist in the repo.
- Check CI, tests, migrations, environment documentation, and rollback path.
- Produce a short ship/block recommendation with specific fixes.
Evidence Checklist
Start with cheap, local signals:
git status --short --branch
git log --oneline --decorate -20
git diff --stat origin/main...HEAD
Then inspect the project-specific surface:
- Package scripts, CI workflows, release scripts, Docker files, and deployment
manifests.
- API routes, webhooks, auth middleware, background workers, cron jobs, and
database migrations.
- Environment variable documentation and startup checks.
- Observability hooks, error reporting, logs, health checks, and dashboards.
- Rollback, seed, migration, and backfill instructions.
- E2E coverage for the user paths that matter most.
If a deployed URL is in scope, use browser or HTTP checks only against that URL
and avoid credentialed actions unless the user supplies a safe test account.
Risk Lenses
Security And Auth
- Are public routes, API routes, and admin routes clearly separated?
- Are auth and authorization enforced server-side?
- Are secrets kept out of client bundles, logs, example output, and checked-in
files?
- Are rate limits, CSRF protections, CORS policy, and upload validation present
where the app needs them?
- Does the AI or agent surface defend against prompt injection, tool abuse, and
untrusted content crossing into privileged actions?
Data Integrity
- Do migrations run forward cleanly and have a rollback or recovery plan?
- Are destructive migrations, backfills, and data imports staged safely?
- Do database policies, grants, and service-role boundaries match the app's
tenancy model?
- Are retries idempotent for writes, jobs, and webhook handlers?
Payments And Webhooks
- Are webhook signatures verified before parsing trusted payload fields?
- Is each payment, subscription, or fulfillment webhook idempotent?
- Are replay, duplicate delivery, and out-of-order delivery handled?
- Are test-mode and live-mode credentials separated?
Operations
- Can the app start from a clean checkout using documented commands?
- Are required environment variables named, validated, and fail-fast?
- Is there a health check that proves dependencies are reachable?
- Are deploy, rollback, and incident-owner paths documented?
- Are logs useful without leaking secrets or personal data?
User Experience
- Are the launch-critical paths covered on desktop and mobile?
- Are forms usable on mobile without input zoom, layout overlap, or blocked
submission states?
- Do loading, empty, error, and permission-denied states tell the user what
happened?
- Is there a support or recovery path when a critical operation fails?
Scoring
Use scores to force prioritization, not to imply mathematical certainty.
| Band |
Score |
Meaning |
| Blocked |
0-49 |
Do not ship until the top risks are fixed |
| Risky |
50-69 |
Ship only behind a small rollout or internal beta |
| Launchable With Caveats |
70-84 |
Ship if owners accept the listed risks |
| Strong |
85-100 |
No obvious launch blockers from available evidence |
Cap the score at 69 if any of these are true:
- Authentication or authorization is missing on sensitive data.
- Payment or fulfillment webhooks are not idempotent.
- Required migrations cannot be run safely.
- Secrets are exposed in client bundles, logs, or committed files.
- There is no rollback path for a high-impact release.
Cap the score at 84 if CI is not green or the launch-critical path was not
tested end to end.
Output Format
Lead with one sentence:
Production audit: 76/100, launchable with caveats, with webhook idempotency and rollback docs as the two risks to fix before public launch.
Then list:
Blockers: must-fix items before deploy.
High-value fixes: next fixes if the user wants to improve the score.
Evidence checked: files, commands, CI, deployed URL, or PRs inspected.
Evidence missing: what would change confidence if provided.
Next action: one concrete fix or verification step.
Keep strengths short. The user asked for readiness, so the useful answer is the
remaining risk and the next action.
Example
User:
is this ready to ship?
Response:
Production audit: 68/100, risky, because Stripe webhooks are verified but not idempotent and there is no rollback note for the pending migration.
Blockers:
- Add idempotency for `checkout.session.completed` before fulfilling orders.
- Write and test the rollback path for `20260511_add_billing_state.sql`.
High-value fixes:
- Add a health check that verifies database and payment-provider reachability.
- Add one E2E path for upgrade, webhook fulfillment, and billing-page refresh.
Evidence checked:
- `api/stripe/webhook.ts`
- `db/migrations/20260511_add_billing_state.sql`
- GitHub Actions run for the release branch
Next action: Want me to patch webhook idempotency first?
Anti-Patterns
- Running
npx <package>@latest or a remote scanner as the default audit path.
- Uploading source, secrets, customer data, or private topology to an external
audit service without explicit approval.
- Producing a score without naming the evidence checked.
- Treating green CI as production readiness.
- Ending with a generic "let me know what you want to do."
See Also
- Skill:
security-review
- Skill:
deployment-patterns
- Skill:
e2e-testing
- Skill:
tdd-workflow
- Skill:
verification-loop
Source: affaan-m/ECC → skills/production-audit/SKILL.md
1---2name: production-audit-23description: Local-evidence production readiness audit for shipped apps, pre-launch reviews, post-merge checks, and "what breaks in prod?" questions without sending repo data to an external audit service.4---5# Production Audit
6
7Use this skill when the user asks whether an application is ready to ship, what
8could break in production, or what must be fixed before a launch. This is a
9maintainer-safe rewrite of the stale community production-audit idea: it keeps
10the useful production-readiness lens and removes unpinned external execution and
11third-party data sharing.
12
13## When to Use
14
15- The user asks "is this production-ready", "what would break in prod", "what
16 did we miss", "audit this repo", or "ready to ship?"
17- A feature was merged and needs a pre-deploy or post-merge risk pass.
18- A public launch, demo, customer rollout, or investor walkthrough is close.
19- CI is green but the user wants production risk, not only test status.
20- A deployed URL, release branch, PR, or current checkout is available for
21 evidence gathering.
22
23## When Not to Use
24
25- During active implementation when the right lens is line-level secure coding;
26 use `security-review` first.
27- For pure libraries, templates, docs-only repos, or scaffolds unless the user
28 wants packaging/release readiness rather than application readiness.
29- When the user asks for a formal compliance audit. This skill is engineering
30 triage, not legal, financial, medical, or regulatory certification.
31- When the only available evidence is a product idea with no repo, deployment,
32 CI, or runtime surface.
33
34## How It Works
35
36Build the audit from local and user-authorized evidence. Do not run unpinned
37remote code, upload repository contents to third-party services, or call
38external scanners unless the user explicitly approves that specific tool and
39data flow.
40
41Use this order:
42
431. Establish the release surface.
442. Read recent changes and current branch state.
453. Inspect runtime, auth, data, payment, background-job, AI, and deployment
46 boundaries that actually exist in the repo.
474. Check CI, tests, migrations, environment documentation, and rollback path.
485. Produce a short ship/block recommendation with specific fixes.
49
50## Evidence Checklist
51
52Start with cheap, local signals:
53
54```text
55git status --short --branch
56git log --oneline --decorate -20
57git diff --stat origin/main...HEAD
58```
59
60Then inspect the project-specific surface:
61
62- Package scripts, CI workflows, release scripts, Docker files, and deployment
63 manifests.
64- API routes, webhooks, auth middleware, background workers, cron jobs, and
65 database migrations.
66- Environment variable documentation and startup checks.
67- Observability hooks, error reporting, logs, health checks, and dashboards.
68- Rollback, seed, migration, and backfill instructions.
69- E2E coverage for the user paths that matter most.
70
71If a deployed URL is in scope, use browser or HTTP checks only against that URL
72and avoid credentialed actions unless the user supplies a safe test account.
73
74## Risk Lenses
75
76### Security And Auth
77
78- Are public routes, API routes, and admin routes clearly separated?
79- Are auth and authorization enforced server-side?
80- Are secrets kept out of client bundles, logs, example output, and checked-in
81 files?
82- Are rate limits, CSRF protections, CORS policy, and upload validation present
83 where the app needs them?
84- Does the AI or agent surface defend against prompt injection, tool abuse, and
85 untrusted content crossing into privileged actions?
86
87### Data Integrity
88
89- Do migrations run forward cleanly and have a rollback or recovery plan?
90- Are destructive migrations, backfills, and data imports staged safely?
91- Do database policies, grants, and service-role boundaries match the app's
92 tenancy model?
93- Are retries idempotent for writes, jobs, and webhook handlers?
94
95### Payments And Webhooks
96
97- Are webhook signatures verified before parsing trusted payload fields?
98- Is each payment, subscription, or fulfillment webhook idempotent?
99- Are replay, duplicate delivery, and out-of-order delivery handled?
100- Are test-mode and live-mode credentials separated?
101
102### Operations
103
104- Can the app start from a clean checkout using documented commands?
105- Are required environment variables named, validated, and fail-fast?
106- Is there a health check that proves dependencies are reachable?
107- Are deploy, rollback, and incident-owner paths documented?
108- Are logs useful without leaking secrets or personal data?
109
110### User Experience
111
112- Are the launch-critical paths covered on desktop and mobile?
113- Are forms usable on mobile without input zoom, layout overlap, or blocked
114 submission states?
115- Do loading, empty, error, and permission-denied states tell the user what
116 happened?
117- Is there a support or recovery path when a critical operation fails?
118
119## Scoring
120
121Use scores to force prioritization, not to imply mathematical certainty.
122
123| Band | Score | Meaning |
124| --- | --- | --- |
125| Blocked | 0-49 | Do not ship until the top risks are fixed |
126| Risky | 50-69 | Ship only behind a small rollout or internal beta |
127| Launchable With Caveats | 70-84 | Ship if owners accept the listed risks |
128| Strong | 85-100 | No obvious launch blockers from available evidence |
129
130Cap the score at `69` if any of these are true:
131
132- Authentication or authorization is missing on sensitive data.
133- Payment or fulfillment webhooks are not idempotent.
134- Required migrations cannot be run safely.
135- Secrets are exposed in client bundles, logs, or committed files.
136- There is no rollback path for a high-impact release.
137
138Cap the score at `84` if CI is not green or the launch-critical path was not
139tested end to end.
140
141## Output Format
142
143Lead with one sentence:
144
145```text
146Production audit: 76/100, launchable with caveats, with webhook idempotency and rollback docs as the two risks to fix before public launch.
147```
148
149Then list:
150
151- `Blockers`: must-fix items before deploy.
152- `High-value fixes`: next fixes if the user wants to improve the score.
153- `Evidence checked`: files, commands, CI, deployed URL, or PRs inspected.
154- `Evidence missing`: what would change confidence if provided.
155- `Next action`: one concrete fix or verification step.
156
157Keep strengths short. The user asked for readiness, so the useful answer is the
158remaining risk and the next action.
159
160## Example
161
162User:
163
164```text
165is this ready to ship?
166```
167
168Response:
169
170```text
171Production audit: 68/100, risky, because Stripe webhooks are verified but not idempotent and there is no rollback note for the pending migration.
172
173Blockers:
174- Add idempotency for `checkout.session.completed` before fulfilling orders.
175- Write and test the rollback path for `20260511_add_billing_state.sql`.
176
177High-value fixes:
178- Add a health check that verifies database and payment-provider reachability.
179- Add one E2E path for upgrade, webhook fulfillment, and billing-page refresh.
180
181Evidence checked:
182- `api/stripe/webhook.ts`
183- `db/migrations/20260511_add_billing_state.sql`
184- GitHub Actions run for the release branch
185
186Next action: Want me to patch webhook idempotency first?
187```
188
189## Anti-Patterns
190
191- Running `npx <package>@latest` or a remote scanner as the default audit path.
192- Uploading source, secrets, customer data, or private topology to an external
193 audit service without explicit approval.
194- Producing a score without naming the evidence checked.
195- Treating green CI as production readiness.
196- Ending with a generic "let me know what you want to do."
197
198## See Also
199
200- Skill: `security-review`
201- Skill: `deployment-patterns`
202- Skill: `e2e-testing`
203- Skill: `tdd-workflow`
204- Skill: `verification-loop`
205
206---
207
208**Source:** [`affaan-m/ECC`](https://github.com/affaan-m/ECC) → `skills/production-audit/SKILL.md`