From 7bef6a64968510576e6a71a412ab9fe2d045f850 Mon Sep 17 00:00:00 2001 From: Behruz Nassre Esfahani Date: Thu, 2 Jul 2026 10:01:10 -0700 Subject: [PATCH] fix(#1863): use named flags for state.* calls in executor + workflows (#1873) * fix(#1863): use named flags for state.* calls in executor + workflows The named-only state-command router (parseNamedArgs) silently drops positional args, so state.cjs threw its required-arg error and metrics/decisions/blockers/session continuity were never recorded. Convert record-metric / add-decision / add-blocker / record-session in agents/gsd-executor.md to the named-flag form (mirroring execute-plan.md), and fix the two remaining positional record-session calls in gsd-core/workflows/milestone-summary.md and forensics.md. Recapture the golden-install-parity fixtures and size baselines for the edited files. Also fix a pre-existing detached-rebuild handle leak in tests/graphify-auto-update.slow.test.cjs: three dispatch tests returned after observing only the synchronous "running" status without awaiting the detached rebuild's terminal state. That leak was latent until the new #1863 regression block's added runtime shifted --test-force-exit timing and surfaced it as a non-zero chunk exit. The three tests now await terminal status via the file's existing waitForBuildStatus helper. Co-Authored-By: Claude Opus 4.8 (1M context) * chore(#1863): add changeset Co-Authored-By: Claude Opus 4.8 (1M context) --------- Co-authored-by: Claude Opus 4.8 (1M context) Co-authored-by: Tom Boucher --- .changeset/graceful-moles-gather.md | 5 ++ agents/gsd-executor.md | 13 ++-- gsd-core/workflows/forensics.md | 6 +- gsd-core/workflows/milestone-summary.md | 6 +- tests/agent-size-baseline.json | 2 +- tests/executor-mvp-tdd-section.test.cjs | 65 +++++++++++++++++++ .../golden-install-parity/antigravity.json | 6 +- .../golden-install-parity/augment.json | 6 +- .../golden-install-parity/claude.json | 6 +- .../fixtures/golden-install-parity/cline.json | 6 +- .../golden-install-parity/codebuddy.json | 6 +- .../fixtures/golden-install-parity/codex.json | 8 +-- .../golden-install-parity/copilot.json | 6 +- .../golden-install-parity/cursor.json | 6 +- .../golden-install-parity/gemini.json | 6 +- .../golden-install-parity/hermes.json | 6 +- .../fixtures/golden-install-parity/kilo.json | 6 +- .../fixtures/golden-install-parity/kimi.json | 6 +- .../golden-install-parity/opencode.json | 6 +- .../fixtures/golden-install-parity/qwen.json | 6 +- .../fixtures/golden-install-parity/trae.json | 6 +- .../golden-install-parity/windsurf.json | 6 +- tests/graphify-auto-update.slow.test.cjs | 23 +++++-- tests/workflow-size-baseline.json | 4 +- 24 files changed, 154 insertions(+), 68 deletions(-) create mode 100644 .changeset/graceful-moles-gather.md diff --git a/.changeset/graceful-moles-gather.md b/.changeset/graceful-moles-gather.md new file mode 100644 index 000000000..fbc0e4a1a --- /dev/null +++ b/.changeset/graceful-moles-gather.md @@ -0,0 +1,5 @@ +--- +type: Fixed +pr: 1873 +--- +Executor and milestone-summary/forensics workflows now call state.* commands with named flags so the named-only router records metrics, decisions, blockers, and session continuity instead of silently dropping positional args. diff --git a/agents/gsd-executor.md b/agents/gsd-executor.md index 2169d1d9e..d14b7bf7b 100644 --- a/agents/gsd-executor.md +++ b/agents/gsd-executor.md @@ -691,7 +691,7 @@ Do NOT skip. Do NOT proceed to state updates if self-check fails. -After SUMMARY.md, update STATE.md using `gsd-tools query` state handlers (positional args; see `sdk/src/query/QUERY-HANDLERS.md`): +After SUMMARY.md, update STATE.md using `gsd-tools query` state handlers (named flags; see `sdk/src/query/QUERY-HANDLERS.md`): ```bash # Advance plan counter (handles edge cases automatically) @@ -702,16 +702,17 @@ gsd_run query state.update-progress # Record execution metrics (phase, plan, duration, tasks, files) gsd_run query state.record-metric \ - "${PHASE}" "${PLAN}" "${DURATION}" "${TASK_COUNT}" "${FILE_COUNT}" + --phase "${PHASE}" --plan "${PLAN}" --duration "${DURATION}" \ + --tasks "${TASK_COUNT}" --files "${FILE_COUNT}" # Add decisions (extract from SUMMARY.md key-decisions) for decision in "${DECISIONS[@]}"; do - gsd_run query state.add-decision "${decision}" + gsd_run query state.add-decision --summary "${decision}" done -# Update session info (timestamp, stopped-at, resume-file) +# Update session info (stopped-at, resume-file; timestamp set automatically) gsd_run query state.record-session \ - "" "Completed ${PHASE}-${PLAN}-PLAN.md" "None" + --stopped-at "Completed ${PHASE}-${PLAN}-PLAN.md" --resume-file "None" ``` ```bash @@ -738,7 +739,7 @@ gsd_run query requirements.mark-complete ${REQ_IDS} **For blockers found during execution:** ```bash -gsd_run query state.add-blocker "Blocker description" +gsd_run query state.add-blocker --text "Blocker description" ``` diff --git a/gsd-core/workflows/forensics.md b/gsd-core/workflows/forensics.md index 93373a94b..e0f8e95e0 100644 --- a/gsd-core/workflows/forensics.md +++ b/gsd-core/workflows/forensics.md @@ -273,7 +273,7 @@ gh issue create \ ```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 "$HOME/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="$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 -gsd_run query state.record-session "" \ - "Forensic investigation complete" \ - ".planning/forensics/report-{timestamp}.md" +gsd_run query state.record-session \ + --stopped-at "Forensic investigation complete" \ + --resume-file ".planning/forensics/report-{timestamp}.md" ``` diff --git a/gsd-core/workflows/milestone-summary.md b/gsd-core/workflows/milestone-summary.md index 32bdf413c..0fb4847d2 100644 --- a/gsd-core/workflows/milestone-summary.md +++ b/gsd-core/workflows/milestone-summary.md @@ -218,7 +218,7 @@ If the user is done: ## Step 9: Update STATE.md ```bash -gsd_run query state.record-session "" \ - "Milestone v${VERSION} summary generated" \ - ".planning/reports/MILESTONE_SUMMARY-v${VERSION}.md" +gsd_run query state.record-session \ + --stopped-at "Milestone v${VERSION} summary generated" \ + --resume-file ".planning/reports/MILESTONE_SUMMARY-v${VERSION}.md" ``` diff --git a/tests/agent-size-baseline.json b/tests/agent-size-baseline.json index 6060f7b28..b76418b7f 100644 --- a/tests/agent-size-baseline.json +++ b/tests/agent-size-baseline.json @@ -14,7 +14,7 @@ "gsd-domain-researcher.md": 6998, "gsd-eval-auditor.md": 12452, "gsd-eval-planner.md": 7008, - "gsd-executor.md": 43433, + "gsd-executor.md": 43534, "gsd-framework-selector.md": 6778, "gsd-integration-checker.md": 15238, "gsd-intel-updater.md": 18122, diff --git a/tests/executor-mvp-tdd-section.test.cjs b/tests/executor-mvp-tdd-section.test.cjs index fd88f3e18..7dcde06b6 100644 --- a/tests/executor-mvp-tdd-section.test.cjs +++ b/tests/executor-mvp-tdd-section.test.cjs @@ -31,3 +31,68 @@ describe('gsd-executor — MVP+TDD gate section', () => { assert.ok(fs.existsSync(REF), `${REF} must exist`); }); }); + +describe('gsd-executor — state.* calls use the named-only router form (#1863 regression)', () => { + // The runtime state-command router (gsd-core/bin/lib/state-command-router.cjs) + // parses record-metric / add-decision / add-blocker / record-session named-only + // via parseNamedArgs. Positional values are silently dropped, so state.cjs then + // throws its required-arg error and metrics/decisions/blockers/session continuity + // are never recorded. Each invocation in the executor agent must therefore pass + // the named flags the router expects (mirrors gsd-core/workflows/execute-plan.md). + const content = fs.readFileSync(AGENT, 'utf-8'); + + // Capture a `gsd_run query state. ...` invocation, including backslash-continued lines. + function invocation(cmd) { + const re = new RegExp(String.raw`gsd_run query state\.${cmd}\b(?:[^\r\n]*\\\r?\n)*[^\r\n]*`); + const m = content.match(re); + assert.ok(m, `executor must invoke state.${cmd}`); + return m[0]; + } + + test('record-metric passes --phase/--plan/--duration/--tasks/--files', () => { + const call = invocation('record-metric'); + for (const flag of ['--phase', '--plan', '--duration', '--tasks', '--files']) { + assert.ok(call.includes(flag), `record-metric must pass ${flag}, got:\n${call}`); + } + }); + + test('add-decision passes --summary (or --summary-file)', () => { + assert.match(invocation('add-decision'), /--summary(?:-file)?\b/); + }); + + test('add-blocker passes --text (or --text-file)', () => { + assert.match(invocation('add-blocker'), /--text(?:-file)?\b/); + }); + + test('record-session passes --stopped-at and --resume-file', () => { + const call = invocation('record-session'); + assert.ok(call.includes('--stopped-at'), 'record-session must pass --stopped-at'); + assert.ok(call.includes('--resume-file'), 'record-session must pass --resume-file'); + }); + + test('no state.* call leads with a bare positional (quoted) value — the #1863 bug', () => { + // Buggy multi-line form: `state. \` then a line whose first token is a quote. + const continued = /state\.(?:record-metric|add-decision|add-blocker|record-session)\b[^\r\n]*\\\r?\n\s*"/; + assert.ok(!continued.test(content), + 'state.* calls must lead with --flags, not a positional quoted value on the next line'); + // Buggy same-line form: `state. "..."` + const inline = /state\.(?:record-metric|add-decision|add-blocker|record-session)\s+"/; + assert.ok(!inline.test(content), + 'state.* calls must not pass a positional value immediately after the command'); + }); + + test('sibling workflow record-session calls also use named flags (#1863 completeness)', () => { + // The same named-only router backs milestone-summary.md and forensics.md; both + // previously passed record-session positionally (`"" "stopped-at" "resume-file"`), + // silently dropping the values. Guard them alongside the executor. + for (const rel of ['gsd-core/workflows/milestone-summary.md', 'gsd-core/workflows/forensics.md']) { + const wf = fs.readFileSync(path.join(__dirname, '..', rel), 'utf-8'); + const m = wf.match(/gsd_run query state\.record-session\b(?:[^\r\n]*\\\r?\n)*[^\r\n]*/); + assert.ok(m, `${rel} must invoke state.record-session`); + assert.ok(m[0].includes('--stopped-at') && m[0].includes('--resume-file'), + `${rel} record-session must use --stopped-at/--resume-file, got:\n${m[0]}`); + assert.ok(!/state\.record-session\s+"/.test(wf), + `${rel} record-session must not lead with a positional value`); + } + }); +}); diff --git a/tests/fixtures/golden-install-parity/antigravity.json b/tests/fixtures/golden-install-parity/antigravity.json index 25a56fe96..399095c27 100644 --- a/tests/fixtures/golden-install-parity/antigravity.json +++ b/tests/fixtures/golden-install-parity/antigravity.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.md": "1db46cac3f4d9889", "agents/gsd-eval-auditor.md": "62560f29308426d9", "agents/gsd-eval-planner.md": "3d10fd11147f6857", - "agents/gsd-executor.md": "fc8279d68ee0acd8", + "agents/gsd-executor.md": "d7dedecb2206d678", "agents/gsd-framework-selector.md": "daa62c79619c76bf", "agents/gsd-integration-checker.md": "0643cd2d779b131c", "agents/gsd-intel-updater.md": "c2a053ffbe79cc74", @@ -237,7 +237,7 @@ "gsd-core/workflows/explore.md": "d9593c9f00250e53", "gsd-core/workflows/extract-learnings.md": "caa2ff0160b6ed9c", "gsd-core/workflows/fast.md": "54fe93778b45a7eb", - "gsd-core/workflows/forensics.md": "c32971f6b9d61ed8", + "gsd-core/workflows/forensics.md": "3ebc3a7f48132e04", "gsd-core/workflows/graduation.md": "b401418dfea2b0f5", "gsd-core/workflows/health.md": "3ab04acb14942ddd", "gsd-core/workflows/help.md": "5d040504b9ab35e3", @@ -254,7 +254,7 @@ "gsd-core/workflows/list-workspaces.md": "69aa6dcd8f63bb8a", "gsd-core/workflows/manager.md": "187e2df237bcf418", "gsd-core/workflows/map-codebase.md": "ea0ad99dd10c3d1c", - "gsd-core/workflows/milestone-summary.md": "6af78ebf0ba7546b", + "gsd-core/workflows/milestone-summary.md": "d442c6719944f276", "gsd-core/workflows/mvp-phase.md": "cd39027462579233", "gsd-core/workflows/new-milestone.md": "f13199a8e199298f", "gsd-core/workflows/new-project.md": "b8dc0226e885ea9c", diff --git a/tests/fixtures/golden-install-parity/augment.json b/tests/fixtures/golden-install-parity/augment.json index 7ca435edc..b92dbbaba 100644 --- a/tests/fixtures/golden-install-parity/augment.json +++ b/tests/fixtures/golden-install-parity/augment.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.md": "671c9ea949889c4a", "agents/gsd-eval-auditor.md": "cd2a5727472ad0ab", "agents/gsd-eval-planner.md": "a4a5b4b3f7828ba3", - "agents/gsd-executor.md": "89962f48c322e4b1", + "agents/gsd-executor.md": "87c499f939e30049", "agents/gsd-framework-selector.md": "4b77eebbe9288d80", "agents/gsd-integration-checker.md": "fa53e2d78be1de74", "agents/gsd-intel-updater.md": "f8ac501c61557a17", @@ -306,7 +306,7 @@ "gsd-core/workflows/explore.md": "11523b829cc67c29", "gsd-core/workflows/extract-learnings.md": "a2e4836abdeb1fdb", "gsd-core/workflows/fast.md": "94136fb570d20a9d", - "gsd-core/workflows/forensics.md": "76bea6e254652c2c", + "gsd-core/workflows/forensics.md": "b4bde768fd27a982", "gsd-core/workflows/graduation.md": "00d1b7fe7ed8578b", "gsd-core/workflows/health.md": "e3cb8ff4e01e9e53", "gsd-core/workflows/help.md": "5d040504b9ab35e3", @@ -323,7 +323,7 @@ "gsd-core/workflows/list-workspaces.md": "6e5c402000090d7b", "gsd-core/workflows/manager.md": "a31f7e255dd7d01d", "gsd-core/workflows/map-codebase.md": "582bddef590de9c6", - "gsd-core/workflows/milestone-summary.md": "f956783f7d063963", + "gsd-core/workflows/milestone-summary.md": "8b6ceec4aa454b8a", "gsd-core/workflows/mvp-phase.md": "bfa668107be972ed", "gsd-core/workflows/new-milestone.md": "23d2135a555e95df", "gsd-core/workflows/new-project.md": "e6855b300fcac71e", diff --git a/tests/fixtures/golden-install-parity/claude.json b/tests/fixtures/golden-install-parity/claude.json index 54fe9c40a..236b181b7 100644 --- a/tests/fixtures/golden-install-parity/claude.json +++ b/tests/fixtures/golden-install-parity/claude.json @@ -15,7 +15,7 @@ "agents/gsd-domain-researcher.md": "f8be56555689a970", "agents/gsd-eval-auditor.md": "88be0494a906eda5", "agents/gsd-eval-planner.md": "112f6730f23854e3", - "agents/gsd-executor.md": "426f3d410f619c23", + "agents/gsd-executor.md": "50b737a811d0a334", "agents/gsd-framework-selector.md": "c350ee693cb1aa4e", "agents/gsd-integration-checker.md": "c8b4e65dee89c8ea", "agents/gsd-intel-updater.md": "9fadfebd08f15244", @@ -236,7 +236,7 @@ "gsd-core/workflows/explore.md": "aee57d95497ca50a", "gsd-core/workflows/extract-learnings.md": "ce4b5388074f19a3", "gsd-core/workflows/fast.md": "54fe93778b45a7eb", - "gsd-core/workflows/forensics.md": "d0f079d1bcf924c3", + "gsd-core/workflows/forensics.md": "ec9dc257272a6980", "gsd-core/workflows/graduation.md": "00d1b7fe7ed8578b", "gsd-core/workflows/health.md": "9fd7fe8c7c99b0db", "gsd-core/workflows/help.md": "5d040504b9ab35e3", @@ -253,7 +253,7 @@ "gsd-core/workflows/list-workspaces.md": "9b78bb9f71029169", "gsd-core/workflows/manager.md": "c0b571445b452f2b", "gsd-core/workflows/map-codebase.md": "27c356aa00fb022a", - "gsd-core/workflows/milestone-summary.md": "5bf68a980d8b5590", + "gsd-core/workflows/milestone-summary.md": "e7692ea6a9ca3653", "gsd-core/workflows/mvp-phase.md": "bfa668107be972ed", "gsd-core/workflows/new-milestone.md": "7c957068b523ff47", "gsd-core/workflows/new-project.md": "4184d47a8797dd4e", diff --git a/tests/fixtures/golden-install-parity/cline.json b/tests/fixtures/golden-install-parity/cline.json index 343b5aa3c..67d968cfa 100644 --- a/tests/fixtures/golden-install-parity/cline.json +++ b/tests/fixtures/golden-install-parity/cline.json @@ -19,7 +19,7 @@ "agents/gsd-domain-researcher.md": "0fecdaea86466a56", "agents/gsd-eval-auditor.md": "90b5d1909977df61", "agents/gsd-eval-planner.md": "3ddea88a69b4da3f", - "agents/gsd-executor.md": "765e9764af71bcda", + "agents/gsd-executor.md": "806bdb1313ead84d", "agents/gsd-framework-selector.md": "564669d479433f15", "agents/gsd-integration-checker.md": "1bbbdd3d420b994e", "agents/gsd-intel-updater.md": "b084fd8df5f13f2a", @@ -240,7 +240,7 @@ "gsd-core/workflows/explore.md": "28856a6b0198064b", "gsd-core/workflows/extract-learnings.md": "b649ff8ecff388c1", "gsd-core/workflows/fast.md": "94136fb570d20a9d", - "gsd-core/workflows/forensics.md": "2478dc912608126f", + "gsd-core/workflows/forensics.md": "9de19e3792169aa3", "gsd-core/workflows/graduation.md": "ca7fa951a963d84b", "gsd-core/workflows/health.md": "295e170806820a94", "gsd-core/workflows/help.md": "5d040504b9ab35e3", @@ -257,7 +257,7 @@ "gsd-core/workflows/list-workspaces.md": "e2d7ee5e70395c1d", "gsd-core/workflows/manager.md": "3ae982361d3cbb06", "gsd-core/workflows/map-codebase.md": "893f13a40162ce23", - "gsd-core/workflows/milestone-summary.md": "dd87dcdecb0b069d", + "gsd-core/workflows/milestone-summary.md": "04427b0abe11968d", "gsd-core/workflows/mvp-phase.md": "e6a902c3308345f2", "gsd-core/workflows/new-milestone.md": "2804d6f976923412", "gsd-core/workflows/new-project.md": "f5799451fb7c1983", diff --git a/tests/fixtures/golden-install-parity/codebuddy.json b/tests/fixtures/golden-install-parity/codebuddy.json index ea962e763..675284a0f 100644 --- a/tests/fixtures/golden-install-parity/codebuddy.json +++ b/tests/fixtures/golden-install-parity/codebuddy.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.md": "1c1a800108a2b225", "agents/gsd-eval-auditor.md": "3d3e9336c01e90fe", "agents/gsd-eval-planner.md": "4ebdd7fe9cbb0cfe", - "agents/gsd-executor.md": "0ccab15e5ef8f0be", + "agents/gsd-executor.md": "a5041170a536bebd", "agents/gsd-framework-selector.md": "7726fccc86bfeb50", "agents/gsd-integration-checker.md": "2d8339790bbb2dc3", "agents/gsd-intel-updater.md": "ec317a56d4abc4d3", @@ -306,7 +306,7 @@ "gsd-core/workflows/explore.md": "11523b829cc67c29", "gsd-core/workflows/extract-learnings.md": "a2e4836abdeb1fdb", "gsd-core/workflows/fast.md": "94136fb570d20a9d", - "gsd-core/workflows/forensics.md": "76bea6e254652c2c", + "gsd-core/workflows/forensics.md": "b4bde768fd27a982", "gsd-core/workflows/graduation.md": "00d1b7fe7ed8578b", "gsd-core/workflows/health.md": "e3cb8ff4e01e9e53", "gsd-core/workflows/help.md": "5d040504b9ab35e3", @@ -323,7 +323,7 @@ "gsd-core/workflows/list-workspaces.md": "6e5c402000090d7b", "gsd-core/workflows/manager.md": "a31f7e255dd7d01d", "gsd-core/workflows/map-codebase.md": "582bddef590de9c6", - "gsd-core/workflows/milestone-summary.md": "f956783f7d063963", + "gsd-core/workflows/milestone-summary.md": "8b6ceec4aa454b8a", "gsd-core/workflows/mvp-phase.md": "bfa668107be972ed", "gsd-core/workflows/new-milestone.md": "23d2135a555e95df", "gsd-core/workflows/new-project.md": "2fa5ddc0fe749b28", diff --git a/tests/fixtures/golden-install-parity/codex.json b/tests/fixtures/golden-install-parity/codex.json index bb66ecb56..690cfe072 100644 --- a/tests/fixtures/golden-install-parity/codex.json +++ b/tests/fixtures/golden-install-parity/codex.json @@ -31,8 +31,8 @@ "agents/gsd-eval-auditor.toml": "531377421cf4f8f8", "agents/gsd-eval-planner.md": "73f2ad2ff2797a51", "agents/gsd-eval-planner.toml": "09468ad1a34ac468", - "agents/gsd-executor.md": "02615587b68428f2", - "agents/gsd-executor.toml": "ff4c05dd572de82b", + "agents/gsd-executor.md": "79d169658b54851c", + "agents/gsd-executor.toml": "410f786fed366ab8", "agents/gsd-framework-selector.md": "ebae32430887d2e0", "agents/gsd-framework-selector.toml": "637e4e021b7ec380", "agents/gsd-integration-checker.md": "9cc875676cf7d741", @@ -272,7 +272,7 @@ "gsd-core/workflows/explore.md": "a75d42453e639a5d", "gsd-core/workflows/extract-learnings.md": "89145eb423bbbef2", "gsd-core/workflows/fast.md": "13252d545947354d", - "gsd-core/workflows/forensics.md": "3db077a229e1ca88", + "gsd-core/workflows/forensics.md": "bf6a31b2a3ec2268", "gsd-core/workflows/graduation.md": "00d1b7fe7ed8578b", "gsd-core/workflows/health.md": "e9fe7c29fc41a887", "gsd-core/workflows/help.md": "08e1349950c5602a", @@ -289,7 +289,7 @@ "gsd-core/workflows/list-workspaces.md": "7fbeaf65ce9890f5", "gsd-core/workflows/manager.md": "4def33941b0e7d57", "gsd-core/workflows/map-codebase.md": "320d5bfc9df29013", - "gsd-core/workflows/milestone-summary.md": "121ecb40504caf10", + "gsd-core/workflows/milestone-summary.md": "77d76610d1c98014", "gsd-core/workflows/mvp-phase.md": "9a9b8b58d59a893f", "gsd-core/workflows/new-milestone.md": "e7329ba10b6d8182", "gsd-core/workflows/new-project.md": "f69c90cee1d7952d", diff --git a/tests/fixtures/golden-install-parity/copilot.json b/tests/fixtures/golden-install-parity/copilot.json index 9cf198f53..f38dcf766 100644 --- a/tests/fixtures/golden-install-parity/copilot.json +++ b/tests/fixtures/golden-install-parity/copilot.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.agent.md": "b06738b093df1cb9", "agents/gsd-eval-auditor.agent.md": "b30590bbf86d755d", "agents/gsd-eval-planner.agent.md": "14751876fc2b5f16", - "agents/gsd-executor.agent.md": "e7a796fd01443ad6", + "agents/gsd-executor.agent.md": "a6ddc10ef4ebb245", "agents/gsd-framework-selector.agent.md": "cafeec0b3489be45", "agents/gsd-integration-checker.agent.md": "30439b804927acc7", "agents/gsd-intel-updater.agent.md": "21ea4bd0bb45cc2f", @@ -238,7 +238,7 @@ "gsd-core/workflows/explore.md": "072bcf510734657b", "gsd-core/workflows/extract-learnings.md": "83d19c1c9f87f797", "gsd-core/workflows/fast.md": "54fe93778b45a7eb", - "gsd-core/workflows/forensics.md": "54e9996cd7bcc05d", + "gsd-core/workflows/forensics.md": "6b0e23f4dc04dbf9", "gsd-core/workflows/graduation.md": "e64a735e71c39307", "gsd-core/workflows/health.md": "56d1a87cf530c9a8", "gsd-core/workflows/help.md": "5d040504b9ab35e3", @@ -255,7 +255,7 @@ "gsd-core/workflows/list-workspaces.md": "e8e224465d78e733", "gsd-core/workflows/manager.md": "c4eac43acf69d7fd", "gsd-core/workflows/map-codebase.md": "576d06b03edff8db", - "gsd-core/workflows/milestone-summary.md": "20d93b795568d970", + "gsd-core/workflows/milestone-summary.md": "a77da1477b8df866", "gsd-core/workflows/mvp-phase.md": "803ddbd575f86311", "gsd-core/workflows/new-milestone.md": "4e252aa59b46d88f", "gsd-core/workflows/new-project.md": "d0af61f0e5f99485", diff --git a/tests/fixtures/golden-install-parity/cursor.json b/tests/fixtures/golden-install-parity/cursor.json index 075b82231..37560cc77 100644 --- a/tests/fixtures/golden-install-parity/cursor.json +++ b/tests/fixtures/golden-install-parity/cursor.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.md": "56395dbdabf076f6", "agents/gsd-eval-auditor.md": "4910c64c0c2d14d5", "agents/gsd-eval-planner.md": "2049dac060d00eda", - "agents/gsd-executor.md": "b9c28781b6ed98ac", + "agents/gsd-executor.md": "6f810a5779d41661", "agents/gsd-framework-selector.md": "4b77eebbe9288d80", "agents/gsd-integration-checker.md": "5da30584d06b878c", "agents/gsd-intel-updater.md": "7f509a2fb5acb0fe", @@ -306,7 +306,7 @@ "gsd-core/workflows/explore.md": "aee57d95497ca50a", "gsd-core/workflows/extract-learnings.md": "ce4b5388074f19a3", "gsd-core/workflows/fast.md": "0162075e44072447", - "gsd-core/workflows/forensics.md": "063dd4fe9eb8de15", + "gsd-core/workflows/forensics.md": "7ab53bb7de12d655", "gsd-core/workflows/graduation.md": "d00ac4dfe7e1cc43", "gsd-core/workflows/health.md": "b53e17edbf70ff96", "gsd-core/workflows/help.md": "08e1349950c5602a", @@ -323,7 +323,7 @@ "gsd-core/workflows/list-workspaces.md": "9b78bb9f71029169", "gsd-core/workflows/manager.md": "cf0f01254eabfec7", "gsd-core/workflows/map-codebase.md": "d43dffe5098a8684", - "gsd-core/workflows/milestone-summary.md": "40e3049e42ecde63", + "gsd-core/workflows/milestone-summary.md": "2cc908a8e87df942", "gsd-core/workflows/mvp-phase.md": "542d898e0e9b928f", "gsd-core/workflows/new-milestone.md": "514a66fe7d07c0f3", "gsd-core/workflows/new-project.md": "559e93f61313311b", diff --git a/tests/fixtures/golden-install-parity/gemini.json b/tests/fixtures/golden-install-parity/gemini.json index 430825f09..85678e890 100644 --- a/tests/fixtures/golden-install-parity/gemini.json +++ b/tests/fixtures/golden-install-parity/gemini.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.md": "ba1b6b24e2f8a952", "agents/gsd-eval-auditor.md": "115214236cd73d96", "agents/gsd-eval-planner.md": "ad757b253472269e", - "agents/gsd-executor.md": "da7adfe75afc5d1c", + "agents/gsd-executor.md": "5d9338bcfe37fc6a", "agents/gsd-framework-selector.md": "1254f9adc2e95e4b", "agents/gsd-integration-checker.md": "e337990c0a4117b1", "agents/gsd-intel-updater.md": "3111fd1028d155b5", @@ -306,7 +306,7 @@ "gsd-core/workflows/explore.md": "11523b829cc67c29", "gsd-core/workflows/extract-learnings.md": "a2e4836abdeb1fdb", "gsd-core/workflows/fast.md": "94136fb570d20a9d", - "gsd-core/workflows/forensics.md": "76bea6e254652c2c", + "gsd-core/workflows/forensics.md": "b4bde768fd27a982", "gsd-core/workflows/graduation.md": "d00ac4dfe7e1cc43", "gsd-core/workflows/health.md": "ae213b0d090641a2", "gsd-core/workflows/help.md": "5d040504b9ab35e3", @@ -323,7 +323,7 @@ "gsd-core/workflows/list-workspaces.md": "0409cb5e3859964f", "gsd-core/workflows/manager.md": "fd5816b3fc7a68de", "gsd-core/workflows/map-codebase.md": "582bddef590de9c6", - "gsd-core/workflows/milestone-summary.md": "f956783f7d063963", + "gsd-core/workflows/milestone-summary.md": "8b6ceec4aa454b8a", "gsd-core/workflows/mvp-phase.md": "6cb2d9d97bd239b3", "gsd-core/workflows/new-milestone.md": "86959fbb6f5e8893", "gsd-core/workflows/new-project.md": "72b2c17e9f9cb79d", diff --git a/tests/fixtures/golden-install-parity/hermes.json b/tests/fixtures/golden-install-parity/hermes.json index 4038d734b..7836c050c 100644 --- a/tests/fixtures/golden-install-parity/hermes.json +++ b/tests/fixtures/golden-install-parity/hermes.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.md": "d4c07520f650ffd5", "agents/gsd-eval-auditor.md": "254220230f69ac46", "agents/gsd-eval-planner.md": "03448fc9c5774b56", - "agents/gsd-executor.md": "d9191c634ec67129", + "agents/gsd-executor.md": "ddc4b274f05f59d0", "agents/gsd-framework-selector.md": "ea9981d65d6b3429", "agents/gsd-integration-checker.md": "35b4f2969d279871", "agents/gsd-intel-updater.md": "03e143f85ab105ed", @@ -237,7 +237,7 @@ "gsd-core/workflows/explore.md": "1c0f3ced293df114", "gsd-core/workflows/extract-learnings.md": "c6cfb696d3bb51c7", "gsd-core/workflows/fast.md": "54fe93778b45a7eb", - "gsd-core/workflows/forensics.md": "b381b789a871507d", + "gsd-core/workflows/forensics.md": "1362bc42a2928d79", "gsd-core/workflows/graduation.md": "1fb19f28634dd55a", "gsd-core/workflows/health.md": "32c1276656602ccb", "gsd-core/workflows/help.md": "5d040504b9ab35e3", @@ -254,7 +254,7 @@ "gsd-core/workflows/list-workspaces.md": "d3726de6b2eb40b4", "gsd-core/workflows/manager.md": "c8690740c613f1a5", "gsd-core/workflows/map-codebase.md": "23fae66ceef58e1c", - "gsd-core/workflows/milestone-summary.md": "5cc04210fea41834", + "gsd-core/workflows/milestone-summary.md": "d7ac63499e3e5c1a", "gsd-core/workflows/mvp-phase.md": "5ce3c326ef0f6e27", "gsd-core/workflows/new-milestone.md": "97750332c52a9ef7", "gsd-core/workflows/new-project.md": "40c94cfb81bde99b", diff --git a/tests/fixtures/golden-install-parity/kilo.json b/tests/fixtures/golden-install-parity/kilo.json index f0271f3cf..315784cb1 100644 --- a/tests/fixtures/golden-install-parity/kilo.json +++ b/tests/fixtures/golden-install-parity/kilo.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.md": "a3874d80bcbc7380", "agents/gsd-eval-auditor.md": "d8c45cef7ddf4360", "agents/gsd-eval-planner.md": "3db12cde12aeb2c1", - "agents/gsd-executor.md": "a0433cb715722dd5", + "agents/gsd-executor.md": "7f18fa638ef50584", "agents/gsd-framework-selector.md": "ad5f2c6b9bec6270", "agents/gsd-integration-checker.md": "c503e2f4a3d8ec05", "agents/gsd-intel-updater.md": "b8eb72873ded3c14", @@ -306,7 +306,7 @@ "gsd-core/workflows/explore.md": "a1aa05e598caf7e3", "gsd-core/workflows/extract-learnings.md": "ce4b5388074f19a3", "gsd-core/workflows/fast.md": "54fe93778b45a7eb", - "gsd-core/workflows/forensics.md": "d0f079d1bcf924c3", + "gsd-core/workflows/forensics.md": "ec9dc257272a6980", "gsd-core/workflows/graduation.md": "fc01dc810d4845f8", "gsd-core/workflows/health.md": "955d5ebacd5740e6", "gsd-core/workflows/help.md": "5d040504b9ab35e3", @@ -323,7 +323,7 @@ "gsd-core/workflows/list-workspaces.md": "9b78bb9f71029169", "gsd-core/workflows/manager.md": "bedfe8a2a48a9605", "gsd-core/workflows/map-codebase.md": "fcc2796ebf8ea2c7", - "gsd-core/workflows/milestone-summary.md": "423287cd509b7774", + "gsd-core/workflows/milestone-summary.md": "93ba0d0005f73c35", "gsd-core/workflows/mvp-phase.md": "3935c0d9969e3e84", "gsd-core/workflows/new-milestone.md": "9abdd85c65989620", "gsd-core/workflows/new-project.md": "0dce9298c090bdb4", diff --git a/tests/fixtures/golden-install-parity/kimi.json b/tests/fixtures/golden-install-parity/kimi.json index 2adc06d81..1c2eb23da 100644 --- a/tests/fixtures/golden-install-parity/kimi.json +++ b/tests/fixtures/golden-install-parity/kimi.json @@ -33,7 +33,7 @@ "agents/subagents/gsd-eval-auditor.yaml": "e3d868bd5fefe938", "agents/subagents/gsd-eval-planner.md": "70f8c5727bfb9876", "agents/subagents/gsd-eval-planner.yaml": "df8499f7af297ec2", - "agents/subagents/gsd-executor.md": "a1fdc7f4ac29888a", + "agents/subagents/gsd-executor.md": "2cf56de9a48e60f9", "agents/subagents/gsd-executor.yaml": "e29422986636fd64", "agents/subagents/gsd-framework-selector.md": "a15b7aa1e0576e16", "agents/subagents/gsd-framework-selector.yaml": "fb52c31cde27b0e3", @@ -273,7 +273,7 @@ "gsd-core/workflows/explore.md": "11523b829cc67c29", "gsd-core/workflows/extract-learnings.md": "a2e4836abdeb1fdb", "gsd-core/workflows/fast.md": "94136fb570d20a9d", - "gsd-core/workflows/forensics.md": "76bea6e254652c2c", + "gsd-core/workflows/forensics.md": "b4bde768fd27a982", "gsd-core/workflows/graduation.md": "00d1b7fe7ed8578b", "gsd-core/workflows/health.md": "e3cb8ff4e01e9e53", "gsd-core/workflows/help.md": "5d040504b9ab35e3", @@ -290,7 +290,7 @@ "gsd-core/workflows/list-workspaces.md": "6e5c402000090d7b", "gsd-core/workflows/manager.md": "a31f7e255dd7d01d", "gsd-core/workflows/map-codebase.md": "582bddef590de9c6", - "gsd-core/workflows/milestone-summary.md": "f956783f7d063963", + "gsd-core/workflows/milestone-summary.md": "8b6ceec4aa454b8a", "gsd-core/workflows/mvp-phase.md": "bfa668107be972ed", "gsd-core/workflows/new-milestone.md": "23d2135a555e95df", "gsd-core/workflows/new-project.md": "69d356f41ea36aa2", diff --git a/tests/fixtures/golden-install-parity/opencode.json b/tests/fixtures/golden-install-parity/opencode.json index 0acd99df9..48a6aa0b9 100644 --- a/tests/fixtures/golden-install-parity/opencode.json +++ b/tests/fixtures/golden-install-parity/opencode.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.md": "71250e759ca9e723", "agents/gsd-eval-auditor.md": "d9c7034244882d86", "agents/gsd-eval-planner.md": "60bddb70a937f796", - "agents/gsd-executor.md": "e185b21a5df49e0d", + "agents/gsd-executor.md": "9726bd59fcc09611", "agents/gsd-framework-selector.md": "1c0a10355e787675", "agents/gsd-integration-checker.md": "a9de5928e5a5c649", "agents/gsd-intel-updater.md": "f9ef2797738b7f09", @@ -306,7 +306,7 @@ "gsd-core/workflows/explore.md": "96ba55f53899a261", "gsd-core/workflows/extract-learnings.md": "b8851263c2d28702", "gsd-core/workflows/fast.md": "54fe93778b45a7eb", - "gsd-core/workflows/forensics.md": "706b3983dd315789", + "gsd-core/workflows/forensics.md": "6ce026e4bc6c875e", "gsd-core/workflows/graduation.md": "7d03b353a0323cce", "gsd-core/workflows/health.md": "1fad392ce1aec410", "gsd-core/workflows/help.md": "5d040504b9ab35e3", @@ -323,7 +323,7 @@ "gsd-core/workflows/list-workspaces.md": "74aa5ac3cb9b00bf", "gsd-core/workflows/manager.md": "e77230eb5a8a1c78", "gsd-core/workflows/map-codebase.md": "40624186d001658f", - "gsd-core/workflows/milestone-summary.md": "0acae8647e544018", + "gsd-core/workflows/milestone-summary.md": "19cced11010ad8eb", "gsd-core/workflows/mvp-phase.md": "efeb5d11f5b10e73", "gsd-core/workflows/new-milestone.md": "08d97dcb66df7776", "gsd-core/workflows/new-project.md": "d3c0ce0e163d5048", diff --git a/tests/fixtures/golden-install-parity/qwen.json b/tests/fixtures/golden-install-parity/qwen.json index 1c673d3be..0b693965a 100644 --- a/tests/fixtures/golden-install-parity/qwen.json +++ b/tests/fixtures/golden-install-parity/qwen.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.md": "d4c07520f650ffd5", "agents/gsd-eval-auditor.md": "0d3c7822c91197fc", "agents/gsd-eval-planner.md": "03448fc9c5774b56", - "agents/gsd-executor.md": "068085ceca836fbd", + "agents/gsd-executor.md": "9bda03decabbaa16", "agents/gsd-framework-selector.md": "ea9981d65d6b3429", "agents/gsd-integration-checker.md": "33fd537b862eb944", "agents/gsd-intel-updater.md": "22cc46f64ad4c336", @@ -237,7 +237,7 @@ "gsd-core/workflows/explore.md": "42f73d9fc38429da", "gsd-core/workflows/extract-learnings.md": "1d0a3cbf17159316", "gsd-core/workflows/fast.md": "54fe93778b45a7eb", - "gsd-core/workflows/forensics.md": "ac80bcbe9bef175f", + "gsd-core/workflows/forensics.md": "0b20c736f1220ee7", "gsd-core/workflows/graduation.md": "7398492ff69af5e7", "gsd-core/workflows/health.md": "de79abe3b83a0252", "gsd-core/workflows/help.md": "5d040504b9ab35e3", @@ -254,7 +254,7 @@ "gsd-core/workflows/list-workspaces.md": "0bda9b42bb5c509b", "gsd-core/workflows/manager.md": "f2ae9c83a80cc690", "gsd-core/workflows/map-codebase.md": "8ce1e33f45827202", - "gsd-core/workflows/milestone-summary.md": "886ec00825fb1442", + "gsd-core/workflows/milestone-summary.md": "4135889e51e1e4b5", "gsd-core/workflows/mvp-phase.md": "b3561a8ab1b26a4c", "gsd-core/workflows/new-milestone.md": "3f2875618897718b", "gsd-core/workflows/new-project.md": "6c1440959e637d2d", diff --git a/tests/fixtures/golden-install-parity/trae.json b/tests/fixtures/golden-install-parity/trae.json index 4ff68a155..38fd6e3fa 100644 --- a/tests/fixtures/golden-install-parity/trae.json +++ b/tests/fixtures/golden-install-parity/trae.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.md": "b80f76874c04e515", "agents/gsd-eval-auditor.md": "96df1d4a9cd553a0", "agents/gsd-eval-planner.md": "22334fde85723c9d", - "agents/gsd-executor.md": "1c51c3b9547eadd4", + "agents/gsd-executor.md": "546ea45461739438", "agents/gsd-framework-selector.md": "7726fccc86bfeb50", "agents/gsd-integration-checker.md": "7cd2072984411c7f", "agents/gsd-intel-updater.md": "2751bbd33912aa1b", @@ -237,7 +237,7 @@ "gsd-core/workflows/explore.md": "9f24bf678b1ef341", "gsd-core/workflows/extract-learnings.md": "0e0eead67cec3d28", "gsd-core/workflows/fast.md": "0162075e44072447", - "gsd-core/workflows/forensics.md": "4b38a662876628a2", + "gsd-core/workflows/forensics.md": "96103895b70d652c", "gsd-core/workflows/graduation.md": "63b74175d5e9cc1e", "gsd-core/workflows/health.md": "9ddf28b84e1ce089", "gsd-core/workflows/help.md": "08e1349950c5602a", @@ -254,7 +254,7 @@ "gsd-core/workflows/list-workspaces.md": "4668ebdc3380a7a6", "gsd-core/workflows/manager.md": "79a6e4de6654f4e7", "gsd-core/workflows/map-codebase.md": "f90d0577d254c38e", - "gsd-core/workflows/milestone-summary.md": "b50a5d4369d29978", + "gsd-core/workflows/milestone-summary.md": "feb8305a862a79de", "gsd-core/workflows/mvp-phase.md": "1d2292f3c444c13d", "gsd-core/workflows/new-milestone.md": "f69e9ccc51ab956b", "gsd-core/workflows/new-project.md": "d1a0070ed292c25a", diff --git a/tests/fixtures/golden-install-parity/windsurf.json b/tests/fixtures/golden-install-parity/windsurf.json index f5e722def..bec1614fc 100644 --- a/tests/fixtures/golden-install-parity/windsurf.json +++ b/tests/fixtures/golden-install-parity/windsurf.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.md": "56395dbdabf076f6", "agents/gsd-eval-auditor.md": "8a2cab3ae8b4674b", "agents/gsd-eval-planner.md": "2049dac060d00eda", - "agents/gsd-executor.md": "93ad20ee189e0669", + "agents/gsd-executor.md": "9ab8c4acb4206e09", "agents/gsd-framework-selector.md": "4b77eebbe9288d80", "agents/gsd-integration-checker.md": "4ffb37fb230c2b90", "agents/gsd-intel-updater.md": "16ee6795da80a7c0", @@ -237,7 +237,7 @@ "gsd-core/workflows/explore.md": "7a9bb001b196409f", "gsd-core/workflows/extract-learnings.md": "58ce8fbc17388788", "gsd-core/workflows/fast.md": "0162075e44072447", - "gsd-core/workflows/forensics.md": "3ec427afe7ab8bb8", + "gsd-core/workflows/forensics.md": "0e933018fd06e629", "gsd-core/workflows/graduation.md": "5734685667d8f512", "gsd-core/workflows/health.md": "644b42c215b1b00e", "gsd-core/workflows/help.md": "08e1349950c5602a", @@ -254,7 +254,7 @@ "gsd-core/workflows/list-workspaces.md": "ff4ad30adc55d5b8", "gsd-core/workflows/manager.md": "072a9f2ba6084641", "gsd-core/workflows/map-codebase.md": "6c89a16e0d9fddfe", - "gsd-core/workflows/milestone-summary.md": "1ced13b54a1fab0b", + "gsd-core/workflows/milestone-summary.md": "957f9620aa472f87", "gsd-core/workflows/mvp-phase.md": "bcc8037866fa1d4d", "gsd-core/workflows/new-milestone.md": "b43ff95a594bd688", "gsd-core/workflows/new-project.md": "d6709238a3ada30c", diff --git a/tests/graphify-auto-update.slow.test.cjs b/tests/graphify-auto-update.slow.test.cjs index ecf5a5b51..1fe520831 100644 --- a/tests/graphify-auto-update.slow.test.cjs +++ b/tests/graphify-auto-update.slow.test.cjs @@ -415,7 +415,7 @@ describe('auto-update', () => { describe('hook — dispatch path (all gates pass)', { skip: isWindows ? 'POSIX-only: harness spawns bash + kill -0 + sleep; the hook itself is a bash script under test' : false }, () => { - test('writes status file with status=running synchronously before returning', (t) => { + test('writes status file with status=running synchronously before returning', async (t) => { const tmpDir = createTempGitRepo({ config: { graphify: { enabled: true, auto_update: true } }, }); @@ -435,6 +435,12 @@ describe('auto-update', () => { const status = JSON.parse(fs.readFileSync(statusPath, 'utf8')); assert.strictEqual(status.status, 'running', 'initial status must be "running"'); assert.ok(/^[0-9a-f]{7,40}$/.test(status.head_at_build), 'head_at_build must be a commit sha'); + // Await the detached rebuild's terminal status so the subprocess has exited + // before the test returns. A dangling detached rebuild can outlive the chunk + // under `node --test --test-force-exit` and surface as a non-zero chunk exit. + const done = await waitForBuildStatus(statusPath, new Set(['ok', 'failed'])); + assert.ok(done && (done.status === 'ok' || done.status === 'failed'), + 'detached rebuild must reach a terminal status before the test returns'); }); test('completes to status=ok after detached graphify run succeeds', async (t) => { @@ -509,7 +515,7 @@ describe('auto-update', () => { ); }); - test('stale lock file (dead PID) is treated as absent', (t) => { + test('stale lock file (dead PID) is treated as absent', async (t) => { const tmpDir = createTempGitRepo({ config: { graphify: { enabled: true, auto_update: true } }, }); @@ -528,9 +534,13 @@ describe('auto-update', () => { assert.strictEqual(r.status, 0); const statusPath = path.join(tmpDir, '.planning/graphs/.last-build-status.json'); assert.ok(fs.existsSync(statusPath), 'stale lock must not block dispatch'); + // Await terminal status so the detached rebuild is gone before returning (see above). + const done = await waitForBuildStatus(statusPath, new Set(['ok', 'failed'])); + assert.ok(done && (done.status === 'ok' || done.status === 'failed'), + 'detached rebuild must reach a terminal status before the test returns'); }); - test('respects git.base_branch config override (default branch != main)', (t) => { + test('respects git.base_branch config override (default branch != main)', async (t) => { const tmpDir = createTempGitRepo({ defaultBranch: 'trunk', config: { @@ -546,10 +556,15 @@ describe('auto-update', () => { { pathPrepend: mockBin }, ); assert.strictEqual(r.status, 0); + const statusPath = path.join(tmpDir, '.planning/graphs/.last-build-status.json'); assert.ok( - fs.existsSync(path.join(tmpDir, '.planning/graphs/.last-build-status.json')), + fs.existsSync(statusPath), 'hook must honor git.base_branch when default branch is not main', ); + // Await terminal status so the detached rebuild is gone before returning (see above). + const done = await waitForBuildStatus(statusPath, new Set(['ok', 'failed'])); + assert.ok(done && (done.status === 'ok' || done.status === 'failed'), + 'detached rebuild must reach a terminal status before the test returns'); }); }); diff --git a/tests/workflow-size-baseline.json b/tests/workflow-size-baseline.json index d5284d3f7..520f6ebb6 100644 --- a/tests/workflow-size-baseline.json +++ b/tests/workflow-size-baseline.json @@ -29,7 +29,7 @@ "explore.md": 10497, "extract-learnings.md": 12849, "fast.md": 4149, - "forensics.md": 12463, + "forensics.md": 12487, "graduation.md": 11578, "health.md": 11824, "help.md": 1722, @@ -42,7 +42,7 @@ "list-workspaces.md": 5655, "manager.md": 27258, "map-codebase.md": 20789, - "milestone-summary.md": 11774, + "milestone-summary.md": 11798, "mvp-phase.md": 13582, "new-milestone.md": 32844, "new-project.md": 66138,