Tom Boucher
7fae804296
fix( #2839 ): transactional cleanup tail for /gsd-code-review-fix ( #2846 )
...
* fix(#2839 ): make /gsd-code-review-fix cleanup transactional
Cleanup tail in agents/gsd-code-fixer.md previously did 'git worktree
remove' without any recovery marker. If the process was killed between
fix commits and worktree removal, the orphan worktree + branch survived
with no resume path — the next run had no way to discover or finish
the cleanup.
Introduce a recovery sentinel at ${phase_dir}/.review-fix-recovery-pending.json
with strict ordering:
- Sentinel written AFTER 'git worktree add' succeeds (never points at a
worktree that does not exist).
- Sentinel removed ONLY AFTER 'git worktree remove' returns successfully
(interruption between commits and removal leaves a sentinel behind).
- New runs detect a pre-existing sentinel, force-remove the recorded
orphan worktree, then drop the stale sentinel before continuing —
making the agent self-healing after a crash.
Closes #2839
* fix(#2839 ): harden sentinel JSON parse and scope ordering assertion
Address CodeRabbit review feedback on PR #2846 :
- agents/gsd-code-fixer.md: Guard the recovery-sentinel JSON parse with
try/catch so a corrupted/truncated sentinel (a realistic crash artifact)
emits a warning and yields an empty prior_wt instead of aborting setup.
This preserves the self-healing recovery path even when the sentinel
itself is the casualty of the original crash.
- tests/bug-2839-review-fix-transactional-cleanup.test.cjs: Scope the
cleanup-ordering assertion to the cleanup-tail section of the
setup_worktree step rather than first global occurrences. Previously
the assertion could pass on pre-recovery references even if cleanup-tail
ordering regressed. The regex also now accepts the shell-variable form
(\`rm -f \"\$sentinel\"\`) used in the cleanup tail.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com >
2026-04-29 07:56:32 -04:00
..
2026-04-25 10:50:54 -04:00
2026-04-04 14:29:03 -04:00
2026-04-12 17:56:19 -04:00
2026-04-17 10:47:08 -04:00
2026-04-25 10:50:54 -04:00
2026-04-11 03:39:29 -07:00
2026-04-20 09:31:34 -04:00
2026-04-10 10:49:00 -04:00
2026-04-04 14:29:03 -04:00
2026-04-04 14:29:03 -04:00
2026-04-04 14:29:03 -04:00
2026-04-10 12:30:46 -04:00
2026-04-11 03:30:05 -07:00
2026-04-07 17:27:20 -04:00
2026-04-05 23:07:52 -04:00
2026-04-04 14:29:03 -04:00
2026-04-25 10:50:54 -04:00
2026-04-15 14:59:18 -04:00
2026-04-04 14:29:03 -04:00
2026-04-04 07:58:27 -04:00
2026-04-04 07:24:31 -04:00
2026-04-11 08:50:44 -04:00
2026-04-07 08:13:52 -04:00
2026-04-05 17:49:20 -04:00
2026-04-05 17:32:18 -04:00
2026-04-05 18:05:32 -04:00
2026-04-05 18:20:11 -04:00
2026-04-19 16:35:32 -05:00
2026-04-25 11:34:55 -04:00
2026-04-22 12:04:06 -04:00
2026-04-07 17:19:10 -04:00
2026-04-19 16:35:32 -05:00
2026-04-10 10:48:00 -04:00
2026-04-11 03:35:00 -07:00
2026-04-11 03:37:34 -07:00
2026-04-10 10:50:17 -04:00
2026-04-10 11:19:32 -04:00
2026-04-10 11:25:55 -04:00
2026-04-10 11:15:59 -04:00
2026-04-10 12:07:13 -04:00
2026-04-10 21:37:08 -04:00
2026-04-19 16:35:32 -05:00
2026-04-15 14:58:41 -04:00
2026-04-23 11:58:06 -04:00
2026-04-17 09:20:26 -04:00
2026-04-25 10:50:54 -04:00
2026-04-22 10:41:58 -04:00
2026-04-25 12:02:58 -04:00
2026-04-17 09:20:42 -04:00
2026-04-20 10:10:16 -04:00
2026-04-20 18:37:42 -04:00
2026-04-20 10:10:16 -04:00
2026-04-20 10:10:16 -04:00
2026-04-20 10:09:33 -04:00
2026-04-23 11:54:11 -04:00
2026-04-20 10:09:33 -04:00
2026-04-20 10:09:33 -04:00
2026-04-20 10:09:33 -04:00
2026-04-20 10:11:00 -04:00
2026-04-20 10:10:16 -04:00
2026-04-20 10:11:00 -04:00
2026-04-19 15:40:50 -05:00
2026-04-23 08:36:03 -04:00
2026-04-20 10:08:46 -04:00
2026-04-20 18:37:32 -04:00
2026-04-24 18:05:16 -04:00
2026-04-21 09:46:01 -04:00
2026-04-21 10:10:45 -04:00
2026-04-21 21:20:27 -04:00
2026-04-21 10:10:10 -04:00
2026-04-21 21:35:22 -04:00
2026-04-22 12:09:12 -04:00
2026-04-22 10:41:58 -04:00
2026-04-21 20:33:43 -04:00
2026-04-21 20:33:24 -04:00
2026-04-21 21:18:58 -04:00
2026-04-22 11:28:25 -04:00
2026-04-25 10:59:33 -04:00
2026-04-22 12:04:17 -04:00
2026-04-22 21:57:24 -04:00
2026-04-22 12:03:56 -04:00
2026-04-22 12:04:06 -04:00
2026-04-22 12:04:13 -04:00
2026-04-25 12:09:27 -04:00
2026-04-24 18:05:10 -04:00
2026-04-24 18:10:45 -04:00
2026-04-24 18:05:33 -04:00
2026-04-28 20:22:37 -04:00
2026-04-24 18:05:18 -04:00
2026-04-24 18:05:04 -04:00
2026-04-24 20:22:17 -04:00
2026-04-24 20:22:29 -04:00
2026-04-24 20:27:59 -04:00
2026-04-25 12:10:01 -04:00
2026-04-25 12:16:04 -04:00
2026-04-25 12:10:01 -04:00
2026-04-25 12:15:39 -04:00
2026-04-25 12:08:59 -04:00
2026-04-25 12:16:04 -04:00
2026-04-28 18:28:53 -04:00
2026-04-27 12:31:43 -04:00
2026-04-27 12:31:49 -04:00
2026-04-27 12:31:38 -04:00
2026-04-27 12:31:15 -04:00
2026-04-27 12:31:32 -04:00
2026-04-27 12:31:26 -04:00
2026-04-27 12:31:21 -04:00
2026-04-28 20:21:41 -04:00
2026-04-28 20:37:47 -04:00
2026-04-28 20:22:59 -04:00
2026-04-28 20:23:32 -04:00
2026-04-28 20:16:27 -04:00
2026-04-28 20:22:30 -04:00
2026-04-28 20:21:44 -04:00
2026-04-28 20:22:40 -04:00
2026-04-28 20:21:48 -04:00
2026-04-28 20:23:29 -04:00
2026-04-28 20:22:37 -04:00
2026-04-29 07:56:32 -04:00
2026-04-07 08:13:58 -04:00
2026-04-23 08:36:03 -04:00
2026-04-22 21:57:24 -04:00
2026-04-06 15:14:02 -04:00
2026-04-11 09:15:36 -04:00
2026-04-25 10:59:33 -04:00
2026-04-28 20:22:37 -04:00
2026-04-20 09:31:34 -04:00
2026-04-10 13:58:16 -04:00
2026-04-04 14:29:03 -04:00
2026-04-11 09:19:32 -04:00
2026-04-12 08:10:30 -04:00
2026-04-25 12:03:39 -04:00
2026-04-10 10:46:21 -04:00
2026-04-28 18:28:53 -04:00
2026-04-20 09:31:34 -04:00
2026-04-15 14:59:35 -04:00
2026-04-05 17:02:20 -04:00
2026-04-10 10:56:09 -04:00
2026-04-04 14:29:03 -04:00
2026-04-25 11:34:55 -04:00
2026-04-07 17:25:11 -04:00
2026-04-22 11:28:25 -04:00
2026-04-24 18:05:16 -04:00
2026-04-15 16:46:10 -04:00
2026-04-04 14:29:03 -04:00
2026-04-25 11:34:55 -04:00
2026-04-26 11:49:30 -04:00
2026-04-11 09:20:27 -04:00
2026-04-04 14:29:03 -04:00
2026-04-11 09:18:49 -04:00
2026-04-19 23:12:23 -04:00
2026-04-05 09:15:41 -04:00
2026-04-15 16:23:09 -04:00
2026-04-22 21:57:24 -04:00
2026-04-25 11:34:55 -04:00
2026-04-22 21:57:24 -04:00
2026-04-27 09:03:36 -04:00
2026-04-01 08:47:31 -06:00
2026-04-22 21:21:44 -04:00
2026-04-26 13:33:52 -04:00
2026-04-21 08:40:39 -04:00
2026-04-20 18:21:43 -04:00
2026-04-20 18:27:55 -04:00
2026-04-25 16:26:15 -04:00
2026-04-20 18:21:35 -04:00
2026-04-20 18:25:24 -04:00
2026-04-20 18:19:14 -04:00
2026-04-26 21:40:38 -04:00
2026-04-20 18:21:23 -04:00
2026-04-25 14:23:40 -04:00
2026-04-22 12:04:21 -04:00
2026-04-04 14:29:03 -04:00
2026-04-25 12:04:16 -04:00
2026-04-04 14:29:03 -04:00
2026-04-05 18:33:27 -04:00
2026-04-11 09:28:16 -04:00
2026-04-22 20:49:52 -04:00
2026-04-05 18:33:17 -04:00
2026-04-25 16:47:55 -04:00
2026-04-04 14:29:03 -04:00
2026-04-26 21:40:38 -04:00
2026-04-15 22:46:31 -04:00
2026-04-26 11:36:14 -04:00
2026-04-10 21:30:13 -04:00
2026-04-19 15:55:37 -05:00
2026-04-22 20:50:15 -04:00
2026-04-20 10:08:46 -04:00
2026-04-15 22:46:31 -04:00
2026-04-04 14:37:54 -04:00
2026-04-04 14:29:03 -04:00
2026-04-04 14:15:30 -04:00
2026-04-04 14:29:03 -04:00
2026-04-20 09:31:34 -04:00
2026-04-04 14:29:03 -04:00
2026-04-22 12:04:25 -04:00
2026-04-17 17:12:34 -05:00
2026-04-15 14:59:07 -04:00
2026-04-17 09:20:26 -04:00
2026-04-27 12:31:49 -04:00
2026-04-25 10:50:54 -04:00
2026-04-18 08:42:36 -05:00
2026-04-27 00:13:20 -04:00
2026-04-23 11:53:51 -04:00
2026-04-15 14:59:24 -04:00
2026-04-20 09:31:34 -04:00
2026-04-20 09:39:05 -04:00
2026-04-20 09:39:05 -04:00
2026-04-10 12:30:24 -04:00
2026-04-26 13:33:54 -04:00
2026-04-24 18:06:13 -04:00
2026-04-29 07:44:49 -04:00
2026-04-05 19:09:14 -04:00
2026-04-25 11:34:55 -04:00
2026-04-14 17:57:38 -04:00
2026-04-04 14:29:03 -04:00
2026-04-04 14:29:03 -04:00
2026-04-15 14:59:12 -04:00
2026-04-25 11:34:55 -04:00
2026-04-15 22:46:31 -04:00
2026-04-06 08:54:18 -04:00
2026-04-26 11:48:47 -04:00
2026-04-25 12:09:27 -04:00
2026-04-29 07:44:49 -04:00
2026-04-05 18:05:32 -04:00
2026-04-07 08:13:46 -04:00
2026-04-11 09:02:30 -04:00
2026-04-04 14:29:03 -04:00
2026-04-03 12:47:24 +03:00
2026-04-25 11:34:55 -04:00
2026-04-14 17:57:38 -04:00
2026-04-06 15:13:23 -04:00
2026-04-04 14:29:03 -04:00
2026-04-04 14:29:03 -04:00
2026-04-16 17:15:29 -04:00
2026-04-04 14:29:03 -04:00
2026-04-11 15:02:55 -04:00
2026-04-11 09:16:11 -04:00
2026-04-12 15:56:20 -04:00
2026-04-20 10:08:52 -04:00
2026-04-04 14:29:03 -04:00
2026-04-25 12:02:58 -04:00
2026-04-10 12:41:59 -04:00
2026-04-25 14:18:34 -04:00
2026-04-20 18:09:02 -04:00
2026-04-11 10:26:27 -04:00
2026-04-04 14:29:03 -04:00
2026-04-25 16:26:15 -04:00
2026-04-05 12:41:17 -04:00
2026-04-15 07:39:48 -06:00
2026-04-04 14:29:03 -04:00
2026-04-15 16:23:18 -04:00
2026-04-16 17:22:31 -04:00
2026-04-11 09:34:29 -04:00
2026-04-17 10:11:08 -04:00
2026-04-05 10:23:41 -04:00
2026-04-04 14:29:03 -04:00
2026-04-05 10:23:41 -04:00
2026-04-15 22:46:31 -04:00
2026-04-11 11:19:47 -04:00
2026-04-28 20:22:37 -04:00
2026-04-04 14:29:03 -04:00
2026-04-22 10:41:58 -04:00
2026-04-16 17:22:31 -04:00
2026-04-10 12:29:25 -04:00
2026-04-06 15:20:06 -04:00
2026-04-26 13:33:45 -04:00
2026-04-23 11:53:20 -04:00
2026-04-04 14:29:03 -04:00
2026-04-15 14:59:56 -04:00
2026-04-05 17:04:33 -04:00
2026-04-01 16:53:20 -04:00
2026-04-20 10:08:49 -04:00
2026-04-04 14:29:03 -04:00
2026-03-24 13:33:58 -04:00
2026-04-20 10:08:18 -04:00
2026-04-12 17:56:00 -04:00
2026-04-04 07:10:21 -04:00
2026-04-25 10:59:33 -04:00
2026-04-04 14:29:03 -04:00
2026-04-10 13:55:27 -04:00
2026-04-15 10:35:29 -04:00
2026-04-11 15:02:55 -04:00
2026-04-27 09:03:36 -04:00
2026-04-04 14:29:03 -04:00
2026-04-11 15:39:50 -04:00
2026-04-11 09:15:00 -04:00
2026-04-04 14:29:03 -04:00
2026-04-05 17:49:20 -04:00
2026-04-25 10:50:54 -04:00
2026-04-15 22:46:31 -04:00
2026-04-04 14:29:03 -04:00
2026-04-20 10:08:18 -04:00
2026-04-22 12:04:25 -04:00
2026-04-21 10:10:10 -04:00
2026-04-12 17:56:19 -04:00
2026-04-25 16:26:15 -04:00
2026-04-11 03:24:49 -07:00
2026-04-02 18:55:17 -03:00
2026-04-22 12:04:25 -04:00
2026-04-04 14:29:03 -04:00
2026-04-04 14:29:03 -04:00
2026-04-04 14:29:03 -04:00
2026-04-06 08:40:37 -04:00
2026-04-05 22:54:12 -04:00
2026-04-05 12:30:24 -04:00
2026-04-22 21:57:24 -04:00
2026-04-25 11:34:55 -04:00
2026-04-02 21:36:36 -05:00
2026-04-04 14:29:03 -04:00
2026-04-05 11:11:38 -04:00
2026-04-10 12:30:08 -04:00
2026-04-04 14:29:03 -04:00