0006 — Signed update payloads; code signing outstanding

Status: Accepted, partly unimplemented · 2026-08-20

Context

An auto-updater is a remote code execution channel that the vendor points at their own users. It is the highest-value target in a desktop application, and it has to be right before it is convenient.

Decision

Update payloads are signed and verified before they are applied. The public key is compiled into the binary at build time; the private half exists only in the release infrastructure's secret store. An unsigned or mis-signed payload is discarded rather than applied.

Supporting rules:

What is not done yet, and it matters

Binaries are not code-signed with an organisation certificate. The updater's own signature protects the channel; a code-signing certificate is what stops Windows SmartScreen and macOS Gatekeeper from warning on install, and what proves the publisher's identity to the OS.

That needs an organisational identity, a purchased certificate (or an Apple Developer account) and an HSM or cloud signing service to hold the key. Until it exists:

Also outstanding: reproducible builds, SBOM signing, and an installer smoke test in a clean VM as a release gate.

What it costs

Releases are slower and cannot be cut from a laptop. That is the point.

What would reverse it

Nothing. The unimplemented parts get implemented; the decision does not change.