mirror of
https://github.com/nexu-io/open-design.git
synced 2026-10-27 09:51:12 +01:00
Add the installed-base escape hatch: the desktop updater now refuses an in-place payload update and routes to the full installer when a release declares capabilities beyond what this build can adopt. Two orthogonal, fail-open guardrails read from the release feed: - launcher.schema (ABI axis): feed.launcher.schema > LAUNCHER_SCHEMA_VERSION means this build cannot interpret the launcher contract the payload expects. - control.launcher.version.min (recency axis): min > currentVersion means the release requires a newer launcher/build. Either trip forces preferPayload=false, reusing the existing installer path; missing/malformed fields are ignored so older feeds keep updating seamlessly. This lets already-shipped builds self-route to a reinstall once a future launcher-based release lands, instead of attempting an update they cannot run. remoteRequiresReinstall is a pure, exported function; the same schema floor will later be enforced locally by the Go launcher against on-disk manifests. The tools-serve updater fixture can now emit both fields for verification.