0.9.8
Two operator-reported desktop bugs, both reproduced before the fix and verified after.
Fixed
Fresh install skipped onboarding. The tray opened the app window as soon as the web port was listening, without waiting for the API server. AuthGuard's single /api/auth/me probe lost that race, and its .catch(() => {}) failed open — the app rendered as system@ccc.local and never offered cloud sign-in until the user quit and relaunched. Fixed on both layers: the guard now retries (8 attempts, ~14s) before failing open, and the tray waits on the API port as well as the web port.
Cloud sign-in dropped the provider profile (name + avatar). Discord's handle lives in user_metadata.user_name, which the name chain never checked, and createUser() had no avatarUrl parameter at all — so users landed with an email-prefix name and no avatar. Both are now extracted and refreshed on every sign-in across all three identity branches. The provider metadata is treated as untrusted: type-checked, length-capped, and the avatar restricted to http(s) URLs.
Changes since v0.9.7
Fixes
df82681eafirst-run: close the first-launch race that silently skipped onboarding5c60b66c6auth: carry the provider profile (name + avatar) through cloud sign-in02f9672e3auth: resolve the browser cookie on public paths so setup writes stop 403ing adminsb9cdc84a1pipeline: single-node watchdog no longer force-succeeds unfinished nodes (#2038)
CI / tests
c966af7bee2e: install the claude CLI on the runner — 55 failures shared one cause53b4e3adcwal: assert the drained WAL at block end, not a load-sensitive poll count
How far the verification goes
Both fixes were reproduced-before and verified-after in an isolated instance, and the tray half of the first-run fix was exercised under a real Electron shell (Xvfb, with the API port unbound).
Not verified: the packaged installer on a fresh machine, and a live Discord sign-in round-trip. No gate in this pipeline covers either.
Known limitations
- macOS is arm64-only. No Intel build.
- Windows installers may trip SmartScreen. No Authenticode certificate is wired through
electron-builder.yml. Something on the Windows build host does invokesigntool.exe, but that certificate has not been identified — treat Windows signing as unconfirmed rather than assuming either way. .debinstalls do not auto-update — the client detects a package-manager install and defers to it. Upgrade with your package manager. The AppImage does auto-update.- Linux has no packaging QA gate. macOS is verified against the shipped bytes (
verify-mac); Windows and Linux are not. LICENSE.md:1still links a private repo, which 404s for the public.
macOS is signed, notarized and stapled (app, zip and dmg) and auto-updates via the Squirrel.Mac .zip. Windows and the Linux AppImage self-update.