Story: Harden the eventing chain against transient notification loss

Table of Contents

This page documents a story in Sprint 25. It captures the goal, current status, acceptance criteria, and the tasks that compose it.

1. Goal

The eventing chain (postgres_listener_service, postgres_event_source, event_bus, NATS publish) silently loses notifications in two windows: the listener's reconnect path (consume_input failure, 1-5s doubling backoff, re-LISTEN) drops NOTIFYs in flight during the outage, and NATS publish failures are caught and logged by publish_entity_event and the event_bus instead of surfacing. The eventing integration tests (hotfix story AE32C594-8E9B-4C58-B3D2-B93BB7C219E1) now tolerate these losses by re-driving writes; production has no such protection. This story hardens the chain so a notification is either delivered or its loss is reported.

2. Status

Field Value
State DONE
Parent sprint Sprint 25
Now Nothing.
Waiting on Nothing.
Next Nothing.
Last touched 2026-09-23

3. Acceptance

  • A listener reconnect (consume_input failure, backoff, re-LISTEN) no longer drops notifications in flight: the loss is recovered or surfaced.
  • NATS publish failures are visible: publish_entity_event and the event_bus no longer swallow them silently.
  • All 85 eventing integration tests stay green; no regression in the test family.
  • A dropped notification is diagnosable from logs without code changes.

4. Tasks

Task State Start End Description
Scaffold story: Harden the eventing chain against transient notification loss DONE 2026-08-25 2026-08-25 Story scaffolding rides this task: documents, sprint wiring, and the scaffold PR. Close it before merging that PR.
Implement eventing chain hardening STARTED 2026-08-26   Initial task for: Harden the eventing chain against transient notification loss

5. Decisions

6. Out of scope

  • Test-side tolerances and re-drive logic in the eventing integration tests: already delivered by the flake hotfix (AE32C594-8E9B-4C58-B3D2-B93BB7C219E1).

7. Result

Closed at sprint 25 close. Every task is done.

Emacs 29.3 (Org mode 9.6.15)