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

@@ -0,0 +1,5 @@
---
type: Fixed
pr: 2548
---
**Worktree branch guards now accept Claude Code's `agent-<id>` namespace** — the `worktree record-agent` command, the spawn-time branch check, the cleanup-wave manifest reader, and the force-add/path/workflow guards all accept both the current `agent-<id>` and the legacy `worktree-agent-<id>` branch naming. Previously, Claude Code's rename from `worktree-agent-<id>` to `agent-<id>` caused every executor sub-agent to fail its branch check (false-positive FATAL / exit 42) and silently dropped valid cleanup-manifest entries (`empty_manifest`), blocking merge-back. (#1995)

View File

@@ -495,11 +495,11 @@ if [ -f .git ]; then # worktree
echo "DO NOT use 'git update-ref' to rewind the protected branch — surface as blocker (#2924)." >&2 echo "DO NOT use 'git update-ref' to rewind the protected branch — surface as blocker (#2924)." >&2
exit 1 exit 1
fi fi
# Positive allow-list: HEAD must be on the canonical Claude Code worktree-agent # Positive allow-list: HEAD must be on a per-agent branch (`agent-<id>` or
# branch namespace (`worktree-agent-<id>`). This catches feature/* and any other # legacy `worktree-agent-<id>`). This catches feature/* and any other
# arbitrary branch that the deny-list would silently allow (#2924). # arbitrary branch that the deny-list would silently allow (#2924, #1995).
if ! echo "$ACTUAL_BRANCH" | grep -Eq '^worktree-agent-[A-Za-z0-9._/-]+$'; then if ! echo "$ACTUAL_BRANCH" | grep -Eq '^(worktree-)?agent-[A-Za-z0-9._/-]+$'; then
echo "FATAL: refusing to commit — worktree HEAD '$ACTUAL_BRANCH' is not in the worktree-agent-* namespace." >&2 echo "FATAL: refusing to commit — worktree HEAD '$ACTUAL_BRANCH' is not in the agent-* / worktree-agent-* namespace." >&2
echo "Agent commits must live on per-agent branches; surface as blocker (#2924)." >&2 echo "Agent commits must live on per-agent branches; surface as blocker (#2924)." >&2
exit 1 exit 1
fi fi

View File

@@ -612,7 +612,7 @@ node gsd-tools.cjs worktree record-agent \
--manifest <path> --agent-id <id> --path <worktree> --branch <branch> --base <sha> --manifest <path> --agent-id <id> --path <worktree> --branch <branch> --base <sha>
``` ```
**`worktree record-agent`** appends one `{agent_id, worktree_path, branch, expected_base}` entry to an already-initialized manifest, validating every field **at write time using the same rules the `cleanup-wave` reader enforces** — `--branch` must match the disposable `^worktree-agent-[A-Za-z0-9._/-]+$` namespace, and `--path`/`--branch`/`--base` must be non-empty. `--agent-id` is required (write-strict), even though the reader treats it as optional. A missing or garbled field — or a duplicate `(worktree_path, branch)` the reader would dedup away — fails loudly with a recovery hint and a non-zero exit **without** writing, instead of appending an under-populated or silently-dropped entry. Whitespace-only `--path`/`--base` are rejected (values are trimmed). The on-disk manifest shape is unchanged (the reader re-derives `allowed_bases`); the orchestrator still initializes the empty `{orchestrator_root, worktrees: []}` shell inline before any agent is recorded. **`worktree record-agent`** appends one `{agent_id, worktree_path, branch, expected_base}` entry to an already-initialized manifest, validating every field **at write time using the same rules the `cleanup-wave` reader enforces** — `--branch` must match the disposable `^(worktree-)?agent-[A-Za-z0-9._/-]+$` namespace (accepts both `agent-<id>` and legacy `worktree-agent-<id>`), and `--path`/`--branch`/`--base` must be non-empty. `--agent-id` is required (write-strict), even though the reader treats it as optional. A missing or garbled field — or a duplicate `(worktree_path, branch)` the reader would dedup away — fails loudly with a recovery hint and a non-zero exit **without** writing, instead of appending an under-populated or silently-dropped entry. Whitespace-only `--path`/`--base` are rejected (values are trimmed). The on-disk manifest shape is unchanged (the reader re-derives `allowed_bases`); the orchestrator still initializes the empty `{orchestrator_root, worktrees: []}` shell inline before any agent is recorded.
--- ---

View File

@@ -17,7 +17,7 @@ did not create (#48).
<worktree_branch_check> <worktree_branch_check>
FIRST ACTION: HEAD assertion MUST run before anything else, and this block is FIRST ACTION: HEAD assertion MUST run before anything else, and this block is
VERIFY-ONLY. Worktrees spawned by Claude Code's `isolation="worktree"` use the VERIFY-ONLY. Worktrees spawned by Claude Code's `isolation="worktree"` use the
`worktree-agent-<id>` namespace. The orchestrator owns this worktree's lifecycle; `agent-<id>` namespace (previously `worktree-agent-<id>`; both are accepted). The orchestrator owns this worktree's lifecycle;
a sub-agent MUST NOT hold state-correction primitives (hard-reset, update-ref, a sub-agent MUST NOT hold state-correction primitives (hard-reset, update-ref,
force-move, index-discard) on a worktree it did not create (#48, #2924). If ANY force-move, index-discard) on a worktree it did not create (#48, #2924). If ANY
assertion below fails, HALT immediately — print the FATAL line, `exit 42`, and let assertion below fails, HALT immediately — print the FATAL line, `exit 42`, and let
@@ -27,11 +27,11 @@ commit.
HEAD_REF=$(git symbolic-ref --quiet HEAD || echo "DETACHED") HEAD_REF=$(git symbolic-ref --quiet HEAD || echo "DETACHED")
ACTUAL_BRANCH=$(git rev-parse --abbrev-ref HEAD) ACTUAL_BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [ "$HEAD_REF" = "DETACHED" ] || echo "$ACTUAL_BRANCH" | grep -Eq '^(main|master|develop|trunk|release/.*)$'; then if [ "$HEAD_REF" = "DETACHED" ] || echo "$ACTUAL_BRANCH" | grep -Eq '^(main|master|develop|trunk|release/.*)$'; then
echo "FATAL: worktree HEAD on '$ACTUAL_BRANCH' (expected worktree-agent-*); refusing to commit or self-recover via 'git update-ref' (#2924)." >&2 echo "FATAL: worktree HEAD on '$ACTUAL_BRANCH' (expected agent-* or worktree-agent-*); refusing to commit or self-recover via 'git update-ref' (#2924)." >&2
exit 42 exit 42
fi fi
if ! echo "$ACTUAL_BRANCH" | grep -Eq '^worktree-agent-[A-Za-z0-9._/-]+$'; then if ! echo "$ACTUAL_BRANCH" | grep -Eq '^(worktree-)?agent-[A-Za-z0-9._/-]+$'; then
echo "FATAL: worktree HEAD '$ACTUAL_BRANCH' is not in the worktree-agent-* namespace; refusing to commit (#2924)." >&2 echo "FATAL: worktree HEAD '$ACTUAL_BRANCH' is not in the agent-* / worktree-agent-* namespace; refusing to commit (#2924)." >&2
exit 42 exit 42
fi fi
ACTUAL_BASE=$(git rev-parse HEAD) ACTUAL_BASE=$(git rev-parse HEAD)

View File

@@ -445,7 +445,7 @@ cwd inside an agent worktree (or a subdirectory of one). Every subsequent
orchestrator-side git call would then target the wrong tree — this is how a wrong-base orchestrator-side git call would then target the wrong tree — this is how a wrong-base
merge nearly shipped ~1000 files. Resolve the *worktree root* (so a subdirectory cwd merge nearly shipped ~1000 files. Resolve the *worktree root* (so a subdirectory cwd
cannot skew the check) and refuse if it is an agent worktree. The discriminator is the cannot skew the check) and refuse if it is an agent worktree. The discriminator is the
per-agent branch namespace `worktree-agent-*`, NOT the `.claude/worktrees/` path: the per-agent branch namespace `agent-*` / `worktree-agent-*`, NOT the `.claude/worktrees/` path: the
orchestrator may itself be legitimately invoked from a feature worktree under orchestrator may itself be legitimately invoked from a feature worktree under
`.claude/worktrees/`, so a path-substring refusal would break legitimate runs. Do NOT `.claude/worktrees/`, so a path-substring refusal would break legitimate runs. Do NOT
pin to `git worktree list`'s first entry — that is the main worktree, the wrong target pin to `git worktree list`'s first entry — that is the main worktree, the wrong target
@@ -455,7 +455,7 @@ when the orchestrator legitimately runs from a feature worktree.
ORCHESTRATOR_WT=$(git rev-parse --show-toplevel 2>/dev/null) || { ORCHESTRATOR_WT=$(git rev-parse --show-toplevel 2>/dev/null) || {
echo "FATAL: execute_waves entry is not inside a git worktree (#48)." >&2; exit 1; } echo "FATAL: execute_waves entry is not inside a git worktree (#48)." >&2; exit 1; }
ORCH_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null) ORCH_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
if printf '%s' "$ORCH_BRANCH" | grep -Eq '^worktree-agent-'; then if printf '%s' "$ORCH_BRANCH" | grep -Eq '^(worktree-)?agent-'; then
echo "FATAL: orchestrator cwd is inside an agent worktree (branch '$ORCH_BRANCH', root '$ORCHESTRATOR_WT') — refusing to execute waves (#48). A prior isolation=\"worktree\" dispatch drifted the cwd; re-run from the orchestrator's own worktree." >&2 echo "FATAL: orchestrator cwd is inside an agent worktree (branch '$ORCH_BRANCH', root '$ORCHESTRATOR_WT') — refusing to execute waves (#48). A prior isolation=\"worktree\" dispatch drifted the cwd; re-run from the orchestrator's own worktree." >&2
exit 1 exit 1
fi fi

View File

@@ -113,7 +113,7 @@ Otherwise: Apply checkpoint-based routing below.
> **Runtime-aware dispatch (#2508 Phase 4).** GSD workflows dispatch specialized subagents by role. Before dispatching on a built-in-only runtime (kimi-code — three built-ins only), resolve the role to a built-in via `gsd_run query resolve-dispatch-type --requested <role> --raw`. On named-dispatch runtimes (Claude/OpenCode/…) the role is returned unchanged; on kimi-code it maps to `coder`/`explore`/`plan` by role-suffix. The persona rides `${AGENT_SKILLS_<ROLE>}` (Phase 3) regardless. See @gsd-core/references/runtime-aware-dispatch.md. > **Runtime-aware dispatch (#2508 Phase 4).** GSD workflows dispatch specialized subagents by role. Before dispatching on a built-in-only runtime (kimi-code — three built-ins only), resolve the role to a built-in via `gsd_run query resolve-dispatch-type --requested <role> --raw`. On named-dispatch runtimes (Claude/OpenCode/…) the role is returned unchanged; on kimi-code it maps to `coder`/`explore`/`plan` by role-suffix. The persona rides `${AGENT_SKILLS_<ROLE>}` (Phase 3) regardless. See @gsd-core/references/runtime-aware-dispatch.md.
**Pattern A:** init_agent_tracking → capture `EXPECTED_BASE=$(git rev-parse HEAD)` → print `Spawning executor agent (runs in a subagent — no output until it returns, ~1–5 min; expected, not a freeze)` → spawn Agent(subagent_type="gsd-executor", model=executor_model) with prompt: execute plan at [path], autonomous, all tasks + SUMMARY + commit, follow deviation/auth rules, report: plan name, tasks, SUMMARY path, commit hash → track agent_id → wait → update tracking → report. **Include `isolation="worktree"` only if `workflow.use_worktrees` is not `false`** (read via `config-get workflow.use_worktrees`). **When using `isolation="worktree"`, embed the `<worktree_branch_check>` block from `gsd-core/references/worktree-branch-check.md` into the prompt, substituting `{EXPECTED_BASE}` with the captured base SHA.** That guard is **verify-only and fail-closed** (#48): it asserts a per-agent `worktree-agent-*` branch and the exact base, forbids `git update-ref` self-recovery (#2924), and on any mismatch prints `FATAL:` and `exit 42` so the orchestrator can recover — the sub-agent never rewrites a worktree it did not create. This supersedes the former self-recovery (#2015), whose destructive base rewrite could fail silently under a deny rule; the base-drift it addressed affects all platforms, and base correction is now the orchestrator's responsibility. **Pattern A:** init_agent_tracking → capture `EXPECTED_BASE=$(git rev-parse HEAD)` → print `Spawning executor agent (runs in a subagent — no output until it returns, ~1–5 min; expected, not a freeze)` → spawn Agent(subagent_type="gsd-executor", model=executor_model) with prompt: execute plan at [path], autonomous, all tasks + SUMMARY + commit, follow deviation/auth rules, report: plan name, tasks, SUMMARY path, commit hash → track agent_id → wait → update tracking → report. **Include `isolation="worktree"` only if `workflow.use_worktrees` is not `false`** (read via `config-get workflow.use_worktrees`). **When using `isolation="worktree"`, embed the `<worktree_branch_check>` block from `gsd-core/references/worktree-branch-check.md` into the prompt, substituting `{EXPECTED_BASE}` with the captured base SHA.** That guard is **verify-only and fail-closed** (#48): it asserts a per-agent `agent-*` / `worktree-agent-*` branch and the exact base, forbids `git update-ref` self-recovery (#2924), and on any mismatch prints `FATAL:` and `exit 42` so the orchestrator can recover — the sub-agent never rewrites a worktree it did not create. This supersedes the former self-recovery (#2015), whose destructive base rewrite could fail silently under a deny rule; the base-drift it addressed affects all platforms, and base correction is now the orchestrator's responsibility.
**Pattern B:** Execute segment-by-segment. Autonomous segments: spawn subagent for assigned tasks only (no SUMMARY/commit). Checkpoints: main context. After all segments: aggregate, create SUMMARY, commit. See segment_execution. **Pattern B:** Execute segment-by-segment. Autonomous segments: spawn subagent for assigned tasks only (no SUMMARY/commit). Checkpoints: main context. After all segments: aggregate, create SUMMARY, commit. See segment_execution.

View File

@@ -143,11 +143,11 @@ process.stdin.on('end', () => {
const command = data.tool_input?.command || ''; const command = data.tool_input?.command || '';
for (const gitCwd of forceGitAddCwds(command, cwd)) { for (const gitCwd of forceGitAddCwds(command, cwd)) {
const branch = currentBranch(gitCwd); const branch = currentBranch(gitCwd);
if (branch.startsWith('worktree-agent-')) { if (/^(worktree-)?agent-/.test(branch)) {
const output = { const output = {
decision: 'block', decision: 'block',
code: 'WORKTREE_AGENT_FORCE_ADD_FORBIDDEN', code: 'WORKTREE_AGENT_FORCE_ADD_FORBIDDEN',
reason: 'worktree-agent branches must not run git add -f or git add --force. Respect the SDK skipped_gitignored/skipped_commit_docs_false contract and leave gitignored files untracked.', reason: 'agent/worktree-agent branches must not run git add -f or git add --force. Respect the SDK skipped_gitignored/skipped_commit_docs_false contract and leave gitignored files untracked.',
}; };
process.stdout.write(JSON.stringify(output)); process.stdout.write(JSON.stringify(output));
// Kimi CLI's exit-2 protocol feeds stderr back to the model (#2304) // Kimi CLI's exit-2 protocol feeds stderr back to the model (#2304)

View File

@@ -118,13 +118,14 @@ process.stdin.on('end', () => {
} }
// #1342: Only enforce inside a GSD-managed isolated executor worktree. Those // #1342: Only enforce inside a GSD-managed isolated executor worktree. Those
// are always on a `worktree-agent-*` branch (the positive allow-list enforced // are always on an `agent-*` or legacy `worktree-agent-*` branch (the positive
// by worktree-branch-check.md, #2924). A manually-created linked worktree (plain // allow-list enforced by worktree-branch-check.md, #2924, #1995). A manually-
// non-GSD work, e.g. Claude Code plan-mode) is on the user's own branch, so the // created linked worktree (plain non-GSD work, e.g. Claude Code plan-mode) is
// guard must be a no-op there. Detached HEAD / error → not GSD-managed → no-op. // on the user's own branch, so the guard must be a no-op there. Detached HEAD
// / error → not GSD-managed → no-op.
const branchResult = git(['symbolic-ref', '--short', 'HEAD'], cwd); const branchResult = git(['symbolic-ref', '--short', 'HEAD'], cwd);
const branch = branchResult.status === 0 && branchResult.stdout ? branchResult.stdout.trim() : ''; const branch = branchResult.status === 0 && branchResult.stdout ? branchResult.stdout.trim() : '';
if (!/^worktree-agent-[A-Za-z0-9._/-]+$/.test(branch)) { if (!/^(worktree-)?agent-[A-Za-z0-9._/-]+$/.test(branch)) {
process.exit(0); // not a GSD-managed executor worktree — no-op process.exit(0); // not a GSD-managed executor worktree — no-op
} }

View File

@@ -18,6 +18,9 @@ import { execGit as execGitSeam, posixNormalize } from './shell-command-projecti
// remote, stalled NFS mount, etc.). Callers can override via deps.timeout. // remote, stalled NFS mount, etc.). Callers can override via deps.timeout.
const DEFAULT_GIT_TIMEOUT_MS = 10000; const DEFAULT_GIT_TIMEOUT_MS = 10000;
const WORKTREE_AGENT_BRANCH_RE = /^(worktree-)?agent-[A-Za-z0-9._/-]+$/;
const WORKTREE_AGENT_BRANCH_PATTERN = WORKTREE_AGENT_BRANCH_RE.source;
interface GitResult { interface GitResult {
exitCode: number; exitCode: number;
stdout: string; stdout: string;
@@ -428,7 +431,7 @@ function normalizeCleanupManifestEntry(entry: unknown): CleanupManifestEntry | n
const branch = typeof e.branch === 'string' ? e.branch : ''; const branch = typeof e.branch === 'string' ? e.branch : '';
const expectedBase = typeof e.expected_base === 'string' ? e.expected_base : ''; const expectedBase = typeof e.expected_base === 'string' ? e.expected_base : '';
if (!worktreePath || !branch || !expectedBase) return null; if (!worktreePath || !branch || !expectedBase) return null;
if (!/^worktree-agent-[A-Za-z0-9._/-]+$/.test(branch)) return null; if (!WORKTREE_AGENT_BRANCH_RE.test(branch)) return null;
const rawAllowedBases = Array.isArray(e.allowed_bases) ? e.allowed_bases : []; const rawAllowedBases = Array.isArray(e.allowed_bases) ? e.allowed_bases : [];
const allowedBases = Array.from(new Set( const allowedBases = Array.from(new Set(
[expectedBase, ...rawAllowedBases.filter((base): base is string => typeof base === 'string' && base.length > 0)] [expectedBase, ...rawAllowedBases.filter((base): base is string => typeof base === 'string' && base.length > 0)]
@@ -939,7 +942,7 @@ function planWorktreeRecordAgent(manifestRaw: string, fields: RecordAgentFields)
return { return {
ok: false, ok: false,
reason: 'invalid_entry', reason: 'invalid_entry',
hint: `Entry failed cleanup-manifest validation: --path/--branch/--base must be non-empty and --branch must match ^worktree-agent-[A-Za-z0-9._/-]+$ (got branch="${branch}"). Fix the field and re-run.`, hint: `Entry failed cleanup-manifest validation: --path/--branch/--base must be non-empty and --branch must match ${WORKTREE_AGENT_BRANCH_PATTERN} (accepts both agent-<id> and worktree-agent-<id> namespaces; got branch="${branch}"). Fix the field and re-run.`,
entry: null, entry: null,
manifest: null, manifest: null,
}; };

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -16,7 +16,7 @@
"agents/gsd-domain-researcher.agent.md": "d603239b3e9fe428", "agents/gsd-domain-researcher.agent.md": "d603239b3e9fe428",
"agents/gsd-eval-auditor.agent.md": "3c03009564de55c8", "agents/gsd-eval-auditor.agent.md": "3c03009564de55c8",
"agents/gsd-eval-planner.agent.md": "14751876fc2b5f16", "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-framework-selector.agent.md": "cafeec0b3489be45",
"agents/gsd-integration-checker.agent.md": "30439b804927acc7", "agents/gsd-integration-checker.agent.md": "30439b804927acc7",
"agents/gsd-intel-updater.agent.md": "238c1a886f35a25c", "agents/gsd-intel-updater.agent.md": "238c1a886f35a25c",
@@ -162,7 +162,7 @@
"gsd-core/references/verification-patterns.md": "a8e13ea38218638b", "gsd-core/references/verification-patterns.md": "a8e13ea38218638b",
"gsd-core/references/verify-mvp-mode.md": "534bdc7f2432903a", "gsd-core/references/verify-mvp-mode.md": "534bdc7f2432903a",
"gsd-core/references/workstream-flag.md": "225910640adbb76d", "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/references/worktree-path-safety.md": "3c8d74756f9b16a8",
"gsd-core/templates/AI-SPEC.md": "24df5fe5ba34e367", "gsd-core/templates/AI-SPEC.md": "24df5fe5ba34e367",
"gsd-core/templates/DEBUG.md": "72e93b7f650d9bae", "gsd-core/templates/DEBUG.md": "72e93b7f650d9bae",
@@ -248,13 +248,13 @@
"gsd-core/workflows/docs-update.md": "f64b067d0d729f04", "gsd-core/workflows/docs-update.md": "f64b067d0d729f04",
"gsd-core/workflows/edit-phase.md": "8667c28b22b1599f", "gsd-core/workflows/edit-phase.md": "8667c28b22b1599f",
"gsd-core/workflows/eval-review.md": "1ae2d3d3fbf72893", "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/codebase-drift-gate.md": "ca37f91f7bd6f05c",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", "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/post-merge-gate.md": "25bebed74e645109",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "dc0b96d285327b18", "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-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/explore.md": "35431c40bb1b245a",
"gsd-core/workflows/extract-learnings.md": "f34d0b1927545b18", "gsd-core/workflows/extract-learnings.md": "f34d0b1927545b18",
"gsd-core/workflows/fast.md": "66821090b6b8ed3b", "gsd-core/workflows/fast.md": "66821090b6b8ed3b",

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -24,8 +24,8 @@
"docs-update.md": 56494, "docs-update.md": 56494,
"edit-phase.md": 12927, "edit-phase.md": 12927,
"eval-review.md": 10332, "eval-review.md": 10332,
"execute-phase.md": 93368, "execute-phase.md": 93383,
"execute-plan.md": 35131, "execute-plan.md": 35143,
"explore.md": 11127, "explore.md": 11127,
"extract-learnings.md": 12893, "extract-learnings.md": 12893,
"fast.md": 7613, "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'); const scripts = codeBlocks.map(({ body }) => body).join('\n');
// Allow-list must reference the canonical Claude Code worktree-agent-<id> // Allow-list must reference the canonical Claude Code worktree-agent-<id>
// namespace via a regex assertion (grep -Eq '^worktree-agent-...'). // 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( assert.ok(
allowListRe.test(scripts), 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)', () => { 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( assert.ok(
allowListRe.test(block), 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)', () => { test('step 0 enforces positive worktree-agent-* allow-list (#2924 hardening)', () => {
const codeBlocks = extractFencedCodeBlocks(block); const codeBlocks = extractFencedCodeBlocks(block);
const scripts = codeBlocks.map(({ body }) => body).join('\n'); 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( assert.ok(
allowListRe.test(scripts), 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')) { 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"'); throw new Error('extractCwdGuardBash: sanity check failed — extracted block does not contain "git rev-parse --show-toplevel"');
} }
if (!guardBash.includes('worktree-agent-')) { if (!guardBash.includes('(worktree-)?agent-')) {
throw new Error('extractCwdGuardBash: sanity check failed — extracted block does not contain "worktree-agent-"'); throw new Error('extractCwdGuardBash: sanity check failed — extracted block does not contain "(worktree-)?agent-"');
} }
return guardBash; return guardBash;

View File

@@ -662,6 +662,16 @@ describe('planWorktreeRecordAgent', () => {
assert.equal(readBack.reason, 'empty_manifest'); 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', () => { test('fails loudly on malformed manifest JSON instead of clobbering it', () => {
const plan = planWorktreeRecordAgent('{not valid json', VALID); const plan = planWorktreeRecordAgent('{not valid json', VALID);
assert.equal(plan.ok, false); assert.equal(plan.ok, false);
@@ -749,7 +759,9 @@ describe('planWorktreeRecordAgent', () => {
describe('planWorktreeRecordAgent — fast-check parity invariant (#1298)', () => { describe('planWorktreeRecordAgent — fast-check parity invariant (#1298)', () => {
const seg = fc.stringMatching(/^[A-Za-z0-9._/-]+$/); // include '/' — the namespace allows it 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 const nonEmpty = fc.stringMatching(/^\S[\S ]*$/); // no leading whitespace, not blank
test('any writer-accepted entry round-trips through the cleanup reader unchanged', () => { 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, agentId: nonEmpty,
worktreePath: nonEmpty, worktreePath: nonEmpty,
// Any branch that does NOT match the disposable namespace. // 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, base: nonEmpty,
}), }),
(fields) => { (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) ─────────────────────────────── // ─── cmdWorktreeRecordAgent (#1298 CLI wrapper) ───────────────────────────────
describe('cmdWorktreeRecordAgent', () => { describe('cmdWorktreeRecordAgent', () => {
@@ -824,6 +909,26 @@ describe('cmdWorktreeRecordAgent', () => {
assert.match(out.join(''), /"ok": true/); 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', () => { test('exits 2 with usage when --manifest is missing', () => {
withExitCode(() => { withExitCode(() => {
const errs = []; const errs = [];
@@ -2620,10 +2725,10 @@ describe('bug #3384: adjacent worktree data-loss guards', () => {
const fragmentSource = fs.readFileSync(WORKTREE_BRANCH_CHECK_FRAGMENT, 'utf8'); const fragmentSource = fs.readFileSync(WORKTREE_BRANCH_CHECK_FRAGMENT, 'utf8');
const branchCheck = fragmentSource.indexOf('HEAD_REF=$(git symbolic-ref --quiet HEAD || echo'); 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(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. // #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('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)'); 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'); assert.ok(/\brelease\b/.test(block), 'fragment protected-ref alternation must include release');
}); });
test('fragment block positive allow-list matches ^worktree-agent- pattern', () => { test('fragment block positive allow-list matches ^(worktree-)?agent- pattern', () => {
const allowListRe = /grep\s+-Eq?\s+'\^worktree-agent-/; const allowListRe = /grep\s+-Eq?\s+'\^\(worktree-\)\?agent-/;
assert.ok(allowListRe.test(block), 'fragment block must enforce a positive allow-list matching ^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', () => { test('fragment block contains update-ref prohibition text', () => {