• v0.7.0 4224dbe96c

    Record notification delivery on the incident timeline
    Release / test (push) Failing after 8s
    Release / build (amd64, darwin) (push) Has been skipped
    Release / build (amd64, linux) (push) Has been skipped
    Release / build (arm64, darwin) (push) Has been skipped
    Release / build (arm64, linux) (push) Has been skipped
    Release / docker (push) Has been skipped
    Release / chart (push) Has been skipped
    Release / release (push) Has been skipped

    niklas released this 2026-08-07 11:31:03 +00:00 | 101 commits to main since this release

    An incident's history went quiet after "Incident opened": nothing said
    that anybody had been paged, reminded, or told it resolved. Delivery
    lived only in the notifications outbox, which no API exposes, so when a
    page failed to arrive there was nothing in the product that said whether
    it had been sent.

    The notifier now writes two event types. A notified event once ntfy
    accepts the publish, carrying the kind in detail and the paged user in
    user_id — absent when the page went to the shared fallback topic, which
    belongs to nobody. And a notify_failed event when a notification
    exhausts its retries, which is the one worth having: without it a page
    that never landed leaves the timeline identical to one that did.

    Both are written from the delivery result rather than at enqueue. A
    queued notification is an intention, and the timeline is append-only, so
    claiming somebody was told before ntfy accepted it would be a lie that
    stays there. A failed timeline write is logged rather than returned, so
    it cannot make a delivered row look unsent and send the page twice.

    The topic is deliberately in neither: it is a shared secret with the
    ntfy server, and every API key can read the timeline.

    No migration — incident_events.type is free text, unlike
    notifications.kind.

    Downloads