Record evidence
Alerts, logs, deploys, metrics, human notes, and customer reports — each entry requires a non-blank summary and a named, authorized recorder. Nothing is inferred before it's logged.
Every root cause, every detection detail, every resolution step is generated from your recorded evidence only. A claim with no citation is marked UNSUPPORTED or dropped — never guessed, never estimated, never assumed.
Removed automatically before this draft could be saved — nothing was added to compensate.
Each step exists because skipping it would let an unverified claim through. The pipeline is only as trustworthy as its least-checked step, so none of them are optional.
Alerts, logs, deploys, metrics, human notes, and customer reports — each entry requires a non-blank summary and a named, authorized recorder. Nothing is inferred before it's logged.
The model drafts the summary, root cause, detection, resolution, contributing factors, and follow-up actions from the recorded evidence only — never from memory, pattern-matching, or assumption.
Every sentence is checked against its citation index after generation, not just requested in the prompt. No valid citation into the evidence list means the sentence never reaches the draft.
A named approver reviews the draft. The database itself refuses to store a published postmortem without both an approver and an approval timestamp — that guarantee doesn't live in application code.
Published postmortems become full-text searchable, so the next incident can surface this one before repeating it. Unreviewed drafts are never returned as prior art.
These aren’t writing-style guidelines the model is asked to follow. Each one is enforced after generation, or by the database, so it holds even if the prompt is bypassed.
Customer counts, revenue lost, and dollar figures are explicitly forbidden in the drafting prompt unless the evidence itself states them.
Enforced in the system prompt and checked again after generationDeadlines, incident start times, and names are never fabricated to fill a gap the evidence didn't cover.
Verified by a property test: output text is always a subset of the model's cited text, plus UNSUPPORTEDA draft cannot become a published postmortem without a named human approver recorded in the same write.
A database constraint, not application logic — it holds even if the API is called directlyThe grounding pipeline is proven with a property test — the output is always a subset of what the model produced, plus the fixed UNSUPPORTED marker. It cannot add a claim; it can only remove one.
If something here doesn’t match what you see in the product, that’s a bug — tell us.
For the four required sections — summary, root cause, detection, resolution — an uncited claim is replaced with a fixed marker: "Not established by the recorded evidence." Optional contributing factors and follow-up actions are dropped entirely instead of being replaced. The pipeline can only remove text the model produced; it can never add a claim beyond what's cited.
No. The database enforces it directly: a postmortem with status "published" must have both approved_by and approved_at set, checked by the same constraint that governs the status column. That isn't something application code can be tricked into skipping.
Regenerating a draft deletes only the previous attempt's model-generated actions — anything a human added by hand stays. Redrafting a published postmortem returns it to draft and clears the prior approval, so it can never stay marked "published" while being silently rewritten underneath.
Published postmortems are indexed with PostgreSQL full-text search across their summary and evidence. Search only ever returns published, reviewed postmortems — a draft nobody has approved yet is never surfaced as prior art.
Start recording evidence for your next incident. The draft, the citations, and the guardrails come with it — included with every paid NanoNeuron workspace.
No client access before payment verification.