Brooklyn Nicholson
3150e444b2
feat(kanban): export and import a whole board as a portable archive
...
`hermes kanban boards export|import` moves a board between machines:
tasks, comments, links, history, and attachments in one .tar.gz.
Two things make this more than a tar of the board directory. The
database is live — kanban runs in WAL mode, so a filesystem copy loses
whatever still sits in the -wal sidecar and tears if the dispatcher
commits mid-copy; export goes through SQLite's online-backup API
instead. And rows carry machine-local state: claims, worker PIDs,
absolute workspace and attachment paths, session ids, and the gateway
chat ids subscribed to task events. Shipping those verbatim is how an
imported board arrives holding a claim owned by a process on someone
else's laptop, or starts pushing task events into a stranger's Telegram
thread. Everything machine-local is stripped on export and re-stripped
on import, since an archive is untrusted input.
Imports always land as a NEW board, auto-suffixing the slug on
collision, so an import can never merge into or overwrite a board that
is already there. Tasks whose workspace was a directory or git worktree
on the source machine are parked in triage rather than left for the
dispatcher to claim and burn into the failure breaker.
2026-08-28 22:38:01 -05:00
..
2026-08-24 16:58:51 +10:00
2026-08-12 18:52:08 -07:00
2026-08-18 20:42:06 -04:00
2026-07-22 16:51:01 -04:00
2026-08-28 13:33:56 -04:00
2026-08-27 19:54:32 +05:30
2026-08-27 05:06:41 -07:00
2026-08-23 01:47:26 -07:00
2026-08-23 01:47:26 -07:00
2026-08-28 05:15:06 -07:00
2026-08-16 02:03:22 -07:00
2026-08-20 03:05:46 -07:00
2026-08-25 01:34:56 +05:30
2026-08-27 11:50:05 -05:00
2026-08-02 14:55:32 +05:30
2026-08-08 23:56:46 -07:00
2026-08-27 13:27:24 +05:30
2026-08-12 16:26:55 -07:00
2026-08-07 08:57:39 -07:00
2026-08-07 08:57:39 -07:00
2026-08-28 22:38:01 -05:00
2026-08-23 20:00:53 -07:00
2026-08-27 04:14:31 -07:00
2026-08-26 19:25:33 -07:00
2026-07-31 21:21:20 -07:00
2026-08-26 16:45:22 -07:00
2026-08-07 17:45:06 +05:30
2026-08-26 19:25:33 -07:00
2026-08-20 21:54:25 -07:00
2026-08-19 19:34:36 -07:00
2026-08-02 20:21:59 -07:00
2026-08-08 15:10:35 +05:30
2026-08-16 06:32:08 -07:00
2026-08-22 03:59:28 +05:30
2026-07-29 11:53:39 -07:00
2026-08-26 06:28:43 -07:00
2026-08-24 15:42:58 +05:30
2026-07-29 08:42:16 -07:00
2026-08-23 02:14:35 -07:00
2026-08-27 22:05:40 -05:00
2026-08-28 07:50:33 -07:00
2026-08-25 02:45:10 -07:00
2026-08-28 07:50:33 -07:00
2026-08-27 13:27:24 +05:30
2026-08-01 10:52:34 -07:00
2026-07-22 21:17:21 -07:00
2026-08-19 19:22:48 -07:00
2026-08-27 16:10:57 +05:30
2026-08-23 21:12:20 -07:00
2026-08-24 15:45:52 +05:30
2026-08-26 08:39:04 -07:00
2026-08-21 23:01:30 -07:00
2026-08-13 02:38:28 -07:00
2026-08-13 02:38:28 -07:00
2026-08-28 09:05:19 +05:30
2026-08-19 16:16:37 -07:00
2026-08-15 13:28:14 -07:00
2026-07-26 23:41:54 -07:00
2026-07-31 22:35:26 -07:00
2026-07-26 18:10:34 -07:00
2026-08-20 02:06:05 -07:00
2026-08-21 14:13:28 +10:00
2026-08-16 06:26:12 -07:00
2026-08-27 22:06:17 +05:30
2026-08-26 16:45:22 -07:00
2026-08-21 02:48:14 +08:00
2026-08-05 11:47:05 -04:00
2026-08-18 16:08:29 -07:00
2026-08-13 23:10:16 +05:30
2026-08-26 11:41:04 -07:00
2026-07-26 17:46:29 -07:00
2026-08-27 11:31:21 -05:00
2026-08-27 17:45:43 -05:00
2026-08-27 19:07:15 +05:30
2026-08-10 12:43:46 -07:00
2026-08-10 12:43:46 -07:00
2026-08-28 22:38:01 -05:00
2026-08-28 22:38:01 -05:00
2026-07-27 21:10:51 -07:00
2026-08-21 13:41:39 -07:00
2026-08-18 16:08:29 -07:00
2026-08-28 09:05:19 +05:30
2026-08-28 05:45:00 -07:00
2026-08-26 04:14:16 -07:00
2026-08-25 04:21:37 -07:00
2026-08-25 04:21:37 -07:00
2026-08-07 09:44:21 -07:00
2026-08-02 22:44:38 +05:30
2026-08-26 15:48:39 -07:00
2026-07-29 11:53:39 -07:00
2026-08-12 21:50:35 -07:00
2026-08-12 21:50:35 -07:00
2026-08-01 14:52:18 -07:00
2026-08-14 01:31:31 -07:00
2026-08-14 01:06:13 -07:00
2026-08-20 20:21:12 -07:00
2026-08-21 14:38:19 -07:00
2026-08-14 01:06:13 -07:00
2026-08-21 00:24:32 -07:00
2026-08-27 11:31:21 -05:00
2026-08-28 19:53:06 -07:00
2026-08-07 19:47:40 +05:30
2026-07-29 10:13:50 -07:00
2026-08-22 21:36:55 -07:00
2026-08-14 21:35:30 -07:00
2026-07-29 10:14:11 -07:00
2026-08-23 03:56:37 -07:00
2026-07-29 17:51:40 -05:00
2026-08-09 10:33:58 -07:00
2026-08-15 00:32:44 -07:00
2026-08-12 20:10:51 -07:00
2026-08-12 20:10:51 -07:00
2026-08-12 18:39:22 -07:00
2026-08-12 18:52:08 -07:00
2026-08-12 19:56:44 -07:00
2026-08-19 19:34:36 -07:00
2026-08-27 22:05:40 -05:00
2026-07-28 22:42:19 -07:00
2026-08-26 17:42:58 -07:00
2026-08-06 05:00:17 +05:30
2026-08-28 22:38:01 -05:00
2026-08-15 00:33:11 -07:00
2026-08-16 06:24:56 -07:00
2026-07-31 21:21:16 -07:00
2026-08-21 00:24:32 -07:00
2026-08-21 00:24:32 -07:00
2026-07-29 11:53:39 -07:00
2026-08-20 12:16:20 +05:30
2026-07-29 10:14:11 -07:00
2026-08-14 13:51:26 -07:00
2026-08-19 08:52:03 -07:00
2026-08-10 17:02:56 -07:00
2026-07-29 17:13:48 +05:30
2026-08-28 02:59:17 -07:00
2026-08-15 01:55:22 -07:00
2026-07-29 11:53:39 -07:00
2026-08-01 10:47:20 -07:00
2026-08-08 12:32:23 -07:00
2026-08-14 21:07:21 -07:00
2026-08-15 02:04:49 -07:00
2026-08-15 02:04:49 -07:00
2026-07-26 19:30:21 -07:00
2026-07-31 22:36:55 -07:00
2026-08-15 00:31:37 -07:00
2026-08-12 19:43:47 -07:00
2026-08-20 02:06:05 -07:00
2026-07-26 08:43:24 -07:00
2026-08-19 19:34:36 -07:00
2026-08-27 04:14:31 -07:00
2026-08-08 15:10:35 +05:30
2026-08-24 20:25:10 -07:00
2026-08-19 19:34:36 -07:00
2026-08-05 11:59:33 +05:30
2026-07-29 09:33:48 -07:00
2026-08-18 02:27:18 -07:00
2026-07-24 16:00:03 -07:00
2026-07-31 23:18:12 -07:00
2026-08-24 20:10:44 -07:00
2026-08-16 01:54:35 -07:00
2026-08-07 17:45:06 +05:30
2026-08-15 18:15:18 -07:00
2026-08-02 16:16:36 -07:00
2026-08-20 04:08:57 -07:00
2026-08-25 21:59:52 -07:00
2026-07-29 11:53:39 -07:00
2026-08-22 13:39:04 -04:00
2026-08-28 13:33:56 -04:00
2026-08-26 11:41:04 -07:00
2026-08-26 16:45:31 -07:00
2026-07-31 22:28:46 -07:00
2026-08-26 16:45:26 -07:00
2026-08-26 16:45:26 -07:00
2026-08-14 16:43:37 -07:00
2026-07-29 19:48:37 -07:00
2026-08-07 10:11:05 -07:00
2026-08-15 01:05:39 -07:00
2026-07-29 16:21:54 -07:00
2026-08-16 20:53:44 -07:00
2026-08-27 02:17:56 -07:00
2026-08-28 07:50:51 -07:00
2026-07-24 11:45:57 -07:00
2026-07-29 10:14:11 -07:00
2026-08-01 14:30:16 -07:00
2026-08-19 23:55:20 -07:00
2026-08-19 23:55:20 -07:00
2026-08-06 05:00:17 +05:30