• v1.2.0 09add453bf

    v1.2.0 — Notification formatting & delivery reliability
    All checks were successful
    CD / test (push) Successful in 3m48s
    CD / deploy (push) Successful in 23s
    Stable

    claude-bot released this 2026-07-18 22:16:14 +00:00 | 140 commits to main since this release

    Hardens the notification path end-to-end and adds new channels/UX. 12 issues across three phases. No breaking changes; several features are opt-in.

    Delivery reliability

    • Delivery outbox (#50) — NWS-warning delivery is now at-least-once: a notification_deliveries table + a retry job with bounded exponential backoff, and notifiers that raise classified Transient/Permanent errors so real transient failures are actually retried (never re-sending a delivered alert). The milestone's keystone.
    • Pipeline lifecycle hardening (#53) — clear-path row locks (no double all-clears), tracked/drained background tasks, and a single shared SSE LISTEN broker instead of one Postgres connection per client.
    • NWS CAP fallback (#78) — fall back to the CAP ATOM feed when the primary alerts API fails.
    • Warning acknowledgement + escalation (#81, opt-in) — re-notify active, unacknowledged warnings on an interval until acknowledged (bounded), reusing the outbox.

    Channels & UX

    • Email / SMTP channel (#80).
    • Temporary location snooze / mute (#82).
    • End-to-end pipeline drill (#86) — admin endpoint that injects a synthetic alert through the real pipeline.
    • Shared formatter migration (#14, #15) — the six richer channels now use per-channel budgets + one compact "Details" link.
    • Segment-aware SMS budgeting (F-32) — non-GSM-7 characters no longer cause silent extra segments.
    • Redirect-token short links (#13, opt-in) — open-redirect-safe {base}/r/{token} via SHORT_LINK_REDIRECT_MODE.
    • Per-type channel-config validation (#55) — malformed config is rejected at create/update (422) instead of crashing a send.
    • Non-blocking Twilio + TimezoneFinder singleton (#56).

    Testing

    Full suite green on the dev server: 635 passed (incl. a Postgres integration tier). Migrations 00190023 apply cleanly to head on real Postgres. The outbox retry acceptance is covered end-to-end (transient failure → later successful delivery; permanent → dead; no duplicates).

    New config (all optional, safe defaults)

    SMTP_*/EMAIL_ENABLED, NWS_CAP_FALLBACK_ENABLED, DELIVERY_*, SSE_CLIENT_QUEUE_MAXSIZE, ESCALATION_* (off by default), SHORT_LINK_REDIRECT_MODE, SHORT_LINK_EXTERNAL_ALLOWLIST. See .env.example.

    Full changelog: CHANGELOG.md. PRs #99–#103.

    Downloads