Postmortem
Purpose: Answer an explicit retrospective causal question using the
already-validated outcome and evidence.
Prompt
Postmortem: verdict .agents/ao/verdicts/2026-08-30-cli-regen.json shows
NOT_PROVEN then PASS after we added a mutating-check guard to
skills/validate/scripts/validate.sh. Did that guard actually cause the
fix, or did the flaky CI runner just stop flaking that day?
It's working if
Observable in the trace, without reading the prose:
- The report pins the exact
verdict.v2 id and the causal question before
the timeline section.
- A claim promoted to cause cites its mechanism, evidence, and
counterfactual together under the report's
hypotheses list.
- A claim resting only on symptom cessation is listed under
unknowns,
not promoted to cause.
- The report lands at
.agents/scratch/postmortem/YYYY-MM-DD-postmortem-<topic>.md and
bash skills/postmortem/scripts/validate.sh exits 0.
Critical Constraints
- Because proof and causal inference are different judgments, Postmortem is retrospective causal analysis, not the general learning umbrella and not a completion gate.
- It consumes immutable Validate verdict evidence and does not re-run acceptance validation because Validate already owns that proof.
- Treat causal statements as hypotheses because causal confidence must survive
alternatives. Separate observed sequence, contributing conditions,
counterfactuals, and unknowns.
- A correlation is not promoted to cause without evidence that discriminates
plausible alternatives.
- Because the caller owns delivery decisions, do not rewrite proof, operate
tracker state, change the remaining plan, or promote a rule. Return evidence
to the caller.
- Empty or inconclusive analysis is valid; manufacture neither certainty nor a
lesson to make the retrospective feel useful.
Workflow
- Pin the verdict, subject evidence, and explicit causal
question.
- Reconstruct the evidence-backed timeline without importing hidden author
reasoning as fact.
- List candidate contributing conditions and at least one plausible
alternative explanation.
- Test each claim against cited evidence and a counterfactual: what should
differ if the claim were false?
- Optionally use independent judges to challenge contested causal claims.
- Emit a report containing supported claims, rejected claims, unknowns,
evidence references, and suggested experiments. Stop.
Correlation-to-cause discrimination
A fix is proven when the mechanism is demonstrated, not when symptoms stop.
Promoting a claim from correlation to cause requires all three:
- a stated mechanism — the specific path by which the condition produced the
outcome, in terms a reader could check against the subject;
- discriminating evidence — an observation that the mechanism predicts and at
least one plausible alternative does not;
- a counterfactual test — what should have differed if the claim were false,
with the cited evidence showing it did differ.
Symptom disappearance after a change satisfies none of these on its own: the
change and the recovery may share an unobserved cause, or the symptom may be
intermittent. The named failure mode is post-hoc fix attribution — "we
changed X and the failure stopped, therefore X was the cause." Claims backed
only by symptom cessation stay in the report as correlations with the
untested alternatives listed, and the suggested experiment is the
discrimination that would settle them. Stop condition: every supported causal
claim in the report carries all three elements with citations; anything less
is filed under correlations or unknowns, never silently promoted.
Output Specification
- Artifact directory:
.agents/scratch/postmortem/.
- Filename convention:
YYYY-MM-DD-postmortem-<topic>.md.
- Serialization/schema format: Markdown with causal question, pinned inputs,
timeline, hypotheses, evidence, counterfactuals, unknowns, and experiments.
- Validator command:
bash skills/postmortem/scripts/validate.sh.
- Downstream handoff: Learn or the caller may consume the analysis; they own
any bookkeeping, promotion, planning, or delivery decision.
Quality Checklist
Executable behavior is in postmortem.feature.
1---
2name: postmortem
3description: 'Optionally test a retrospective causal question against durable verdict evidence. Triggers: "postmortem", "causal retrospective", "test a retrospective hypothesis".'
4practices:
5- sre
6- lean-startup
7hexagonal_role: domain
8consumes:
9- verdict.v2
10produces:
11- postmortem-report.md
12context_rel: []
13skill_api_version: 1
14user-invocable: true
15disable-model-invocation: true
16metadata:
17 capabilities: [postmortem]
18 effects: [write_postmortem_report]
19 canonical_status: canonical
20 disposition: keep_strategy
21 tier: judgment
22 dependencies: []
23context:
24 window: fork
25 intent:
26 mode: task
27 sections:
28 exclude:
29 - HISTORY
30output_contract: 'YYYY-MM-DD-postmortem-<topic>.md — markdown causal analysis (causal question, pinned inputs, timeline, hypotheses, counterfactuals, unknowns, experiments)'
31---
32
33# Postmortem
34
35> **Purpose:** Answer an explicit retrospective causal question using the
36> already-validated outcome and evidence.
37
38## Prompt
39
40```text
41Postmortem: verdict .agents/ao/verdicts/2026-08-30-cli-regen.json shows
42NOT_PROVEN then PASS after we added a mutating-check guard to
43skills/validate/scripts/validate.sh. Did that guard actually cause the
44fix, or did the flaky CI runner just stop flaking that day?
45```
46
47## It's working if
48
49Observable in the trace, without reading the prose:
50
51- The report pins the exact `verdict.v2` id and the causal question before
52 the timeline section.
53- A claim promoted to cause cites its mechanism, evidence, and
54 counterfactual together under the report's `hypotheses` list.
55- A claim resting only on symptom cessation is listed under `unknowns`,
56 not promoted to cause.
57- The report lands at
58 `.agents/scratch/postmortem/YYYY-MM-DD-postmortem-<topic>.md` and
59 `bash skills/postmortem/scripts/validate.sh` exits 0.
60
61## Critical Constraints
62
63- Because proof and causal inference are different judgments, Postmortem is retrospective causal analysis, not the general learning umbrella and not a completion gate.
64- It consumes immutable Validate verdict evidence and does not re-run acceptance validation because Validate already owns that proof.
65- Treat causal statements as hypotheses because causal confidence must survive
66 alternatives. Separate observed sequence, contributing conditions,
67 counterfactuals, and unknowns.
68- A correlation is not promoted to cause without evidence that discriminates
69 plausible alternatives.
70- Because the caller owns delivery decisions, do not rewrite proof, operate
71 tracker state, change the remaining plan, or promote a rule. Return evidence
72 to the caller.
73- Empty or inconclusive analysis is valid; manufacture neither certainty nor a
74 lesson to make the retrospective feel useful.
75
76## Workflow
77
781. Pin the verdict, subject evidence, and explicit causal
79 question.
802. Reconstruct the evidence-backed timeline without importing hidden author
81 reasoning as fact.
823. List candidate contributing conditions and at least one plausible
83 alternative explanation.
844. Test each claim against cited evidence and a counterfactual: what should
85 differ if the claim were false?
865. Optionally use independent judges to challenge contested causal claims.
876. Emit a report containing supported claims, rejected claims, unknowns,
88 evidence references, and suggested experiments. Stop.
89
90## Correlation-to-cause discrimination
91
92A fix is proven when the mechanism is demonstrated, not when symptoms stop.
93Promoting a claim from correlation to cause requires all three:
94
95- a stated mechanism — the specific path by which the condition produced the
96 outcome, in terms a reader could check against the subject;
97- discriminating evidence — an observation that the mechanism predicts and at
98 least one plausible alternative does not;
99- a counterfactual test — what should have differed if the claim were false,
100 with the cited evidence showing it did differ.
101
102Symptom disappearance after a change satisfies none of these on its own: the
103change and the recovery may share an unobserved cause, or the symptom may be
104intermittent. The named failure mode is post-hoc fix attribution — "we
105changed X and the failure stopped, therefore X was the cause." Claims backed
106only by symptom cessation stay in the report as correlations with the
107untested alternatives listed, and the suggested experiment is the
108discrimination that would settle them. Stop condition: every supported causal
109claim in the report carries all three elements with citations; anything less
110is filed under correlations or unknowns, never silently promoted.
111
112## Output Specification
113
114- **Artifact directory:** `.agents/scratch/postmortem/`.
115- **Filename convention:** `YYYY-MM-DD-postmortem-<topic>.md`.
116- **Serialization/schema format:** Markdown with causal question, pinned inputs,
117 timeline, hypotheses, evidence, counterfactuals, unknowns, and experiments.
118- **Validator command:** `bash skills/postmortem/scripts/validate.sh`.
119- **Downstream handoff:** Learn or the caller may consume the analysis; they own
120 any bookkeeping, promotion, planning, or delivery decision.
121
122## Quality Checklist
123
124- [ ] The causal question and immutable inputs are pinned.
125- [ ] Supported and rejected claims cite discriminating evidence.
126- [ ] Alternatives, counterfactuals, and unknowns remain visible.
127- [ ] The report stops short of proof, planning, tracker, and delivery authority.
128
129Executable behavior is in [postmortem.feature](references/postmortem.feature).