From 863a54ec828c5f2ad0da4bdf7d00d81c5406b884 Mon Sep 17 00:00:00 2001 From: Tom Boucher Date: Sat, 18 Jul 2026 01:14:45 -0400 Subject: [PATCH] fix(#2350): pass --raw to config-get in every build/test gate (#2399) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- .changeset/vivid-badgers-gather.md | 5 +++ gsd-core/workflows/audit-fix.md | 2 +- .../execute-phase/steps/post-merge-gate.md | 4 +- .../execute-phase/steps/regression-gate.md | 2 +- gsd-core/workflows/verify-phase.md | 2 +- .../golden-install-parity/antigravity.json | 8 ++-- .../golden-install-parity/augment.json | 8 ++-- .../golden-install-parity/claude-local.json | 8 ++-- .../golden-install-parity/claude.json | 8 ++-- .../fixtures/golden-install-parity/cline.json | 8 ++-- .../golden-install-parity/codebuddy.json | 8 ++-- .../fixtures/golden-install-parity/codex.json | 8 ++-- .../golden-install-parity/copilot.json | 8 ++-- .../golden-install-parity/cursor.json | 8 ++-- .../golden-install-parity/hermes.json | 8 ++-- .../fixtures/golden-install-parity/kilo.json | 8 ++-- .../fixtures/golden-install-parity/kimi.json | 8 ++-- .../golden-install-parity/opencode.json | 8 ++-- tests/fixtures/golden-install-parity/pi.json | 8 ++-- .../fixtures/golden-install-parity/qwen.json | 8 ++-- .../fixtures/golden-install-parity/trae.json | 8 ++-- .../golden-install-parity/windsurf.json | 8 ++-- .../fixtures/golden-install-parity/zcode.json | 8 ++-- tests/test-gate-watch-mode.test.cjs | 40 +++++++++++++++++++ tests/workflow-size-baseline.json | 4 +- 25 files changed, 124 insertions(+), 79 deletions(-) create mode 100644 .changeset/vivid-badgers-gather.md diff --git a/.changeset/vivid-badgers-gather.md b/.changeset/vivid-badgers-gather.md new file mode 100644 index 000000000..5c8570fb4 --- /dev/null +++ b/.changeset/vivid-badgers-gather.md @@ -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) diff --git a/gsd-core/workflows/audit-fix.md b/gsd-core/workflows/audit-fix.md index 4dbb21395..0694b8a5a 100644 --- a/gsd-core/workflows/audit-fix.md +++ b/gsd-core/workflows/audit-fix.md @@ -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" diff --git a/gsd-core/workflows/execute-phase/steps/post-merge-gate.md b/gsd-core/workflows/execute-phase/steps/post-merge-gate.md index 68f4e0ce6..5b3772f18 100644 --- a/gsd-core/workflows/execute-phase/steps/post-merge-gate.md +++ b/gsd-core/workflows/execute-phase/steps/post-merge-gate.md @@ -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 diff --git a/gsd-core/workflows/execute-phase/steps/regression-gate.md b/gsd-core/workflows/execute-phase/steps/regression-gate.md index 5a26c3d62..f31028936 100644 --- a/gsd-core/workflows/execute-phase/steps/regression-gate.md +++ b/gsd-core/workflows/execute-phase/steps/regression-gate.md @@ -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" diff --git a/gsd-core/workflows/verify-phase.md b/gsd-core/workflows/verify-phase.md index eeeccf447..a4729cf55 100644 --- a/gsd-core/workflows/verify-phase.md +++ b/gsd-core/workflows/verify-phase.md @@ -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" diff --git a/tests/fixtures/golden-install-parity/antigravity.json b/tests/fixtures/golden-install-parity/antigravity.json index 3230195e3..9f009f92d 100644 --- a/tests/fixtures/golden-install-parity/antigravity.json +++ b/tests/fixtures/golden-install-parity/antigravity.json @@ -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", diff --git a/tests/fixtures/golden-install-parity/augment.json b/tests/fixtures/golden-install-parity/augment.json index cddb0b4fb..a48446310 100644 --- a/tests/fixtures/golden-install-parity/augment.json +++ b/tests/fixtures/golden-install-parity/augment.json @@ -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", diff --git a/tests/fixtures/golden-install-parity/claude-local.json b/tests/fixtures/golden-install-parity/claude-local.json index 9bf48e554..68536223f 100644 --- a/tests/fixtures/golden-install-parity/claude-local.json +++ b/tests/fixtures/golden-install-parity/claude-local.json @@ -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", diff --git a/tests/fixtures/golden-install-parity/claude.json b/tests/fixtures/golden-install-parity/claude.json index 53303f102..29a38707e 100644 --- a/tests/fixtures/golden-install-parity/claude.json +++ b/tests/fixtures/golden-install-parity/claude.json @@ -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", diff --git a/tests/fixtures/golden-install-parity/cline.json b/tests/fixtures/golden-install-parity/cline.json index 0a491f5e4..5b66305c2 100644 --- a/tests/fixtures/golden-install-parity/cline.json +++ b/tests/fixtures/golden-install-parity/cline.json @@ -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", diff --git a/tests/fixtures/golden-install-parity/codebuddy.json b/tests/fixtures/golden-install-parity/codebuddy.json index b0d1cb42b..d0b80a49e 100644 --- a/tests/fixtures/golden-install-parity/codebuddy.json +++ b/tests/fixtures/golden-install-parity/codebuddy.json @@ -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", diff --git a/tests/fixtures/golden-install-parity/codex.json b/tests/fixtures/golden-install-parity/codex.json index 1adb14429..cd77bb4bf 100644 --- a/tests/fixtures/golden-install-parity/codex.json +++ b/tests/fixtures/golden-install-parity/codex.json @@ -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", diff --git a/tests/fixtures/golden-install-parity/copilot.json b/tests/fixtures/golden-install-parity/copilot.json index d42222575..93063cfee 100644 --- a/tests/fixtures/golden-install-parity/copilot.json +++ b/tests/fixtures/golden-install-parity/copilot.json @@ -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", diff --git a/tests/fixtures/golden-install-parity/cursor.json b/tests/fixtures/golden-install-parity/cursor.json index a3b4c9fe5..672977db8 100644 --- a/tests/fixtures/golden-install-parity/cursor.json +++ b/tests/fixtures/golden-install-parity/cursor.json @@ -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", diff --git a/tests/fixtures/golden-install-parity/hermes.json b/tests/fixtures/golden-install-parity/hermes.json index bb154b18a..733fee395 100644 --- a/tests/fixtures/golden-install-parity/hermes.json +++ b/tests/fixtures/golden-install-parity/hermes.json @@ -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", diff --git a/tests/fixtures/golden-install-parity/kilo.json b/tests/fixtures/golden-install-parity/kilo.json index 1e1f8c8fb..a03c1af36 100644 --- a/tests/fixtures/golden-install-parity/kilo.json +++ b/tests/fixtures/golden-install-parity/kilo.json @@ -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", diff --git a/tests/fixtures/golden-install-parity/kimi.json b/tests/fixtures/golden-install-parity/kimi.json index 7060baec3..a5e446a8a 100644 --- a/tests/fixtures/golden-install-parity/kimi.json +++ b/tests/fixtures/golden-install-parity/kimi.json @@ -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", diff --git a/tests/fixtures/golden-install-parity/opencode.json b/tests/fixtures/golden-install-parity/opencode.json index dcd50523a..b24ca55ac 100644 --- a/tests/fixtures/golden-install-parity/opencode.json +++ b/tests/fixtures/golden-install-parity/opencode.json @@ -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", diff --git a/tests/fixtures/golden-install-parity/pi.json b/tests/fixtures/golden-install-parity/pi.json index 542d25d15..4ac403d0d 100644 --- a/tests/fixtures/golden-install-parity/pi.json +++ b/tests/fixtures/golden-install-parity/pi.json @@ -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", diff --git a/tests/fixtures/golden-install-parity/qwen.json b/tests/fixtures/golden-install-parity/qwen.json index 0502e9cb8..12892cb7c 100644 --- a/tests/fixtures/golden-install-parity/qwen.json +++ b/tests/fixtures/golden-install-parity/qwen.json @@ -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", diff --git a/tests/fixtures/golden-install-parity/trae.json b/tests/fixtures/golden-install-parity/trae.json index af5a9ace6..bbbecfd7e 100644 --- a/tests/fixtures/golden-install-parity/trae.json +++ b/tests/fixtures/golden-install-parity/trae.json @@ -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", diff --git a/tests/fixtures/golden-install-parity/windsurf.json b/tests/fixtures/golden-install-parity/windsurf.json index 425f19d18..18feb7adb 100644 --- a/tests/fixtures/golden-install-parity/windsurf.json +++ b/tests/fixtures/golden-install-parity/windsurf.json @@ -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", diff --git a/tests/fixtures/golden-install-parity/zcode.json b/tests/fixtures/golden-install-parity/zcode.json index 5c816ff31..fb88e1a66 100644 --- a/tests/fixtures/golden-install-parity/zcode.json +++ b/tests/fixtures/golden-install-parity/zcode.json @@ -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", diff --git a/tests/test-gate-watch-mode.test.cjs b/tests/test-gate-watch-mode.test.cjs index 81d6e7606..11f1683b6 100644 --- a/tests/test-gate-watch-mode.test.cjs +++ b/tests/test-gate-watch-mode.test.cjs @@ -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(' | ')}`, + ); + }); + } +}); diff --git a/tests/workflow-size-baseline.json b/tests/workflow-size-baseline.json index e9c0a3940..629d4b8ae 100644 --- a/tests/workflow-size-baseline.json +++ b/tests/workflow-size-baseline.json @@ -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 }