Releases: joryeugene/gitbeacon
Releases · joryeugene/gitbeacon
v1.2.0
Changed
- Menu bar app event buffer raised from 100 to 500 events in memory.
- Scroll list shows last 50 events (was 30).
- Header counter now tracks total events since last Clear, not just the buffer size.
The counter keeps climbing even after the 500-event buffer trims older entries.
Added
- "Showing last 500" indicator appears when the event buffer is full.
- README and project docs updated for v1.1.2 dedup fixes, sync behavior, and test suite.
v1.1.2
Fixed
- Terminal-state dedup: merged/closed PRs and closed issues now log exactly once.
New comments on a merged PR changelatest_comment_url, which passed the primary
dedup and re-logged "Merged" on every subsequent comment. A secondary dedup check
uses a state-stable key (id|Merged,id|PR closed, etc.) so the terminal event
fires once regardless of later thread activity. just syncnow also patches the installed app bundle
(/Applications/GitBeacon.app/Contents/Resources/) so the SHA-256 check in
installDaemonScript()sees matching content. Previously, synced scripts were
silently reverted on the next app launch because the bundle still had the old version.
Added
tests/test-dedup.sh: 15 assertions across 7 test groups covering all three dedup
tiers plus terminal-state secondary dedup. Run withbash tests/test-dedup.sh.
v1.1.0
Added
- macOS menu bar app (
GitBeaconApp/): native SwiftUIMenuBarExtrathat wraps the daemon. Click the bell icon to see recent events, toggle sound, and quit. No terminal required.- Event log watcher using kqueue (
DispatchSource) with 5-second timer fallback for file rotation - Daemon lifecycle management: spawn, adopt existing, health check every 10s, kill on quit
- Single-instance guard: second launch exits immediately instead of creating duplicate menu bar icons
- Click any event row to open the GitHub URL in the default browser
- App icon (KingBee bee) in Finder, Spotlight, and DMG via
AppIcon.icns build/package-app.shassembles a proper.appbundle with icon,Info.plist, and ad-hoc codesigningbuild/package-dmg.shcreates a distributable DMG with drag-to-Applications install
- Event log watcher using kqueue (
- justfile recipes:
build-app(universal binary),package-app,package-dmg - CI workflow (
.github/workflows/ci.yml): shellcheck lint + swift build on macos-latest - README: Gatekeeper "unidentified developer" right-click workaround
- Daemon spawned with Homebrew bash 5 (not
/bin/bash3.2) to support associative arrays and-vtests used by the daemon script
v1.0.0
Changed (breaking)
- Project renamed gh-notify → gitbeacon: CLI command (
gitbeacon), config directory (~/.config/gitbeacon/), script names (gitbeacon-daemon.sh,gitbeacon-bar.sh), notifier app (gitbeacon-notifier.app), and bundle ID (com.joryeugene.gitbeacon) - macOS notification permission prompt now shows GitBeacon instead of GH Notifier
- GitHub repo moved to
joryeugene/gitbeacon(old URL auto-redirects)
Fixed
- Duplicate
review_requested,assign,invitation, andapproval_requestedevents: these one-shot notifications were re-firing on every PR update because GitHub bumpsupdated_aton all unread thread notifications whenever the PR is touched. Dedup now uses bare notification ID (notid|updated_at) for these reason types - PR review notifications showing as Assigned instead of actual review state (Approved / Changes requested) —
_pr_state_event()now called withno_fallback=1forassignandcommentreasons so the caller's default label is preserved when no review state is found
v0.11.1
Changed (internal)
- Bar: extracted 9 inline ANSI escape codes into named color constants (
C_GREEN,C_MAGENTA, etc.) - Daemon: extracted
_pr_state_event()helper, deduplicating PR review logic shared bypull_request_reviewandauthorreason handlers (net -27 lines) - Daemon:
seen-idsdeduped on boot viasort -uto prevent file bloat
Fixed
- Bar: 📬 repo invitation events now render cyan (were falling through to dim)
- Daemon:
send_notificationescapes backslashes and double-quotes instead of stripping/replacing them, fixing osascript rendering of titles containing those characters
v0.11.0
Added
scripts/demo-scenario.sh: standalone event writer that populates a realistic 8-event backlog with a fake daemon lock, enabling demo recordings withoutgh authdemo.tape: VHS recording script that producesassets/demo.gif(~22s animated GIF showing color-coded events arriving, stats bar, sound toggle, quit)assets/demo.gif: animated terminal recording for the README
Changed
- README hero section: replaced stale single-line text mockup (pre-v0.9.0 format) with animated GIF showing the live bar
just lintnow includesscripts/demo-scenario.sh
v0.10.0
Fixed
- PR notifications (merges, approvals, state changes) silently dropped after first sight of a thread. GitHub's
/notificationsendpoint returns mutable threads, not immutable events; the daemon now tracksid|updated_atcompound keys so thread lifecycle updates register as new events. - Within-batch dedup collapsed distinct PR lifecycle events (e.g. approval + merge in the same poll window). Batch key now includes
reasonso each event type is processed independently.
Changed
seen-idsformat migrated from bare notification ID toid|updated_at. Old-format files are auto-detected and truncated on daemon startup (old entries can never match the new format).
v0.9.1
Changed
[t]test notification key removed; usejust notify "test"from the repo instead- README: add macOS notification screenshot
Changed (internal)
just releasenow creates a draft GitHub release automatically viagh release create --draft.claude/added to.gitignore
v0.9.0
Changed
- Event log now uses 2-line format: headline (timestamp + icon + label + repo) on line 1, title indented on line 2
- Bar shows 16 lines (8 events × 2 lines each) instead of 8 lines
- Event count uses
grep -c '^\['instead ofwc -lto avoid double-counting detail lines [o]URL extraction targets tab-bearing lines (header lines only)
Fixed
- Antifragile daemon startup
pull_request_reviewevent handler- CI null-url edge case
v0.8.1 — GH Notifier display name + custom ObjC binary
What's new
Fixed
- Notification prompt and System Settings entry now show GH Notifier instead of the raw executable name
gh-notify-notifier - Icon cache flushed after build (
touch,iconservicesagent,lsregister,notificationcenteruirestart) so the bee icon and correct name appear immediately in the permission prompt
Changed
build-notifier/ installer: replaced terminal-notifier repackaging with a compiled ObjC binary (scripts/gh-notify-notifier.m). Nobrew install terminal-notifierrequired. Prerequisite is now Xcode CLT (clang) +librsvg.- daemon/bar:
send_notificationand[t]handler callgh-notify-notifierdirectly; removed terminal-notifier andicon.pngpaths - install.sh: idempotency check verifies
CFBundleDisplayName == "GH Notifier"— stale installs auto-rebuild on re-run - install.sh: Step 4 verify tests the custom app and opens System Settings automatically if permissions are denied
- README: notification permissions section updated to reference GH Notifier throughout
Added
scripts/gh-notify-notifier.m: minimal Objective-C notification binary source (compilable via Xcode CLT, no Swift toolchain required)scripts/gh-notify-notifier.plist: authoredInfo.plistwithCFBundleDisplayName = "GH Notifier",CFBundleIdentifier = "com.joryeugene.gh-notify"
Install / upgrade
curl -fsSL https://raw.githubusercontent.com/joryeugene/gh-notify/main/install.sh | bashRe-running the installer rebuilds the notifier app automatically.