docs/adr/0039-release-update-assets.md

ADR 0039: Compatible release assets for guarded updates

Date: 2026-10-16 Status: Accepted for the maintainer-authorized combined release Extends: ADR 0019

Context

Release v0.1.9 has CI-suffixed installers under a stable tag, GitHub-altered Unicode filenames and no Windows or Linux updater manifests. Linux AppImage filenames use x86_64, while the updater expected the process name x64. These outputs cannot pass the existing updater's compatibility checks.

Decision

Keep Emc² as the product name and use ASCII Emc2- installer filenames. Map Linux process architecture x64 to the builder's x86_64 filename. Retain strict version, architecture, source, ambiguity, size and SHA512 checks.

Use the checked-out tag for stable reusable builds. Configure the canonical GitHub publisher explicitly so unpublished packaging generates updater metadata. Before upload, validate the Windows/Linux manifest and actual installer with the updater's existing validation and hash helpers. Fail if either is absent or disagrees. Publish latest.yml and latest-linux.yml beside the four installers and include all six files in SHA256SUMS.txt.

Consequences and proof limits

CI still packages with --publish never and needs no publishing credentials. Signing, account storage and the update icon remain unchanged. macOS automatic installation remains unsupported under local ad-hoc signing. Synthetic tests prove rejection paths; hosted packaging must prove real output compatibility. Publication needs asset readback. Native two-version installation and restart remain separate acceptance checks.