rcourtman
6185cf3f88
Bound alert lifecycle replay with a durable projection watermark
...
Projection replay walked the entire alert event log on every boot, twice
(monitor start and the resource-store boundary), synchronously on the
serving path, and every replayed event queued a full incident-store JSON
rewrite. A 64k-event log made startup exceed the dev supervisor's
health-kill window, so the backend restarted forever and never served.
The event log now owns per-consumer projection watermarks in
alert_store_meta, WalkOldest takes an AfterID cursor, and the single
catch-up pass runs in the background at the canonical resource-store
boundary with periodic watermark checkpoints. The watermark only
advances when both the incident store and the canonical change recorder
are attached, so partial-surface passes repair without marking events
applied, and lowering the watermark forces a full repair replay.
Incident-store saves now coalesce: a burst of mutations queues one
whole-store serialization instead of one per event, live paths included.
Registers the alert-lifecycle-replay-startup-scalability coverage gap
and amends the alerts and monitoring subsystem contracts accordingly.
2026-08-31 21:57:58 +01:00
..
2026-08-28 00:45:20 +01:00
2026-08-31 21:57:58 +01:00
2026-08-29 17:32:17 +01:00
2026-08-27 00:15:58 +01:00
2026-07-25 00:39:15 +01:00
2026-04-11 22:46:34 +01:00
2026-08-27 03:26:21 +01:00
2026-08-28 10:14:02 +01:00
2026-08-27 15:21:18 +01:00
2026-08-27 15:21:18 +01:00
2026-08-28 11:28:38 +01:00
2026-08-28 11:28:38 +01:00
2026-08-28 11:28:38 +01:00
2026-08-27 12:04:49 +01:00
2026-08-27 12:04:49 +01:00
2026-03-18 16:06:30 +00:00
2026-08-27 01:10:26 +01:00
2026-08-27 01:10:26 +01:00
2026-08-28 10:14:02 +01:00
2026-08-29 18:19:00 +01:00
2026-07-25 00:39:15 +01:00
2026-08-26 04:33:47 +01:00
2026-05-06 14:29:06 +01:00
2026-08-27 19:51:12 +01:00
2026-07-25 00:39:15 +01:00
2026-08-28 00:45:20 +01:00
2026-08-29 18:19:00 +01:00
2026-07-25 00:39:15 +01:00
2026-08-29 17:32:17 +01:00
2026-08-06 22:04:04 +01:00
2026-07-20 16:03:29 +01:00
2026-08-29 18:19:00 +01:00
2026-08-27 20:41:08 +01:00
2026-08-27 20:41:08 +01:00
2026-08-27 01:00:12 +01:00
2025-11-30 05:19:38 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-07-23 06:44:33 +01:00
2026-08-28 00:45:20 +01:00
2026-08-27 21:11:44 +01:00
2026-08-27 20:12:36 +01:00
2026-08-27 01:00:12 +01:00
2026-08-29 18:19:00 +01:00
2026-07-02 23:27:49 +01:00
2026-08-27 00:31:27 +01:00
2026-08-29 18:19:00 +01:00
2026-06-26 22:42:02 +01:00
2026-08-27 21:11:44 +01:00
2026-05-13 10:44:11 +01:00
2026-07-24 20:58:09 +01:00
2026-05-13 07:13:46 +01:00
2026-05-13 07:13:46 +01:00
2026-08-14 06:26:15 +01:00
2026-08-27 01:10:26 +01:00
2026-08-27 19:51:12 +01:00
2026-08-27 19:51:12 +01:00
2026-08-26 21:15:37 +01:00
2026-08-31 21:57:58 +01:00
2026-07-29 20:09:23 +01:00
2026-08-27 01:10:26 +01:00
2026-03-18 16:06:30 +00:00
2026-07-24 10:26:50 +01:00
2026-08-27 01:10:26 +01:00
2026-05-13 00:28:24 +01:00
2026-07-25 06:34:48 +01:00
2026-08-28 10:14:02 +01:00
2026-07-30 10:59:27 +01:00
2026-07-24 10:26:50 +01:00
2026-07-24 10:26:50 +01:00
2026-07-30 14:54:34 +01:00
2026-08-29 17:32:17 +01:00
2026-05-06 14:10:41 +01:00
2026-08-24 08:56:07 +01:00
2026-06-27 16:36:29 +01:00
2026-08-27 10:05:37 +01:00
2026-08-27 14:45:36 +01:00
2026-08-27 14:45:36 +01:00
2026-08-27 10:05:37 +01:00
2026-08-27 17:20:32 +01:00
2026-08-27 00:15:58 +01:00
2026-08-27 10:05:37 +01:00
2026-08-27 14:45:36 +01:00
2026-08-27 00:27:01 +01:00
2026-08-27 01:00:12 +01:00
2026-07-30 19:08:28 +01:00
2026-08-29 18:19:00 +01:00
2026-08-30 22:32:21 +01:00
2026-08-30 22:32:21 +01:00
2026-07-24 12:23:29 +01:00
2026-07-25 00:21:35 +01:00
2026-07-21 06:14:26 +01:00
2026-08-27 18:20:03 +01:00
2026-08-27 18:20:03 +01:00
2026-08-06 00:48:37 +01:00
2026-08-27 09:09:56 +01:00
2026-08-26 21:15:37 +01:00
2026-08-28 10:14:02 +01:00
2026-05-06 15:00:30 +01:00
2026-08-29 17:32:17 +01:00
2026-08-27 01:00:12 +01:00
2026-08-30 22:32:21 +01:00
2026-08-29 18:19:00 +01:00
2026-08-27 14:45:36 +01:00
2026-08-30 22:32:21 +01:00
2026-08-27 01:00:12 +01:00
2026-08-27 17:20:32 +01:00
2026-08-28 00:45:20 +01:00
2026-07-19 15:11:02 +01:00
2026-04-01 12:40:51 +01:00
2026-07-18 19:41:53 +01:00
2026-08-27 01:00:12 +01:00
2026-08-27 01:10:26 +01:00
2026-08-27 01:00:12 +01:00
2026-08-27 01:00:12 +01:00
2026-08-27 01:10:26 +01:00
2026-08-22 06:24:04 +01:00
2026-08-27 01:00:12 +01:00
2026-06-12 19:19:16 +01:00
2026-07-25 06:34:48 +01:00
2026-08-28 00:45:20 +01:00
2026-08-27 01:00:12 +01:00
2026-08-27 01:00:12 +01:00
2026-08-27 01:00:12 +01:00
2026-08-27 01:00:12 +01:00
2026-08-27 01:00:12 +01:00
2026-08-27 01:00:12 +01:00
2026-08-27 01:00:12 +01:00
2026-08-27 01:00:12 +01:00
2026-08-27 18:20:03 +01:00
2026-08-27 01:00:12 +01:00
2026-08-27 00:31:27 +01:00
2026-08-27 20:12:36 +01:00
2026-05-28 14:42:43 +01:00
2026-08-27 20:41:08 +01:00
2026-05-06 14:10:41 +01:00
2026-08-28 00:45:20 +01:00
2026-08-29 14:00:28 +01:00
2026-08-29 14:00:28 +01:00
2026-08-27 01:00:12 +01:00
2026-08-29 17:32:17 +01:00
2026-04-15 12:18:57 +01:00
2026-08-29 17:32:17 +01:00
2026-08-27 03:26:21 +01:00
2026-07-18 19:44:06 +01:00
2026-06-28 01:39:12 +01:00
2026-08-29 17:32:17 +01:00
2026-08-27 20:41:08 +01:00
2026-08-27 01:00:12 +01:00
2026-08-10 09:47:06 +01:00
2026-08-30 22:32:21 +01:00
2026-08-14 06:26:15 +01:00
2026-06-04 09:33:02 +01:00
2026-08-27 21:11:44 +01:00
2026-08-27 21:11:44 +01:00