anti
d4d8a2ad0d
feat(correlation): interleave mutation markers into attacker traversals
...
Parser now tags ``mutator`` / ``decky_mutated`` lines with ``kind="mutation"``
so the engine can route them into a sibling ``_mutations`` index keyed
by decky name instead of the per-IP attacker index. ``traversals()``
joins the two streams: every attacker gets a ``mutations_during`` list
of markers from touched deckies bounded by their first/last-seen
window. ``AttackerTraversal.to_dict()`` grows a ``mutations_during``
field and a ``timeline`` that chronologically interleaves hops and
markers, so an ``SSH at T5 → mutation at T6 → HTTP at T7`` substrate
transition is visible to UI consumers instead of reading as a silent
discontinuity.
The existing hops-only JSON shape is preserved; old clients that
ignore unknown keys keep working.
2026-04-21 19:37:35 -04:00
..
2026-04-21 14:39:12 -04:00
2026-04-21 17:02:10 -04:00
2026-04-21 16:57:21 -04:00
2026-04-21 16:53:03 -04:00
2026-04-19 23:50:53 -04:00
2026-04-20 13:14:48 -04:00
2026-04-17 13:20:05 -04:00
2026-04-21 16:47:55 -04:00
2026-04-21 16:54:40 -04:00
2026-04-19 23:50:53 -04:00
2026-04-21 16:47:55 -04:00
2026-04-20 01:26:56 -04:00
2026-04-21 01:41:30 -04:00
2026-04-21 14:39:12 -04:00
2026-04-19 19:07:24 -04:00
2026-04-21 16:58:49 -04:00
2026-04-03 23:07:44 -03:00
2026-04-15 23:46:46 -04:00
2026-04-19 23:50:53 -04:00
2026-04-17 14:49:13 -04:00
2026-04-18 05:36:48 -04:00
2026-04-12 00:26:22 -04:00
2026-04-15 13:58:12 -04:00
2026-04-17 14:52:22 -04:00
2026-04-19 23:50:53 -04:00
2026-04-20 16:43:49 -04:00
2026-04-15 18:02:52 -04:00
2026-04-12 00:26:22 -04:00
2026-04-19 22:42:52 -04:00
2026-04-14 15:02:34 -04:00
2026-04-19 23:50:53 -04:00
2026-04-15 22:57:03 -04:00
2026-04-21 10:23:10 -04:00
2026-04-12 00:34:45 -04:00
2026-04-19 05:46:08 -04:00
2026-04-13 01:43:52 -04:00
2026-04-21 19:37:35 -04:00
2026-04-10 01:50:08 -04:00
2026-04-09 02:31:14 -04:00
2026-04-09 02:31:14 -04:00
2026-04-21 19:35:05 -04:00
2026-04-17 13:35:43 -04:00
2026-04-20 02:26:54 -04:00
2026-04-19 03:17:17 -04:00
2026-04-04 04:31:00 -03:00
2026-04-13 23:20:37 -04:00
2026-04-14 15:02:34 -04:00
2026-04-13 01:43:52 -04:00
2026-04-17 15:05:18 -04:00
2026-04-17 16:37:34 -04:00
2026-04-04 17:36:16 -03:00
2026-04-09 02:31:14 -04:00
2026-04-08 01:04:59 -04:00
2026-04-17 14:01:36 -04:00
2026-04-10 00:14:14 -04:00
2026-04-10 01:50:08 -04:00
2026-04-13 07:39:01 -04:00
2026-04-20 02:18:11 -04:00
2026-04-21 19:31:31 -04:00
2026-04-15 12:51:33 -04:00
2026-04-15 12:59:54 -04:00
2026-04-17 13:13:36 -04:00
2026-04-19 19:59:06 -04:00
2026-04-12 00:26:22 -04:00
2026-04-17 13:39:09 -04:00
2026-04-14 12:53:55 -04:00
2026-04-14 12:53:55 -04:00
2026-04-14 12:22:20 -04:00
2026-04-14 12:53:55 -04:00
2026-04-17 22:57:53 -04:00
2026-04-15 17:36:40 -04:00
2026-04-17 19:09:15 -04:00
2026-04-17 16:37:34 -04:00
2026-04-18 05:36:48 -04:00
2026-04-12 07:48:17 -04:00
2026-04-19 23:50:53 -04:00
2026-04-15 12:51:35 -04:00
2026-04-15 12:51:35 -04:00
2026-04-17 22:57:53 -04:00
2026-04-14 15:02:34 -04:00
2026-04-19 23:50:53 -04:00
2026-04-18 05:34:50 -04:00
2026-04-18 05:34:50 -04:00
2026-04-17 22:57:53 -04:00
2026-04-15 23:23:13 -04:00
2026-04-13 20:22:08 -04:00