- src/bar/workspaces.rs: the Hyprland EventStream loop exited permanently
on the first Err/end-of-stream (Hyprland restart/reload, IPC hiccup),
freezing every workspace button for the bar's remaining life. Now wrapped
in a reconnect loop with capped exponential backoff, re-syncing workspace
state on every reconnect
- src/notifications/mod.rs + popup.rs: three spec deviations fixed —
expire_timeout=0 now means never-expire instead of being coerced to 5s
(and a critical-urgency notification with no explicit timeout also
persists by default); NotificationClosed is now emitted with the correct
reason code whenever a notification actually goes away (expiry or an
explicit CloseNotification call); replaces_id no longer races its
auto-dismiss timer against the replacement's, via a per-id generation
counter checked before a stale timer is allowed to dismiss anything
- src/main.rs + README.md + assets/icons-needed.txt: lock button (and its
docs) now invoke breadlock instead of hyprlock, the thing breadlock was
built to replace
- src/notifications/mod.rs: added 4 unit tests for the new expire_timeout/
urgency mapping (pulled into a pure compute_expire() for testability) —
this crate had zero test coverage before
GitHub Actions self-hosted runners need per-repo registration on a
personal account; Forgejo Actions' runner already serves every repo
with zero setup. Moves release publishing there (dl.breadway.dev stays
the primary bakery target; GitHub release upload is kept as the
fallback via an explicit token, since Forgejo Actions has no ambient
GITHUB_TOKEN) and adds a mirror workflow to keep GitHub in sync
automatically.