Tom Boucher
8de8acee46
fix(workflows): assert HEAD on per-agent branch before worktree commits ( #2924 ) ( #2941 )
...
* fix(workflows): assert HEAD on per-agent branch before worktree commits
Worktree-mode setup could leave HEAD attached to a protected branch (master),
causing agent commits to land there. The previous response was a destructive
self-recovery via 'git update-ref refs/heads/master <sha>', which silently
rewinds the protected branch and destroys concurrent commits in multi-active
scenarios (parallel agents, user committing while agent runs).
- Reorder <worktree_branch_check> in execute-phase.md and quick.md to assert
HEAD via 'git symbolic-ref' BEFORE any 'git reset --hard'. HALT with a
blocker if HEAD is on main/master/develop/trunk/release/* or detached.
- Add a per-commit HEAD assertion (step 0) to gsd-executor.md
<task_commit_protocol>; HEAD attachment can drift after 'git checkout <sha>'.
- Forbid 'git update-ref refs/heads/<protected>' in
<destructive_git_prohibition>; surface the blocker rather than self-heal.
- Remove '--no-verify' as the worktree-mode default in execute-phase.md,
execute-plan.md, quick.md, and references/git-integration.md. Hooks now
run on every executor commit; opt out only via workflow.worktree_skip_hooks.
- Add regression test that parses the worktree_branch_check blocks structurally
and asserts the symbolic-ref check precedes the reset --hard, no workflow
performs update-ref on a protected ref, and --no-verify is no longer the
default in any parallel-execution prompt.
* fix(#2924 ): address CodeRabbit review findings on worktree HEAD PR
- Add positive worktree-agent-* allow-list to <task_commit_protocol> step 0
in gsd-executor.md and to <worktree_branch_check> in execute-phase.md and
quick.md. The deny-list (main|master|develop|trunk|release/*) silently
allowed feature/* and other arbitrary branches outside the agent namespace.
- Register workflow.worktree_skip_hooks in both config schemas
(sdk/src/query/config-schema.ts and get-shit-done/bin/lib/config-schema.cjs)
and document it in docs/CONFIGURATION.md so config-set accepts it.
- Fix stash lifecycle in execute-phase.md post-wave hook validation: stash
under a named ref and pop after the hook run; warn on pop failure.
- Pre-dispatch PLAN.md commit in quick.md: gate on git diff --cached --quiet
for idempotency and exit 1 with a clear error on commit failure (both the
--no-verify and the normal branches) — no more swallowing real errors.
- Test fixes (tests/bug-2924-worktree-head-attachment.test.cjs):
- Parse the protected-branch alternation structurally and require
main, master, develop, trunk, release/.* (release/* was previously
skipped by the \\b...\\b regex).
- Use fs.readdirSync(dir, { recursive: true }) so workflows in nested
subdirectories are also asserted against the update-ref ban.
- Add allow-list assertions for execute-phase.md, quick.md, and
gsd-executor.md to lock in the new positive namespace check.
* test(#2924 ): assert sub-section end marker exists before slicing
* test(#2924 ): use section boundary instead of fixed window for parallel-agents slice
2026-05-01 09:23:02 -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-30 00:43:47 -04:00
2026-04-04 14:29:03 -04:00
2026-04-29 23:27:27 -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-29 22:56:59 -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-29 07:56:51 -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-30 00:43:47 -04:00
2026-04-20 10:10:16 -04:00
2026-04-20 10:11:00 -04:00
2026-04-30 00:43:47 -04: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-29 22:56:59 -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-29 22:56:59 -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-29 21:52:20 -04:00
2026-04-28 20:21:48 -04:00
2026-04-28 20:23:29 -04:00
2026-04-29 22:56:59 -04:00
2026-04-29 07:59:30 -04:00
2026-04-29 07:56:51 -04:00
2026-04-29 08:00:17 -04:00
2026-04-29 08:07:12 -04:00
2026-04-29 07:56:32 -04:00
2026-04-29 21:52:20 -04:00
2026-04-29 21:51:58 -04:00
2026-04-29 23:27:27 -04:00
2026-04-30 17:30:19 -04:00
2026-04-30 21:08:26 -04:00
2026-04-30 21:57:27 -04:00
2026-05-01 09:23:02 -04:00
2026-05-01 09:22:13 -04:00
2026-05-01 09:22:45 -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-30 00:43:47 -04:00
2026-04-10 10:46:21 -04:00
2026-04-28 18:28:53 -04:00
2026-04-29 22:56:59 -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-30 01:04:41 -04:00
2026-04-29 23:27:27 -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-30 00:43:47 -04:00
2026-04-21 08:40:39 -04:00
2026-04-30 00:43:47 -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-29 08:14:11 -04:00
2026-04-30 01:04:41 -04:00
2026-04-30 01:04:41 -04:00
2026-04-30 00:48:49 -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-29 22:56:59 -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-30 00:57:17 -04:00
2026-04-26 11:36:14 -04:00
2026-04-10 21:30:13 -04:00
2026-04-30 14:04:50 -04:00
2026-04-30 00:43:47 -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-29 23:27:27 -04:00
2026-04-30 22:48:08 -04:00
2026-04-30 21:44:12 -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-30 21:30:48 -04:00
2026-04-05 19:09:14 -04:00
2026-04-30 11:38:13 -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-30 22:48:08 -04:00
2026-04-05 18:05:32 -04:00
2026-04-07 08:13:46 -04:00
2026-04-30 00:43:47 -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-30 10:49:13 -04:00
2026-04-30 14:10:28 -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-30 11:38:13 -04:00
2026-04-04 14:29:03 -04:00
2026-04-30 12:13:55 -04:00
2026-04-30 14:19:46 -04:00
2026-04-30 14:19:46 -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-30 21:57:27 -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-30 00:43:47 -04:00
2026-04-30 00:43:47 -04:00
2026-04-26 13:33:45 -04:00
2026-04-30 14:10:28 -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-30 00:43:47 -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-30 00:43:47 -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-05-01 09:22:45 -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-05-01 09:22:13 -04:00
2026-04-30 01:04:41 -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-30 00:43:47 -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