v1.2.0 Phase C2: location snooze/mute + ack & escalation #102
No reviewers
Labels
No labels
area:ai
area:ci-cd
area:notifications
area:observability
area:public-pages
backlog
bug
duplicate
enhancement
help wanted
invalid
question
type:decision
type:feature
type:infra
type:maintenance
type:security
v1.0.1
v1.1.0
v1.2.0
v1.3.0
v2.0.0
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
rbrooks/WeatherBot!102
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/v1.2.0-phaseC2-snooze-escalation"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The final v1.2.0 slice.
#82 — Temporary location snooze / mute
Location.snoozed_until(migration0022). While snoozed, a location's alerts still record the dashboard-only history row but channel dispatch is suppressed (no notifications); snooze auto-expires (a past value = not snoozed, no cleanup job).POST /api/locations/{id}/snooze(duration oruntil) +/unsnooze, can-manage-location + CSRF, with a snooze control + "🔕 Snoozed" badge in the UI.#81 — Acknowledgement + escalation for warnings
Ack + escalation fields on the dashboard
SentAlertrow (migration0023).POST /api/alerts/{id}/ack(any viewer, CSRF) + a dashboard "Acknowledge" button. A scheduler job re-notifies active, unacknowledged, warning-class alerts everyESCALATION_INTERVAL_MINUTES, up toESCALATION_MAX_COUNT, reusing the delivery outbox withkind="escalation"(excluded from the alert-retry worker, so a reminder and a retry can never both fire). Bounds only advance on a successful send; acknowledging, clearing, expiry, or snooze stops escalation (snoozed locations skip without consuming budget). Opt-in viaESCALATION_ENABLED(default off — re-notifying is potentially noisy).snoozed_untilnow exposed inLocationRead.Testing
Full suite green on the dev server: 635 passed (18 new tests); migrations
0022/0023apply cleanly to head on real Postgres.Notes
(alert, location)model); acking every location behind one sharednws_alert_idin one click is a possible UX follow-up.Closes #82, #81
🤖 Generated with Claude Code