rUv
802b75b4e2
feat(memory): nightly vector-DB backup — WAL-safe snapshot, rotation, daemon worker ( #2571 )
...
Adds backup for .swarm/memory.db (the vector store holding embeddings +
distilled reasoning_patterns):
- services/memory-backup.ts: backupMemoryDb() — WAL-safe ONLINE snapshot via
better-sqlite3 .backup() (a naive file copy of a WAL-mode DB can corrupt),
timestamped, rotated (keep last N, default 7), optional GCS offsite.
Non-destructive (readonly source), never throws.
- 'memory backup' CLI subcommand (--db/--dir/--keep/--gcs).
- Daemon 'backup' worker: 24h interval, enabled by default, opt-out via -w;
RUFLO_BACKUP_GCS / RUFLO_BACKUP_KEEP configure the headless path (registered
as escape hatches in the env-var-precedence audit).
Verified E2E: 'memory backup' on a copy of the real 8,076-row DB → consistent
snapshot, integrity_check ok, rows match source. 11 tests.
2026-07-04 17:41:03 -04:00
..
2026-05-19 08:23:30 -04:00
2026-05-29 08:52:31 -04:00
2026-05-12 00:40:47 -04:00
2026-05-11 11:50:56 -04:00
2026-07-04 17:41:03 -04:00
2026-06-16 12:10:35 -04:00
2026-07-03 16:52:09 -04:00
2026-05-12 00:51:18 -04:00
2026-05-13 09:02:51 -04:00
2026-05-14 08:03:31 -04:00
2026-05-15 21:44:39 -04:00
2026-05-25 17:19:43 -04:00
2026-06-16 12:10:35 -04:00
2026-05-12 00:44:57 -04:00
2026-06-16 12:10:35 -04:00
2026-05-23 04:52:41 -04:00
2026-05-11 00:29:58 -04:00
2026-05-26 07:43:34 -04:00
2026-05-13 09:02:02 -04:00
2026-05-25 08:46:56 -04:00
2026-06-16 12:10:35 -04:00
2026-06-29 11:59:20 -04:00
2026-06-27 11:42:23 -04:00
2026-05-26 00:14:53 -04:00
2026-06-27 11:41:06 -04:00
2026-06-16 12:10:35 -04:00
2026-06-16 12:10:35 -04:00
2026-06-26 16:58:54 -04:00
2026-06-16 12:10:35 -04:00
2026-06-16 12:10:35 -04:00
2026-05-11 00:29:58 -04:00
2026-06-16 12:10:35 -04:00
2026-06-16 22:42:19 -04:00
2026-06-16 22:37:57 -04:00
2026-06-16 13:14:49 -04:00
2026-01-04 19:30:59 +00:00
2026-06-16 12:10:35 -04:00
2026-06-16 12:10:35 -04:00
2026-04-06 11:47:30 -04:00
2026-05-05 22:18:18 -04:00
2026-06-09 12:15:03 -04:00
2026-06-16 12:10:35 -04:00
2026-05-09 10:47:43 -04:00
2026-05-03 21:47:15 -04:00
2026-05-21 22:43:14 -04:00
2026-06-29 18:28:28 -04:00
2026-06-29 11:59:20 -04:00
2026-06-16 12:10:35 -04:00
2026-05-21 14:19:35 -04:00
2026-05-18 20:55:31 -04:00
2026-05-15 21:44:39 -04:00
2026-05-21 14:37:43 -04:00
2026-05-21 14:03:29 -04:00
2026-05-21 14:23:31 -04:00
2026-05-24 23:46:50 -04:00
2026-05-24 23:46:50 -04:00
2026-05-24 23:46:50 -04:00
2026-06-25 18:32:28 -04:00
2026-05-21 15:41:47 -04:00
2026-05-19 12:19:16 -04:00
2026-05-26 00:01:46 -04:00
2026-05-25 22:44:55 -04:00
2026-05-24 11:13:50 -04:00
2026-05-19 22:39:21 -04:00
2026-05-19 23:04:14 -04:00
2026-05-19 22:44:34 -04:00
2026-05-20 16:28:51 -04:00
2026-05-19 16:39:54 -04:00
2026-05-15 22:29:21 -04:00
2026-06-02 03:59:36 -04:00
2026-05-25 17:19:43 -04:00
2026-05-21 12:36:22 -04:00
2026-05-27 20:16:00 -04:00
2026-05-27 09:00:35 -04:00
2026-06-25 19:22:58 -04:00
2026-05-24 14:32:43 -04:00
2026-05-24 14:32:43 -04:00
2026-05-24 14:32:43 -04:00
2026-05-24 14:32:43 -04:00
2026-06-17 14:10:27 -04:00
2026-06-17 14:10:27 -04:00
2026-05-16 19:20:26 -04:00
2026-05-16 08:44:51 -04:00
2026-06-25 18:18:19 -04:00
2026-05-23 04:52:41 -04:00
2026-06-16 12:10:35 -04:00
2026-06-16 12:10:35 -04:00
2026-06-16 12:10:35 -04:00
2026-06-16 12:10:35 -04:00
2026-06-16 12:10:35 -04:00
2026-06-16 12:10:35 -04:00
2026-06-16 12:10:35 -04:00
2026-02-28 03:30:04 +00:00
2026-05-13 11:11:25 -04:00