All notes
Tooling

Ship all four checksums, or none of them installed

A generic Homebrew bump action patched only one of four platform checksums per release, silently breaking brew install on three targets since v0.2.4. If you ship N platforms, own the checksum step and patch all N from the canonical SHA256SUMS in one atomic write.

Janus ships a compiled binary to four platforms through a Homebrew tap. A popular third-party action, mislav/bump-homebrew-formula-action, was patching only a single platform’s sha256 block in the formula on each release and leaving the other three stale. brew install had been failing on three of four targets since v0.2.4, silently — nothing in the release pipeline ran an install per platform, so the breakage never surfaced. The fix (commit 2722d82) replaced the action with a custom Bun script in src/core/homebrew-formula.ts that reads SHA256SUMS from the release artifact and patches the version plus all four platform checksums in one write.

Generic automation is written for the common case

The bump action isn’t broken. It does exactly what a single-artifact release needs: patch the one sha256 it knows about. A multi-platform distribution is not the common case, so the action patched its one block and left the rest pointing at the previous release. This is the quiet failure mode of reaching for a generic tool — it doesn’t error on the shape it wasn’t built for, it half-succeeds. Three stale checksums look exactly like three untouched lines.

The blast radius is the number of platforms you didn’t test

The same formula served all four platforms, and three of them pointed at stale checksums — un-installable — while the one the action happened to patch still worked. Nothing in the release pipeline ran brew install on any platform, so the corruption accumulated release over release with no signal. When a build step touches N outputs, an install smoke test that covers one of them — or none — certifies nothing about the other N-1.

Own the step that spans your outputs

The correction was small in code and decisive in principle: read the canonical SHA256SUMS the release already produces, and patch every platform’s block from it atomically. The formula is now derived from one source of truth instead of stitched from a per-platform action that only ever saw one. The rule generalizes past Homebrew — any release step that fans out across platforms is yours to own, because a generic tool will patch what it recognizes and silently leave the rest behind. It’s marked as an ADR candidate for that reason.