Decaffeinate 1.5.2 — hardening + discoverable updates
Hardening and delivery — from an adversarial review of the 1.5.1 menu.
Added
- "Update available" button in the footer, raised the moment Sparkle's background check finds a new version — updates can't be missed.
Fixed
- The popover can never clip again — the height is now screen-aware (
min(460, screen·0.8)), so the pinned footer (Settings/quit) stays on screen on small displays; the body scrolls within whatever fits. - Approval buttons can't vanish — a sibling hold from the same app (same firewall key, different assertion id) is now correctly recognised as pending.
- No menu stall — app icons resolve after first paint (off the synchronous render path), with a bounded cache.
- All active modes are cancelable — a quiet window and a watch each show their own cancel line, not just the first.
- Menu-bar
freecrescent reads better at 18px; approval buttons carry VoiceOver labels.
Updating: Decaffeinate updates itself via Sparkle (the Update available button). For a forced Homebrew update:
brew update && brew upgrade --cask decaffeinate --greedy.
Universal, Developer-ID signed & notarized. 139 tests. Full notes in CHANGELOG.
🤖 Generated with Claude Code