<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Postmortem · XB Field Notes</title><link>https://www.xbcatm.com/tags/postmortem/</link><description>Illustrated field notes on HTTP, DNS, TLS, Caddy, SSH, releases, and recovery.</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://www.xbcatm.com/tags/postmortem/index.xml" rel="self" type="application/rss+xml"/><item><title>A postmortem should leave a fact record</title><link>https://www.xbcatm.com/notes/a-postmortem-should-leave-a-fact-record/</link><pubDate>Mon, 24 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.xbcatm.com/notes/a-postmortem-should-leave-a-fact-record/</guid><description>Structure an incident write-up around captured output so the review thread stays on evidence instead of memory.</description><content:encoded>&lt;p&gt;A postmortem earns trust when its claims can be re-checked. That means every phase names the command that produced the fact, not a paraphrase of what someone remembers. The four phases below keep a write-up reviewable at any later time.&lt;/p&gt;
&lt;h2 id="detect-the-symptom-with-evidence"&gt;Detect: the symptom, with evidence&lt;/h2&gt;
&lt;p&gt;Start with the smallest verifiable symptom and the command that showed it. A capture is better than a prose description:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ check-http-headers.sh https://www.xbcatm.com/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;HTTP/2 200
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;content-security-policy: ... script-src &amp;#39;none&amp;#39; ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;last-modified: Mon, 24 Aug 2026 11:20:54 GMT
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If the symptom is that a header changed, the output showing the previous policy and the new one belongs side by side. If it is a failure, include the exit status and the error line.&lt;/p&gt;
&lt;h2 id="scope-how-wide-and-how-you-know"&gt;Scope: how wide, and how you know&lt;/h2&gt;
&lt;p&gt;State the blast radius with evidence, not adjectives. Fix the boundary you can inspect:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Which hosts or paths reply with the same symptom? One &lt;code&gt;check-http-headers.sh&lt;/code&gt; per candidate host answers this.&lt;/li&gt;
&lt;li&gt;Does the cache differ from origin? Compare &lt;code&gt;Vary&lt;/code&gt; and validators.&lt;/li&gt;
&lt;li&gt;Which rollback window applies? Use the TTL that was in force before the change.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="fix-the-change-and-its-intended-effect"&gt;Fix: the change and its intended effect&lt;/h2&gt;
&lt;p&gt;Write the corrective action so it can be replayed. Prefer the smallest change that restores the contract, and name what the post-fix run should show:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# new policy line expected in the response:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;script-src &lt;span class="s1"&gt;&amp;#39;none&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="verify-the-post-incident-run"&gt;Verify: the post-incident run&lt;/h2&gt;
&lt;p&gt;Repeat the detection command after the change and show that the observed output now matches the intended contract. A postmortem without this final section is a story; with it, it is a record that approves its own future re-check.&lt;/p&gt;
&lt;h2 id="sources"&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc9110.html"&gt;RFC 9110 — HTTP Semantics&lt;/a&gt;, response metadata and conditional requests, checked 2026-08-24.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.xbcatm.com/resources/"&gt;artifact HTTP header check&lt;/a&gt;, read-only inspection used throughout this record.&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item></channel></rss>