Skip to content

docs(notifications): change-driven in-app notification design#677

Merged
remyluslosius merged 2 commits into
mainfrom
docs/notifications-change-driven-design
Jun 25, 2026
Merged

docs(notifications): change-driven in-app notification design#677
remyluslosius merged 2 commits into
mainfrom
docs/notifications-change-driven-design

Conversation

@remyluslosius

Copy link
Copy Markdown
Contributor

Repoints the in-app notification bell from report.ready to meaningful state changes, per the discussion.

What & why

A bell that counts finished reports surfaces the least valuable thing it could. The headline case is the one this app is built for: a rule that was passing is now failing — already a first-class record in the write-on-change transactions log (state_changed / first_seen). Most of the change-detection already exists (alertrouter classifies host_unreachable/host_recovered/drift_* with severity + dedup; drift suppresses sub-threshold jitter), so this is mostly surfacing data, not computing it.

Contents

  • docs/engineering/notifications_design.md (new): two-surface model (Activity = everything; Notifications = the actionable per-user subset), a producer-anchored taxonomy (compliance regressions, fleet health, scans, remediation, governance, security, reports — each tied to a real identifier), explicit noise exclusions (no scheduler ticks / package churn / sub-threshold jitter), an architecture that adds an in-app channel to the existing alertrouter + a small transaction-log regression projector → a durable per-user notifications table → GET /api/v1/notifications + unread + :markRead + drawer + SSE push, plus RBAC scoping, grouping/dedup, and a 4-slice phasing.
  • BACKLOG.md: rewrites the In-app notifications row from "Planned" to "Partial (MVP shipped)" around the change-driven model (the MVP bell + report.ready bump is actually live, just pointed at the wrong thing).

Docs-only. Slice 1 (durable feed + wire the existing alerts into the bell) is the recommended starting point.

…og rewrite

The shipped bell MVP only counts report.ready, which is the least valuable
thing it could surface. Repoint it at meaningful state changes — first the
write-on-change transaction log (a passing rule now failing), plus connectivity
loss, compliance band drops, fleet drift, failed scans/remediation, and
governance items needing a decision.

Adds docs/engineering/notifications_design.md: two-surface model (Activity vs
Notifications), a producer-anchored taxonomy (transactions state_changed /
first_seen, alertrouter host_unreachable/recovered/drift_*, exceptions,
license), explicit noise exclusions, an architecture that adds an in-app
channel to the existing alertrouter + a transaction-log regression projector
feeding a durable per-user notifications table, RBAC scoping, grouping/dedup,
and a 4-slice phasing. Rewrites the BACKLOG row from 'Planned' to
'Partial (MVP shipped)' around this change-driven model.
@remyluslosius remyluslosius merged commit 18ff780 into main Jun 25, 2026
12 checks passed
@remyluslosius remyluslosius deleted the docs/notifications-change-driven-design branch June 25, 2026 14:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/L

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant