Quieter notifications: quiet resolves, per-type reopen window, self-clearing overflow alert #48

Open
KofTwentyTwo wants to merge 5 commits from feature/quieter-notifications into develop
pull from: feature/quieter-notifications
5 Commits
Author SHA1 Message Date
james.maesandClaude Opus 5.5 ee5398b2ea fix(notifications): job notices only for runs nobody was watching
"<process> failed" and "<process> finished with errors" went to whoever
started any run, including interactive runs whose result screen already
showed the outcome. The listener now notifies only for runs that skip or
fail on frontend steps (scheduled, background, API, queue runs); a run
on the process screens (FrontendStepBehavior.BREAK) sends nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 15:51:54 -05:00
james.maesandClaude Opus 5.5 58195c43ab fix(notifications): drop the "API key created" notice
It told people about an API key they had just created. API key expiry,
access-change and share notices stay. newSignIn is unchanged: the qbit
keeps no sign-in history, so the host decides when a device or address
is new; its Javadoc and the docs now say so.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 15:49:54 -05:00
james.maesandClaude Opus 5.5 f9d51e67e1 fix(sink): resolve the overflow alert once the queue has drained
"Alert signals are being dropped" had no dedup key, was manual-resolve
and was never re-armed, so it stayed open forever. It now uses a stable
dedup key (the key earlier versions used implicitly, so an alert they
left open resolves too). The drain thread resolves it once the queue has
stayed below half full for a minute and re-arms it, so a later overflow
raises it again. Still ERROR and admin-only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 15:47:23 -05:00
james.maesandClaude Opus 5.5 c106385710 feat(engine): per-type reopen window, 6 hours by default for health checks
A health blip more than 30 minutes after the last resolve created a new
alert and a second bell entry for the same problem. The reopen window
is now resolved per type: alerts_type.reopenWindowMinutes (changeset
55), else the longest matching prefix in
AlertsQBitConfig.reopenWindowMinutesByTypePrefix (default health. =
360 minutes), else reopenWindowMinutes (30). A reopen updates the
existing alert and its bell entry; flapping detection is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 15:44:24 -05:00
james.maesandClaude Opus 5.5 bd5efc21fd fix(notifications): a resolve no longer marks the alert's bell entry unread
A RESOLVED event reset the alert's bell recipient row to unread, so good
news re-bumped the bell. The in-app channel now updates the entry in
place (title "Resolved: ...") and keeps the read state. A subscription
whose events name RESOLVED and differ from the default set keeps the old
behavior. A reopen suppressed as a duplicate refreshes the entry's text
so it never keeps reading "Resolved". External channels are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 15:39:55 -05:00