rcourtman
41e41be851
Extract saveHistoryData helper to dedupe AI usage / patrol run history saves
...
SaveAIUsageHistory and SavePatrolRunHistory were byte-for-byte clones
(lock, EnsureConfigDir, marshal, optional encrypt, write, debug log)
flagged by dupl. Fold the shared shape into saveHistoryData, the save-
side counterpart of the existing loadHistoryData generic, preserving
the exact error-wrap strings and log messages.
Full internal/config test suite passes.
2026-06-09 21:57:03 +01:00
..
2026-05-08 01:24:50 +01:00
2026-06-09 09:43:21 +01:00
2026-03-18 16:06:30 +00:00
2025-12-12 09:45:57 +00:00
2026-06-09 09:43:21 +01:00
2026-03-18 16:06:30 +00:00
2026-03-24 23:59:52 +00:00
2026-03-18 16:06:30 +00:00
2026-04-22 07:59:12 +01:00
2026-05-25 21:38:43 +01:00
2026-05-25 21:38:43 +01:00
2026-05-05 15:59:23 +01:00
2026-04-28 16:11:27 +01:00
2026-01-03 11:14:17 +00:00
2025-11-27 00:05:04 +00:00
2026-03-18 16:06:30 +00:00
2026-05-18 23:44:24 +01:00
2026-04-28 17:02:04 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-05-28 22:55:38 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-05-28 22:55:38 +01:00
2026-03-18 16:06:30 +00:00
2026-01-22 13:49:05 +00:00
2026-01-03 18:36:17 +00:00
2026-01-03 18:36:17 +00:00
2026-03-18 16:06:30 +00:00
2026-04-03 21:09:41 +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-04-22 01:03:10 +01:00
2026-04-15 16:23:42 +01:00
2026-03-18 16:06:30 +00:00
2026-06-03 19:40:57 +01:00
2026-06-03 20:08:24 +01:00
2026-05-28 14:49:20 +01:00
2026-05-28 14:49:20 +01:00
2026-01-03 18:36:17 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2025-12-02 02:34:20 +00:00
2026-03-18 16:06:30 +00:00
2026-06-03 12:29:37 +01:00
2026-04-15 16:23:42 +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 15:32:19 +01:00
2026-03-29 15:32:19 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-04-28 15:49:18 +01:00
2026-03-18 16:06:30 +00:00
2026-06-09 09:43:21 +01:00
2026-01-03 18:36:17 +00:00
2026-01-03 18:36:17 +00:00
2026-06-04 08:32:06 +01:00
2026-03-18 16:06:30 +00:00
2025-12-17 13:28:06 +00:00
2026-03-18 16:06:30 +00:00
2026-05-07 15:18:19 +01:00
2026-03-18 16:06:30 +00:00
2026-03-29 14:56:33 +01:00
2026-04-03 00:45:05 +01:00
2026-04-03 00:45:05 +01:00
2026-01-22 13:39:06 +00:00
2026-01-03 18:36:17 +00:00
2026-01-03 18:36:17 +00:00
2026-01-03 18:36:17 +00:00
2026-03-18 16:06:30 +00:00
2026-06-09 21:42:21 +01:00
2026-03-18 16:06:30 +00:00
2026-05-12 11:18:31 +01:00
2026-05-12 17:32:11 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-04-22 01:03:10 +01:00
2026-03-18 16:06:30 +00:00
2026-06-09 21:57:03 +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-06-02 18:11:25 +01:00
2026-04-01 12:00:31 +01:00
2026-04-01 12:00:31 +01:00
2026-04-19 15:02:18 +01:00
2026-04-19 15:02:18 +01:00
2026-04-19 15:02:18 +01:00
2026-04-19 15:02:18 +01:00
2026-04-12 11:19:34 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-05-21 15:15:23 +01:00
2026-05-21 15:15:23 +01:00