SkillsHooksPromptsAgentsPersonasModelsPoliciesToolsTemplatesBundlesCategoriesStart here
← Templates
Te templatepostmortemmarkdowndevopsstable

Incident Postmortem

A blameless postmortem written within 48 hours of resolution: impact, timeline, root cause, contributing factors, what went well, and dated action items with owners.

id template/postmortemv1.0.0placeholders 11

Skeleton

# Postmortem — {{incident_title}}

Severity: {{severity}} · Declared: {{declared_at}} · Resolved: {{resolved_at}} · Author: {{author}}

## Impact

{{impact}}

## Timeline

{{timeline}}

## Root cause

{{root_cause}}

## Contributing factors

{{contributing_factors}}

## What went well

{{went_well}}

## Action items

| Action | Owner | Due | Status |
|---|---|---|---|
{{action_rows}}

Rendered example

# Postmortem — Schema URLs served the HTML fallback

Severity: SEV3 · Declared: 2026-09-03T22:58Z · Resolved: 2026-09-03T23:25Z · Author: incident commander

## Impact

Every /schemas/*.json URL returned the HTML fallback for about 45 minutes after the v0.3.0 deploy. Atom validation from the published URLs was impossible during that window; no users reported it.

## Timeline

- 22:40 v0.3.0 deploy completes.
- 22:58 Post-deploy curl finds content-type text/html on /schemas/skill-v1.json.
- 23:10 PR #51 opened: prebuild copies schemas/ into the web build.
- 23:25 Deploy of #51 completes; URLs serve application/json.

## Root cause

The web build never copied schemas/ into its public directory, so the static host served its fallback page.

## Contributing factors

The previous site returned 200 for every path, so a status-code-only check passed.

## What went well

The post-deploy check inspected content-type, not just status, and caught it within 20 minutes.

## Action items

| Action | Owner | Due | Status |
|---|---|---|---|
| Assert content-type in the post-deploy check for every documented JSON URL | repo owner | 2026-09-10 | open |

Placeholders

NameRequiredWhat goes hereExample
{{incident_title}}yesOne line naming what broke.Schema URLs served the HTML fallback
{{severity}}yesSEV1, SEV2, or SEV3.SEV3
{{declared_at}}yesISO-8601 timestamp.2026-09-03T22:40Z
{{resolved_at}}yesISO-8601 timestamp.2026-09-03T23:25Z
{{author}}yesWho wrote it (usually the incident commander).incident commander
{{impact}}yesWho was affected, how, for how long. Numbers where they exist.Every /schemas/*.json URL returned HTML for 45 minutes after the v0.3.0 deploy.
{{timeline}}yesTimestamped events from first signal to resolution, one per line.22:40 deploy completes; 22:58 curl check finds text/html; 23:10 PR #51 opened…
{{root_cause}}yesThe one thing that, had it been different, would have prevented the incident. Not a person.schemas/ was never copied into the web build.
{{contributing_factors}}yesConditions that made it likelier or worse.The old site served 200 for every path, so the check passed on status code alone.
{{went_well}}yesWhat limited the damage.Content-type check caught it within 20 minutes.
{{action_rows}}yesOne table row per action: concrete, owned, dated.| Add a content-type assertion to the post-deploy check | repo owner | 2026-09-10 | open |

Rules for the finished document

  • Blameless: root cause is a condition, never a person.
  • Write it within 48 hours of resolution.
  • Every action item has an owner and a date.

Produced by

postmortemincidentsre
Author convergent-systems-key. Source ai-atoms. License CC-BY-4.0. Structure is the common blameless-postmortem form; the 48-hour rule comes from persona/incident-commander's job to be done.