rcourtman
e087eff00e
Stop polluting Patrol finding lifecycle with no-op heartbeats
...
Every Patrol scan that re-detected an already-active finding was
appending a "detected (same_state -> same_state)" lifecycle event
with the message "Detected by Pulse Patrol". A finding active for
6 scans rendered as 6 stacked rows reading
"Detected Detected by Pulse Patrol (detected -> detected)".
Backend: drop the unconditional re-detection lifecycle append in
findings.go. The lifecycle should record state transitions, not
heartbeats — TimesRaised and LastSeenAt already track recurrence,
and the genuine transition events ("regressed", "reminded",
"suppression_lifted") are emitted from their own branches upstream.
Frontend: defensively hide (from -> to) spans where from === to
and strip the type-label prefix from the message so already-
persisted polluted lifecycle entries also render cleanly until
they age out of the per-finding event cap.
Adds a test that locks in the new backend behavior.
2026-05-10 17:13:07 +01:00
..
2026-03-18 16:06:30 +00:00
2026-05-09 21:31:45 +01:00
2026-03-18 16:06:30 +00:00
2026-05-08 15:33:14 +01:00
2026-03-18 16:06:30 +00:00
2026-03-19 14:30:45 +00:00
2026-05-08 01:24:50 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-04-21 16:06:49 +01:00
2026-03-29 14:18:20 +01:00
2026-03-18 16:06:30 +00:00
2026-03-29 14:28:48 +01:00
2026-04-25 21:13:53 +01:00
2026-03-18 16:06:30 +00:00
2026-05-10 00:04:13 +01:00
2026-04-01 14:47:58 +01:00
2026-03-18 16:06:30 +00:00
2026-05-09 22:45:15 +01:00
2026-05-09 11:10:11 +01:00
2026-05-01 20:28:11 +01:00
2026-03-30 13:34:08 +01:00
2026-03-30 13:34:08 +01:00
2026-01-25 21:08:44 +00:00
2026-05-07 01:24:57 +01:00
2026-05-07 01:24:57 +01:00
2025-12-29 13:49:04 +00:00
2026-03-18 16:06:30 +00:00
2025-12-29 13:49:04 +00:00
2026-01-01 22:29:15 +00:00
2025-12-12 11:29:47 +00:00
2026-03-18 16:06:30 +00:00
2025-12-12 14:26:10 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-20 11:05:08 +00:00
2026-05-08 11:08:53 +01:00
2026-05-08 11:08:53 +01:00
2026-05-01 20:28:11 +01:00
2026-03-18 16:06:30 +00:00
2026-04-09 20:15:17 +01:00
2026-01-25 21:08:44 +00:00
2026-01-30 19:02:14 +00:00
2026-03-25 17:38:28 +00:00
2026-01-30 19:02:14 +00:00
2026-01-30 19:02:14 +00:00
2026-05-10 17:13:07 +01:00
2026-03-18 16:06:30 +00:00
2026-05-06 16:31:51 +01:00
2026-03-30 13:34:08 +01:00
2026-03-18 16:06:30 +00:00
2026-05-09 21:03:15 +01:00
2026-02-01 10:12:23 +00:00
2026-01-19 19:20:49 +00:00
2026-01-19 19:20:49 +00:00
2026-05-10 17:13:07 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-29 13:38:06 +01:00
2026-03-19 04:15:26 +00:00
2026-05-08 11:08:53 +01:00
2026-05-08 18:17:19 +01:00
2026-05-08 18:17:19 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 17:22:24 +00:00
2025-12-12 13:49:37 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2025-12-29 13:49:04 +00:00
2025-12-12 09:45:57 +00:00
2026-03-18 16:06:30 +00:00
2026-04-09 20:15:17 +01:00
2026-04-28 15:49:18 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-04-03 19:00:40 +01:00
2026-04-28 15:49:18 +01:00
2026-04-03 19:45:38 +01:00
2026-02-01 18:07:41 +00:00
2026-05-08 19:28:02 +01:00
2026-04-03 19:45:38 +01:00
2026-05-10 14:10:18 +01:00
2026-05-07 21:58:06 +01:00
2026-03-18 16:06:30 +00:00
2026-05-07 18:24:47 +01:00
2026-05-07 16:31:42 +01:00
2026-05-09 21:03:15 +01:00
2026-02-04 19:56:12 +00:00
2026-05-08 11:08:53 +01:00
2026-05-08 11:08:53 +01:00
2026-03-18 16:06:30 +00:00
2026-05-07 19:26:00 +01:00
2026-02-01 16:27:25 +00:00
2026-05-01 20:28:11 +01:00
2026-03-18 16:06:30 +00:00
2026-02-01 16:27:25 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-05-10 16:14:26 +01:00
2026-05-10 16:14:26 +01:00
2026-05-01 20:28:11 +01:00
2026-05-01 20:28:11 +01:00
2026-05-08 11:34:07 +01:00
2026-05-10 14:10:18 +01:00
2026-01-30 19:02:14 +00:00
2026-03-30 13:34:08 +01:00
2026-05-07 16:15:07 +01:00
2026-04-28 16:11:27 +01:00
2026-05-07 22:42:38 +01:00
2026-05-10 14:10:18 +01:00
2026-05-10 14:10:18 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-30 11:57:49 +01:00
2026-03-18 16:06:30 +00:00
2026-05-08 21:11:24 +01:00
2026-01-24 22:41:43 +00:00
2026-04-03 19:45:38 +01:00
2026-03-30 13:34:08 +01:00
2026-04-01 23:09:32 +01:00
2026-03-30 13:34:08 +01:00
2026-03-30 13:34:08 +01:00
2026-05-08 11:08:53 +01:00
2025-12-12 14:11:28 +00:00
2026-04-25 20:41:13 +01:00
2026-04-25 20:41:13 +01:00
2026-04-25 20:41:13 +01:00
2026-04-25 20:41:13 +01:00
2026-03-19 04:07:47 +00:00
2026-03-19 04:07:47 +00:00
2026-03-18 16:06:30 +00:00
2026-03-30 13:34:08 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2025-12-10 08:35:24 +00:00
2026-04-25 21:13:53 +01:00
2026-05-08 11:57:04 +01:00
2026-03-18 16:06:30 +00:00
2026-04-21 16:06:49 +01:00
2026-03-18 16:06:30 +00:00
2026-05-10 14:58:26 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00