Summary
The alert list currently shows title + severity (e.g. Dense Fog Advisory (Moderate)). It should also indicate whether the alert status has changed since last poll so users know at a glance what's happening.
Proposed labels
| State |
Label |
Trigger |
| Newly issued |
(New) |
Alert ID appeared in current snapshot, absent in previous |
| Content changed |
(Updated) |
Content hash changed, severity/urgency unchanged |
| Severity increased |
(Escalated) |
severity moved to higher priority tier |
| Expiry pushed out |
(Extended) |
expires field moved later, content/severity unchanged |
| No change |
(no label) |
Alert present in both snapshots, nothing changed |
Implementation notes
- Requires persistent per-alert lifecycle state map (
{alert_id → status}) stored across update cycles (e.g. in AlertManager or AlertNotificationSystem)
AlertLifecycleDiff needs a new EXTENDED sub-case: compare expires timestamps between snapshots, detect push-out without severity/urgency change
build_alerts() in display/presentation/alerts.py needs to accept an optional lifecycle_states: dict[str, str] and append the label to each alert title
- Labels should be appended after the severity tag:
Dense Fog Advisory (Moderate) (Extended)
- State map should be cleared/reset when the location changes
Depends on
PR #330 (feat/alert-lifecycle-intelligence) — needs the AlertLifecycleDiff model and diff infrastructure already in place.
Summary
The alert list currently shows title + severity (e.g.
Dense Fog Advisory (Moderate)). It should also indicate whether the alert status has changed since last poll so users know at a glance what's happening.Proposed labels
(New)(Updated)(Escalated)severitymoved to higher priority tier(Extended)expiresfield moved later, content/severity unchangedImplementation notes
{alert_id → status}) stored across update cycles (e.g. inAlertManagerorAlertNotificationSystem)AlertLifecycleDiffneeds a newEXTENDEDsub-case: compareexpirestimestamps between snapshots, detect push-out without severity/urgency changebuild_alerts()indisplay/presentation/alerts.pyneeds to accept an optionallifecycle_states: dict[str, str]and append the label to each alert titleDense Fog Advisory (Moderate) (Extended)Depends on
PR #330 (
feat/alert-lifecycle-intelligence) — needs theAlertLifecycleDiffmodel and diff infrastructure already in place.