Skip to content

CLI Pulse Desktop v0.2.7

Choose a tag to compare

@github-actions github-actions released this 26 Apr 10:01

⚠️ YANKED — DO NOT INSTALL. This release shipped a broken Windows
NSIS / Linux .deb / .rpm installer that contained only the scan_cli
sidecar diagnostic binary instead of the GUI. Symptom: installer
succeeds but launching produces a flash of console window and no GUI.
Use v0.2.11 or later. Forensic write-up:
PROJECT_FIX_2026-05-01_v0.2.10_default_run.md


Hardening release. Codex pinpointed an i18n footgun, plus two small honesty corrections I caught on self-review.

🐞 Codex caught: setLang fired-and-forgot the i18next promise

src/i18n.ts:52 had i18n.changeLanguage(code) invoked without await or .catch. In practice it's fine because all 3 locales are bundled at build time (the promise resolves synchronously), but if it ever rejected — e.g. in a future refactor that lazy-loads translations over the network — the user would see an unhandled-rejection warning in the console and (depending on the WebView) a white-screen.

setLang now returns Promise<void>, persists the user's choice to localStorage before the language switch (so a thrown error still leaves it remembered), and converts any rejection into a console.warn instead of letting it crash the app.

Codex review verbatim: "src/i18n.ts:52: changeLanguage() is not awaited, and the tests assume sync language flips."

📝 Honesty fix: sentry_init.rs doc oversold the scrubber

The doc comment claimed our before_send filter scrubs token / secret / password / api_key / supabase / claude_api / anthropic / codex / openai / gemini / dsn / keychain / pairing / refresh_token / access_token / id_token field names client-side. The actual implementation only scrubs the user's $HOME path.

Two options: implement the full client-side allow-list (parallel state across 4 codebases — Swift / Kotlin / Python helper / Rust desktop, error-prone) OR delegate to the Sentry org-level Data Scrubber (already configured per reference_sentry.md). Picked the latter and trimmed the doc to match reality. Single source of truth at the org level. No code change.

✨ UX polish: empty-state Skeleton has a caption

When you open the app for the first time, the Overview tab spent ~1 second showing four pulsing rectangles with no explanation. Now reads Scanning ~/.claude and ~/.codex for the past 30 days… while the first scan completes. Translated en / zh-CN / ja.

Numbers

  • 53 Rust + 25 frontend = 78 tests still all green across 4 CI platforms
  • Bundle size unchanged
  • The Windows ARM64 release job hit a transient 502 fetching a bundle dependency on the first try; the second attempt (5 min later) went through clean. Downloads on the Releases page have all 17 assets including 8 signed installers + latest.json.

Settings → Updates → Check for updates — auto-update will fetch on next launch.