Skip to content

Decide Windows packaging and auto-update strategy #246

Description

@shanselman

Problem

The Windows tray currently appears to ship through three different distribution/update paths:

  1. Inno Setup installer via installer.iss

    • Release workflow builds OpenClawTray-Setup-x64.exe and OpenClawTray-Setup-arm64.exe.
    • This looks like the friendly/default install path.
  2. Portable ZIP artifacts

    • Release workflow builds OpenClawTray-<version>-win-x64.zip and OpenClawTray-<version>-win-arm64.zip.
    • Workflow comments say these ZIPs are for Updatum auto-update.
    • App code configures Updatum like a portable/single-file update flow, not like installer/MSIX update flow.
  3. MSIX packages

    • CI/release builds OpenClawTray-<version>-win-x64.msix and OpenClawTray-<version>-win-arm64.msix.
    • Release notes describe MSIX as useful for packaged Windows consent surfaces such as camera/microphone permissions.

That means install/update behavior is ambiguous: a user may install with the .exe, but the in-app updater may consume ZIP assets; MSIX has its own install/update semantics but is not wired into the in-app updater.

Why this matters

We should make a deliberate packaging decision before the Windows tray gets broader distribution:

  • avoid users accidentally crossing install technologies during update
  • avoid duplicated signing/release complexity if we do not need all formats
  • define which package is the supported/default path
  • define how camera/microphone/screen permissions should behave for unpackaged vs packaged installs
  • make Updatum asset selection explicit and tested

Current evidence

  • installer.iss is active in the tag release workflow and builds signed installer .exe assets.
  • .github/workflows/ci.yml builds portable ZIPs and comments that they are for Updatum auto-update.
  • .github/workflows/ci.yml also builds MSIX packages.
  • App.xaml.cs configures UpdatumManager with InstallUpdateSingleFileExecutableName = "OpenClaw.Tray.WinUI" and does not explicitly target installer or MSIX assets.

Decision needed

Pick one of these strategies:

  1. Installer-first: EXE installer is the blessed install/update path; configure updater to download/run the installer, and demote ZIP/MSIX as secondary/manual assets.
  2. Portable-first: ZIP is the blessed install/update path; keep Inno only for convenience install and document that it transitions to ZIP-based self-update.
  3. MSIX-first: MSIX is the blessed install/update path; use MSIX/App Installer update semantics and remove or demote the custom updater/installer.
  4. Hybrid, explicitly supported: keep multiple paths, but document and test which updater applies to each installed form.

Proposed acceptance criteria

  • Document the supported/default install path in README/release notes.
  • Document whether .exe, .zip, and .msix are primary, secondary, or deprecated.
  • Make Updatum asset selection explicit, including architecture matching.
  • Add/update tests or a release checklist proving the updater downloads the intended asset type.
  • Ensure the updater does not accidentally update an MSIX install with ZIP files or an installer install with an incompatible portable layout.
  • If multiple install paths remain, document how each one updates.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Normal priority bug or improvement with limited blast radius.clawsweeper:needs-maintainer-reviewClawSweeper marked this issue as needing maintainer review before automation.clawsweeper:needs-product-decisionClawSweeper marked this issue as needing a product or behavior decision.clawsweeper:needs-security-reviewClawSweeper marked this issue as needing security-sensitive review.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.enhancementNew feature or requestimpact:otherThis issue has meaningful maintainer-visible impact outside the owned taxonomy.impact:securityThis issue is about security boundaries, credentials, authz, sandboxing, or sensitive data.issue-rating: 🌊 off-meta tidepoolIssue quality rating does not apply to this item.questionFurther information is requested

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions