<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Explainer on BXM.net</title>
    <link>https://bxm.net/tags/explainer/</link>
    <description>Recent content in Explainer on BXM.net</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 22 Oct 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://bxm.net/tags/explainer/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Why Signed JSON Breaks and How a Canonical Encoding Fixes It</title>
      <link>https://bxm.net/why-signed-json-breaks-and-how-a-canonical-encoding-fixes-it/</link>
      <pubDate>Thu, 22 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://bxm.net/why-signed-json-breaks-and-how-a-canonical-encoding-fixes-it/</guid>
      <description>&lt;p&gt;Here&amp;rsquo;s a bug that shows up in almost every system that signs or hashes structured data. Service A builds a record, serializes it as JSON, hashes it and signs the hash. Service B receives the record, parses it, does some work, serializes it again and checks the signature. It fails. Nobody changed a single field.&lt;/p&gt;&#xA;&lt;p&gt;What changed was the bytes. Service B&amp;rsquo;s JSON library wrote the keys in a different order. Or it wrote &lt;code&gt;1.0&lt;/code&gt; as &lt;code&gt;1&lt;/code&gt;. Or it escaped &lt;code&gt;é&lt;/code&gt; as &lt;code&gt;é&lt;/code&gt; where A wrote the character itself. All three are valid JSON for the same data. A hash doesn&amp;rsquo;t care about data, though. It cares about bytes, and there are many ways to write the same JSON.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why CI Pipelines Redo Work Nobody Changed and How a Command Memoizer Stops It</title>
      <link>https://bxm.net/why-ci-pipelines-redo-work-nobody-changed-and-how-a-command-memoizer-stops-it/</link>
      <pubDate>Thu, 22 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://bxm.net/why-ci-pipelines-redo-work-nobody-changed-and-how-a-command-memoizer-stops-it/</guid>
      <description>&lt;p&gt;Watch a CI log for a week and count the steps that produced exactly the same output as last time. Code generation from schemas that didn&amp;rsquo;t change. Image resizing for assets nobody touched. Test fixtures rebuilt from the same seed data. A documentation site rendered from the same pages. Each step is a few seconds or a few minutes. On every push, on every branch, on every laptop, it adds up to hours a week of machines doing work they&amp;rsquo;ve already done.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
