Skip to content

Signed update channel and release automation #477

Description

@BunsDev

Outcome

Users learn about and receive new versions through a signed, verified channel, and every release reaches the Cask through a verified, automated path.

Control metadata

Gates

  • Design decision, time-boxed to one week: Tauri updater with signed manifests, or detect-and-defer to brew upgrade / DMG
  • Staged update and post-upgrade reconciliation through the versioned config gate (PR feat(config): version the persisted project config and gate its read path #464)
  • The release workflow opens the Cask bump as a PR to homebrew-tap, and the bump is verified by reading the tap
  • CI checks version coherence across package.json, tauri.conf.json, the native bundle, the update manifest and the tag
  • Uninstall, reinstall and zap observed with user repositories, worktrees and branches preserved

Closure rule

Close this issue by hand, with an evidence comment linking retained evidence tied to immutable source. Implementing PRs use Refs #N, never a closing keyword.

Activity

  1. self-assigned this
    on Oct 1, 2026
  2. added theissue type on Oct 1, 2026
  3. added
    outcomePublic outcome: owns an exit gate and evidence index
    on Oct 1, 2026
  4. moved this to Backlog in Psyche Buildon Oct 1, 2026
  5. 18 remaining items

  6. BunsDev commented on Oct 3, 2026

    @BunsDev
    MemberAuthor

    Desktop verifier and update banner merged — 2026-10-03

    PR Merged What
    #529 acf7c904 Rust verifier, a byte-for-byte port of scripts/update-manifest.mjs. Ed25519 verify_strict, canonical-JSON check, current/next key ids, expiry with 300 s skew, stable newer-version rule. Checked against 44 Node-signed cross-implementation vectors. App-scoped update-check.json (atomic, lenient per-field load, newer-schema files never rewritten, failed saves reported to the user). Checks every 24 h with backoff up to 7 days. Four commands restricted to the main webview
    #530 1a128d4e Notify-only banner in its own app row, so native web panes can't cover it. Cask installs show brew upgrade --cask psyche-build; DMG installs get a release link and the arch SHA-256. Skip / Dismiss, an accessible live title, focus return, and Escape that doesn't leak to the workspace

    Still inert: release/update-manifest-keys.json has current: null, so the app makes no network request and the setting stays hidden. It activates once the owner provisions the key (see the previous comment), and a signed release then publishes a manifest.

    Along the way:

    Remaining on #477:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:releaseArea: releaseoutcomePublic outcome: owns an exit gate and evidence index

Projects

Relationships

None yet

Development

No branches or pull requests

Issue actions