João Salavisa
7bcb10bfef
feat: unarchive tasks with worktree branch recovery ( #1687 )
...
* feat: unarchive tasks with worktree branch recovery
Archived tasks can now be restored. Unarchive works for manual/legacy
archives (empty cascade id, root-only) and cascade archives. Archive
deletes the local branch, so worktree recreate now falls back to
fetching the branch from origin, and unarchive writes the old branch
back as checkout_branch so a fresh session resumes the prior work.
Unrecoverable branches (never pushed) surface a warning. WS archive now
routes through the handoff cascade so it stays stamped and reversible.
UI: unarchive action on /tasks archived rows and the task top bar.
* fix: address PR review feedback on unarchive recovery
Forward PRNumber to the recreate fetch so fork-PR heads (only reachable
via pull/<N>/head) are recoverable, publish task.updated per task in the
cascade unarchive loop so the UI restores without a reload, and
re-publish task.updated after a checkout_branch restore since the
unarchive event goes out with the pre-restore repository rows.
* fix: harden unarchive recovery per review feedback
Propagate branch-probe errors instead of misreporting recoverable work
as gone, and reserve ErrBranchUnrecoverable for a confirmed-missing
remote ref (transient fetch failures keep their own error). Validate
the archive root exists so WS/HTTP archive no longer reports success
for unknown task IDs, CAS-guard manual unarchive on an empty cascade
stamp, detach branch recovery from the request context, and skip
checkout_branch restore for multi-branch repos. UI: in-flight guard on
the list unarchive button, pluralized unrecoverable-branch toast.
* docs: document CAS guard on UnarchiveTask interface contract
---------
Co-authored-by: Kandev Agent <agent@kandev.dev >
2026-07-14 19:15:51 +01:00
..
2026-07-09 19:23:17 +01:00
2026-07-10 17:52:09 +01:00
2026-05-10 17:30:24 +01:00
2026-05-24 11:21:50 +01:00
2026-07-10 23:29:40 +01:00
2026-05-21 23:35:41 +01:00
2026-06-25 00:23:56 +01:00
2026-06-30 16:29:46 +01:00
2026-03-10 17:30:04 +00:00
2026-06-05 15:53:39 +01:00
2026-05-01 13:27:25 +01:00
2026-05-24 11:21:50 +01:00
2026-05-14 10:27:38 +01:00
2026-06-18 17:28:21 +01:00
2026-06-08 21:22:39 +01:00
2026-07-10 16:04:12 +01:00
2026-04-18 10:32:24 +01:00
2026-07-09 17:25:33 +01:00
2026-07-09 17:25:33 +01:00
2026-06-29 19:24:51 +01:00
2026-06-29 19:24:51 +01:00
2026-07-10 08:34:57 +01:00
2026-05-31 21:37:52 +01:00
2026-06-01 19:36:20 +01:00
2026-05-02 20:26:42 +01:00
2026-07-09 17:25:33 +01:00
2026-07-09 17:25:33 +01:00
2026-06-07 22:14:11 +01:00
2026-06-08 21:22:39 +01:00
2026-07-09 17:25:33 +01:00
2026-05-23 21:19:30 +01:00
2026-07-09 17:25:33 +01:00
2026-05-31 19:41:10 +01:00
2026-07-10 16:04:12 +01:00
2026-06-29 19:24:51 +01:00
2026-07-10 08:34:57 +01:00
2026-07-10 08:34:57 +01:00
2026-05-31 23:04:55 +01:00
2026-07-10 14:03:32 +01:00
2026-06-14 17:58:18 +01:00
2026-05-02 20:26:42 +01:00
2026-05-31 19:41:10 +01:00
2026-07-09 19:23:17 +01:00
2026-05-18 23:08:14 +01:00
2026-06-30 00:25:34 +01:00
2026-07-10 11:18:36 +01:00
2026-05-23 22:23:36 +01:00
2026-05-23 22:23:36 +01:00
2026-07-10 11:18:36 +01:00
2026-05-29 02:35:47 +01:00
2026-06-02 21:48:23 +01:00
2026-06-16 20:29:35 +01:00
2026-07-09 17:25:33 +01:00
2026-07-09 17:25:33 +01:00
2026-06-30 00:25:34 +01:00
2026-06-29 18:59:47 +01:00
2026-06-29 18:59:47 +01:00
2026-06-28 16:10:04 +01:00
2026-07-09 19:23:17 +01:00
2026-07-09 17:25:33 +01:00
2026-05-24 12:59:30 +01:00
2026-05-16 20:07:57 +01:00
2026-06-18 18:36:48 +01:00
2026-07-10 14:03:32 +01:00
2026-06-07 13:00:19 +01:00
2026-06-18 18:36:48 +01:00
2026-06-18 18:36:48 +01:00
2026-05-25 10:04:40 +01:00
2026-05-14 21:26:09 +01:00
2026-05-14 21:26:09 +01:00
2026-05-14 21:26:09 +01:00
2026-06-14 22:05:19 +01:00
2026-06-14 22:05:19 +01:00
2026-02-19 22:18:01 +00:00
2026-07-10 08:34:57 +01:00
2026-07-10 08:34:57 +01:00
2026-05-22 01:41:56 +01:00
2026-06-02 21:48:23 +01:00
2026-05-21 14:01:31 +01:00
2026-05-29 11:08:42 +01:00
2026-07-01 21:24:07 +01:00
2026-06-18 18:36:48 +01:00
2026-06-18 18:36:48 +01:00
2026-02-19 22:18:01 +00:00
2026-05-21 14:01:31 +01:00
2026-05-24 00:28:20 +01:00
2026-07-10 08:34:57 +01:00
2026-07-01 21:24:07 +01:00
2026-07-01 21:24:07 +01:00
2026-07-10 14:03:32 +01:00
2026-07-09 17:25:33 +01:00
2026-07-10 14:03:32 +01:00
2026-06-18 18:36:48 +01:00
2026-02-19 22:18:01 +00:00
2026-07-10 14:03:32 +01:00
2026-05-17 21:26:13 +01:00
2026-05-17 21:26:13 +01:00
2026-07-10 08:34:57 +01:00
2026-07-01 21:24:07 +01:00
2026-06-09 16:42:05 +01:00
2026-06-09 16:42:05 +01:00
2026-06-09 16:42:05 +01:00
2026-06-09 16:42:05 +01:00
2026-02-19 22:18:01 +00:00
2026-07-10 11:18:36 +01:00
2026-07-10 11:18:36 +01:00
2026-07-10 11:18:36 +01:00
2026-07-10 14:03:32 +01:00
2026-07-10 14:03:32 +01:00
2026-06-27 16:11:39 +01:00
2026-06-08 22:44:02 +01:00
2026-06-27 16:11:39 +01:00
2026-06-25 16:06:38 +01:00
2026-06-17 19:01:42 +01:00
2026-06-17 19:01:42 +01:00
2026-06-18 23:03:32 +01:00
2026-06-18 23:03:32 +01:00
2026-06-25 16:06:38 +01:00
2026-05-30 15:47:02 +01:00
2026-05-30 15:47:02 +01:00
2026-04-20 13:44:24 +01:00
2026-05-01 22:32:28 +01:00
2026-05-24 00:28:20 +01:00
2026-05-24 12:59:30 +01:00
2026-07-10 08:34:57 +01:00
2026-07-10 14:04:31 +01:00
2026-06-12 09:50:35 +01:00
2026-07-10 14:04:31 +01:00
2026-07-10 14:04:31 +01:00
2026-03-13 10:44:32 +00:00
2026-05-05 13:55:46 +01:00
2026-05-05 13:55:46 +01:00
2026-03-08 11:03:30 +00:00
2026-05-24 11:21:50 +01:00
2026-06-26 14:02:28 +01:00
2026-05-05 13:55:46 +01:00
2026-05-05 13:55:46 +01:00
2026-05-18 23:08:14 +01:00
2026-06-18 18:36:48 +01:00
2026-06-02 13:44:17 +01:00
2026-05-02 22:25:40 +01:00
2026-06-02 13:44:17 +01:00
2026-06-02 13:44:17 +01:00
2026-06-02 13:44:17 +01:00
2026-05-29 11:06:13 +01:00
2026-05-29 11:06:13 +01:00
2026-04-25 18:40:31 +01:00
2026-06-27 16:11:39 +01:00
2026-06-17 19:01:42 +01:00
2026-06-17 19:01:42 +01:00
2026-06-18 23:03:32 +01:00
2026-06-29 18:59:47 +01:00
2026-05-17 20:16:15 +01:00
2026-05-16 20:07:57 +01:00
2026-06-29 18:59:47 +01:00
2026-06-29 18:59:47 +01:00
2026-06-18 18:36:48 +01:00
2026-06-18 18:36:48 +01:00
2026-06-29 18:59:47 +01:00
2026-02-19 22:18:01 +00:00
2026-07-10 11:18:36 +01:00
2026-05-14 21:26:09 +01:00
2026-02-19 22:18:01 +00:00
2026-04-20 13:44:24 +01:00
2026-05-05 13:55:46 +01:00
2026-05-28 19:17:26 +01:00
2026-05-28 19:17:26 +01:00
2026-02-19 22:18:01 +00:00
2026-03-07 14:53:21 +00:00
2026-07-10 14:03:32 +01:00
2026-05-16 14:04:09 +01:00
2026-07-10 16:04:12 +01:00
2026-06-26 14:02:28 +01:00
2026-06-29 15:24:22 +01:00
2026-05-28 19:17:26 +01:00
2026-05-28 19:17:26 +01:00
2026-05-28 19:17:26 +01:00
2026-05-28 19:17:26 +01:00
2026-05-16 20:07:57 +01:00
2026-05-16 20:07:57 +01:00
2026-07-10 23:32:18 +01:00
2026-07-10 23:32:18 +01:00
2026-07-09 23:43:35 +01:00
2026-07-09 23:43:35 +01:00
2026-07-01 21:24:07 +01:00
2026-07-01 21:24:07 +01:00
2026-06-23 17:28:52 +01:00
2026-06-23 17:28:52 +01:00
2026-06-23 17:28:52 +01:00
2026-06-23 17:28:52 +01:00
2026-06-29 15:24:22 +01:00
2026-07-13 13:56:55 +01:00
2026-06-18 18:36:48 +01:00
2026-05-05 14:13:43 +01:00
2026-06-29 15:26:19 +01:00
2026-06-29 15:26:19 +01:00
2026-06-29 15:26:19 +01:00
2026-06-23 17:28:52 +01:00
2026-04-27 10:22:58 +01:00
2026-04-27 10:22:58 +01:00
2026-04-27 10:22:58 +01:00
2026-07-10 12:56:05 +01:00
2026-07-10 12:56:05 +01:00
2026-07-10 12:56:05 +01:00
2026-07-10 12:56:05 +01:00
2026-06-18 18:36:48 +01:00
2026-04-27 10:22:58 +01:00
2026-07-01 23:43:04 +01:00
2026-05-14 21:26:09 +01:00
2026-05-31 23:04:55 +01:00
2026-05-31 23:04:55 +01:00
2026-07-10 11:18:36 +01:00
2026-07-10 11:18:36 +01:00
2026-07-10 23:29:40 +01:00
2026-07-10 23:29:40 +01:00
2026-07-06 17:16:14 +01:00
2026-07-09 23:43:35 +01:00
2026-06-23 17:28:52 +01:00
2026-07-09 23:43:35 +01:00
2026-07-06 17:16:14 +01:00
2026-07-06 17:16:14 +01:00
2026-07-09 23:43:35 +01:00
2026-07-10 23:29:40 +01:00
2026-02-19 22:18:01 +00:00
2026-07-06 17:16:14 +01:00
2026-07-06 17:16:14 +01:00
2026-07-09 23:43:35 +01:00
2026-07-09 17:26:41 +01:00
2026-07-06 17:16:14 +01:00
2026-06-27 16:11:39 +01:00
2026-06-27 16:11:39 +01:00
2026-06-29 15:24:22 +01:00
2026-07-09 23:43:35 +01:00
2026-07-09 23:43:35 +01:00
2026-07-09 23:43:35 +01:00
2026-07-14 19:15:51 +01:00
2026-07-14 19:15:51 +01:00
2026-05-16 20:07:57 +01:00
2026-05-16 20:07:57 +01:00
2026-05-16 20:07:57 +01:00
2026-05-16 20:07:57 +01:00
2026-05-16 20:07:57 +01:00
2026-05-16 20:07:57 +01:00
2026-05-23 19:27:49 +01:00
2026-05-01 13:27:25 +01:00
2026-05-24 12:59:30 +01:00
2026-04-24 17:14:03 +01:00
2026-06-11 22:28:07 +01:00
2026-06-11 22:28:07 +01:00
2026-05-16 20:07:57 +01:00
2026-06-30 16:29:46 +01:00
2026-06-30 16:29:46 +01:00
2026-07-10 14:03:32 +01:00
2026-07-10 14:03:32 +01:00
2026-06-11 21:17:47 +01:00
2026-05-14 21:26:09 +01:00
2026-04-27 10:22:58 +01:00
2026-05-02 20:26:42 +01:00
2026-05-30 15:47:02 +01:00
2026-05-05 13:55:46 +01:00
2026-05-31 23:04:55 +01:00
2026-05-31 23:04:55 +01:00
2026-04-24 17:14:03 +01:00
2026-05-23 19:27:49 +01:00
2026-03-08 11:03:30 +00:00
2026-06-18 18:36:48 +01:00
2026-06-08 19:34:40 +01:00
2026-06-08 19:34:40 +01:00
2026-02-19 22:18:01 +00:00
2026-07-08 10:06:50 +01:00
2026-06-11 21:17:47 +01:00