<?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>Start here · XB Field Notes</title><link>https://www.xbcatm.com/pathways/</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/pathways/index.xml" rel="self" type="application/rss+xml"/><item><title>Ten notes for newcomers</title><link>https://www.xbcatm.com/pathways/begin/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.xbcatm.com/pathways/begin/</guid><description>The fastest route into operating a small static service.</description><content:encoded>&lt;p&gt;New here? Read these ten in order. Each one is short, each one links its source, and together they describe how this site thinks about running a web service.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.xbcatm.com/notes/the-advantage-of-small-systems/"&gt;The advantage of small systems&lt;/a&gt;
Start with the philosophy: small, legible systems fail in ways you can see.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.xbcatm.com/notes/reliable-defaults-beat-clever-recovery/"&gt;Reliable defaults beat clever recovery&lt;/a&gt;
Prefer boring defaults over clever recovery.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.xbcatm.com/notes/http-methods-are-a-promise-about-side-effects/"&gt;HTTP methods are a promise about side effects&lt;/a&gt;
Methods are promises about side effects; learn the vocabulary first.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.xbcatm.com/notes/redirects-and-error-codes-should-preserve-the-story/"&gt;Redirects and error codes should preserve the story&lt;/a&gt;
Status codes tell the story of where a resource went.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.xbcatm.com/notes/cache-headers-are-a-contract-with-two-clocks/"&gt;Cache headers are a contract with two clocks&lt;/a&gt;
Caching is two clocks: freshness and validation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.xbcatm.com/notes/content-type-should-describe-the-bytes-you-actually-send/"&gt;Content-Type should describe the bytes you actually send&lt;/a&gt;
The bytes and the label must agree.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.xbcatm.com/notes/cookie-scope-should-be-narrower-than-the-application-boundary/"&gt;Cookie scope should be narrower than the application boundary&lt;/a&gt;
Narrow cookie scope before the application grows.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.xbcatm.com/notes/security-headers-should-describe-the-actual-page/"&gt;Security headers should describe the actual page&lt;/a&gt;
Describe the actual page in headers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.xbcatm.com/notes/a-static-server-should-have-one-obvious-root/"&gt;A static server should have one obvious root&lt;/a&gt;
One obvious root for the whole static deployment.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.xbcatm.com/notes/read-the-public-edge-in-two-commands/"&gt;Read the public edge in two commands&lt;/a&gt;
The two commands everything else builds on.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Next:&lt;/strong&gt; &lt;a href="https://www.xbcatm.com/tutorials/http-edge-walkthrough/"&gt;Read a live edge the way a client does&lt;/a&gt;&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;, the shared vocabulary behind the beginner path, checked 2026-09-05.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caddyserver.com/docs/"&gt;Caddy Documentation&lt;/a&gt;, the server manual behind the release path, checked 2026-09-05.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP"&gt;MDN: HTTP&lt;/a&gt;, practical HTTP reference for the troubleshooting path, checked 2026-09-05.&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Ten notes for troubleshooters</title><link>https://www.xbcatm.com/pathways/troubleshoot/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.xbcatm.com/pathways/troubleshoot/</guid><description>A symptom-first route from the edge inward.</description><content:encoded>&lt;p&gt;Something is wrong? Start at the top and stop when the evidence disagrees with your theory. These ten describe where to look and what a healthy answer looks like.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.xbcatm.com/notes/read-the-public-edge-in-two-commands/"&gt;Read the public edge in two commands&lt;/a&gt;
When something looks wrong, read the edge before guessing.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.xbcatm.com/notes/a-release-is-not-complete-until-the-public-edge-agrees/"&gt;A release is not complete until the public edge agrees&lt;/a&gt;
Prove the release from the outside without changing state.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.xbcatm.com/notes/validators-decide-whether-a-cached-copy-is-still-the-answer/"&gt;Validators decide whether a cached copy is still the answer&lt;/a&gt;
Validators decide whether a cached copy is still the answer.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.xbcatm.com/notes/range-requests-should-prove-which-bytes-were-selected/"&gt;Range requests should prove which bytes were selected&lt;/a&gt;
Prove which bytes a range request actually selected.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.xbcatm.com/notes/head-should-describe-the-same-representation-as-get/"&gt;HEAD should describe the same representation as GET&lt;/a&gt;
HEAD must describe the same representation as GET.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.xbcatm.com/notes/a-certificate-chain-is-a-path-you-should-be-able-to-print/"&gt;A certificate chain is a path you should be able to print&lt;/a&gt;
Print the chain the visitor actually receives.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.xbcatm.com/notes/certificate-expiry-is-a-date-not-a-dashboard-color/"&gt;Certificate expiry is a date, not a dashboard color&lt;/a&gt;
Expiry is a date; check it before the dashboard turns red.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.xbcatm.com/notes/dns-changes-need-a-cache-aware-rollback-window/"&gt;DNS changes need a cache-aware rollback window&lt;/a&gt;
Change DNS with a cache-aware rollback window.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.xbcatm.com/notes/a-postmortem-should-leave-a-fact-record/"&gt;A postmortem should leave a fact record&lt;/a&gt;
After the incident, leave facts instead of narratives.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.xbcatm.com/notes/backups-are-only-useful-after-a-restore-rehearsal/"&gt;Backups are only useful after a restore rehearsal&lt;/a&gt;
A backup nobody restored is only hope.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Next:&lt;/strong&gt; &lt;a href="https://www.xbcatm.com/tutorials/audit-a-public-edge/"&gt;Audit the trust of a public edge&lt;/a&gt;&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;, the shared vocabulary behind the beginner path, checked 2026-09-05.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caddyserver.com/docs/"&gt;Caddy Documentation&lt;/a&gt;, the server manual behind the release path, checked 2026-09-05.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP"&gt;MDN: HTTP&lt;/a&gt;, practical HTTP reference for the troubleshooting path, checked 2026-09-05.&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item></channel></rss>