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.