Post-Mortem
Explain why the failure escaped or grew, then measure whether each corrective
control reduces recurrence, detection, or impact risk. Take the code-level
cause from debugging; do not re-derive it. Close on deployed and falsified
controls, never on reflection.
When to use
- A failure reached users/production, escaped far downstream, caused material
loss, or exposed a process failure worth correcting.
- Skip an ordinary reproduced bug. Begin after the code-level cause and
immediate containment are known; if the cause is still unknown, invoke
debugging first.
Step 1: Control the record
- Open
assets/post-mortem-template.md. Fill Control and evidence handling first: readers, lifetime, redaction, expected reviewers and
approver rules.
- Fill
Summary and impact and Timeline from artifacts, not memory. Mark
every time observed or estimated.
Step 2: Find the structural cause
- Fill
Root cause and contributing conditions: paste the code-level cause
from debugging, then each condition that made introduction or impact
more likely. Name conditions, never a person. Keep several conditions
separate.
- Fill
Escape-path audit: freeze the gate and surface inventory with its
source digest, then mark each entry missing / too weak / skipped / stale / failed but ignored / held, with an accountable disposition per omission.
- Fill
Risk-reduction claim per action: prevent, detect earlier, limit
blast radius, or recover faster, with baseline, target, horizon, residual
risk. Never claim recurrence is impossible.
Step 3: Propose and get the actions accepted
Write each corrective action as proposed, mapped to a structural cause,
every action-row field filled.
Present and end the turn:
Post-mortem {{identifier}}
Impact: {{one line}} Structural cause: {{one line}} Escaped gate: {{one line}}
Actions: {{each with owner and date}}
1. Accept the actions
2. Request changes
3. Reject the analysis
4. Cancel
Recommendation: {{the answer the evidence and ownership support}} — {{one sentence}}.
Move an action out of proposed only on a complete trusted receipt for
the exact scope and dates. Record rejection, cancellation, or supersession
with its residual risk and replacement.
Step 4: Prove and track the controls
- Falsify every corrective gate you implement. Fill
Targeted fail-then-pass proof with raw evidence: fails on the captured incident or a
representative bad case, passes on the good control, pre-fix version did
not catch it.
- Track each control to an identity-bound receipt from the surface that
enforces it: CI, runtime, review, release, alerting, recovery. Never infer
from a summary.
- REQUIRED SUB-SKILL: invoke
verification-strategy for any change to
the battery itself. Add no duplicate gate nobody owns.
- At the predeclared date, compare baseline against target and check the
gate ran. Write
effective, ineffective, or inconclusive. Reopen on
either of the last two unless the exact approver rule accepts closure with
residual risk.
- Issue the immutable analysis with its
External lifecycle ledger to the
user-set path or the template default, under current storage authority.
In-repository record → a new candidate. Later events → append to the
ledger; never edit the issued analysis.
Action states
Record in the external ledger proposed → {owner-accepted | rejected | cancelled | superseded}, and for accepted:
implemented → falsified → deployed/enforced → effectiveness reviewed → effective → closed.
Let no prose, merge, or local green skip a state.
Common mistakes
- A tidy memory-based story with missing raw evidence.
- “Human error” or “reviewer missed it” instead of the conditions and absent
gate that allowed the action to escape.
- A training/promise action with no observable enforcement or effectiveness
measure.
- A regression test that was never shown to fail on the incident case.
- Closing when code merges rather than when the control is enforced and reviewed.
- Publishing sensitive incident artifacts without access and retention controls.
1---2name: post-mortem3description: Use after a production escape, late defect, data loss, outage, security incident, or badly failed work cycle, once the technical cause and containment are known and the open question is why the safeguards missed it or why the impact grew. Fires on how did this reach production, why didn't we catch this, and what do we change so it doesn't happen again, even if nobody says post-mortem. Skip while the technical cause is still unknown, and skip ordinary bugs.4---56# Post-Mortem78Explain why the failure escaped or grew, then measure whether each corrective9control reduces recurrence, detection, or impact risk. Take the code-level10cause from `debugging`; do not re-derive it. Close on deployed and falsified11controls, never on reflection.1213## When to use1415- A failure reached users/production, escaped far downstream, caused material16 loss, or exposed a process failure worth correcting.17- **Skip** an ordinary reproduced bug. Begin after the code-level cause and18 immediate containment are known; if the cause is still unknown, invoke19 `debugging` first.2021## Step 1: Control the record22231. Open `assets/post-mortem-template.md`. Fill `Control and evidence24 handling` first: readers, lifetime, redaction, expected reviewers and25 approver rules.262. Fill `Summary and impact` and `Timeline` from artifacts, not memory. Mark27 every time `observed` or `estimated`.2829## Step 2: Find the structural cause30311. Fill `Root cause and contributing conditions`: paste the code-level cause32 from `debugging`, then each condition that made introduction or impact33 more likely. Name conditions, never a person. Keep several conditions34 separate.352. Fill `Escape-path audit`: freeze the gate and surface inventory with its36 source digest, then mark each entry `missing / too weak / skipped / stale /37 failed but ignored / held`, with an accountable disposition per omission.383. Fill `Risk-reduction claim` per action: prevent, detect earlier, limit39 blast radius, or recover faster, with baseline, target, horizon, residual40 risk. Never claim recurrence is impossible.4142## Step 3: Propose and get the actions accepted43441. Write each corrective action as `proposed`, mapped to a structural cause,45 every action-row field filled.462. Present and end the turn:4748 ```text49 Post-mortem {{identifier}}50 Impact: {{one line}} Structural cause: {{one line}} Escaped gate: {{one line}}51 Actions: {{each with owner and date}}5253 1. Accept the actions54 2. Request changes55 3. Reject the analysis56 4. Cancel5758 Recommendation: {{the answer the evidence and ownership support}} — {{one sentence}}.59 ```60613. Move an action out of `proposed` only on a complete trusted receipt for62 the exact scope and dates. Record rejection, cancellation, or supersession63 with its residual risk and replacement.6465## Step 4: Prove and track the controls66671. Falsify every corrective gate you implement. Fill `Targeted fail-then-pass68 proof` with raw evidence: fails on the captured incident or a69 representative bad case, passes on the good control, pre-fix version did70 not catch it.712. Track each control to an identity-bound receipt from the surface that72 enforces it: CI, runtime, review, release, alerting, recovery. Never infer73 from a summary.743. **REQUIRED SUB-SKILL:** invoke `verification-strategy` for any change to75 the battery itself. Add no duplicate gate nobody owns.764. At the predeclared date, compare baseline against target and check the77 gate ran. Write `effective`, `ineffective`, or `inconclusive`. Reopen on78 either of the last two unless the exact approver rule accepts closure with79 residual risk.805. Issue the immutable analysis with its `External lifecycle ledger` to the81 user-set path or the template default, under current storage authority.82 In-repository record → a new candidate. Later events → append to the83 ledger; never edit the issued analysis.8485## Action states8687Record in the external ledger `proposed → {owner-accepted | rejected |88cancelled | superseded}`, and for accepted:89`implemented → falsified → deployed/enforced → effectiveness reviewed → effective → closed`.90Let no prose, merge, or local green skip a state.9192## Common mistakes9394- A tidy memory-based story with missing raw evidence.95- “Human error” or “reviewer missed it” instead of the conditions and absent96 gate that allowed the action to escape.97- A training/promise action with no observable enforcement or effectiveness98 measure.99- A regression test that was never shown to fail on the incident case.100- Closing when code merges rather than when the control is enforced and reviewed.101- Publishing sensitive incident artifacts without access and retention controls.