fix(#2350): pass --raw to config-get in every build/test gate (#2399)

Adds --raw to config-get workflow.build_command|test_command reads in the post-merge, regression, verify-phase, and audit-fix gates so an unset key is a genuinely empty string, not the literal "" — restoring the auto-detect cascade and graceful skip instead of a false exit-127 failure. Regression guard sweeps all four gate files. Fixes #2350.
This commit is contained in:
Tom Boucher
2026-07-18 01:14:45 -04:00
committed by GitHub
parent 5e52350736
commit 863a54ec82
25 changed files with 124 additions and 79 deletions

View File

@@ -0,0 +1,5 @@
---
type: Fixed
pr: 2399
---
**Build/test gates no longer report a false failure on repos with no detectable build/test tooling** — the post-merge, regression, verify-phase, and audit-fix gates read `config-get workflow.build_command`/`workflow.test_command` without `--raw`, so an unset key returned the literal 2-byte string `""` rather than empty output. The `[ -z "$CMD" ]` guard then saw a non-empty value, skipped the Makefile/Cargo/go.mod/package.json auto-detection cascade, and executed the literal `""` as a command → exit 127, misread as a build/test failure (docs-only or planning-only repos, or any repo before its first build file). All of these reads now pass `--raw`, restoring the intended "no command detected — skip" no-op. (#2350)

View File

@@ -106,7 +106,7 @@ Agent(
**b. Run tests:**
```bash
AUDIT_TEST_CMD=$(gsd_run query config-get workflow.test_command --default "" 2>/dev/null || true)
AUDIT_TEST_CMD=$(gsd_run query config-get workflow.test_command --default "" --raw 2>/dev/null || true)
if [ -z "$AUDIT_TEST_CMD" ]; then
if [ -f "Makefile" ] && grep -q "^test:" Makefile; then
AUDIT_TEST_CMD="make test"

View File

@@ -10,7 +10,7 @@ detect.
```bash
_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi
# Resolve build command: project config > Xcode > Makefile > language sniff
BUILD_CMD=$(gsd_run query config-get workflow.build_command --default "" 2>/dev/null || true)
BUILD_CMD=$(gsd_run query config-get workflow.build_command --default "" --raw 2>/dev/null || true)
if [ -z "$BUILD_CMD" ]; then
XCODEPROJ=$(find . -maxdepth 2 -name "*.xcodeproj" -not -path "*/node_modules/*" 2>/dev/null | head -1)
if [ -n "$XCODEPROJ" ]; then
@@ -64,7 +64,7 @@ fi
```bash
# Resolve test command: project config > Xcode > Makefile > language sniff
TEST_CMD=$(gsd_run query config-get workflow.test_command --default "" 2>/dev/null || true)
TEST_CMD=$(gsd_run query config-get workflow.test_command --default "" --raw 2>/dev/null || true)
if [ -z "$TEST_CMD" ]; then
XCODEPROJ=$(find . -maxdepth 2 -name "*.xcodeproj" -not -path "*/node_modules/*" 2>/dev/null | head -1)
if [ -n "$XCODEPROJ" ]; then

View File

@@ -10,7 +10,7 @@ Expects `REGRESSION_FILES` (from the prior step) in scope for the pytest branch.
```bash
_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi
# Resolve test command: project config > Makefile > language sniff
REG_TEST_CMD=$(gsd_run query config-get workflow.test_command --default "" 2>/dev/null || true)
REG_TEST_CMD=$(gsd_run query config-get workflow.test_command --default "" --raw 2>/dev/null || true)
if [ -z "$REG_TEST_CMD" ]; then
if [ -f "Makefile" ] && grep -q "^test:" Makefile; then
REG_TEST_CMD="make test"

View File

@@ -269,7 +269,7 @@ inspecting static artifacts.
```bash
# Resolve test command: project config > Makefile > language sniff
TEST_CMD=$(gsd_run query config-get workflow.test_command --default "" 2>/dev/null || true)
TEST_CMD=$(gsd_run query config-get workflow.test_command --default "" --raw 2>/dev/null || true)
if [ -z "$TEST_CMD" ]; then
if [ -f "Makefile" ] && grep -q "^test:" Makefile; then
TEST_CMD="make test"

View File

@@ -204,7 +204,7 @@
"gsd-core/workflows/add-todo.md": "e410a72c168e43c0",
"gsd-core/workflows/ai-integration-phase.md": "22f5466085c47c00",
"gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c",
"gsd-core/workflows/audit-fix.md": "3ecffffe78021e0a",
"gsd-core/workflows/audit-fix.md": "582e9a31df15dd8b",
"gsd-core/workflows/audit-milestone.md": "280cd85908dd45cb",
"gsd-core/workflows/audit-uat.md": "ea8ddd910ed16ba4",
"gsd-core/workflows/autonomous.md": "603ce2019835f00e",
@@ -238,8 +238,8 @@
"gsd-core/workflows/execute-phase.md": "a349bfdfcdf2c011",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "55d0706e80a2554a",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "9b7107b31b60a3b9",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "e0fa99178ae544f0",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "5e9635a80ca6c3a5",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "3c66870732e77709",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "dea5df2e142f66bd",
"gsd-core/workflows/explore.md": "934c00f9f216dbdb",
@@ -311,7 +311,7 @@
"gsd-core/workflows/undo.md": "6ab639d1fc7e0721",
"gsd-core/workflows/update.md": "2c58df5e21c41c31",
"gsd-core/workflows/validate-phase.md": "ae3f0180a2316fcd",
"gsd-core/workflows/verify-phase.md": "0eefbb6bb1b0bed6",
"gsd-core/workflows/verify-phase.md": "20503ec39197757b",
"gsd-core/workflows/verify-work.md": "59276d94999ee022",
"hooks/gsd-check-update-worker.js": "fa301e6366270d5f",
"hooks/gsd-check-update.js": "4617a98bf529e4c3",

View File

@@ -275,7 +275,7 @@
"gsd-core/workflows/add-todo.md": "953314cdfef56bc4",
"gsd-core/workflows/ai-integration-phase.md": "40c217869a06981f",
"gsd-core/workflows/analyze-dependencies.md": "52942af10f140717",
"gsd-core/workflows/audit-fix.md": "eedb2da4bffb7575",
"gsd-core/workflows/audit-fix.md": "ca751f6538c8f496",
"gsd-core/workflows/audit-milestone.md": "3835762c3147a927",
"gsd-core/workflows/audit-uat.md": "fcfbec501620b564",
"gsd-core/workflows/autonomous.md": "7e5683728ef33707",
@@ -309,8 +309,8 @@
"gsd-core/workflows/execute-phase.md": "42bb004d479f7706",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "4e265392b3f2ba0e",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "811b6d8489571581",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "8ccc16a6c7cf6000",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "09ea1680a375b979",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "5f24c5ad58c2518f",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "7bc87fa99a1f9b0e",
"gsd-core/workflows/explore.md": "6c04f2e658d93261",
@@ -382,7 +382,7 @@
"gsd-core/workflows/undo.md": "96d2775f008b3a85",
"gsd-core/workflows/update.md": "fd160e13f8b7e83c",
"gsd-core/workflows/validate-phase.md": "ce9890f21c6e5607",
"gsd-core/workflows/verify-phase.md": "22f18492581f1da5",
"gsd-core/workflows/verify-phase.md": "499a0ade5e21fe6f",
"gsd-core/workflows/verify-work.md": "63b3f680d8f0a6f3",
"hooks/gsd-check-update-worker.js": "cc1ef5f840f9dfc9",
"hooks/gsd-check-update.js": "7b3a7983d5f1f5d3",

View File

@@ -274,7 +274,7 @@
"gsd-core/workflows/add-todo.md": "0a0f4d718ea50bea",
"gsd-core/workflows/ai-integration-phase.md": "3503f52a7356caf0",
"gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c",
"gsd-core/workflows/audit-fix.md": "816c71b0ef2d8c1d",
"gsd-core/workflows/audit-fix.md": "b441993d57cf83bc",
"gsd-core/workflows/audit-milestone.md": "ae8605b4ecc37c0b",
"gsd-core/workflows/audit-uat.md": "1c4a02a8c1ab930f",
"gsd-core/workflows/autonomous.md": "6adf957e64518d15",
@@ -308,8 +308,8 @@
"gsd-core/workflows/execute-phase.md": "a0f26f223218812d",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "6d38bfd540030da4",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "611b2be3bd133eb1",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "016ac9c7c02b1438",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "e5d65c3a0ae0ed2a",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "ccd95645902f57af",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "e81d3476290ef292",
"gsd-core/workflows/explore.md": "95e463d4bdd6dadd",
@@ -381,7 +381,7 @@
"gsd-core/workflows/undo.md": "d759702f84e308fa",
"gsd-core/workflows/update.md": "2a59b4edf4a3c8c7",
"gsd-core/workflows/validate-phase.md": "3150904744b4a1bd",
"gsd-core/workflows/verify-phase.md": "6ae6f159be75dcdd",
"gsd-core/workflows/verify-phase.md": "05f5370a02941f39",
"gsd-core/workflows/verify-work.md": "de14acdc8e925338",
"hooks/gsd-check-update-worker.js": "a530efdb5fdc0da3",
"hooks/gsd-check-update.js": "25cde66a12d6b886",

View File

@@ -203,7 +203,7 @@
"gsd-core/workflows/add-todo.md": "2c5176263ad4ae8f",
"gsd-core/workflows/ai-integration-phase.md": "a898d99b8d844215",
"gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c",
"gsd-core/workflows/audit-fix.md": "eedb2da4bffb7575",
"gsd-core/workflows/audit-fix.md": "ca751f6538c8f496",
"gsd-core/workflows/audit-milestone.md": "9f8ec364e58d5710",
"gsd-core/workflows/audit-uat.md": "e11db0d74c2a7405",
"gsd-core/workflows/autonomous.md": "722397c04272dfaa",
@@ -237,8 +237,8 @@
"gsd-core/workflows/execute-phase.md": "a5ca7da9e551bf4c",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "facb0e816d87a0c7",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "811b6d8489571581",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "8ccc16a6c7cf6000",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "09ea1680a375b979",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "5f24c5ad58c2518f",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "2cddec7d1b197e48",
"gsd-core/workflows/explore.md": "b9eea1bac358c9ce",
@@ -310,7 +310,7 @@
"gsd-core/workflows/undo.md": "791e0bf96d9a057f",
"gsd-core/workflows/update.md": "f9e7d8a760d0d3c8",
"gsd-core/workflows/validate-phase.md": "7a3db6ab8ce9f380",
"gsd-core/workflows/verify-phase.md": "e0957e153788a222",
"gsd-core/workflows/verify-phase.md": "b321551a82bc7c2f",
"gsd-core/workflows/verify-work.md": "c8ffee621e7319de",
"hooks/gsd-check-update-worker.js": "a530efdb5fdc0da3",
"hooks/gsd-check-update.js": "25cde66a12d6b886",

View File

@@ -207,7 +207,7 @@
"gsd-core/workflows/add-todo.md": "aa89018230c87f13",
"gsd-core/workflows/ai-integration-phase.md": "5159c6bdf102f74b",
"gsd-core/workflows/analyze-dependencies.md": "52942af10f140717",
"gsd-core/workflows/audit-fix.md": "9bb427cd3b4075d5",
"gsd-core/workflows/audit-fix.md": "d6a41fc6879424f8",
"gsd-core/workflows/audit-milestone.md": "202b726748604c93",
"gsd-core/workflows/audit-uat.md": "1fb7b2ab9d587c8f",
"gsd-core/workflows/autonomous.md": "cc5217b1b2238a4c",
@@ -241,8 +241,8 @@
"gsd-core/workflows/execute-phase.md": "7cafa358f645936a",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "67ebc93f51968cb6",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "82e6cfe1e1b1ec0e",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "36b463d72d3e11c5",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "27505ecd7d5b4e57",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "91eac50d2e1f5a2f",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "7f186055a0246932",
"gsd-core/workflows/explore.md": "e83af8ceae314cf9",
@@ -314,7 +314,7 @@
"gsd-core/workflows/undo.md": "96d2775f008b3a85",
"gsd-core/workflows/update.md": "165beec33490bd28",
"gsd-core/workflows/validate-phase.md": "706627c190ae11aa",
"gsd-core/workflows/verify-phase.md": "a4f918c92c927268",
"gsd-core/workflows/verify-phase.md": "377fa009ccf04cbe",
"gsd-core/workflows/verify-work.md": "3fb282f2bce34a79",
"scripts/changeset/README.md": "86ff89331dfd94b2",
"scripts/changeset/cli.cjs": "68f92a344b199271",

View File

@@ -275,7 +275,7 @@
"gsd-core/workflows/add-todo.md": "953314cdfef56bc4",
"gsd-core/workflows/ai-integration-phase.md": "40c217869a06981f",
"gsd-core/workflows/analyze-dependencies.md": "52942af10f140717",
"gsd-core/workflows/audit-fix.md": "eedb2da4bffb7575",
"gsd-core/workflows/audit-fix.md": "ca751f6538c8f496",
"gsd-core/workflows/audit-milestone.md": "3835762c3147a927",
"gsd-core/workflows/audit-uat.md": "fcfbec501620b564",
"gsd-core/workflows/autonomous.md": "7e5683728ef33707",
@@ -309,8 +309,8 @@
"gsd-core/workflows/execute-phase.md": "4d6f9e033792619a",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "4e265392b3f2ba0e",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "811b6d8489571581",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "8ccc16a6c7cf6000",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "09ea1680a375b979",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "5f24c5ad58c2518f",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "90cfc1e6e677d43f",
"gsd-core/workflows/explore.md": "6c04f2e658d93261",
@@ -382,7 +382,7 @@
"gsd-core/workflows/undo.md": "96d2775f008b3a85",
"gsd-core/workflows/update.md": "5ff1f77222977648",
"gsd-core/workflows/validate-phase.md": "ce9890f21c6e5607",
"gsd-core/workflows/verify-phase.md": "22f18492581f1da5",
"gsd-core/workflows/verify-phase.md": "499a0ade5e21fe6f",
"gsd-core/workflows/verify-work.md": "63b3f680d8f0a6f3",
"hooks/gsd-check-update-worker.js": "bdc9324a2f080ddd",
"hooks/gsd-check-update.js": "b7669f605631e506",

View File

@@ -310,7 +310,7 @@
"gsd-core/workflows/add-todo.md": "776e554602e3d1b7",
"gsd-core/workflows/ai-integration-phase.md": "1dfa15d8f28c022d",
"gsd-core/workflows/analyze-dependencies.md": "f799abc00907377f",
"gsd-core/workflows/audit-fix.md": "eedb2da4bffb7575",
"gsd-core/workflows/audit-fix.md": "ca751f6538c8f496",
"gsd-core/workflows/audit-milestone.md": "5f362cead97ceaca",
"gsd-core/workflows/audit-uat.md": "2564078edb15b5e9",
"gsd-core/workflows/autonomous.md": "92f08626d4aea668",
@@ -344,8 +344,8 @@
"gsd-core/workflows/execute-phase.md": "8176e734cd927891",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "f4cacd27d37bac65",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "811b6d8489571581",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "8ccc16a6c7cf6000",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "09ea1680a375b979",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "5f24c5ad58c2518f",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "89dda78cf3c1f1b7",
"gsd-core/workflows/explore.md": "2ef10d17c8864a04",
@@ -417,7 +417,7 @@
"gsd-core/workflows/undo.md": "5ff7d63b0a2f46d5",
"gsd-core/workflows/update.md": "5c35c0ec0f462ea6",
"gsd-core/workflows/validate-phase.md": "6d6d10fe53f6b1d0",
"gsd-core/workflows/verify-phase.md": "2e12c3cb97a9122a",
"gsd-core/workflows/verify-phase.md": "9ceb46a60cb6608b",
"gsd-core/workflows/verify-work.md": "5b348e73fc0d0829",
"hooks/gsd-check-update.js": "ef48957eb6ac6a10",
"hooks/gsd-context-monitor.js": "ec76b23f45d29b02",

View File

@@ -205,7 +205,7 @@
"gsd-core/workflows/add-todo.md": "f86f4efa25a5d0d6",
"gsd-core/workflows/ai-integration-phase.md": "ef0c2474cee76b00",
"gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c",
"gsd-core/workflows/audit-fix.md": "9fdfe8a7fbcd1417",
"gsd-core/workflows/audit-fix.md": "646fc39302300887",
"gsd-core/workflows/audit-milestone.md": "258e4dfd259ab13f",
"gsd-core/workflows/audit-uat.md": "5ea0e30548ed0933",
"gsd-core/workflows/autonomous.md": "dd972ddde9663295",
@@ -239,8 +239,8 @@
"gsd-core/workflows/execute-phase.md": "75bc8795af213c29",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "63b712920f21a40f",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "1b73ab2fc47c9dbf",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "b26edeee455481a7",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "1963079fe27412c6",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "bce45e41bc6802e8",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "66879e62abcc33ae",
"gsd-core/workflows/explore.md": "5fd91a8510e1114b",
@@ -312,7 +312,7 @@
"gsd-core/workflows/undo.md": "ba1ef7aa80bef6bd",
"gsd-core/workflows/update.md": "f444a7cfcd246cfb",
"gsd-core/workflows/validate-phase.md": "e7aa423ebdd6a230",
"gsd-core/workflows/verify-phase.md": "5c72780e34214e27",
"gsd-core/workflows/verify-phase.md": "dd76fff851c66df5",
"gsd-core/workflows/verify-work.md": "c966971a3cbd1d71",
"hooks/gsd-session.json": "3382597f61e3a559",
"scripts/changeset/README.md": "86ff89331dfd94b2",

View File

@@ -275,7 +275,7 @@
"gsd-core/workflows/add-todo.md": "1ee0525664fb062f",
"gsd-core/workflows/ai-integration-phase.md": "b79f320d59a68773",
"gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c",
"gsd-core/workflows/audit-fix.md": "eedb2da4bffb7575",
"gsd-core/workflows/audit-fix.md": "ca751f6538c8f496",
"gsd-core/workflows/audit-milestone.md": "9f8ec364e58d5710",
"gsd-core/workflows/audit-uat.md": "e11db0d74c2a7405",
"gsd-core/workflows/autonomous.md": "4b20eda9a0b587ce",
@@ -309,8 +309,8 @@
"gsd-core/workflows/execute-phase.md": "f67b5d55c3e7dc4b",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "facb0e816d87a0c7",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "811b6d8489571581",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "8ccc16a6c7cf6000",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "09ea1680a375b979",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "5f24c5ad58c2518f",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "a57ce521a92348ef",
"gsd-core/workflows/explore.md": "b9eea1bac358c9ce",
@@ -382,7 +382,7 @@
"gsd-core/workflows/undo.md": "18dec684fb1076f9",
"gsd-core/workflows/update.md": "23e294ba707c3580",
"gsd-core/workflows/validate-phase.md": "d03a94b7b807be12",
"gsd-core/workflows/verify-phase.md": "e0957e153788a222",
"gsd-core/workflows/verify-phase.md": "b321551a82bc7c2f",
"gsd-core/workflows/verify-work.md": "e7e7e900c4874490",
"hooks/gsd-cursor-post-tool.js": "019d503aee8b4a3f",
"hooks/gsd-cursor-pre-tool.js": "fe274720781fcbb5",

View File

@@ -204,7 +204,7 @@
"gsd-core/workflows/add-todo.md": "8ba173153be63a40",
"gsd-core/workflows/ai-integration-phase.md": "ddab2912d025db65",
"gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c",
"gsd-core/workflows/audit-fix.md": "2f21bd575bcedaf1",
"gsd-core/workflows/audit-fix.md": "bf84c94d2ccdacbf",
"gsd-core/workflows/audit-milestone.md": "b96a78c6bd2e7690",
"gsd-core/workflows/audit-uat.md": "86d9131fccabf2ad",
"gsd-core/workflows/autonomous.md": "853dd93846332743",
@@ -238,8 +238,8 @@
"gsd-core/workflows/execute-phase.md": "3205cca9fe364951",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "14a27cc0828f59d3",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "26ee34c543926402",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "c9ad17d6cc6dfe45",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "5a78d5dfea6a911a",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "5d3a54df40320dbf",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "1ec347a324814b1d",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "274b22f8e53c88d1",
"gsd-core/workflows/explore.md": "d931b4d85a74c795",
@@ -311,7 +311,7 @@
"gsd-core/workflows/undo.md": "791e0bf96d9a057f",
"gsd-core/workflows/update.md": "7499bb4cb2a3ce6f",
"gsd-core/workflows/validate-phase.md": "24be83176c7db9f9",
"gsd-core/workflows/verify-phase.md": "5c8d1305b47fbef4",
"gsd-core/workflows/verify-phase.md": "d2a254cc06eb2e84",
"gsd-core/workflows/verify-work.md": "3847a7ccd4bd88a8",
"hooks/gsd-check-update-worker.js": "7989cc2bedd1138d",
"hooks/gsd-check-update.js": "25f5ad726f76fc11",

View File

@@ -275,7 +275,7 @@
"gsd-core/workflows/add-todo.md": "31bc520d77b14139",
"gsd-core/workflows/ai-integration-phase.md": "c85c6afdc64f0da6",
"gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c",
"gsd-core/workflows/audit-fix.md": "eedb2da4bffb7575",
"gsd-core/workflows/audit-fix.md": "ca751f6538c8f496",
"gsd-core/workflows/audit-milestone.md": "9f8ec364e58d5710",
"gsd-core/workflows/audit-uat.md": "e11db0d74c2a7405",
"gsd-core/workflows/autonomous.md": "73f429f7472c9949",
@@ -309,8 +309,8 @@
"gsd-core/workflows/execute-phase.md": "4babf365129ad14b",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "facb0e816d87a0c7",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "811b6d8489571581",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "8ccc16a6c7cf6000",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "09ea1680a375b979",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "5f24c5ad58c2518f",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "21c1dc158588803a",
"gsd-core/workflows/explore.md": "14242d36d4822df6",
@@ -382,7 +382,7 @@
"gsd-core/workflows/undo.md": "7cd2153f8b15e30d",
"gsd-core/workflows/update.md": "07dc2fba78ad1865",
"gsd-core/workflows/validate-phase.md": "52b9fa8a9533b444",
"gsd-core/workflows/verify-phase.md": "e0957e153788a222",
"gsd-core/workflows/verify-phase.md": "b321551a82bc7c2f",
"gsd-core/workflows/verify-work.md": "9fc717845828c6e3",
"kilo.json": "13151e97ff23c1aa",
"plugins/gsd-core.js": "931ca839dc9eb7f1",

View File

@@ -268,7 +268,7 @@
"gsd-core/workflows/add-todo.md": "953314cdfef56bc4",
"gsd-core/workflows/ai-integration-phase.md": "40c217869a06981f",
"gsd-core/workflows/analyze-dependencies.md": "52942af10f140717",
"gsd-core/workflows/audit-fix.md": "eedb2da4bffb7575",
"gsd-core/workflows/audit-fix.md": "ca751f6538c8f496",
"gsd-core/workflows/audit-milestone.md": "3835762c3147a927",
"gsd-core/workflows/audit-uat.md": "fcfbec501620b564",
"gsd-core/workflows/autonomous.md": "7e5683728ef33707",
@@ -302,8 +302,8 @@
"gsd-core/workflows/execute-phase.md": "2629630eb4a94a6b",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "4e265392b3f2ba0e",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "811b6d8489571581",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "8ccc16a6c7cf6000",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "09ea1680a375b979",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "5f24c5ad58c2518f",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "3c4310c2dd9ef0ad",
"gsd-core/workflows/explore.md": "6c04f2e658d93261",
@@ -375,7 +375,7 @@
"gsd-core/workflows/undo.md": "96d2775f008b3a85",
"gsd-core/workflows/update.md": "6718e0632bba26ca",
"gsd-core/workflows/validate-phase.md": "ce9890f21c6e5607",
"gsd-core/workflows/verify-phase.md": "22f18492581f1da5",
"gsd-core/workflows/verify-phase.md": "499a0ade5e21fe6f",
"gsd-core/workflows/verify-work.md": "63b3f680d8f0a6f3",
"scripts/changeset/README.md": "86ff89331dfd94b2",
"scripts/changeset/cli.cjs": "68f92a344b199271",

View File

@@ -275,7 +275,7 @@
"gsd-core/workflows/add-todo.md": "36b6d7fec9631ec7",
"gsd-core/workflows/ai-integration-phase.md": "90e5f97018715b18",
"gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c",
"gsd-core/workflows/audit-fix.md": "2871c5d0a4b671fa",
"gsd-core/workflows/audit-fix.md": "20d2c2a6c49e750b",
"gsd-core/workflows/audit-milestone.md": "8bd0b730de08d1a8",
"gsd-core/workflows/audit-uat.md": "c800099fab1e1c1b",
"gsd-core/workflows/autonomous.md": "6cb0c014f5f56965",
@@ -309,8 +309,8 @@
"gsd-core/workflows/execute-phase.md": "895f8e910b32ebd4",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "1804215577f1ad35",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "baa2c401af10a80a",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "b86ca98268dd3705",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "01c2fe9e5bcb57be",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "86b8a7f50115162f",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "cdd49ac15770c9d1",
"gsd-core/workflows/explore.md": "7f5f9231cfd3089b",
@@ -382,7 +382,7 @@
"gsd-core/workflows/undo.md": "0bba5e7f6196c894",
"gsd-core/workflows/update.md": "71b6cd852f38b4bc",
"gsd-core/workflows/validate-phase.md": "434d9927c65f2bba",
"gsd-core/workflows/verify-phase.md": "126be1d026900102",
"gsd-core/workflows/verify-phase.md": "763485e1b7547cdb",
"gsd-core/workflows/verify-work.md": "ae07b3fa8b6f864e",
"hooks/gsd-check-update-worker.js": "385fb7c67810baf6",
"hooks/gsd-check-update.js": "4549451414ffa7d7",

View File

@@ -171,7 +171,7 @@
"gsd-core/workflows/add-todo.md": "953314cdfef56bc4",
"gsd-core/workflows/ai-integration-phase.md": "40c217869a06981f",
"gsd-core/workflows/analyze-dependencies.md": "52942af10f140717",
"gsd-core/workflows/audit-fix.md": "eedb2da4bffb7575",
"gsd-core/workflows/audit-fix.md": "ca751f6538c8f496",
"gsd-core/workflows/audit-milestone.md": "3835762c3147a927",
"gsd-core/workflows/audit-uat.md": "fcfbec501620b564",
"gsd-core/workflows/autonomous.md": "7e5683728ef33707",
@@ -205,8 +205,8 @@
"gsd-core/workflows/execute-phase.md": "353711104c33d19f",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "4e265392b3f2ba0e",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "811b6d8489571581",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "8ccc16a6c7cf6000",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "09ea1680a375b979",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "5f24c5ad58c2518f",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "d797619290e91120",
"gsd-core/workflows/explore.md": "6c04f2e658d93261",
@@ -278,7 +278,7 @@
"gsd-core/workflows/undo.md": "96d2775f008b3a85",
"gsd-core/workflows/update.md": "7e69d278375a2493",
"gsd-core/workflows/validate-phase.md": "ce9890f21c6e5607",
"gsd-core/workflows/verify-phase.md": "22f18492581f1da5",
"gsd-core/workflows/verify-phase.md": "499a0ade5e21fe6f",
"gsd-core/workflows/verify-work.md": "63b3f680d8f0a6f3",
"hooks/gsd-check-update-worker.js": "55376b5b9335a580",
"hooks/gsd-check-update.js": "a89562537a41f83d",

View File

@@ -204,7 +204,7 @@
"gsd-core/workflows/add-todo.md": "83426131a56b8e77",
"gsd-core/workflows/ai-integration-phase.md": "afdc7c15f03a95fc",
"gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c",
"gsd-core/workflows/audit-fix.md": "aaa1b74e001322b6",
"gsd-core/workflows/audit-fix.md": "fe2e5a89d158f9eb",
"gsd-core/workflows/audit-milestone.md": "78dbc1e8c4499d7d",
"gsd-core/workflows/audit-uat.md": "97d441d07e7972b3",
"gsd-core/workflows/autonomous.md": "3014ff90115f0daf",
@@ -238,8 +238,8 @@
"gsd-core/workflows/execute-phase.md": "840ce6d4ff582aed",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "36af8d91e4ae8b9c",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "98db1ba4c39cd784",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "56fc78db4de210df",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "94765e9fc206efbf",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "463e4e1b57b22b24",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "79410db4a6bb5a46",
"gsd-core/workflows/explore.md": "e1a83a8982532e5b",
@@ -311,7 +311,7 @@
"gsd-core/workflows/undo.md": "791e0bf96d9a057f",
"gsd-core/workflows/update.md": "b34cb866152d4de3",
"gsd-core/workflows/validate-phase.md": "dfb9bd178ee1b67b",
"gsd-core/workflows/verify-phase.md": "0dc52b9e629a5f5a",
"gsd-core/workflows/verify-phase.md": "683719ec1ee82e38",
"gsd-core/workflows/verify-work.md": "3355ddc14f052fff",
"hooks/gsd-check-update-worker.js": "4bb354044e0dff91",
"hooks/gsd-check-update.js": "d2065cb3e725a42a",

View File

@@ -204,7 +204,7 @@
"gsd-core/workflows/add-todo.md": "fefa923ed596225f",
"gsd-core/workflows/ai-integration-phase.md": "d469eb120e52de0f",
"gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c",
"gsd-core/workflows/audit-fix.md": "76607add3257cb37",
"gsd-core/workflows/audit-fix.md": "2d4d783caf51f781",
"gsd-core/workflows/audit-milestone.md": "ebec95af8f68f2ed",
"gsd-core/workflows/audit-uat.md": "6e768b1c208a787a",
"gsd-core/workflows/autonomous.md": "c482645c5d1ead46",
@@ -238,8 +238,8 @@
"gsd-core/workflows/execute-phase.md": "cadbd19b2a828111",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "c985a30317a1aa6b",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "0a9e915170c7121c",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "4b00ef3484a84954",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "06f115a379580094",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "9d58274a5a1b14f5",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "feae1e61007feab2",
"gsd-core/workflows/explore.md": "8a5437aa0c239c38",
@@ -311,7 +311,7 @@
"gsd-core/workflows/undo.md": "59b8baa54efc4110",
"gsd-core/workflows/update.md": "1f935251fca1f276",
"gsd-core/workflows/validate-phase.md": "58fd1a0a679d7115",
"gsd-core/workflows/verify-phase.md": "a151ed36eb51813b",
"gsd-core/workflows/verify-phase.md": "40047a62ab2da6b2",
"gsd-core/workflows/verify-work.md": "dde2a42a56c27c4e",
"scripts/changeset/README.md": "86ff89331dfd94b2",
"scripts/changeset/cli.cjs": "68f92a344b199271",

View File

@@ -204,7 +204,7 @@
"gsd-core/workflows/add-todo.md": "50d17053c6cfbc31",
"gsd-core/workflows/ai-integration-phase.md": "8948988717506320",
"gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c",
"gsd-core/workflows/audit-fix.md": "aa052e15623d759d",
"gsd-core/workflows/audit-fix.md": "fe4d636f2dca6d74",
"gsd-core/workflows/audit-milestone.md": "868db5a8f5d55040",
"gsd-core/workflows/audit-uat.md": "d496e39402e160de",
"gsd-core/workflows/autonomous.md": "fe7bb7c978f305a2",
@@ -238,8 +238,8 @@
"gsd-core/workflows/execute-phase.md": "46a363f3f33cc596",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "47ae5482f8e64100",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "15bca39a75c664be",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "02324a66cb42fae3",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "003c6a0f21a4aa61",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "e469e777fb8e7fbb",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "403c53e3148033a3",
"gsd-core/workflows/explore.md": "04e461ff8159a24e",
@@ -311,7 +311,7 @@
"gsd-core/workflows/undo.md": "18dec684fb1076f9",
"gsd-core/workflows/update.md": "79aaf4b8f1f83045",
"gsd-core/workflows/validate-phase.md": "bf16fd7ff71286b2",
"gsd-core/workflows/verify-phase.md": "f961cdb3ef03ff05",
"gsd-core/workflows/verify-phase.md": "8b7122e986853576",
"gsd-core/workflows/verify-work.md": "cce8ae44b30957f1",
"hooks/gsd-windsurf-pre-command.js": "7467a8a63e354aad",
"hooks/gsd-windsurf-pre-write.js": "1c8a776d7ae2dcce",

View File

@@ -275,7 +275,7 @@
"gsd-core/workflows/add-todo.md": "953314cdfef56bc4",
"gsd-core/workflows/ai-integration-phase.md": "40c217869a06981f",
"gsd-core/workflows/analyze-dependencies.md": "52942af10f140717",
"gsd-core/workflows/audit-fix.md": "eedb2da4bffb7575",
"gsd-core/workflows/audit-fix.md": "ca751f6538c8f496",
"gsd-core/workflows/audit-milestone.md": "3835762c3147a927",
"gsd-core/workflows/audit-uat.md": "fcfbec501620b564",
"gsd-core/workflows/autonomous.md": "7e5683728ef33707",
@@ -309,8 +309,8 @@
"gsd-core/workflows/execute-phase.md": "4bd16cf990e3ee63",
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "4e265392b3f2ba0e",
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "811b6d8489571581",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "8ccc16a6c7cf6000",
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "09ea1680a375b979",
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "5f24c5ad58c2518f",
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
"gsd-core/workflows/execute-plan.md": "4614bb2145a7f737",
"gsd-core/workflows/explore.md": "6c04f2e658d93261",
@@ -382,7 +382,7 @@
"gsd-core/workflows/undo.md": "96d2775f008b3a85",
"gsd-core/workflows/update.md": "dc580dee13f881a6",
"gsd-core/workflows/validate-phase.md": "ce9890f21c6e5607",
"gsd-core/workflows/verify-phase.md": "22f18492581f1da5",
"gsd-core/workflows/verify-phase.md": "499a0ade5e21fe6f",
"gsd-core/workflows/verify-work.md": "63b3f680d8f0a6f3",
"scripts/changeset/README.md": "86ff89331dfd94b2",
"scripts/changeset/cli.cjs": "68f92a344b199271",

View File

@@ -91,3 +91,43 @@ describe('#1857: test gates normalize to one-shot and bound with a timeout', ()
}
});
});
// #2350: `config-get KEY --default ""` WITHOUT `--raw` prints the JSON-encoded
// empty string (the 2-byte literal `""`) for an unset key, so a `[ -z "$CMD" ]`
// guard sees a non-empty string, SKIPS the whole Makefile/Cargo/go/npm/…
// auto-detection cascade, and runs the literal `""` as a command → exit 127,
// reported as a false build/test failure on any repo with no override and no
// detectable tooling (docs-only / planning-only repos, or any repo before its
// first build file). Every gate that resolves a build/test command this way MUST
// pass `--raw` so an unset key is a genuinely empty bash string the `-z` guard
// catches. This is a defect CLASS — post-merge-gate.md was the reported instance,
// but regression-gate.md, verify-phase.md, and audit-fix.md shared it, so the
// guard sweeps all of them (a single-file check gave false confidence). config-get's
// own `--raw` behaviour is covered in config-get-default.test.cjs.
describe('#2350: every gate resolves build/test commands with --raw', () => {
// Each gate file that reads workflow.build_command / workflow.test_command to
// build a shell command it then runs. Add new gates here as they appear.
const GATE_FILES = [
['post-merge gate', POST_MERGE_GATE],
['regression gate', REGRESSION_GATE],
['verify-phase gate', VERIFY_PHASE],
['audit-fix gate', AUDIT_FIX],
];
for (const [label, file] of GATE_FILES) {
test(`${label}: no build/test_command config-get line is left without --raw`, () => {
const lines = read(file)
.split('\n')
.filter((l) => /config-get\s+workflow\.(build|test)_command\s+--default\s+""/.test(l));
// The gate must actually resolve a command this way (guards against the file
// being renamed/refactored out from under this test without notice).
assert.ok(lines.length > 0, `${label} (${path.basename(file)}) should resolve a build/test command via config-get`);
const offending = lines.filter((l) => !/--raw/.test(l));
assert.deepStrictEqual(
offending,
[],
`${label}: every build/test_command config-get must pass --raw so an unset key is empty, not the literal ""; offending: ${offending.join(' | ')}`,
);
});
}
});

View File

@@ -5,7 +5,7 @@
"add-todo.md": 10734,
"ai-integration-phase.md": 14805,
"analyze-dependencies.md": 3887,
"audit-fix.md": 11717,
"audit-fix.md": 11723,
"audit-milestone.md": 18448,
"audit-uat.md": 7469,
"autonomous.md": 42474,
@@ -88,6 +88,6 @@
"undo.md": 10431,
"update.md": 20914,
"validate-phase.md": 10849,
"verify-phase.md": 40923,
"verify-phase.md": 40929,
"verify-work.md": 40247
}