<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <script src="pretty-atom-feed.js" xmlns="http://www.w3.org/1999/xhtml"></script>
  <title>Hexagon Systems Journal</title>
  <subtitle>Independent field notes on reliable networks, deliberate security boundaries, and maintainable infrastructure.</subtitle>
  <link href="https://tx.studiotech38.space/feed/feed.xml" rel="self" />
  <link href="https://tx.studiotech38.space/" />
  <updated>2026-11-03T00:00:00Z</updated>
  <id>https://tx.studiotech38.space/</id>
  <author>
    <name>Hexagon Systems Journal</name>
    <email>editor@tx.studiotech38.space</email>
  </author>
  <entry>
    <title>Build reversible migrations</title>
    <link href="https://tx.studiotech38.space/blog/reversible-migrations/" />
    <updated>2026-11-03T00:00:00Z</updated>
    <id>https://tx.studiotech38.space/blog/reversible-migrations/</id>
    <content type="html">&lt;p&gt;Infrastructure changes become safer when the replacement can be prepared and tested before the previous path is removed.&lt;/p&gt;
&lt;h2 id=&quot;separate-preparation-from-activation&quot;&gt;Separate preparation from activation&lt;/h2&gt;
&lt;p&gt;Build the new service independently. Inspect the host before installing anything, preserve unrelated workloads, and verify local dependencies. Activate one public dependency at a time: address assignment, DNS, control-plane registration, and finally user traffic.&lt;/p&gt;
&lt;p&gt;This sequence keeps failures attributable. If several dependencies change simultaneously, a rollback becomes guesswork.&lt;/p&gt;
&lt;h2 id=&quot;define-evidence-and-rollback&quot;&gt;Define evidence and rollback&lt;/h2&gt;
&lt;p&gt;Write the success checks before the change. They should cover process state, listening sockets, firewall behavior, public DNS, certificates, management connectivity, and a real client request. Define the observation that will trigger rollback and the exact operation required.&lt;/p&gt;
&lt;p&gt;Backups are useful only when their scope and restoration procedure are known. A small copy of the previous configuration beside a tested restore command is often more valuable than an unexamined full-system archive.&lt;/p&gt;
&lt;h2 id=&quot;record-the-active-state&quot;&gt;Record the active state&lt;/h2&gt;
&lt;p&gt;Documentation should describe object relationships, routing intent, public exposure, and verification results without storing credentials. Future operators need to understand why the system is shaped this way, not merely repeat the last command that happened to work.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Certificates are a lifecycle</title>
    <link href="https://tx.studiotech38.space/blog/certificates-are-a-lifecycle/" />
    <updated>2026-10-29T00:00:00Z</updated>
    <id>https://tx.studiotech38.space/blog/certificates-are-a-lifecycle/</id>
    <content type="html">&lt;p&gt;A valid certificate is not a finished task. It begins an operational lifecycle involving challenge reachability, scheduled renewal, safe reloads, expiry monitoring, and recovery from failed automation.&lt;/p&gt;
&lt;h2 id=&quot;validate-the-prerequisites&quot;&gt;Validate the prerequisites&lt;/h2&gt;
&lt;p&gt;Before issuance, compare the public DNS answer with the intended endpoint. Confirm that the challenge path is reachable from outside and that an unrelated redirect or access rule does not intercept it. Automation should stop when these assumptions are false.&lt;/p&gt;
&lt;p&gt;After issuance, inspect the subject alternative names and validity period from the public endpoint. A file on disk is not evidence that the active service loaded it.&lt;/p&gt;
&lt;h2 id=&quot;exercise-renewal-early&quot;&gt;Exercise renewal early&lt;/h2&gt;
&lt;p&gt;A renewal dry run demonstrates that credentials, challenge routing, and reload hooks still agree. Schedule it while the current certificate has ample lifetime remaining, not during the final hours before expiry.&lt;/p&gt;
&lt;p&gt;Keep the previous valid material until the replacement is complete and the service has passed an external TLS check. A deployment should never replace working credentials with an incomplete result.&lt;/p&gt;
&lt;h2 id=&quot;monitor-what-visitors-see&quot;&gt;Monitor what visitors see&lt;/h2&gt;
&lt;p&gt;Expiry alerts should inspect the public service, not only a certificate directory. This catches stale processes, incorrect virtual hosts, and load balancers that continue to present an older certificate.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Routing policy that can be read</title>
    <link href="https://tx.studiotech38.space/blog/routing-policy-that-can-be-read/" />
    <updated>2026-10-20T00:00:00Z</updated>
    <id>https://tx.studiotech38.space/blog/routing-policy-that-can-be-read/</id>
    <content type="html">&lt;p&gt;Routing policy is executable documentation. Every rule should have a narrow match, a clear purpose, and an obvious place in the order of evaluation.&lt;/p&gt;
&lt;h2 id=&quot;put-restrictive-rules-first&quot;&gt;Put restrictive rules first&lt;/h2&gt;
&lt;p&gt;Private destinations and traffic that must never leave a trust boundary should be handled before broad regional or service rules. The final catch-all must be deliberate: operators should know whether unmatched traffic is sent directly, through a controlled exit, or blocked.&lt;/p&gt;
&lt;p&gt;Names matter. Tags such as &lt;code&gt;regional-direct&lt;/code&gt;, &lt;code&gt;selected-service&lt;/code&gt;, and &lt;code&gt;blocked-private&lt;/code&gt; communicate intent better than numbered labels whose meaning lives only in someone&#39;s memory.&lt;/p&gt;
&lt;h2 id=&quot;test-branches-independently&quot;&gt;Test branches independently&lt;/h2&gt;
&lt;p&gt;One successful request cannot validate a policy with several exits. Test regional domains, regional IP addresses, international destinations, blocked networks, and every special proxy branch separately. Confirm the observed egress where possible.&lt;/p&gt;
&lt;p&gt;Health checks also need to use representative destinations. A probe can report that an outbound is alive while the service people actually need remains unreachable.&lt;/p&gt;
&lt;h2 id=&quot;prefer-a-small-policy&quot;&gt;Prefer a small policy&lt;/h2&gt;
&lt;p&gt;Complex routing is sometimes necessary, but complexity should be earned by a measurable requirement. Remove dead outbounds, stale selectors, and duplicate conditions. A smaller policy produces fewer ambiguous failures and makes rollback safer.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Measure the whole path</title>
    <link href="https://tx.studiotech38.space/blog/measure-the-whole-path/" />
    <updated>2026-10-12T00:00:00Z</updated>
    <id>https://tx.studiotech38.space/blog/measure-the-whole-path/</id>
    <content type="html">&lt;p&gt;A user does not experience DNS, routing, transport encryption, and an application as separate systems. A request either completes or it does not. Monitoring should reflect that reality.&lt;/p&gt;
&lt;h2 id=&quot;begin-with-the-public-name&quot;&gt;Begin with the public name&lt;/h2&gt;
&lt;p&gt;Start a check with the same hostname and protocol a visitor uses. Confirm answers from more than one resolver, inspect the selected address, negotiate TLS, and request a real application path. Each stage should record latency and the evidence needed to explain a failure.&lt;/p&gt;
&lt;p&gt;A local process check remains valuable, but it proves only that a process exists. It does not prove that public DNS is correct, a firewall permits the request, the certificate matches, or the return path reaches the client.&lt;/p&gt;
&lt;h2 id=&quot;treat-latency-as-a-distribution&quot;&gt;Treat latency as a distribution&lt;/h2&gt;
&lt;p&gt;A single average hides the variance users feel as stalled pages and unstable sessions. Track percentiles over time and compare observations from several networks. When a route changes, the median may remain acceptable while the tail becomes dramatically worse.&lt;/p&gt;
&lt;p&gt;Traceroute can offer clues, but intermediate routers may handle diagnostic packets differently from application traffic. Always finish the investigation using the actual hostname, port, and protocol.&lt;/p&gt;
&lt;h2 id=&quot;keep-the-check-understandable&quot;&gt;Keep the check understandable&lt;/h2&gt;
&lt;p&gt;An end-to-end probe should be simple enough that an operator can reproduce it manually. Record the resolved address, TLS name, HTTP status, response time, and observed endpoint. Good evidence shortens incidents because each result eliminates a class of possible causes.&lt;/p&gt;
</content>
  </entry>
</feed>