brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
audit-env-parityRead-only audit of config parity across dev, staging, and prod: missing or misnamed vars, drifted flags, hardcoded values, reused secrets. Use when "works locally but not in prod", "audit our environments", or "config drift".
Independent GitHub snapshot · Automated classification · Original documentation governs
Degree of freedom: MIXED — Phases 0–1 [HIGH freedom]; Phase 2
three-way name diff [LOW freedom — names only, never values].
Read-only. Find where environments disagree in ways that cause "works on my machine", silent prod misbehavior, or leaked secrets.
The classic outage: a new env var added locally, referenced in code, never set in prod — deploy is green, feature is broken.
Never print secret values. Present the gap matrix; do not change host config until approved.
| Skill | Owns |
|---|---|
| audit-env-parity (this) | Same keys exist (and mean the same) in every env |
workflow-environment-ready | Local machine can build/test/reach services |
plan-secrets-audit | Credential exposure in git / over-scoped keys |
plan-data-integrity | Destructive ops; staging pointing at prod is shared |
workflow-feature-flag | Flag rollout process, not "staging flag ≠ prod flag" |
Do not fire for "did I commit a key" → plan-secrets-audit.
Do not fire for "prove this laptop can run the suite" →
workflow-environment-ready.
process.env / import.meta.env read and whether the name exists in each envObserve:
process.env.STRIPE_WEBHOOK_SECRETused inapp/api/stripe/route.ts; name absent from Vercel prod; present locally. Interpret: deploy is green; webhook verify fails only in prod. Classify: referenced-but-unset (prod). Severity: P0. Finding:STRIPE_WEBHOOK_SECRET| prod absent | P0 | set the name; never print the value
.env*, .env.example, Vercel/Supabase/Fly dashboards, CI secrets,
runtime configprocess.env.X / import.meta.env / config object readReferenced-but-unset — Code reads it; an env that runs that path lacks it.
P0 if prod-missing. Diff .env.example against real usage.
Set-but-unreferenced — Dead vars. Low severity; they hide real config.
Naming drift — API_URL vs NEXT_PUBLIC_API_URL vs VITE_API_URL.
Public prefixes shipping a secret → Critical; hand to plan-secrets-audit.
Value drift that invalidates staging — Flags, timeouts, model names that make staging a different app than prod.
Hardcoded-should-be-config — URLs, regions, magic values in code. Prod pointing at a dev resource (or reverse).
Secret reuse — Same secret across dev/staging/prod (a dev leak is prod). Prod secrets reachable from a dev context.
Service targeting — Staging DB/bucket/queue must not be prod
(plan-data-integrity if a test would hit real data).
Diff names only (never values) between code-demands × local-has × prod-has. A name present in all three with unknown value mismatch is still a manual review flag.
.env.example drift flaggedplan-secrets-audit; staging→prod data → plan-data-integrityplan-secrets-auditworkflow-environment-ready — local preflightplan-secrets-audit — exposure / rotationplan-data-integrity — staging hitting prodplan-backup-dr — reconstructability of config after lossworkflow-feature-flag — rollout, not parity