Skip to content

Install updates automatically, notify when one is waiting, allow forced updates - #108

Merged
engmsaleh merged 1 commit into
mainfrom
feat/update-notifications
Oct 25, 2026
Merged

engmsaleh merged 1 commit into
mainfrom
feat/update-notifications

Conversation

@engmsaleh

Copy link
Copy Markdown
Collaborator

Auto-update never moved an existing user. Of 15 people who opened Skilly after v3.4 shipped (Oct 11), 0 upgraded from an older build; all 12 on 3.4 were fresh downloads. Sparkle had no SUEnableAutomaticChecks/SUAutomaticallyUpdate, so it asked permission via a prompt that menu bar app users rarely see, then waited for an Install click.

Changes

  • Background updates: SUEnableAutomaticChecks, SUAutomaticallyUpdate, 4-hour SUScheduledCheckInterval. UpdateCoordinator also sets both on at launch, because a stored "no" from the old prompt overrides Info.plist defaults.
  • Notifications: "Skilly X is available" when a scheduled check finds one; "Skilly X is ready — click to restart and update" once downloaded (Sparkle still installs on next quit). Clicking either opens the update / installs immediately.
  • Forced updates (v3.6+ only): hosted token requests send X-Skilly-Build. With MAC_MINIMUM_BUILD set in Vercel, /api/mac/openai/token returns 426 update_required; the app shows a blocking "Update required" alert with Update Now and won't start voice. Requests without the header (v3.5 and older) are never blocked, since those builds would render it as a "no subscription" paywall.
  • Sparkle ownership moved from the app delegate into UpdateCoordinator.

Verification

  • Backend bun test 299/299 (4 new), tsc --noEmit clean.
  • App compiles unsigned in Release and Debug (xcodebuild … CODE_SIGNING_ALLOWED=NO build).
  • Not verified end-to-end: an actual Sparkle update cycle needs a signed build plus a newer appcast entry, so the first real test is v3.6 → v3.7.

Rollout

  • Existing users (≤ v3.5) still need one manual update ("Check for Updates…" or re-download). From v3.6 on, updates arrive on their own.
  • MAC_MINIMUM_BUILD is unset, so nothing is forced until it's set in Vercel.

🤖 Generated with Claude Code

…ed updates

Auto-update never moved an existing user: of 15 people active after
v3.4 shipped, 0 upgraded from an older build. Sparkle had no
SUEnableAutomaticChecks/SUAutomaticallyUpdate, so it asked permission
in a prompt a menu bar app's users rarely see, then waited for a click.

- Checks every 4 hours and downloads in the background; both settings
  are forced on at launch so an earlier "no" can't keep a user stale.
- A macOS notification announces an available update and, once
  downloaded, offers "click to restart and update"; it also installs
  on the next quit.
- Hosted token requests send X-Skilly-Build. Setting MAC_MINIMUM_BUILD
  in Vercel makes Studio answer 426 update_required, which shows an
  "Update required" alert and blocks voice until the user updates.
  Builds without the header (v3.5 and older) are never blocked.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Oct 25, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
skilly-studio Ready Ready Preview Oct 25, 2026 9:59pm UTC

Request Review

@engmsaleh
engmsaleh merged commit e5445c3 into main Oct 25, 2026
14 checks passed

This branch was successfully deployed

1 active deployment
Preview — 19ab8fc5 Deployed Oct 25, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant