STUD
← Plays

Build · Create · Engineering

Blameless post-incident review register

A root-cause register where each incident carries a why-chain, a stated root cause, and owned, dated corrective actions, so the same incident does not recur.

You receive: A structured RCA register (JSON) that passes the why-depth, root-cause, severity, and owned-dated-action checks.

Part of Keep App Running

What's verified: STUD verifies the submitted register (JSON) is structurally complete: your minimum number of incidents, each with a unique id, a why-chain of at least the required depth, a stated root cause, a severity in your set, and the minimum owned, ISO-dated, status-tracked corrective actions. STUD does NOT judge whether the stated root cause is correct or whether the corrective actions will actually prevent recurrence; it checks the register's completeness.

Opens soon

Cost20 credits
ProtectionHeld until verified delivery

This play is verified and ready. It opens soon, once sign-in and payments are live.

Example

A sample of what this play produces. Your result is generated for your inputs.

Incident IdINC-2026-0709-01
Why Chain
  • Production served the new Next.js build before the Neon schema migration for that release had run, so a query referenced a column that did not exist yet and the page 500'd.
  • The deploy pipeline built and served the app without a preceding, enforced schema-apply step.
  • The prior process (D-021) treated catalog/schema sync as a manual, human-run step rather than a build dependency.
  • No mechanism made 'migrate, then seed and sync, then serve' an ordering guarantee inside the Vercel build itself.
  • The team had not yet decided that auto-apply on deploy (D-022) was safer than a manual pre-deploy sync gate.
Root CauseDeploy ordering had no enforced dependency between schema migration and serving new code, so a schema-first assumption could silently break at runtime.
Severityhigh
Corrective Actions
ActionOwner RoleDue DateStatus
Add scripts/deploy-migrate.mts to the production build: drizzle-kit migrate, then seed-catalog, then sync-catalog --apply, before the app servesplatform-eng2026-07-09done
Make the build fail closed if DATABASE_URL is absent on a production build, instead of serving stale schemaplatform-eng2026-07-09done
Prevents Recurrencetrue
Incident IdINC-2026-0801-02
Why Chain
  • A pull request passed the local pre-commit gate recipe green but failed the required CI gate.
  • The local gate script ran only three of the checks the CI gate workflow actually runs.
  • The local recipe and the CI workflow were two independently maintained step lists with nothing comparing them.
  • No test locked the local recipe's ordered steps to the CI workflow's ordered steps, so drift stayed invisible until a change exercised the missing step.
Root Causegate:local and the CI gate workflow could drift apart because no automated check enforced they stayed identical.
Severitymedium
Corrective Actions
ActionOwner RoleDue DateStatus
Add gate-local-sync.test.ts asserting gate:local runs the exact same ordered steps as .github/workflows/gate.ymlplatform-eng2026-08-01done
Document gate:local in CLAUDE.md as the one command that reproduces the CI gate exactlyplatform-eng2026-08-01done
Prevents Recurrencetrue

Get early access to STUD the day it goes live.