fix(#1995): widen worktree branch regex to accept agent-<id> namespace (#2548)

* test(#1995): regression test for agent-<id> branch namespace

Add failing-first tests proving that normalizeCleanupManifestEntry and
planWorktreeRecordAgent reject Claude Code's current agent-<id> isolation
branches (only worktree-agent-<id> is accepted). Boundary tests cover both
namespaces plus rejection cases.

* fix(#1995): widen worktree branch regex to accept agent-<id> namespace

Claude Code's isolation="worktree" branch naming changed from
worktree-agent-<id> to agent-<id>. Widen the regex in all 7 locations
from ^worktree-agent-[A-Za-z0-9._/-]+$ to ^(worktree-)?agent-[A-Za-z0-9._/-]+$
so both namespaces are accepted. Introduce a shared WORKTREE_AGENT_BRANCH_RE
constant in src/worktree-safety.cts to prevent future drift.

Closes #1995

* fix(#1995): update workflow guards, test assertions, and baselines

Widen the branch-check regex in execute-phase.md and execute-plan.md.
Update all test assertions that checked for ^worktree-agent- to expect
the widened ^(worktree-)?agent- pattern. Regenerate golden-install-parity
fixtures, agent-size-baseline, and workflow-size-baseline.

Closes #1995

* fix(#1995): update extractCwdGuardBash sanity check for widened regex

The e2e test's sanity check verified the extracted bash block contained
'worktree-agent-'. After widening to '(worktree-)?agent-', update the
check to match the new pattern.

* fix(#1995): widen missed workflow-guard branch check + changeset + lint fixes

- hooks/gsd-workflow-guard.js: widen startsWith('worktree-agent-') to
  /^(worktree-)?agent-/ regex — same defect class, was missed in prior commit
- tests/worktree.test.cjs: fix indentation regression from prior edit
- Add .changeset/1995-worktree-agent-branch-namespace.md (pr:0 placeholder)

Found by orthogonal code review (Step 4).

* fix(#1995): regenerate golden + size baselines for workflow-guard change

* docs(#1995): backfill changeset PR number (2548)
This commit is contained in:
Tom Boucher
2026-07-23 07:36:53 -04:00
committed by GitHub
parent 4fc89497d0
commit 77bf21b3a6
33 changed files with 254 additions and 140 deletions

View File

@@ -14,7 +14,7 @@
"gsd-domain-researcher.md": 7032,
"gsd-eval-auditor.md": 12496,
"gsd-eval-planner.md": 7008,
"gsd-executor.md": 47951,
"gsd-executor.md": 47955,
"gsd-framework-selector.md": 6778,
"gsd-integration-checker.md": 15238,
"gsd-intel-updater.md": 18166,

View File

@@ -16,7 +16,7 @@
"agents/gsd-domain-researcher.md": "1db46cac3f4d9889",
"agents/gsd-eval-auditor.md": "1b8391f1aafb067f",
"agents/gsd-eval-planner.md": "3d10fd11147f6857",
"agents/gsd-executor.md": "707f7f26bc2c1c59",
"agents/gsd-executor.md": "041c6d658e8e1002",
"agents/gsd-framework-selector.md": "daa62c79619c76bf",
"agents/gsd-integration-checker.md": "0643cd2d779b131c",
"agents/gsd-intel-updater.md": "26c1f1e028c6346a",
@@ -161,7 +161,7 @@
"gsd-core/references/verification-patterns.md": "de7ebb43dea1d20f",
"gsd-core/references/verify-mvp-mode.md": "534bdc7f2432903a",
"gsd-core/references/workstream-flag.md": "225910640adbb76d",
"gsd-core/references/worktree-branch-check.md": "21d9c31bf6542b93",
"gsd-core/references/worktree-branch-check.md": "161547f45f78c2bd",
"gsd-core/references/worktree-path-safety.md": "3c8d74756f9b16a8",
"gsd-core/templates/AI-SPEC.md": "24df5fe5ba34e367",
"gsd-core/templates/DEBUG.md": "72e93b7f650d9bae",
@@ -247,13 +247,13 @@
"gsd-core/workflows/docs-update.md": "0b3023a3caa2123f",
"gsd-core/workflows/edit-phase.md": "fc932e82ba1f585a",
"gsd-core/workflows/eval-review.md": "9e8b169c05098b57",
"gsd-core/workflows/execute-phase.md": "87fd9a5228df564c",
"gsd-core/workflows/execute-phase.md": "881c9be0dec7dbb8",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "1832b97d0923fa67",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "13aa54f8279960ae",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "476f88892510a09e",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "d096e946db209caa",
"gsd-core/workflows/execute-plan.md": "5c6fcb36e16f5bf7",
"gsd-core/workflows/explore.md": "965e1c0ede05f40c",
"gsd-core/workflows/extract-learnings.md": "167ea7f0e23bf496",
"gsd-core/workflows/fast.md": "568e6c3ec00b6e00",
@@ -347,8 +347,8 @@
"hooks/gsd-validate-commit.sh": "bf5dd61d33cb3a38",
"hooks/gsd-windsurf-pre-command.js": "948be1c6d14c79cd",
"hooks/gsd-windsurf-pre-write.js": "92d4dbfbc36ab0cf",
"hooks/gsd-workflow-guard.js": "d0cea21bc596fd27",
"hooks/gsd-worktree-path-guard.js": "4a3e534f4c6589e8",
"hooks/gsd-workflow-guard.js": "56414206bc13b3dc",
"hooks/gsd-worktree-path-guard.js": "5f64275e48fb8284",
"hooks/lib/git-cmd.js": "268ba15992ca0b23",
"hooks/lib/gsd-graphify-rebuild.sh": "66af89601074d2a9",
"hooks/managed-hooks-registry.cjs": "82a4121cbcb82756",

View File

@@ -16,7 +16,7 @@
"agents/gsd-domain-researcher.md": "671c9ea949889c4a",
"agents/gsd-eval-auditor.md": "fcaec7b00f94c435",
"agents/gsd-eval-planner.md": "a4a5b4b3f7828ba3",
"agents/gsd-executor.md": "28fbb5fa6eb49c65",
"agents/gsd-executor.md": "00d887a16c249765",
"agents/gsd-framework-selector.md": "4b77eebbe9288d80",
"agents/gsd-integration-checker.md": "fa53e2d78be1de74",
"agents/gsd-intel-updater.md": "fa40e685d7441ace",
@@ -232,7 +232,7 @@
"gsd-core/references/verification-patterns.md": "72f4d4814fdae9a8",
"gsd-core/references/verify-mvp-mode.md": "534bdc7f2432903a",
"gsd-core/references/workstream-flag.md": "ca99ca79e716f0f5",
"gsd-core/references/worktree-branch-check.md": "21d9c31bf6542b93",
"gsd-core/references/worktree-branch-check.md": "161547f45f78c2bd",
"gsd-core/references/worktree-path-safety.md": "3c8d74756f9b16a8",
"gsd-core/templates/AI-SPEC.md": "efa1f8354bd3a24b",
"gsd-core/templates/DEBUG.md": "c8768312f4c1e438",
@@ -318,13 +318,13 @@
"gsd-core/workflows/docs-update.md": "a320371be70f43d8",
"gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04",
"gsd-core/workflows/eval-review.md": "32d3d7e80ab2bfc7",
"gsd-core/workflows/execute-phase.md": "3f76c286e9cccb0b",
"gsd-core/workflows/execute-phase.md": "f3a37602243681f9",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "f7782680c2b8ad6b",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "7b2d9a4a4013fd6a",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "7a49bc47da5411ea",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "1d378cb25720667a",
"gsd-core/workflows/execute-plan.md": "334bb2053908a049",
"gsd-core/workflows/explore.md": "3f3b4f83e23349bc",
"gsd-core/workflows/extract-learnings.md": "b6f01ca3d8f58de4",
"gsd-core/workflows/fast.md": "11f5cd10ae5cc7d3",
@@ -418,8 +418,8 @@
"hooks/gsd-validate-commit.sh": "bf5dd61d33cb3a38",
"hooks/gsd-windsurf-pre-command.js": "948be1c6d14c79cd",
"hooks/gsd-windsurf-pre-write.js": "92d4dbfbc36ab0cf",
"hooks/gsd-workflow-guard.js": "d0cea21bc596fd27",
"hooks/gsd-worktree-path-guard.js": "48e04fd7cb10834b",
"hooks/gsd-workflow-guard.js": "56414206bc13b3dc",
"hooks/gsd-worktree-path-guard.js": "97c2f736d085fe8e",
"hooks/lib/git-cmd.js": "268ba15992ca0b23",
"hooks/lib/gsd-graphify-rebuild.sh": "66af89601074d2a9",
"hooks/managed-hooks-registry.cjs": "29a8d4fa81378d7d",

View File

@@ -15,7 +15,7 @@
"agents/gsd-domain-researcher.md": "f1e03df842ddfb95",
"agents/gsd-eval-auditor.md": "d0f45fff7370bb0b",
"agents/gsd-eval-planner.md": "9cc049b82897daa4",
"agents/gsd-executor.md": "a140ad7b13e4af95",
"agents/gsd-executor.md": "406dfda62f0f8428",
"agents/gsd-framework-selector.md": "85005d716f9d98f7",
"agents/gsd-integration-checker.md": "17a8ee731986564d",
"agents/gsd-intel-updater.md": "4953a465db9dadc1",
@@ -231,7 +231,7 @@
"gsd-core/references/verification-patterns.md": "cfaf338f42b1111e",
"gsd-core/references/verify-mvp-mode.md": "534bdc7f2432903a",
"gsd-core/references/workstream-flag.md": "ca99ca79e716f0f5",
"gsd-core/references/worktree-branch-check.md": "21d9c31bf6542b93",
"gsd-core/references/worktree-branch-check.md": "161547f45f78c2bd",
"gsd-core/references/worktree-path-safety.md": "3c8d74756f9b16a8",
"gsd-core/templates/AI-SPEC.md": "24df5fe5ba34e367",
"gsd-core/templates/DEBUG.md": "0944156249103c16",
@@ -317,13 +317,13 @@
"gsd-core/workflows/docs-update.md": "7aef1019ce141558",
"gsd-core/workflows/edit-phase.md": "dbbb6191f5a8b65e",
"gsd-core/workflows/eval-review.md": "11620e0dc4a003dd",
"gsd-core/workflows/execute-phase.md": "cf74d39bfaa359a7",
"gsd-core/workflows/execute-phase.md": "2604b9cb7dc66920",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "9a1f3deffb4dab14",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "a7f9b9a45303382f",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "b14d7fa2c4ec2406",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "4a7e699e43c71691",
"gsd-core/workflows/execute-plan.md": "724d726833e222ed",
"gsd-core/workflows/explore.md": "fabe8e5553de16c0",
"gsd-core/workflows/extract-learnings.md": "fd75072c339b58bd",
"gsd-core/workflows/fast.md": "7f7687b920d79b29",
@@ -417,8 +417,8 @@
"hooks/gsd-validate-commit.sh": "bf5dd61d33cb3a38",
"hooks/gsd-windsurf-pre-command.js": "948be1c6d14c79cd",
"hooks/gsd-windsurf-pre-write.js": "92d4dbfbc36ab0cf",
"hooks/gsd-workflow-guard.js": "46b287c75153458a",
"hooks/gsd-worktree-path-guard.js": "0e236bf8ac797ee3",
"hooks/gsd-workflow-guard.js": "41c59d9765ac36ae",
"hooks/gsd-worktree-path-guard.js": "f65356c80c9805b2",
"hooks/lib/git-cmd.js": "268ba15992ca0b23",
"hooks/lib/gsd-graphify-rebuild.sh": "66af89601074d2a9",
"hooks/managed-hooks-registry.cjs": "1d955ec5d64e8a5f",

View File

@@ -15,7 +15,7 @@
"agents/gsd-domain-researcher.md": "5f7d366251b957fe",
"agents/gsd-eval-auditor.md": "fea2759beff0a642",
"agents/gsd-eval-planner.md": "112f6730f23854e3",
"agents/gsd-executor.md": "a3c5bd2940dcf7c6",
"agents/gsd-executor.md": "16391af53f8922bb",
"agents/gsd-framework-selector.md": "c350ee693cb1aa4e",
"agents/gsd-integration-checker.md": "c8b4e65dee89c8ea",
"agents/gsd-intel-updater.md": "5b41e05f90ce89d9",
@@ -160,7 +160,7 @@
"gsd-core/references/verification-patterns.md": "72f4d4814fdae9a8",
"gsd-core/references/verify-mvp-mode.md": "534bdc7f2432903a",
"gsd-core/references/workstream-flag.md": "ca99ca79e716f0f5",
"gsd-core/references/worktree-branch-check.md": "21d9c31bf6542b93",
"gsd-core/references/worktree-branch-check.md": "161547f45f78c2bd",
"gsd-core/references/worktree-path-safety.md": "3c8d74756f9b16a8",
"gsd-core/templates/AI-SPEC.md": "24df5fe5ba34e367",
"gsd-core/templates/DEBUG.md": "0944156249103c16",
@@ -246,13 +246,13 @@
"gsd-core/workflows/docs-update.md": "ea47bd2d5a0d1d85",
"gsd-core/workflows/edit-phase.md": "8323bfe10faa0c0a",
"gsd-core/workflows/eval-review.md": "7c2f5ff8cc4d06e5",
"gsd-core/workflows/execute-phase.md": "78c6f46e37db9a0b",
"gsd-core/workflows/execute-phase.md": "100b55c147922978",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "d2020c5e01c7bd7f",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "7b2d9a4a4013fd6a",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "7a49bc47da5411ea",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "d0f2cba6b8356cac",
"gsd-core/workflows/execute-plan.md": "da0c2286b1aed11d",
"gsd-core/workflows/explore.md": "9348b54b526b8938",
"gsd-core/workflows/extract-learnings.md": "d8177b0c13b7e5ee",
"gsd-core/workflows/fast.md": "41a6568b873aef99",
@@ -346,8 +346,8 @@
"hooks/gsd-validate-commit.sh": "bf5dd61d33cb3a38",
"hooks/gsd-windsurf-pre-command.js": "948be1c6d14c79cd",
"hooks/gsd-windsurf-pre-write.js": "92d4dbfbc36ab0cf",
"hooks/gsd-workflow-guard.js": "46b287c75153458a",
"hooks/gsd-worktree-path-guard.js": "0e236bf8ac797ee3",
"hooks/gsd-workflow-guard.js": "41c59d9765ac36ae",
"hooks/gsd-worktree-path-guard.js": "f65356c80c9805b2",
"hooks/lib/git-cmd.js": "268ba15992ca0b23",
"hooks/lib/gsd-graphify-rebuild.sh": "66af89601074d2a9",
"hooks/managed-hooks-registry.cjs": "1d955ec5d64e8a5f",

View File

@@ -19,7 +19,7 @@
"agents/gsd-domain-researcher.md": "0fecdaea86466a56",
"agents/gsd-eval-auditor.md": "36c44303085df2f8",
"agents/gsd-eval-planner.md": "3ddea88a69b4da3f",
"agents/gsd-executor.md": "8443c52fc864d84e",
"agents/gsd-executor.md": "a20e280c9e648f5b",
"agents/gsd-framework-selector.md": "564669d479433f15",
"agents/gsd-integration-checker.md": "1bbbdd3d420b994e",
"agents/gsd-intel-updater.md": "42c40fffbc720d0b",
@@ -164,7 +164,7 @@
"gsd-core/references/verification-patterns.md": "72f4d4814fdae9a8",
"gsd-core/references/verify-mvp-mode.md": "534bdc7f2432903a",
"gsd-core/references/workstream-flag.md": "19340c1a3be74ad2",
"gsd-core/references/worktree-branch-check.md": "46882ad61f3f9075",
"gsd-core/references/worktree-branch-check.md": "f99ec1acb76014f5",
"gsd-core/references/worktree-path-safety.md": "8e5b4d542d2d9853",
"gsd-core/templates/AI-SPEC.md": "efa1f8354bd3a24b",
"gsd-core/templates/DEBUG.md": "c8768312f4c1e438",
@@ -250,13 +250,13 @@
"gsd-core/workflows/docs-update.md": "7eb7095ca86d506f",
"gsd-core/workflows/edit-phase.md": "9c9fadc047c61d74",
"gsd-core/workflows/eval-review.md": "17fc9b4c4f7e1c74",
"gsd-core/workflows/execute-phase.md": "91a820d8ba3531fe",
"gsd-core/workflows/execute-phase.md": "a5af949ed1092448",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "1b3558cb8f41b65a",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "35612890c1173577",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "26825e1aacf224d0",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "1d9f62898cb0e848",
"gsd-core/workflows/execute-plan.md": "204a0ac94a4bb545",
"gsd-core/workflows/explore.md": "db9e1a79dbe88090",
"gsd-core/workflows/extract-learnings.md": "6f39375b7dc775f9",
"gsd-core/workflows/fast.md": "e4f74a454b6ca5e8",

View File

@@ -16,7 +16,7 @@
"agents/gsd-domain-researcher.md": "1c1a800108a2b225",
"agents/gsd-eval-auditor.md": "99012004b14ea602",
"agents/gsd-eval-planner.md": "4ebdd7fe9cbb0cfe",
"agents/gsd-executor.md": "87ae9188c389bde8",
"agents/gsd-executor.md": "d9dca78de04bdc1c",
"agents/gsd-framework-selector.md": "7726fccc86bfeb50",
"agents/gsd-integration-checker.md": "2d8339790bbb2dc3",
"agents/gsd-intel-updater.md": "c51339956197cbd3",
@@ -232,7 +232,7 @@
"gsd-core/references/verification-patterns.md": "72f4d4814fdae9a8",
"gsd-core/references/verify-mvp-mode.md": "534bdc7f2432903a",
"gsd-core/references/workstream-flag.md": "ca99ca79e716f0f5",
"gsd-core/references/worktree-branch-check.md": "21d9c31bf6542b93",
"gsd-core/references/worktree-branch-check.md": "161547f45f78c2bd",
"gsd-core/references/worktree-path-safety.md": "3c8d74756f9b16a8",
"gsd-core/templates/AI-SPEC.md": "efa1f8354bd3a24b",
"gsd-core/templates/DEBUG.md": "c8768312f4c1e438",
@@ -318,13 +318,13 @@
"gsd-core/workflows/docs-update.md": "a320371be70f43d8",
"gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04",
"gsd-core/workflows/eval-review.md": "32d3d7e80ab2bfc7",
"gsd-core/workflows/execute-phase.md": "5c048b5144519998",
"gsd-core/workflows/execute-phase.md": "9bc9511ebd40b7cc",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "f7782680c2b8ad6b",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "7b2d9a4a4013fd6a",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "7a49bc47da5411ea",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "fb4e3f846505b6a5",
"gsd-core/workflows/execute-plan.md": "874689d8678e6186",
"gsd-core/workflows/explore.md": "3f3b4f83e23349bc",
"gsd-core/workflows/extract-learnings.md": "b6f01ca3d8f58de4",
"gsd-core/workflows/fast.md": "11f5cd10ae5cc7d3",
@@ -418,8 +418,8 @@
"hooks/gsd-validate-commit.sh": "bf5dd61d33cb3a38",
"hooks/gsd-windsurf-pre-command.js": "948be1c6d14c79cd",
"hooks/gsd-windsurf-pre-write.js": "92d4dbfbc36ab0cf",
"hooks/gsd-workflow-guard.js": "d0cea21bc596fd27",
"hooks/gsd-worktree-path-guard.js": "f198bb60674e9972",
"hooks/gsd-workflow-guard.js": "56414206bc13b3dc",
"hooks/gsd-worktree-path-guard.js": "a1a3d4618b41a804",
"hooks/lib/git-cmd.js": "268ba15992ca0b23",
"hooks/lib/gsd-graphify-rebuild.sh": "66af89601074d2a9",
"hooks/managed-hooks-registry.cjs": "9c0d837594c7b772",

View File

@@ -102,8 +102,8 @@
"agents/gsd-eval-auditor.toml": "9b81d61b3c5f722d",
"agents/gsd-eval-planner.md": "73f2ad2ff2797a51",
"agents/gsd-eval-planner.toml": "09468ad1a34ac468",
"agents/gsd-executor.md": "45442cc002be7052",
"agents/gsd-executor.toml": "bfb08e9397bcc358",
"agents/gsd-executor.md": "697b7ed099fff17d",
"agents/gsd-executor.toml": "9a8aa31bbde42448",
"agents/gsd-framework-selector.md": "ebae32430887d2e0",
"agents/gsd-framework-selector.toml": "637e4e021b7ec380",
"agents/gsd-integration-checker.md": "9cc875676cf7d741",
@@ -267,7 +267,7 @@
"gsd-core/references/verification-patterns.md": "ac45d99076067f17",
"gsd-core/references/verify-mvp-mode.md": "78faa99df1668aab",
"gsd-core/references/workstream-flag.md": "c764d9cbdf6faff4",
"gsd-core/references/worktree-branch-check.md": "21d9c31bf6542b93",
"gsd-core/references/worktree-branch-check.md": "161547f45f78c2bd",
"gsd-core/references/worktree-path-safety.md": "3c8d74756f9b16a8",
"gsd-core/templates/AI-SPEC.md": "6411a4789f481c15",
"gsd-core/templates/DEBUG.md": "0be1256352e79375",
@@ -353,13 +353,13 @@
"gsd-core/workflows/docs-update.md": "bf32efe90219d3dd",
"gsd-core/workflows/edit-phase.md": "e592a4d85ce5380f",
"gsd-core/workflows/eval-review.md": "c89a63285ead961e",
"gsd-core/workflows/execute-phase.md": "4528ce2e8ac92566",
"gsd-core/workflows/execute-phase.md": "e5b9fb391a90d7fb",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "cd8678d082d6e191",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "7b2d9a4a4013fd6a",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "7a49bc47da5411ea",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "13bc99f22bc5ec10",
"gsd-core/workflows/execute-plan.md": "e4723e1669f7c508",
"gsd-core/workflows/explore.md": "d12f68770c65093a",
"gsd-core/workflows/extract-learnings.md": "f716aa03fcb5f8da",
"gsd-core/workflows/fast.md": "e4ed60f96a7b3ac8",

View File

@@ -16,7 +16,7 @@
"agents/gsd-domain-researcher.agent.md": "d603239b3e9fe428",
"agents/gsd-eval-auditor.agent.md": "3c03009564de55c8",
"agents/gsd-eval-planner.agent.md": "14751876fc2b5f16",
"agents/gsd-executor.agent.md": "bca7d1ab12392956",
"agents/gsd-executor.agent.md": "6bf98b78fd75c347",
"agents/gsd-framework-selector.agent.md": "cafeec0b3489be45",
"agents/gsd-integration-checker.agent.md": "30439b804927acc7",
"agents/gsd-intel-updater.agent.md": "238c1a886f35a25c",
@@ -162,7 +162,7 @@
"gsd-core/references/verification-patterns.md": "a8e13ea38218638b",
"gsd-core/references/verify-mvp-mode.md": "534bdc7f2432903a",
"gsd-core/references/workstream-flag.md": "225910640adbb76d",
"gsd-core/references/worktree-branch-check.md": "21d9c31bf6542b93",
"gsd-core/references/worktree-branch-check.md": "161547f45f78c2bd",
"gsd-core/references/worktree-path-safety.md": "3c8d74756f9b16a8",
"gsd-core/templates/AI-SPEC.md": "24df5fe5ba34e367",
"gsd-core/templates/DEBUG.md": "72e93b7f650d9bae",
@@ -248,13 +248,13 @@
"gsd-core/workflows/docs-update.md": "f64b067d0d729f04",
"gsd-core/workflows/edit-phase.md": "8667c28b22b1599f",
"gsd-core/workflows/eval-review.md": "1ae2d3d3fbf72893",
"gsd-core/workflows/execute-phase.md": "474608ed923207f1",
"gsd-core/workflows/execute-phase.md": "ac3229160d3a3fda",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "ca37f91f7bd6f05c",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "25bebed74e645109",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "dc0b96d285327b18",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "1750549f91a86340",
"gsd-core/workflows/execute-plan.md": "c82c959f78a1917d",
"gsd-core/workflows/explore.md": "35431c40bb1b245a",
"gsd-core/workflows/extract-learnings.md": "f34d0b1927545b18",
"gsd-core/workflows/fast.md": "66821090b6b8ed3b",

View File

@@ -16,7 +16,7 @@
"agents/gsd-domain-researcher.md": "56395dbdabf076f6",
"agents/gsd-eval-auditor.md": "ad2840fd5cd76172",
"agents/gsd-eval-planner.md": "2049dac060d00eda",
"agents/gsd-executor.md": "e568f8171c7d12f1",
"agents/gsd-executor.md": "026606d319f6c338",
"agents/gsd-framework-selector.md": "4b77eebbe9288d80",
"agents/gsd-integration-checker.md": "5da30584d06b878c",
"agents/gsd-intel-updater.md": "b8971c5d96e63b38",
@@ -232,7 +232,7 @@
"gsd-core/references/verification-patterns.md": "72f4d4814fdae9a8",
"gsd-core/references/verify-mvp-mode.md": "534bdc7f2432903a",
"gsd-core/references/workstream-flag.md": "19c02b83bd1692bf",
"gsd-core/references/worktree-branch-check.md": "ab004404d028cc0d",
"gsd-core/references/worktree-branch-check.md": "46f222a2e2c2edd7",
"gsd-core/references/worktree-path-safety.md": "66de0b35266c807d",
"gsd-core/templates/AI-SPEC.md": "24df5fe5ba34e367",
"gsd-core/templates/DEBUG.md": "0944156249103c16",
@@ -318,13 +318,13 @@
"gsd-core/workflows/docs-update.md": "215b0122c4d2b1e5",
"gsd-core/workflows/edit-phase.md": "8323bfe10faa0c0a",
"gsd-core/workflows/eval-review.md": "9389c58f7384972d",
"gsd-core/workflows/execute-phase.md": "24b8e6ea6456e8f3",
"gsd-core/workflows/execute-phase.md": "80a4fb2d23642cd8",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "d2020c5e01c7bd7f",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "7b2d9a4a4013fd6a",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "7a49bc47da5411ea",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "46de8e5e07946509",
"gsd-core/workflows/execute-plan.md": "09ea0688882eb30e",
"gsd-core/workflows/explore.md": "9348b54b526b8938",
"gsd-core/workflows/extract-learnings.md": "d8177b0c13b7e5ee",
"gsd-core/workflows/fast.md": "77b49793e26b3323",

View File

@@ -16,7 +16,7 @@
"agents/gsd-domain-researcher.md": "412cdbb05ba252ea",
"agents/gsd-eval-auditor.md": "4ffb265063c318e5",
"agents/gsd-eval-planner.md": "03448fc9c5774b56",
"agents/gsd-executor.md": "e39b2cd4ec6b3afd",
"agents/gsd-executor.md": "3ec54684a756e830",
"agents/gsd-framework-selector.md": "ea9981d65d6b3429",
"agents/gsd-integration-checker.md": "35b4f2969d279871",
"agents/gsd-intel-updater.md": "5fe5edfae2719cb8",
@@ -161,7 +161,7 @@
"gsd-core/references/verification-patterns.md": "72f4d4814fdae9a8",
"gsd-core/references/verify-mvp-mode.md": "534bdc7f2432903a",
"gsd-core/references/workstream-flag.md": "50ddf79d58950730",
"gsd-core/references/worktree-branch-check.md": "5d79e26e3b51d9ae",
"gsd-core/references/worktree-branch-check.md": "ecfbf0e65dd8ccac",
"gsd-core/references/worktree-path-safety.md": "fa79fcdff2aaa5f0",
"gsd-core/templates/AI-SPEC.md": "24df5fe5ba34e367",
"gsd-core/templates/DEBUG.md": "0944156249103c16",
@@ -247,13 +247,13 @@
"gsd-core/workflows/docs-update.md": "02811dd7aa32d5ba",
"gsd-core/workflows/edit-phase.md": "7f27003f20e88fb8",
"gsd-core/workflows/eval-review.md": "e7cd5dfcf18e2458",
"gsd-core/workflows/execute-phase.md": "b3d289801e4fff03",
"gsd-core/workflows/execute-phase.md": "5adf286f7ec99a59",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "9b2193de25506b3b",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "26ee34c543926402",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "362123fdf99e9980",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "a691e3afe88031b8",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "212856ac5c291c3c",
"gsd-core/workflows/execute-plan.md": "0c5e0455252b5a46",
"gsd-core/workflows/explore.md": "843e66f101a56dfa",
"gsd-core/workflows/extract-learnings.md": "e9e167c718949c0b",
"gsd-core/workflows/fast.md": "c801145115755524",
@@ -347,8 +347,8 @@
"hooks/gsd-validate-commit.sh": "bf5dd61d33cb3a38",
"hooks/gsd-windsurf-pre-command.js": "948be1c6d14c79cd",
"hooks/gsd-windsurf-pre-write.js": "92d4dbfbc36ab0cf",
"hooks/gsd-workflow-guard.js": "46b287c75153458a",
"hooks/gsd-worktree-path-guard.js": "7797e5fe2474ee88",
"hooks/gsd-workflow-guard.js": "41c59d9765ac36ae",
"hooks/gsd-worktree-path-guard.js": "37dd85a1591a4d8c",
"hooks/lib/git-cmd.js": "268ba15992ca0b23",
"hooks/lib/gsd-graphify-rebuild.sh": "66af89601074d2a9",
"hooks/managed-hooks-registry.cjs": "bc58c3a7609d7eae",

View File

@@ -16,7 +16,7 @@
"agents/gsd-domain-researcher.md": "a3874d80bcbc7380",
"agents/gsd-eval-auditor.md": "630d4cd3bd6ea195",
"agents/gsd-eval-planner.md": "3db12cde12aeb2c1",
"agents/gsd-executor.md": "14c1681bb5f7214f",
"agents/gsd-executor.md": "bea8102bf46ddb7a",
"agents/gsd-framework-selector.md": "ad5f2c6b9bec6270",
"agents/gsd-integration-checker.md": "c503e2f4a3d8ec05",
"agents/gsd-intel-updater.md": "231393da62a45b2e",
@@ -232,7 +232,7 @@
"gsd-core/references/verification-patterns.md": "ac45d99076067f17",
"gsd-core/references/verify-mvp-mode.md": "534bdc7f2432903a",
"gsd-core/references/workstream-flag.md": "225910640adbb76d",
"gsd-core/references/worktree-branch-check.md": "21d9c31bf6542b93",
"gsd-core/references/worktree-branch-check.md": "161547f45f78c2bd",
"gsd-core/references/worktree-path-safety.md": "3c8d74756f9b16a8",
"gsd-core/templates/AI-SPEC.md": "24df5fe5ba34e367",
"gsd-core/templates/DEBUG.md": "72e93b7f650d9bae",
@@ -318,13 +318,13 @@
"gsd-core/workflows/docs-update.md": "3c0d5ef72202d246",
"gsd-core/workflows/edit-phase.md": "8323bfe10faa0c0a",
"gsd-core/workflows/eval-review.md": "35be91cd22a9bc11",
"gsd-core/workflows/execute-phase.md": "7daf5ebd7eabcda8",
"gsd-core/workflows/execute-phase.md": "3ddae43ba8ad5081",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "b1e6588cd32a6f08",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "7b2d9a4a4013fd6a",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "7a49bc47da5411ea",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "48782aa1a714de9a",
"gsd-core/workflows/execute-plan.md": "731d2947b623be4f",
"gsd-core/workflows/explore.md": "e6c94f8b6f083109",
"gsd-core/workflows/extract-learnings.md": "d8177b0c13b7e5ee",
"gsd-core/workflows/fast.md": "41a6568b873aef99",
@@ -418,8 +418,8 @@
"hooks/gsd-validate-commit.sh": "bf5dd61d33cb3a38",
"hooks/gsd-windsurf-pre-command.js": "948be1c6d14c79cd",
"hooks/gsd-windsurf-pre-write.js": "92d4dbfbc36ab0cf",
"hooks/gsd-workflow-guard.js": "d0cea21bc596fd27",
"hooks/gsd-worktree-path-guard.js": "4998235bdf3f64a2",
"hooks/gsd-workflow-guard.js": "56414206bc13b3dc",
"hooks/gsd-worktree-path-guard.js": "9734e43bee1d7d2e",
"hooks/lib/git-cmd.js": "268ba15992ca0b23",
"hooks/lib/gsd-graphify-rebuild.sh": "66af89601074d2a9",
"hooks/managed-hooks-registry.cjs": "b63a879b8b3436bf",

View File

@@ -23,8 +23,8 @@
".kimi/hooks/gsd-validate-commit.sh": "bf5dd61d33cb3a38",
".kimi/hooks/gsd-windsurf-pre-command.js": "948be1c6d14c79cd",
".kimi/hooks/gsd-windsurf-pre-write.js": "92d4dbfbc36ab0cf",
".kimi/hooks/gsd-workflow-guard.js": "d0cea21bc596fd27",
".kimi/hooks/gsd-worktree-path-guard.js": "b49b03fa9de7df3b",
".kimi/hooks/gsd-workflow-guard.js": "56414206bc13b3dc",
".kimi/hooks/gsd-worktree-path-guard.js": "d00a75505429355c",
".kimi/hooks/lib/git-cmd.js": "268ba15992ca0b23",
".kimi/hooks/lib/gsd-graphify-rebuild.sh": "66af89601074d2a9",
".kimi/hooks/managed-hooks-registry.cjs": "08ec2585a3f8f132",
@@ -44,7 +44,7 @@
"agents/gsd-domain-researcher.md": "049f588663814fa2",
"agents/gsd-eval-auditor.md": "54870d3b07433525",
"agents/gsd-eval-planner.md": "552e9fa164c51ce8",
"agents/gsd-executor.md": "1154cdd7b22f9754",
"agents/gsd-executor.md": "98424ccf4346c9d1",
"agents/gsd-framework-selector.md": "8a795f230436ad2e",
"agents/gsd-integration-checker.md": "c1760a0bbd4f7bf5",
"agents/gsd-intel-updater.md": "944f1d903e2e9e09",
@@ -189,7 +189,7 @@
"gsd-core/references/verification-patterns.md": "72f4d4814fdae9a8",
"gsd-core/references/verify-mvp-mode.md": "534bdc7f2432903a",
"gsd-core/references/workstream-flag.md": "ca99ca79e716f0f5",
"gsd-core/references/worktree-branch-check.md": "21d9c31bf6542b93",
"gsd-core/references/worktree-branch-check.md": "161547f45f78c2bd",
"gsd-core/references/worktree-path-safety.md": "3c8d74756f9b16a8",
"gsd-core/templates/AI-SPEC.md": "efa1f8354bd3a24b",
"gsd-core/templates/DEBUG.md": "c8768312f4c1e438",
@@ -275,13 +275,13 @@
"gsd-core/workflows/docs-update.md": "a320371be70f43d8",
"gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04",
"gsd-core/workflows/eval-review.md": "32d3d7e80ab2bfc7",
"gsd-core/workflows/execute-phase.md": "f6eae507bb465c5f",
"gsd-core/workflows/execute-phase.md": "73ffb4f5d915e410",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "f7782680c2b8ad6b",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "7b2d9a4a4013fd6a",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "7a49bc47da5411ea",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "ca13ab9c31682a09",
"gsd-core/workflows/execute-plan.md": "74de71f01739f7ac",
"gsd-core/workflows/explore.md": "3f3b4f83e23349bc",
"gsd-core/workflows/extract-learnings.md": "b6f01ca3d8f58de4",
"gsd-core/workflows/fast.md": "11f5cd10ae5cc7d3",

View File

@@ -23,8 +23,8 @@
".kimi/hooks/gsd-validate-commit.sh": "bf5dd61d33cb3a38",
".kimi/hooks/gsd-windsurf-pre-command.js": "948be1c6d14c79cd",
".kimi/hooks/gsd-windsurf-pre-write.js": "92d4dbfbc36ab0cf",
".kimi/hooks/gsd-workflow-guard.js": "d0cea21bc596fd27",
".kimi/hooks/gsd-worktree-path-guard.js": "b49b03fa9de7df3b",
".kimi/hooks/gsd-workflow-guard.js": "56414206bc13b3dc",
".kimi/hooks/gsd-worktree-path-guard.js": "d00a75505429355c",
".kimi/hooks/lib/git-cmd.js": "268ba15992ca0b23",
".kimi/hooks/lib/gsd-graphify-rebuild.sh": "66af89601074d2a9",
".kimi/hooks/managed-hooks-registry.cjs": "08ec2585a3f8f132",
@@ -61,7 +61,7 @@
"agents/subagents/gsd-eval-auditor.yaml": "e3d868bd5fefe938",
"agents/subagents/gsd-eval-planner.md": "70f8c5727bfb9876",
"agents/subagents/gsd-eval-planner.yaml": "df8499f7af297ec2",
"agents/subagents/gsd-executor.md": "e37a910127d9ca5c",
"agents/subagents/gsd-executor.md": "8fdf9332233a66bd",
"agents/subagents/gsd-executor.yaml": "e29422986636fd64",
"agents/subagents/gsd-framework-selector.md": "a15b7aa1e0576e16",
"agents/subagents/gsd-framework-selector.yaml": "fb52c31cde27b0e3",
@@ -225,7 +225,7 @@
"gsd-core/references/verification-patterns.md": "72f4d4814fdae9a8",
"gsd-core/references/verify-mvp-mode.md": "534bdc7f2432903a",
"gsd-core/references/workstream-flag.md": "ca99ca79e716f0f5",
"gsd-core/references/worktree-branch-check.md": "21d9c31bf6542b93",
"gsd-core/references/worktree-branch-check.md": "161547f45f78c2bd",
"gsd-core/references/worktree-path-safety.md": "3c8d74756f9b16a8",
"gsd-core/templates/AI-SPEC.md": "efa1f8354bd3a24b",
"gsd-core/templates/DEBUG.md": "c8768312f4c1e438",
@@ -311,13 +311,13 @@
"gsd-core/workflows/docs-update.md": "a320371be70f43d8",
"gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04",
"gsd-core/workflows/eval-review.md": "32d3d7e80ab2bfc7",
"gsd-core/workflows/execute-phase.md": "5166a4c16dce3465",
"gsd-core/workflows/execute-phase.md": "157a97e0978bd5df",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "f7782680c2b8ad6b",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "7b2d9a4a4013fd6a",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "7a49bc47da5411ea",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "ca13ab9c31682a09",
"gsd-core/workflows/execute-plan.md": "74de71f01739f7ac",
"gsd-core/workflows/explore.md": "3f3b4f83e23349bc",
"gsd-core/workflows/extract-learnings.md": "b6f01ca3d8f58de4",
"gsd-core/workflows/fast.md": "11f5cd10ae5cc7d3",

View File

@@ -16,7 +16,7 @@
"agents/gsd-domain-researcher.md": "71250e759ca9e723",
"agents/gsd-eval-auditor.md": "c88890105f32ace6",
"agents/gsd-eval-planner.md": "60bddb70a937f796",
"agents/gsd-executor.md": "4946be74860ea68e",
"agents/gsd-executor.md": "14423bfb4dee14b8",
"agents/gsd-framework-selector.md": "1c0a10355e787675",
"agents/gsd-integration-checker.md": "a9de5928e5a5c649",
"agents/gsd-intel-updater.md": "493e07482fa6198a",
@@ -232,7 +232,7 @@
"gsd-core/references/verification-patterns.md": "3bd98d30eee6c5a1",
"gsd-core/references/verify-mvp-mode.md": "534bdc7f2432903a",
"gsd-core/references/workstream-flag.md": "225910640adbb76d",
"gsd-core/references/worktree-branch-check.md": "21d9c31bf6542b93",
"gsd-core/references/worktree-branch-check.md": "161547f45f78c2bd",
"gsd-core/references/worktree-path-safety.md": "3c8d74756f9b16a8",
"gsd-core/templates/AI-SPEC.md": "24df5fe5ba34e367",
"gsd-core/templates/DEBUG.md": "72e93b7f650d9bae",
@@ -318,13 +318,13 @@
"gsd-core/workflows/docs-update.md": "f6210dc8ff7776d5",
"gsd-core/workflows/edit-phase.md": "1876c855fb0a0a39",
"gsd-core/workflows/eval-review.md": "1973f08d0eb34159",
"gsd-core/workflows/execute-phase.md": "4e19bf9ead5fbafc",
"gsd-core/workflows/execute-phase.md": "b59b9993b1da7bb8",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "a15993affd62f4bf",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "c4cba01539f0368a",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "21f4d9b3abc334ce",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "a2e611fff6af9c29",
"gsd-core/workflows/execute-plan.md": "bb0ce725dcf12aa2",
"gsd-core/workflows/explore.md": "a514b88e98609441",
"gsd-core/workflows/extract-learnings.md": "92b3c0979604b7d0",
"gsd-core/workflows/fast.md": "12187b242e6af970",
@@ -418,8 +418,8 @@
"hooks/gsd-validate-commit.sh": "bf5dd61d33cb3a38",
"hooks/gsd-windsurf-pre-command.js": "948be1c6d14c79cd",
"hooks/gsd-windsurf-pre-write.js": "92d4dbfbc36ab0cf",
"hooks/gsd-workflow-guard.js": "d0cea21bc596fd27",
"hooks/gsd-worktree-path-guard.js": "c8f6c980305ae6fd",
"hooks/gsd-workflow-guard.js": "56414206bc13b3dc",
"hooks/gsd-worktree-path-guard.js": "bfef1802d491bdab",
"hooks/lib/git-cmd.js": "268ba15992ca0b23",
"hooks/lib/gsd-graphify-rebuild.sh": "66af89601074d2a9",
"hooks/managed-hooks-registry.cjs": "bd57cc72f482a14f",

View File

@@ -128,7 +128,7 @@
"gsd-core/references/verification-patterns.md": "72f4d4814fdae9a8",
"gsd-core/references/verify-mvp-mode.md": "534bdc7f2432903a",
"gsd-core/references/workstream-flag.md": "ca99ca79e716f0f5",
"gsd-core/references/worktree-branch-check.md": "21d9c31bf6542b93",
"gsd-core/references/worktree-branch-check.md": "161547f45f78c2bd",
"gsd-core/references/worktree-path-safety.md": "3c8d74756f9b16a8",
"gsd-core/templates/AI-SPEC.md": "efa1f8354bd3a24b",
"gsd-core/templates/DEBUG.md": "c8768312f4c1e438",
@@ -214,13 +214,13 @@
"gsd-core/workflows/docs-update.md": "a320371be70f43d8",
"gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04",
"gsd-core/workflows/eval-review.md": "32d3d7e80ab2bfc7",
"gsd-core/workflows/execute-phase.md": "042978dd27ab0637",
"gsd-core/workflows/execute-phase.md": "6779316ccf03982c",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "f7782680c2b8ad6b",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "7b2d9a4a4013fd6a",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "7a49bc47da5411ea",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "5063fc252c479892",
"gsd-core/workflows/execute-plan.md": "3168b13c3758ed84",
"gsd-core/workflows/explore.md": "3f3b4f83e23349bc",
"gsd-core/workflows/extract-learnings.md": "b6f01ca3d8f58de4",
"gsd-core/workflows/fast.md": "11f5cd10ae5cc7d3",
@@ -314,8 +314,8 @@
"hooks/gsd-validate-commit.sh": "bf5dd61d33cb3a38",
"hooks/gsd-windsurf-pre-command.js": "948be1c6d14c79cd",
"hooks/gsd-windsurf-pre-write.js": "92d4dbfbc36ab0cf",
"hooks/gsd-workflow-guard.js": "d0cea21bc596fd27",
"hooks/gsd-worktree-path-guard.js": "933eefc31e3b0407",
"hooks/gsd-workflow-guard.js": "56414206bc13b3dc",
"hooks/gsd-worktree-path-guard.js": "ea37324fe8dfaf12",
"hooks/lib/git-cmd.js": "268ba15992ca0b23",
"hooks/lib/gsd-graphify-rebuild.sh": "66af89601074d2a9",
"hooks/managed-hooks-registry.cjs": "ac720a2b548ba200",

View File

@@ -16,7 +16,7 @@
"agents/gsd-domain-researcher.md": "bd054bb27beed2a7",
"agents/gsd-eval-auditor.md": "57cc7458ab5de6b7",
"agents/gsd-eval-planner.md": "01b665728dde4ccf",
"agents/gsd-executor.md": "a6dd5b7da329d8f2",
"agents/gsd-executor.md": "b6baf92a0d0ab516",
"agents/gsd-framework-selector.md": "82ba6abea84226b7",
"agents/gsd-integration-checker.md": "90835dbc7dfa1691",
"agents/gsd-intel-updater.md": "3cc4f6ddd04676ec",
@@ -161,7 +161,7 @@
"gsd-core/references/verification-patterns.md": "72f4d4814fdae9a8",
"gsd-core/references/verify-mvp-mode.md": "534bdc7f2432903a",
"gsd-core/references/workstream-flag.md": "59804937da1ddaa9",
"gsd-core/references/worktree-branch-check.md": "3fc21ae9462c35c8",
"gsd-core/references/worktree-branch-check.md": "ea7fc76177f3e50d",
"gsd-core/references/worktree-path-safety.md": "b4111595eabec186",
"gsd-core/templates/AI-SPEC.md": "24df5fe5ba34e367",
"gsd-core/templates/DEBUG.md": "0944156249103c16",
@@ -247,13 +247,13 @@
"gsd-core/workflows/docs-update.md": "226550a6d556b09f",
"gsd-core/workflows/edit-phase.md": "0fb5e0123cfc6f36",
"gsd-core/workflows/eval-review.md": "88431952699d9fa6",
"gsd-core/workflows/execute-phase.md": "8e8fc94fd3071a79",
"gsd-core/workflows/execute-phase.md": "69c5e8a42ea9c331",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "0e0949db56deebeb",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "0b04cc2dcab61107",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "9cbf100b17f4bcb1",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "ec9026ede61e5cb9",
"gsd-core/workflows/execute-plan.md": "ea93d7a5c3d483e8",
"gsd-core/workflows/explore.md": "c412905fb86f3f12",
"gsd-core/workflows/extract-learnings.md": "dd4fdb88605de49a",
"gsd-core/workflows/fast.md": "93ed453edddd8c0c",
@@ -347,8 +347,8 @@
"hooks/gsd-validate-commit.sh": "bf5dd61d33cb3a38",
"hooks/gsd-windsurf-pre-command.js": "948be1c6d14c79cd",
"hooks/gsd-windsurf-pre-write.js": "92d4dbfbc36ab0cf",
"hooks/gsd-workflow-guard.js": "46b287c75153458a",
"hooks/gsd-worktree-path-guard.js": "112c3293a5baabeb",
"hooks/gsd-workflow-guard.js": "41c59d9765ac36ae",
"hooks/gsd-worktree-path-guard.js": "d55016621969e923",
"hooks/lib/git-cmd.js": "268ba15992ca0b23",
"hooks/lib/gsd-graphify-rebuild.sh": "66af89601074d2a9",
"hooks/managed-hooks-registry.cjs": "08741ed76f1d8970",

View File

@@ -16,7 +16,7 @@
"agents/gsd-domain-researcher.md": "b80f76874c04e515",
"agents/gsd-eval-auditor.md": "470bf16303ec4d2e",
"agents/gsd-eval-planner.md": "22334fde85723c9d",
"agents/gsd-executor.md": "a611d34bf51e6aec",
"agents/gsd-executor.md": "00768988ee91ad9f",
"agents/gsd-framework-selector.md": "7726fccc86bfeb50",
"agents/gsd-integration-checker.md": "7cd2072984411c7f",
"agents/gsd-intel-updater.md": "83de6ba9172891c3",
@@ -161,7 +161,7 @@
"gsd-core/references/verification-patterns.md": "72f4d4814fdae9a8",
"gsd-core/references/verify-mvp-mode.md": "534bdc7f2432903a",
"gsd-core/references/workstream-flag.md": "77d0e004039fb480",
"gsd-core/references/worktree-branch-check.md": "8de8075d76ff71cd",
"gsd-core/references/worktree-branch-check.md": "d20c16a7b42cceee",
"gsd-core/references/worktree-path-safety.md": "34689482908229bc",
"gsd-core/templates/AI-SPEC.md": "24df5fe5ba34e367",
"gsd-core/templates/DEBUG.md": "0944156249103c16",
@@ -247,13 +247,13 @@
"gsd-core/workflows/docs-update.md": "89e760e665ff99f8",
"gsd-core/workflows/edit-phase.md": "7facd0faa33c8cad",
"gsd-core/workflows/eval-review.md": "90a29a4fa0cdd947",
"gsd-core/workflows/execute-phase.md": "8f095f3cf2fb8f35",
"gsd-core/workflows/execute-phase.md": "7d9ad2344ede3966",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "296b812e8d0e9ce8",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "7d30384e9bf82664",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "90efedae3decaffe",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "f42ffe9e77df0bce",
"gsd-core/workflows/execute-plan.md": "3abba98d19b31036",
"gsd-core/workflows/explore.md": "f4d0db08c11545a8",
"gsd-core/workflows/extract-learnings.md": "3fcc858b20d0d0e6",
"gsd-core/workflows/fast.md": "0f05b1e008ac2fc2",

View File

@@ -16,7 +16,7 @@
"agents/gsd-domain-researcher.md": "56395dbdabf076f6",
"agents/gsd-eval-auditor.md": "fb64fc5acf359747",
"agents/gsd-eval-planner.md": "2049dac060d00eda",
"agents/gsd-executor.md": "067a4f846f4e020c",
"agents/gsd-executor.md": "10341df8e1f390bb",
"agents/gsd-framework-selector.md": "4b77eebbe9288d80",
"agents/gsd-integration-checker.md": "4ffb37fb230c2b90",
"agents/gsd-intel-updater.md": "a81d77c143c02108",
@@ -161,7 +161,7 @@
"gsd-core/references/verification-patterns.md": "72f4d4814fdae9a8",
"gsd-core/references/verify-mvp-mode.md": "534bdc7f2432903a",
"gsd-core/references/workstream-flag.md": "481ec11fe3e22236",
"gsd-core/references/worktree-branch-check.md": "f6018dddf15bc1cb",
"gsd-core/references/worktree-branch-check.md": "6a28b79d092173dd",
"gsd-core/references/worktree-path-safety.md": "0e8a26b9b3424974",
"gsd-core/templates/AI-SPEC.md": "24df5fe5ba34e367",
"gsd-core/templates/DEBUG.md": "0944156249103c16",
@@ -247,13 +247,13 @@
"gsd-core/workflows/docs-update.md": "6bd25d0123ee6c73",
"gsd-core/workflows/edit-phase.md": "c0ae7d0063f3e789",
"gsd-core/workflows/eval-review.md": "713de00ea5326988",
"gsd-core/workflows/execute-phase.md": "bbeb787a4e0969f0",
"gsd-core/workflows/execute-phase.md": "b28e4d8cffeb2944",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "3194ecd382690755",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "fb4497767cdf73a3",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "c54d55fad3ab5263",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "d7bc64b2d3fcff84",
"gsd-core/workflows/execute-plan.md": "2ff04f06b000fe26",
"gsd-core/workflows/explore.md": "e5ff3269f8ee77b6",
"gsd-core/workflows/extract-learnings.md": "af793bdf4ffd1c8a",
"gsd-core/workflows/fast.md": "b03b9f595892479a",

View File

@@ -16,7 +16,7 @@
"agents/gsd-domain-researcher.md": "049f588663814fa2",
"agents/gsd-eval-auditor.md": "54870d3b07433525",
"agents/gsd-eval-planner.md": "552e9fa164c51ce8",
"agents/gsd-executor.md": "1154cdd7b22f9754",
"agents/gsd-executor.md": "98424ccf4346c9d1",
"agents/gsd-framework-selector.md": "8a795f230436ad2e",
"agents/gsd-integration-checker.md": "c1760a0bbd4f7bf5",
"agents/gsd-intel-updater.md": "944f1d903e2e9e09",
@@ -232,7 +232,7 @@
"gsd-core/references/verification-patterns.md": "72f4d4814fdae9a8",
"gsd-core/references/verify-mvp-mode.md": "534bdc7f2432903a",
"gsd-core/references/workstream-flag.md": "ca99ca79e716f0f5",
"gsd-core/references/worktree-branch-check.md": "21d9c31bf6542b93",
"gsd-core/references/worktree-branch-check.md": "161547f45f78c2bd",
"gsd-core/references/worktree-path-safety.md": "3c8d74756f9b16a8",
"gsd-core/templates/AI-SPEC.md": "efa1f8354bd3a24b",
"gsd-core/templates/DEBUG.md": "c8768312f4c1e438",
@@ -318,13 +318,13 @@
"gsd-core/workflows/docs-update.md": "a320371be70f43d8",
"gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04",
"gsd-core/workflows/eval-review.md": "32d3d7e80ab2bfc7",
"gsd-core/workflows/execute-phase.md": "479ea9fcfe74e8f8",
"gsd-core/workflows/execute-phase.md": "0e1e8e5e3fa63587",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "f7782680c2b8ad6b",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "7b2d9a4a4013fd6a",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "7a49bc47da5411ea",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "beedb5ddff997b5a",
"gsd-core/workflows/execute-plan.md": "4f43b65cf80d8f2e",
"gsd-core/workflows/explore.md": "3f3b4f83e23349bc",
"gsd-core/workflows/extract-learnings.md": "b6f01ca3d8f58de4",
"gsd-core/workflows/fast.md": "11f5cd10ae5cc7d3",

View File

@@ -24,8 +24,8 @@
"docs-update.md": 56494,
"edit-phase.md": 12927,
"eval-review.md": 10332,
"execute-phase.md": 93368,
"execute-plan.md": 35131,
"execute-phase.md": 93383,
"execute-plan.md": 35143,
"explore.md": 11127,
"extract-learnings.md": 12893,
"fast.md": 7613,

View File

@@ -187,10 +187,10 @@ describe('bug #2924: worktree HEAD attachment + destructive recovery', () => {
const scripts = codeBlocks.map(({ body }) => body).join('\n');
// Allow-list must reference the canonical Claude Code worktree-agent-<id>
// namespace via a regex assertion (grep -Eq '^worktree-agent-...').
const allowListRe = /grep\s+-Eq?\s+'\^worktree-agent-/;
const allowListRe = /grep\s+-Eq?\s+'\^\(worktree-\)\?agent-/;
assert.ok(
allowListRe.test(scripts),
'worktree_branch_check must enforce a positive allow-list matching ^worktree-agent-* (#2924 hardening)'
'worktree_branch_check must enforce a positive allow-list matching ^(worktree-)?agent-* (#2924 hardening)'
);
});
@@ -322,10 +322,10 @@ describe('bug #2924: worktree HEAD attachment + destructive recovery', () => {
});
test('block enforces positive worktree-agent-* allow-list (#2924 hardening)', () => {
const allowListRe = /grep\s+-Eq?\s+'\^worktree-agent-/;
const allowListRe = /grep\s+-Eq?\s+'\^\(worktree-\)\?agent-/;
assert.ok(
allowListRe.test(block),
'quick.md worktree_branch_check must enforce a positive allow-list matching ^worktree-agent-* (#2924 hardening)'
'quick.md worktree_branch_check must enforce a positive allow-list matching ^(worktree-)?agent-* (#2924 hardening)'
);
});
});
@@ -404,10 +404,10 @@ describe('bug #2924: worktree HEAD attachment + destructive recovery', () => {
test('step 0 enforces positive worktree-agent-* allow-list (#2924 hardening)', () => {
const codeBlocks = extractFencedCodeBlocks(block);
const scripts = codeBlocks.map(({ body }) => body).join('\n');
const allowListRe = /grep\s+-Eq?\s+'\^worktree-agent-/;
const allowListRe = /grep\s+-Eq?\s+'\^\(worktree-\)\?agent-/;
assert.ok(
allowListRe.test(scripts),
'task_commit_protocol step 0 must enforce a positive allow-list matching ^worktree-agent-* in addition to the protected-ref deny-list (#2924 hardening)'
'task_commit_protocol step 0 must enforce a positive allow-list matching ^(worktree-)?agent-* in addition to the protected-ref deny-list (#2924 hardening)'
);
});
});
@@ -1531,8 +1531,8 @@ function extractCwdGuardBash() {
if (!guardBash.includes('git rev-parse --show-toplevel')) {
throw new Error('extractCwdGuardBash: sanity check failed — extracted block does not contain "git rev-parse --show-toplevel"');
}
if (!guardBash.includes('worktree-agent-')) {
throw new Error('extractCwdGuardBash: sanity check failed — extracted block does not contain "worktree-agent-"');
if (!guardBash.includes('(worktree-)?agent-')) {
throw new Error('extractCwdGuardBash: sanity check failed — extracted block does not contain "(worktree-)?agent-"');
}
return guardBash;

View File

@@ -662,6 +662,16 @@ describe('planWorktreeRecordAgent', () => {
assert.equal(readBack.reason, 'empty_manifest');
});
test('accepts the current agent-<id> namespace (#1995)', () => {
const plan = planWorktreeRecordAgent('{"worktrees":[]}', { ...VALID, branch: 'agent-a1' });
assert.equal(plan.ok, true);
assert.equal(plan.entry.branch, 'agent-a1');
const readBack = planWorktreeWaveCleanup('/repo/main', JSON.parse(plan.manifest));
assert.equal(readBack.ok, true);
assert.equal(readBack.entries.length, 1);
assert.equal(readBack.entries[0].branch, 'agent-a1');
});
test('fails loudly on malformed manifest JSON instead of clobbering it', () => {
const plan = planWorktreeRecordAgent('{not valid json', VALID);
assert.equal(plan.ok, false);
@@ -749,7 +759,9 @@ describe('planWorktreeRecordAgent', () => {
describe('planWorktreeRecordAgent — fast-check parity invariant (#1298)', () => {
const seg = fc.stringMatching(/^[A-Za-z0-9._/-]+$/); // include '/' — the namespace allows it
const agentBranch = seg.map((s) => `worktree-agent-${s}`);
const legacyAgentBranch = seg.map((s) => `worktree-agent-${s}`);
const currentAgentBranch = seg.map((s) => `agent-${s}`);
const agentBranch = fc.oneof(legacyAgentBranch, currentAgentBranch);
const nonEmpty = fc.stringMatching(/^\S[\S ]*$/); // no leading whitespace, not blank
test('any writer-accepted entry round-trips through the cleanup reader unchanged', () => {
@@ -776,7 +788,7 @@ describe('planWorktreeRecordAgent — fast-check parity invariant (#1298)', () =
agentId: nonEmpty,
worktreePath: nonEmpty,
// Any branch that does NOT match the disposable namespace.
branch: fc.string({ minLength: 1 }).filter((b) => !/^worktree-agent-[A-Za-z0-9._/-]+$/.test(b.trim())),
branch: fc.string({ minLength: 1 }).filter((b) => !/^(worktree-)?agent-[A-Za-z0-9._/-]+$/.test(b.trim())),
base: nonEmpty,
}),
(fields) => {
@@ -788,6 +800,79 @@ describe('planWorktreeRecordAgent — fast-check parity invariant (#1298)', () =
});
});
// ─── branch namespace boundary tests (#1995) ─────────────────────────────────
// Claude Code's isolation="worktree" branch naming changed from worktree-agent-<id>
// to agent-<id>. Both namespaces must be accepted; non-agent branches rejected.
describe('worktree branch namespace boundaries (#1995)', () => {
const ACCEPTED_BRANCHES = [
'agent-a1',
'agent-abc123',
'agent-session.42',
'worktree-agent-a1',
'worktree-agent-abc123',
'worktree-agent-session.42',
];
const REJECTED_BRANCHES = [
'feature-x',
'main',
'agent',
'worktree-agent',
'xagent-y',
'worktree-foo',
'worktree-agent-',
'agent-',
'',
];
for (const branch of ACCEPTED_BRANCHES) {
test(`planWorktreeRecordAgent accepts branch "${branch}"`, () => {
const plan = planWorktreeRecordAgent('{"worktrees":[]}', {
agentId: 'a1', worktreePath: '/repo/wt', branch, base: 'abc123',
});
assert.equal(plan.ok, true, `expected branch "${branch}" to be accepted`);
assert.equal(plan.entry.branch, branch);
});
}
for (const branch of REJECTED_BRANCHES) {
test(`planWorktreeRecordAgent rejects branch "${branch}"`, () => {
const plan = planWorktreeRecordAgent('{"worktrees":[]}', {
agentId: 'a1', worktreePath: '/repo/wt', branch, base: 'abc123',
});
if (branch === '') {
assert.equal(plan.reason, 'missing_field');
} else {
assert.equal(plan.ok, false, `expected branch "${branch}" to be rejected`);
assert.equal(plan.reason, 'invalid_entry');
assert.match(plan.hint, /\(worktree-\)\?agent-/);
}
});
}
test('cleanup-wave retains agent-<id> entries alongside worktree-agent-<id> entries', () => {
const manifest = {
orchestrator_root: '/repo/main',
worktrees: [
{ agent_id: 'a1', worktree_path: '/repo/wt-a1', branch: 'agent-a1', expected_base: 'abc' },
{ agent_id: 'a2', worktree_path: '/repo/wt-a2', branch: 'worktree-agent-a2', expected_base: 'def' },
],
};
const result = planWorktreeWaveCleanup('/repo/main', manifest);
assert.equal(result.ok, true);
assert.equal(result.entries.length, 2);
assert.deepEqual(result.entries.map((e) => e.branch), ['agent-a1', 'worktree-agent-a2']);
});
test('hint string names the widened accepted pattern', () => {
const plan = planWorktreeRecordAgent('{"worktrees":[]}', {
agentId: 'a1', worktreePath: '/repo/wt', branch: 'feature-x', base: 'abc123',
});
assert.equal(plan.ok, false);
assert.match(plan.hint, /\(worktree-\)\?agent-\[A-Za-z0-9\._\/-\]\+/);
});
});
// ─── cmdWorktreeRecordAgent (#1298 CLI wrapper) ───────────────────────────────
describe('cmdWorktreeRecordAgent', () => {
@@ -824,6 +909,26 @@ describe('cmdWorktreeRecordAgent', () => {
assert.match(out.join(''), /"ok": true/);
});
test('accepts the current agent-<id> namespace via CLI (#1995)', () => {
let writtenContent = null;
const agentArgs = [
'--manifest', 'manifest.json',
'--agent-id', 'a1',
'--path', '/repo/.claude/worktrees/agent-a1',
'--branch', 'agent-a1',
'--base', 'abc123',
];
const result = cmdWorktreeRecordAgent('/repo/main', agentArgs, {
readFile: () => '{"orchestrator_root":"/repo/main","worktrees":[]}',
writeFile: (_p, c) => { writtenContent = c; },
write: () => {},
writeErr: () => {},
});
assert.equal(result.ok, true);
const written = JSON.parse(writtenContent);
assert.equal(written.worktrees[0].branch, 'agent-a1');
});
test('exits 2 with usage when --manifest is missing', () => {
withExitCode(() => {
const errs = [];
@@ -2620,10 +2725,10 @@ describe('bug #3384: adjacent worktree data-loss guards', () => {
const fragmentSource = fs.readFileSync(WORKTREE_BRANCH_CHECK_FRAGMENT, 'utf8');
const branchCheck = fragmentSource.indexOf('HEAD_REF=$(git symbolic-ref --quiet HEAD || echo');
const namespaceCheck = fragmentSource.indexOf('^worktree-agent-');
const namespaceCheck = fragmentSource.indexOf('(worktree-)?agent-');
assert.ok(branchCheck > 0, 'canonical fragment must assert HEAD before any work');
assert.ok(namespaceCheck > branchCheck, 'canonical fragment must require disposable worktree-agent branch');
assert.ok(namespaceCheck > branchCheck, 'canonical fragment must require disposable agent/worktree-agent branch');
// #48: verify-only — the destructive self-recovery is gone; the fragment fails closed instead.
assert.ok(!fragmentSource.includes('git reset --hard {EXPECTED_BASE}'), 'canonical fragment must not self-recover via reset --hard — orchestrator owns recovery (#48)');
assert.ok(fragmentSource.includes('exit 42'), 'canonical fragment must fail closed with exit 42 on base mismatch (#48)');

View File

@@ -167,9 +167,9 @@ describe('canonical worktree-branch-check fragment is the single source of truth
assert.ok(/\brelease\b/.test(block), 'fragment protected-ref alternation must include release');
});
test('fragment block positive allow-list matches ^worktree-agent- pattern', () => {
const allowListRe = /grep\s+-Eq?\s+'\^worktree-agent-/;
assert.ok(allowListRe.test(block), 'fragment block must enforce a positive allow-list matching ^worktree-agent-');
test('fragment block positive allow-list matches ^(worktree-)?agent- pattern', () => {
const allowListRe = /grep\s+-Eq?\s+'\^\(worktree-\)\?agent-/;
assert.ok(allowListRe.test(block), 'fragment block must enforce a positive allow-list matching ^(worktree-)?agent-');
});
test('fragment block contains update-ref prohibition text', () => {