From 920a5f3f06d2784dd27463dca51d8fbf608920ce Mon Sep 17 00:00:00 2001 From: Tom Boucher Date: Sun, 26 Jul 2026 16:17:02 -0400 Subject: [PATCH] fix(#2589): use --raw/--pick for config/model/verify lookups, drop jq dep (#2673) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(#2589): use --raw/--pick for config/model/verify lookups, drop jq dep The reviewer/workflow config lookups resolved scalars and object fields with a `gsd_run query … | jq … 2>/dev/null || ` shape. On any machine without jq (the default on Windows/Git-Bash) the jq stage fails with exit 127, the failure is swallowed by 2>/dev/null + the trailing || default, and the variable comes back EMPTY — the configured per-lane model/host/budget is silently dropped and the lane falls back to CLI defaults with no diagnostic. gsd-tools ships native flags that do the same job with no external dep: config-get --raw (strips JSON quotes off a scalar) resolve-model --pick model (descends an object) resolve-execution … --pick (same) verification.status … --pick status Replaced every jq-piped config/model/verify lookup across review.md (×23), plan-phase.md, ship.md, debug.md (incl. the redundant boolean coercion — --raw returns true/false as bare tokens natively), autonomous.md (×2), ai-integration-phase.md (×4), and eval-review.md. The legitimate structured-JSON jq sites that parse HTTP curl responses (.choices[0], jq -rs, jq -n --rawfile) are untouched — only the jq-replaceable lookups moved to the native flags. Adds tests/fix-2589-config-get-no-jq.test.cjs: a source-invariant guard asserting no audited workflow pipes config-get/resolve-model/resolve-execution/verification.status to jq (fails-first on the pre-fix text, passes after). * test(#2589): update autonomous-converge jq assertion to --pick; regen golden fixtures Two test consequences of the workflow-doc edits in the prior commit: 1. tests/autonomous-converge.test.cjs pinned the OLD jq-dependent shape (`verification.status … | jq -r '.status//empty'`) as the canonical routing contract. The test's INTENT is correct (route human validation through canonical verification.status) but it over-specified the MECHANISM (the jq pipe). Updated the assertion to match the new native --pick status shape; the contract being guarded (canonical verification.status read before the human_needed branch) is unchanged. 2. The golden-install-parity fixtures (19 runtimes) record a content hash of every installed workflow .md; the 7 edited workflows changed those hashes. Regenerated via `npm run gen:golden` (the test's own failure message instructs this). Only the 7 edited workflow hashes changed in each fixture. * fix(#2589): declare jq a prerequisite for the lanes that still need it; repair test file Three defects in the first cut of the #2589 fix: 1. tests/autonomous-converge.test.cjs was a JavaScript syntax error. The regex literal /...2>\/dev/null .../ left the second slash unescaped, terminating the literal early and parsing `null` as regex flags: SyntaxError: Invalid regular expression flags The whole file failed to load, so every assertion in it — including the #1522 and #1526 guards — silently stopped running. Replaced with the string-compare form already used at line 202 for the sibling shell-snippet assertion. 2. lint:ci failed. tests/fix-2589-config-get-no-jq.test.cjs buckets into the capped `config` production module via its `config-get-...` effective prefix, making it a novel offender against the 2-file cap. The test is about workflow documents, not the config module, so it is renamed to fix-2589-workflow-jq-dependency.test.cjs (free prefix) rather than growing the allowlist with a module that does not actually need a 5th test file. 3. The fix deleted the repo's only jq-prerequisite declaration. review.md:244 ("install jq if missing") was the anchor plan-review-convergence.md cites by line number, and it went away with the jq pipes — while the ollama, lm_studio, llama_cpp, opencode, and agy lanes still hard-require jq to parse HTTP /v1/chat/completions responses, opencode's JSONL event stream, and agy's conversation cache. On a jq-less host those five lanes swallow exit 127 into empty output: the same silent-degradation class #2589 exists to close. detect_clis now probes jq alongside the other prerequisites and emits jq:available / jq:missing, and the five dependent lanes are treated as undetected when it is absent, with an install hint. The six lanes that do not need jq stay selectable. plan-review-convergence.md now cites the section by name instead of a line number that moves. Regression guards added to the renamed test file: review.md must keep the jq probe and must name all five dependent lanes, and no workflow may cite review.md by line number. Workflow-size baseline and the 19 install-parity goldens regenerated for the review.md / plan-review-convergence.md edits. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_015TCwhbMuY37DzRMCfzTABJ * fix(#2589): decide the ship verification gate on a single verification.status read Isolated review finding (medium). Pre-fix, ship.md captured verification.status ONCE into $VERIFICATION and picked status / next_action / next_command off that cached JSON with three jq calls. --pick takes a single dot-path field, so the mechanical conversion issued three separate queries up front: three node spawns that each re-read the phase VERIFICATION.md and re-derive the commit-time vs mtime staleness comparison, on every ship — including the common passing path that never uses the two message fields. It also meant the gate's verdict and the message shown to the user were derived from three reads with no guarantee they observed the same state. The gate now reads `status` once and decides. The two message-only fields are read on the blocking path only, after PHASE_VERIFICATION_INCOMPLETE is already determined — so the passing path costs one query instead of three, and a concurrent write between reads can no longer make the gate and its message disagree, because the block/allow decision no longer depends on them. Adding a multi-field --pick to gsd-tools would have collapsed this to one query, but that changes the flag's output contract and belongs in its own change. Regression guard in tests/fix-2589-workflow-jq-dependency.test.cjs: ship.md must read verification.status exactly three times total, the block decision must follow the status read, and next_action / next_command must both appear after the blocking prose so they cannot drift back onto the passing path. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_015TCwhbMuY37DzRMCfzTABJ * docs(#2589): document the jq prerequisite for the five reviewer lanes that need it /gsd-review's ollama, lm_studio, llama_cpp, opencode, and agy lanes parse JSON GSD does not produce (OpenAI-compatible /v1/chat/completions responses, OpenCode's JSONL event stream, Antigravity's conversation cache), so they require jq on PATH. Nothing in docs/ said so. Records which five lanes need it, which six do not, that reading configured models/hosts/budgets no longer requires jq at all, and what /gsd-review now does when jq is absent. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_015TCwhbMuY37DzRMCfzTABJ * chore(#2589): backfill changeset pr number (#2673) --------- Co-authored-by: Claude Opus 5 (1M context) --- .changeset/2589-config-get-no-jq.md | 5 + docs/COMMANDS.md | 2 + gsd-core/workflows/ai-integration-phase.md | 8 +- gsd-core/workflows/autonomous.md | 4 +- gsd-core/workflows/debug.md | 4 +- gsd-core/workflows/eval-review.md | 2 +- gsd-core/workflows/plan-phase.md | 2 +- gsd-core/workflows/plan-review-convergence.md | 5 +- gsd-core/workflows/review.md | 74 ++++--- gsd-core/workflows/ship.md | 19 +- tests/autonomous-converge.test.cjs | 15 +- .../fix-2589-workflow-jq-dependency.test.cjs | 201 ++++++++++++++++++ .../golden-install-parity/antigravity.json | 16 +- .../golden-install-parity/augment.json | 16 +- .../golden-install-parity/claude-local.json | 16 +- .../golden-install-parity/claude.json | 16 +- .../fixtures/golden-install-parity/cline.json | 16 +- .../golden-install-parity/codebuddy.json | 16 +- .../fixtures/golden-install-parity/codex.json | 16 +- .../golden-install-parity/copilot.json | 16 +- .../golden-install-parity/cursor.json | 16 +- .../golden-install-parity/hermes.json | 16 +- .../fixtures/golden-install-parity/kilo.json | 16 +- .../golden-install-parity/kimi-code.json | 16 +- .../fixtures/golden-install-parity/kimi.json | 16 +- .../golden-install-parity/opencode.json | 16 +- tests/fixtures/golden-install-parity/pi.json | 16 +- .../fixtures/golden-install-parity/qwen.json | 16 +- .../fixtures/golden-install-parity/trae.json | 16 +- .../golden-install-parity/windsurf.json | 16 +- .../fixtures/golden-install-parity/zcode.json | 16 +- tests/workflow-size-baseline.json | 16 +- 32 files changed, 450 insertions(+), 211 deletions(-) create mode 100644 .changeset/2589-config-get-no-jq.md create mode 100644 tests/fix-2589-workflow-jq-dependency.test.cjs diff --git a/.changeset/2589-config-get-no-jq.md b/.changeset/2589-config-get-no-jq.md new file mode 100644 index 000000000..507a92acd --- /dev/null +++ b/.changeset/2589-config-get-no-jq.md @@ -0,0 +1,5 @@ +--- +type: Fixed +pr: 2673 +--- +**Reviewer/workflow config lookups no longer silently drop the configured value on machines without `jq`** — `review.md`, `plan-phase.md`, `ship.md`, `debug.md`, `autonomous.md`, `ai-integration-phase.md`, and `eval-review.md` now resolve `config-get` scalars with the native `--raw` flag and `resolve-model` / `resolve-execution` / `verification.status` object fields with `--pick`, instead of piping through `jq`. Previously, on a stock Windows/Git-Bash box with no `jq` on PATH, the `… | jq …` stage failed (exit 127), the failure was swallowed by `2>/dev/null || `, and the configured per-lane model/host/budget came back empty — so the lane fell back to CLI defaults (e.g. `~/.codex/config.toml` instead of the configured `review.models.codex`) with no diagnostic, and the `autonomous.md` verify gate could misroute on an empty status. The legitimate structured-JSON `jq` sites that parse HTTP `curl` responses (`.choices[0]`, `jq -rs`, `jq -n --rawfile`) are untouched — only the jq-replaceable config/model/verify lookups moved to the native flags. Because those sites remain, `/gsd-review` now probes for `jq` up front and reports the `ollama`, `lm_studio`, `llama_cpp`, `opencode`, and `antigravity` lanes as unavailable with an install hint when it is missing, instead of running them into empty output; the `gemini`, `claude`, `codex`, `coderabbit`, `qwen`, and `cursor` lanes stay selectable with no `jq` installed. (#2589) diff --git a/docs/COMMANDS.md b/docs/COMMANDS.md index a5798ca05..ab019c9e7 100644 --- a/docs/COMMANDS.md +++ b/docs/COMMANDS.md @@ -1453,6 +1453,8 @@ Reviewers are prompted to verify the plan's claims against the actual repository | `--llama-cpp` | Include llama.cpp server review | | `--all` | Include all available reviewers (CLI + local model servers) | +**`jq` prerequisite (some lanes only):** `--ollama`, `--lm-studio`, `--llama-cpp`, `--opencode`, and `--agy` parse JSON that GSD does not produce itself — OpenAI-compatible `/v1/chat/completions` responses, OpenCode's JSONL event stream, and Antigravity's conversation cache — so they require [`jq`](https://jqlang.org/download/) on your `PATH`. If `jq` is missing, `/gsd-review` reports those five as unavailable and tells you to install it, rather than running them into an empty review. The other six lanes (`--gemini`, `--claude`, `--codex`, `--coderabbit`, `--qwen`, `--cursor`) need no `jq`. Reading your configured models, hosts, and token budgets never requires `jq`. + **Default reviewer behavior (no flags):** - If `review.default_reviewers` is **unset**, `/gsd-review` runs all detected reviewers (current default behavior). - If `review.default_reviewers` is **set**, `/gsd-review` runs only that subset (for example `["gemini","codex"]`). diff --git a/gsd-core/workflows/ai-integration-phase.md b/gsd-core/workflows/ai-integration-phase.md index 742c704a4..2351ee4ae 100644 --- a/gsd-core/workflows/ai-integration-phase.md +++ b/gsd-core/workflows/ai-integration-phase.md @@ -33,10 +33,10 @@ Parse JSON for: `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `padded Resolve agent models: ```bash -SELECTOR_MODEL=$(gsd_run query resolve-model gsd-framework-selector 2>/dev/null | jq -r '.model' 2>/dev/null || true) -RESEARCHER_MODEL=$(gsd_run query resolve-model gsd-ai-researcher 2>/dev/null | jq -r '.model' 2>/dev/null || true) -DOMAIN_MODEL=$(gsd_run query resolve-model gsd-domain-researcher 2>/dev/null | jq -r '.model' 2>/dev/null || true) -PLANNER_MODEL=$(gsd_run query resolve-model gsd-eval-planner 2>/dev/null | jq -r '.model' 2>/dev/null || true) +SELECTOR_MODEL=$(gsd_run query resolve-model gsd-framework-selector --pick model 2>/dev/null || true) +RESEARCHER_MODEL=$(gsd_run query resolve-model gsd-ai-researcher --pick model 2>/dev/null || true) +DOMAIN_MODEL=$(gsd_run query resolve-model gsd-domain-researcher --pick model 2>/dev/null || true) +PLANNER_MODEL=$(gsd_run query resolve-model gsd-eval-planner --pick model 2>/dev/null || true) ``` Check config: diff --git a/gsd-core/workflows/autonomous.md b/gsd-core/workflows/autonomous.md index 958ac94e7..7a4f91c93 100644 --- a/gsd-core/workflows/autonomous.md +++ b/gsd-core/workflows/autonomous.md @@ -490,7 +490,7 @@ Skill(skill="gsd-code-review", args="${PHASE_NUM} --fix --auto") After execute, read canonical verification: ```bash -VERIFY_STATUS=$(gsd_run query verification.status "${PHASE_DIR}" 2>/dev/null | jq -r '.status//empty') +VERIFY_STATUS=$(gsd_run query verification.status "${PHASE_DIR}" --pick status 2>/dev/null || true) ``` If `PHASE_DIR` is absent, re-fetch `init.phase-op ${PHASE_NUM}` and parse `phase_dir`. @@ -548,7 +548,7 @@ Skill(skill="gsd-execute-phase", args="${PHASE_NUM} --no-transition") Re-read verification status: ```bash -VERIFY_STATUS=$(gsd_run query verification.status "${PHASE_DIR}" 2>/dev/null | jq -r '.status//empty') +VERIFY_STATUS=$(gsd_run query verification.status "${PHASE_DIR}" --pick status 2>/dev/null || true) ``` If `passed` or `human_needed`: route normally. diff --git a/gsd-core/workflows/debug.md b/gsd-core/workflows/debug.md index 99943ff80..3eef7b474 100644 --- a/gsd-core/workflows/debug.md +++ b/gsd-core/workflows/debug.md @@ -27,12 +27,12 @@ Extract `commit_docs` and `config.response_language` from init JSON. Extract `de Resolve debugger model: ```bash -debugger_model=$(gsd_run query resolve-model gsd-debugger 2>/dev/null | jq -r '.model' 2>/dev/null || true) +debugger_model=$(gsd_run query resolve-model gsd-debugger --pick model 2>/dev/null || true) ``` Read TDD mode from config: ```bash -TDD_MODE=$(gsd_run query config-get workflow.tdd_mode 2>/dev/null | jq -r 'if type == "boolean" then tostring else . end' 2>/dev/null || echo "false") +TDD_MODE=$(gsd_run query config-get workflow.tdd_mode --raw 2>/dev/null || echo "false") ``` ## 1a. LIST subcommand diff --git a/gsd-core/workflows/eval-review.md b/gsd-core/workflows/eval-review.md index 70aeeea0d..c2577fed1 100644 --- a/gsd-core/workflows/eval-review.md +++ b/gsd-core/workflows/eval-review.md @@ -24,7 +24,7 @@ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi Parse: `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `padded_phase`, `commit_docs`. ```bash -AUDITOR_MODEL=$(gsd_run query resolve-model gsd-eval-auditor 2>/dev/null | jq -r '.model' 2>/dev/null || true) +AUDITOR_MODEL=$(gsd_run query resolve-model gsd-eval-auditor --pick model 2>/dev/null || true) AGENT_SKILLS_AUDITOR=$(gsd_run query agent-skills gsd-eval-auditor) ``` diff --git a/gsd-core/workflows/plan-phase.md b/gsd-core/workflows/plan-phase.md index c3136c29a..8d446b4e7 100644 --- a/gsd-core/workflows/plan-phase.md +++ b/gsd-core/workflows/plan-phase.md @@ -1292,7 +1292,7 @@ Skipping bounce step. **Read pass count:** ```bash BOUNCE_PASSES=$(gsd_run query config-get workflow.plan_bounce_passes 2>/dev/null || echo "2") -BOUNCE_SCRIPT=$(gsd_run query config-get workflow.plan_bounce_script 2>/dev/null | jq -r '.' 2>/dev/null || true) +BOUNCE_SCRIPT=$(gsd_run query config-get workflow.plan_bounce_script --raw 2>/dev/null || true) ``` Display banner: diff --git a/gsd-core/workflows/plan-review-convergence.md b/gsd-core/workflows/plan-review-convergence.md index 396032e1e..6ddcd83bc 100644 --- a/gsd-core/workflows/plan-review-convergence.md +++ b/gsd-core/workflows/plan-review-convergence.md @@ -82,8 +82,9 @@ Then re-run: /gsd:plan-review-convergence {PHASE} if [ -z "$REVIEWER_FLAGS" ]; then DEFAULT_REVIEWERS_JSON=$(gsd_run query config-get review.default_reviewers 2>/dev/null || echo "") if ! command -v jq >/dev/null 2>&1; then - # jq is a documented production dependency (review.md:244 — "install jq if - # missing"). If it is absent we cannot inspect the configured default, so + # jq is a documented production dependency (review.md, detect_clis — the + # "jq-dependent reviewer lanes" note). If it is absent we cannot inspect + # the configured default (it is a JSON array, not a --raw/--pick scalar), so # fail safe with --codex and surface the reason rather than silently # reproducing the #2315 override under degraded conditions. echo "WARNING: jq not on PATH — cannot read review.default_reviewers; falling back to --codex (#2315)" >&2 diff --git a/gsd-core/workflows/review.md b/gsd-core/workflows/review.md index 45c9c8bb5..410a0e892 100644 --- a/gsd-core/workflows/review.md +++ b/gsd-core/workflows/review.md @@ -26,19 +26,44 @@ command -v cursor-agent >/dev/null 2>&1 && echo "cursor:available" || echo "curs command -v agy >/dev/null 2>&1 && echo "antigravity:available" || echo "antigravity:missing" # Check local model servers (OpenAI-compatible HTTP API — no CLI binary required) -OLLAMA_HOST=$(gsd_run query config-get review.ollama_host 2>/dev/null | jq -r '.' 2>/dev/null || echo "") +OLLAMA_HOST=$(gsd_run query config-get review.ollama_host --raw 2>/dev/null || echo "") if [ -z "$OLLAMA_HOST" ] || [ "$OLLAMA_HOST" = "null" ]; then OLLAMA_HOST="http://localhost:11434"; fi curl -s --max-time 2 "${OLLAMA_HOST}/v1/models" >/dev/null 2>&1 && echo "ollama:available" || echo "ollama:missing" -LM_STUDIO_HOST=$(gsd_run query config-get review.lm_studio_host 2>/dev/null | jq -r '.' 2>/dev/null || echo "") +LM_STUDIO_HOST=$(gsd_run query config-get review.lm_studio_host --raw 2>/dev/null || echo "") if [ -z "$LM_STUDIO_HOST" ] || [ "$LM_STUDIO_HOST" = "null" ]; then LM_STUDIO_HOST="http://localhost:1234"; fi curl -s --max-time 2 "${LM_STUDIO_HOST}/v1/models" >/dev/null 2>&1 && echo "lm_studio:available" || echo "lm_studio:missing" -LLAMA_CPP_HOST=$(gsd_run query config-get review.llama_cpp_host 2>/dev/null | jq -r '.' 2>/dev/null || echo "") +LLAMA_CPP_HOST=$(gsd_run query config-get review.llama_cpp_host --raw 2>/dev/null || echo "") if [ -z "$LLAMA_CPP_HOST" ] || [ "$LLAMA_CPP_HOST" = "null" ]; then LLAMA_CPP_HOST="http://localhost:8080"; fi curl -s --max-time 2 "${LLAMA_CPP_HOST}/v1/models" >/dev/null 2>&1 && echo "llama_cpp:available" || echo "llama_cpp:missing" + +# jq prerequisite (#2589). The config/model/budget lookups in this workflow no +# longer need jq — they use the native --raw/--pick flags. But the lanes listed +# under "jq-dependent reviewer lanes" below parse structured JSON that gsd-tools +# does not emit (OpenAI-compatible /v1/chat/completions responses, opencode's +# JSONL event stream, agy's conversation cache), so they cannot run without jq. +# Probe it here rather than letting each lane swallow exit 127 into empty output. +command -v jq >/dev/null 2>&1 && echo "jq:available" || echo "jq:missing" ``` +**jq-dependent reviewer lanes.** `jq` is a production prerequisite for the +`ollama`, `lm_studio`, `llama_cpp`, `opencode`, and `antigravity` lanes only. If +`detect_clis` reports `jq:missing`, treat those five as **undetected** — they +follow the same "known-but-undetected" path as a missing CLI (info note, ignored; +and if they were the only selected reviewers, fail with the actionable message +below rather than producing an empty review). Tell the user to install jq: + +``` +NOTE: jq is not on PATH — the ollama, lm_studio, llama_cpp, opencode, and +antigravity reviewer lanes are unavailable. Install jq (https://jqlang.org/download/) +or select a lane that does not require it (--gemini, --claude, --codex, +--coderabbit, --qwen, --cursor). +``` + +The remaining lanes (`gemini`, `claude`, `codex`, `coderabbit`, `qwen`, `cursor`) +do not require jq and must stay selectable on a jq-less host. + Parse flags from `$ARGUMENTS`: - `--gemini` → include Gemini - `--claude` → include Claude @@ -241,20 +266,21 @@ Note: `INSTRUCTIONS_BLOCK_FILE`, `ROADMAP_SECTION_FILE`, and `PHASE_DIR` come fr Read model preferences from planning config. Null/missing values fall back to CLI defaults. ```bash -# JSON scalars from gsd-tools.cjs query; use jq -r to strip JSON string quotes (install jq if missing) -GEMINI_MODEL=$(gsd_run query config-get review.models.gemini 2>/dev/null | jq -r '.' 2>/dev/null || true) -CLAUDE_MODEL=$(gsd_run query config-get review.models.claude 2>/dev/null | jq -r '.' 2>/dev/null || true) -CODEX_MODEL=$(gsd_run query config-get review.models.codex 2>/dev/null | jq -r '.' 2>/dev/null || true) -OPENCODE_MODEL=$(gsd_run query config-get review.models.opencode 2>/dev/null | jq -r '.' 2>/dev/null || true) +# JSON scalars from gsd-tools.cjs query; --raw strips the JSON quotes natively +# (no jq dependency — jq is absent on stock Windows/Git-Bash, #2589) +GEMINI_MODEL=$(gsd_run query config-get review.models.gemini --raw 2>/dev/null || true) +CLAUDE_MODEL=$(gsd_run query config-get review.models.claude --raw 2>/dev/null || true) +CODEX_MODEL=$(gsd_run query config-get review.models.codex --raw 2>/dev/null || true) +OPENCODE_MODEL=$(gsd_run query config-get review.models.opencode --raw 2>/dev/null || true) # review.models.agy, when set, is passed to agy as --model (escape hatch for a # pinned model that 404s server-side); otherwise agy uses its persisted default. -AGY_MODEL=$(gsd_run query config-get review.models.agy 2>/dev/null | jq -r '.' 2>/dev/null || true) +AGY_MODEL=$(gsd_run query config-get review.models.agy --raw 2>/dev/null || true) # Reasoning effort per reviewer (#2481). Empty unless the host's effortSurface # axis is `argv`. Pass --attempt N to walk ADR-443's escalation ladder. -CLAUDE_EFFORT_ARGS=$(gsd_run query resolve-execution gsd-plan-checker --host claude 2>/dev/null | jq -r '.effort_argv_string // ""' 2>/dev/null || true) -CODEX_EFFORT_ARGS=$(gsd_run query resolve-execution gsd-plan-checker --host codex 2>/dev/null | jq -r '.effort_argv_string // ""' 2>/dev/null || true) -OPENCODE_EFFORT_ARGS=$(gsd_run query resolve-execution gsd-plan-checker --host opencode 2>/dev/null | jq -r '.effort_argv_string // ""' 2>/dev/null || true) +CLAUDE_EFFORT_ARGS=$(gsd_run query resolve-execution gsd-plan-checker --host claude --pick effort_argv_string 2>/dev/null || true) +CODEX_EFFORT_ARGS=$(gsd_run query resolve-execution gsd-plan-checker --host codex --pick effort_argv_string 2>/dev/null || true) +OPENCODE_EFFORT_ARGS=$(gsd_run query resolve-execution gsd-plan-checker --host opencode --pick effort_argv_string 2>/dev/null || true) ``` **No hook-trust bypass (#2479):** the codex invocations below deliberately pass no @@ -644,9 +670,9 @@ prepare_trimmed_prompt_for_reviewer() { } # Resolve prompt budget for Ollama: per-reviewer override > global default > null -OLLAMA_REVIEWER_BUDGET=$(gsd_run query config-get review.max_prompt_tokens_per_reviewer.ollama 2>/dev/null | jq -r '.' 2>/dev/null || echo "null") +OLLAMA_REVIEWER_BUDGET=$(gsd_run query config-get review.max_prompt_tokens_per_reviewer.ollama --raw 2>/dev/null || echo "null") if [ -z "$OLLAMA_REVIEWER_BUDGET" ] || [ "$OLLAMA_REVIEWER_BUDGET" = "null" ]; then - OLLAMA_REVIEWER_BUDGET=$(gsd_run query config-get review.max_prompt_tokens 2>/dev/null | jq -r '.' 2>/dev/null || echo "null") + OLLAMA_REVIEWER_BUDGET=$(gsd_run query config-get review.max_prompt_tokens --raw 2>/dev/null || echo "null") fi # Apply budget trim for Ollama if a budget is configured @@ -670,9 +696,9 @@ if [ -n "$OLLAMA_REVIEWER_BUDGET" ] && [ "$OLLAMA_REVIEWER_BUDGET" != "null" ] & fi if [ "$OLLAMA_SKIP" != "1" ]; then -OLLAMA_HOST=$(gsd_run query config-get review.ollama_host 2>/dev/null | jq -r '.' 2>/dev/null || echo "") +OLLAMA_HOST=$(gsd_run query config-get review.ollama_host --raw 2>/dev/null || echo "") if [ -z "$OLLAMA_HOST" ] || [ "$OLLAMA_HOST" = "null" ]; then OLLAMA_HOST="http://localhost:11434"; fi -OLLAMA_MODEL=$(gsd_run query config-get review.models.ollama 2>/dev/null | jq -r '.' 2>/dev/null || echo "") +OLLAMA_MODEL=$(gsd_run query config-get review.models.ollama --raw 2>/dev/null || echo "") if [ -z "$OLLAMA_MODEL" ] || [ "$OLLAMA_MODEL" = "null" ]; then OLLAMA_MODEL=$(curl -s --max-time 2 "${OLLAMA_HOST}/v1/models" 2>/dev/null | jq -r '.data[0].id // "llama3"' 2>/dev/null || echo "llama3") fi @@ -692,9 +718,9 @@ fi **LM Studio (local, OpenAI-compatible):** ```bash # Resolve prompt budget for LM Studio: per-reviewer override > global default > null -LM_STUDIO_REVIEWER_BUDGET=$(gsd_run query config-get review.max_prompt_tokens_per_reviewer.lm_studio 2>/dev/null | jq -r '.' 2>/dev/null || echo "null") +LM_STUDIO_REVIEWER_BUDGET=$(gsd_run query config-get review.max_prompt_tokens_per_reviewer.lm_studio --raw 2>/dev/null || echo "null") if [ -z "$LM_STUDIO_REVIEWER_BUDGET" ] || [ "$LM_STUDIO_REVIEWER_BUDGET" = "null" ]; then - LM_STUDIO_REVIEWER_BUDGET=$(gsd_run query config-get review.max_prompt_tokens 2>/dev/null | jq -r '.' 2>/dev/null || echo "null") + LM_STUDIO_REVIEWER_BUDGET=$(gsd_run query config-get review.max_prompt_tokens --raw 2>/dev/null || echo "null") fi # Apply budget trim for LM Studio if a budget is configured @@ -718,9 +744,9 @@ if [ -n "$LM_STUDIO_REVIEWER_BUDGET" ] && [ "$LM_STUDIO_REVIEWER_BUDGET" != "nul fi if [ "$LM_STUDIO_SKIP" != "1" ]; then -LM_STUDIO_HOST=$(gsd_run query config-get review.lm_studio_host 2>/dev/null | jq -r '.' 2>/dev/null || echo "") +LM_STUDIO_HOST=$(gsd_run query config-get review.lm_studio_host --raw 2>/dev/null || echo "") if [ -z "$LM_STUDIO_HOST" ] || [ "$LM_STUDIO_HOST" = "null" ]; then LM_STUDIO_HOST="http://localhost:1234"; fi -LM_STUDIO_MODEL=$(gsd_run query config-get review.models.lm_studio 2>/dev/null | jq -r '.' 2>/dev/null || echo "") +LM_STUDIO_MODEL=$(gsd_run query config-get review.models.lm_studio --raw 2>/dev/null || echo "") if [ -z "$LM_STUDIO_MODEL" ] || [ "$LM_STUDIO_MODEL" = "null" ]; then LM_STUDIO_MODEL=$(curl -s --max-time 2 "${LM_STUDIO_HOST}/v1/models" 2>/dev/null | jq -r '.data[0].id // "local-model"' 2>/dev/null || echo "local-model") fi @@ -745,9 +771,9 @@ fi **llama.cpp (local, OpenAI-compatible):** ```bash # Resolve prompt budget for llama.cpp: per-reviewer override > global default > null -LLAMA_CPP_REVIEWER_BUDGET=$(gsd_run query config-get review.max_prompt_tokens_per_reviewer.llama_cpp 2>/dev/null | jq -r '.' 2>/dev/null || echo "null") +LLAMA_CPP_REVIEWER_BUDGET=$(gsd_run query config-get review.max_prompt_tokens_per_reviewer.llama_cpp --raw 2>/dev/null || echo "null") if [ -z "$LLAMA_CPP_REVIEWER_BUDGET" ] || [ "$LLAMA_CPP_REVIEWER_BUDGET" = "null" ]; then - LLAMA_CPP_REVIEWER_BUDGET=$(gsd_run query config-get review.max_prompt_tokens 2>/dev/null | jq -r '.' 2>/dev/null || echo "null") + LLAMA_CPP_REVIEWER_BUDGET=$(gsd_run query config-get review.max_prompt_tokens --raw 2>/dev/null || echo "null") fi # Apply budget trim for llama.cpp if a budget is configured @@ -771,9 +797,9 @@ if [ -n "$LLAMA_CPP_REVIEWER_BUDGET" ] && [ "$LLAMA_CPP_REVIEWER_BUDGET" != "nul fi if [ "$LLAMA_CPP_SKIP" != "1" ]; then -LLAMA_CPP_HOST=$(gsd_run query config-get review.llama_cpp_host 2>/dev/null | jq -r '.' 2>/dev/null || echo "") +LLAMA_CPP_HOST=$(gsd_run query config-get review.llama_cpp_host --raw 2>/dev/null || echo "") if [ -z "$LLAMA_CPP_HOST" ] || [ "$LLAMA_CPP_HOST" = "null" ]; then LLAMA_CPP_HOST="http://localhost:8080"; fi -LLAMA_CPP_MODEL=$(gsd_run query config-get review.models.llama_cpp 2>/dev/null | jq -r '.' 2>/dev/null || echo "") +LLAMA_CPP_MODEL=$(gsd_run query config-get review.models.llama_cpp --raw 2>/dev/null || echo "") if [ -z "$LLAMA_CPP_MODEL" ] || [ "$LLAMA_CPP_MODEL" = "null" ]; then LLAMA_CPP_MODEL=$(curl -s --max-time 2 "${LLAMA_CPP_HOST}/v1/models" 2>/dev/null | jq -r '.data[0].id // "local-model"' 2>/dev/null || echo "local-model") fi diff --git a/gsd-core/workflows/ship.md b/gsd-core/workflows/ship.md index ed7b2ebbe..d739c514c 100644 --- a/gsd-core/workflows/ship.md +++ b/gsd-core/workflows/ship.md @@ -52,12 +52,19 @@ Verify the work is ready to ship: 1. **Verification passed?** ```bash - VERIFICATION=$(gsd_run query verification.status "${PHASE_DIR}" 2>/dev/null) - STATUS=$(printf '%s' "$VERIFICATION" | jq -r '.status' 2>/dev/null || echo "") - NEXT_ACTION=$(printf '%s' "$VERIFICATION" | jq -r '.next_action' 2>/dev/null || echo "") - NEXT_COMMAND=$(printf '%s' "$VERIFICATION" | jq -r '.next_command' 2>/dev/null || echo "") + # The gate decides on ONE read. --pick takes a single field, so the two + # human-facing fields are read only on the blocking path below — never on the + # passing path — rather than issuing three queries up front (#2589). + STATUS=$(gsd_run query verification.status "${PHASE_DIR}" --pick status 2>/dev/null || echo "") ``` - Only `passed` may ship. If `$STATUS` is `passed`, verification is complete — continue to the next preflight check. Any other value (including `gaps_found`, `human_needed`, `missing`, and `unknown`) blocks with `PHASE_VERIFICATION_INCOMPLETE`: present `$NEXT_ACTION` to the user and, when `$NEXT_COMMAND` is non-empty, show it as the command to run next. The query already handles missing files and unexpected values, so no per-status arm is needed. + Only `passed` may ship. If `$STATUS` is `passed`, verification is complete — continue to the next preflight check; do not read any further verification field. + + Any other value (including `gaps_found`, `human_needed`, `missing`, and `unknown`) blocks with `PHASE_VERIFICATION_INCOMPLETE`. Only then, read the two message fields: + ```bash + NEXT_ACTION=$(gsd_run query verification.status "${PHASE_DIR}" --pick next_action 2>/dev/null || echo "") + NEXT_COMMAND=$(gsd_run query verification.status "${PHASE_DIR}" --pick next_command 2>/dev/null || echo "") + ``` + Present `$NEXT_ACTION` to the user and, when `$NEXT_COMMAND` is non-empty, show it as the command to run next. These two are message text only — the block/allow decision has already been made from `$STATUS`, so a concurrent write between the reads cannot change the gate's verdict. The query already handles missing files and unexpected values, so no per-status arm is needed. 2. **Clean working tree?** ```bash @@ -346,7 +353,7 @@ Report: "PR #{number} created: {url}" Before prompting the user, check if an external review command is configured: ```bash -REVIEW_CMD=$(gsd_run query config-get workflow.code_review_command 2>/dev/null | jq -r '.' 2>/dev/null || echo "") +REVIEW_CMD=$(gsd_run query config-get workflow.code_review_command --raw 2>/dev/null || echo "") ``` If `REVIEW_CMD` is non-empty and not `"null"`, run the external review: diff --git a/tests/autonomous-converge.test.cjs b/tests/autonomous-converge.test.cjs index ca398e70b..95a3e34cb 100644 --- a/tests/autonomous-converge.test.cjs +++ b/tests/autonomous-converge.test.cjs @@ -174,15 +174,12 @@ describe('autonomous verification deferral contract', () => { assert.ok(waitIdx !== -1, 'workflow must document the post-execution verification read'); assert.ok(humanNeededIdx > waitIdx, 'human_needed branch must follow verification status read'); assert.ok(promoteIdx > humanNeededIdx, 'human_needed branch must contain the promotion action'); - assert.match( - section, - /VERIFY_STATUS=\$\(gsd_run query verification\.status "\$\{PHASE_DIR\}" 2>\/dev\/null \| jq -r '\.status\/\/empty'\)/, - 'autonomous must route human validation through canonical verification.status', - ); - assert.match( - section, - /jq -r '\.status\/\/empty'/, - 'autonomous must parse the projected canonical status value', + // #2589: the verification read uses the native --pick flag (no jq dependency). + // String-based check (not a regex literal) so the assertion stays robust to + // shell metacharacters in the snippet and parses cleanly under espree. + assert.ok( + section.includes('VERIFY_STATUS=$(gsd_run query verification.status "${PHASE_DIR}" --pick status 2>/dev/null || true)'), + 'autonomous must route human validation through canonical verification.status via the native --pick flag', ); assert.doesNotMatch( section, diff --git a/tests/fix-2589-workflow-jq-dependency.test.cjs b/tests/fix-2589-workflow-jq-dependency.test.cjs new file mode 100644 index 000000000..e866cbfd7 --- /dev/null +++ b/tests/fix-2589-workflow-jq-dependency.test.cjs @@ -0,0 +1,201 @@ +'use strict'; + +/** + * #2589 — config-get / resolve-model / verification.status lookups must not + * depend on jq. + * + * The workflows resolved configured scalars / model ids / verify status with a + * `gsd_run query … | jq … 2>/dev/null || ` shape. On any machine + * without jq (the default on Windows / Git-Bash) the jq stage fails with exit + * 127, that failure is swallowed by `2>/dev/null` and the trailing `|| default`, + * so the variable comes back EMPTY — the configured value is silently dropped + * and the lane falls back to CLI defaults with no diagnostic. + * + * gsd-tools ships native flags that do the same job with no external dep: + * config-get --raw (strips JSON quotes off a scalar) + * resolve-model --pick model (descends an object) + * verification.status --pick status + * + * This is a SOURCE-INVARIANT test over the shipped workflow documents: the bug + * lives in the workflow text, so the regression guard asserts the jq-dependent + * shapes never return. Workflow .md files are runtime-loaded config documents, + * so reading them with readFileSync + regex is the sanctioned seam here (the + * no-source-grep lint targets src/ + bin/lib/, not config/state docs). + */ + +const { describe, test } = require('node:test'); +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const path = require('node:path'); + +const ROOT = path.join(__dirname, '..'); +const WF = path.join(ROOT, 'gsd-core', 'workflows'); + +// The workflows that #2589 audited. Scoped explicitly so a new workflow +// introducing the same smell is caught by the general guard below, while these +// known-fixed files are checked for the exact offending shapes. +const AUDITED = [ + 'review.md', + 'plan-phase.md', + 'ship.md', + 'debug.md', + 'autonomous.md', + 'ai-integration-phase.md', + 'eval-review.md', +]; + +function readWorkflow(name) { + const p = path.join(WF, name); + return fs.existsSync(p) ? fs.readFileSync(p, 'utf-8') : null; +} + +describe('#2589: config/model/verify lookups do not depend on jq', () => { + test('config-get lookups use --raw, not a jq pipe', () => { + // Matches: config-get ... | jq (any key, any jq program). + // The native --raw flag strips JSON quotes off a scalar with no jq. + const re = /config-get\b[^|\n]*\|\s*jq\b/; + for (const name of AUDITED) { + const content = readWorkflow(name); + if (content == null) continue; + const matches = content.match(new RegExp(re.source, 'g')); + assert.deepEqual( + matches || [], + [], + `${name}: config-get lookups must use --raw, not a jq pipe (found ${JSON.stringify(matches)})`, + ); + } + }); + + test('resolve-model lookups use --pick, not a jq pipe', () => { + // resolve-model returns an object; the native --pick descends it. + const re = /resolve-model\b[^|\n]*\|\s*jq\b/; + for (const name of AUDITED) { + const content = readWorkflow(name); + if (content == null) continue; + const matches = content.match(new RegExp(re.source, 'g')); + assert.deepEqual( + matches || [], + [], + `${name}: resolve-model lookups must use --pick, not a jq pipe (found ${JSON.stringify(matches)})`, + ); + } + }); + + test('verification.status lookups use --pick, not a jq pipe', () => { + const re = /verification\.status\b[^|\n]*\|\s*jq\b/; + for (const name of AUDITED) { + const content = readWorkflow(name); + if (content == null) continue; + const matches = content.match(new RegExp(re.source, 'g')); + assert.deepEqual( + matches || [], + [], + `${name}: verification.status lookups must use --pick, not a jq pipe (found ${JSON.stringify(matches)})`, + ); + } + }); + + test('general guard: no audited workflow pipes any gsd_run query to jq', () => { + // Belt-and-suspenders: the jq-replaceable query command families. This + // catches a future regression on any of them (or a sibling like + // resolve-execution, which also supports --pick) without enumerating keys. + const re = /gsd_run\s+query\s+(config-get|resolve-model|resolve-execution|verification\.status\b)[^|\n]*\|\s*jq\b/; + for (const name of AUDITED) { + const content = readWorkflow(name); + if (content == null) continue; + const matches = content.match(new RegExp(re.source, 'g')); + assert.deepEqual( + matches || [], + [], + `${name}: no gsd_run query (config-get|resolve-model|resolve-execution|verification.status) may pipe to jq (found ${JSON.stringify(matches)})`, + ); + } + }); + + test('ship.md decides the verification gate on a single verification.status read', () => { + // Pre-fix, ship.md captured verification.status ONCE and picked three fields + // off the cached JSON with jq. --pick takes a single field, so a naive + // conversion issues three queries up front — 3x the spawn cost on the common + // passing path, and three reads that are not guaranteed to observe the same + // state. The gate must read `status` once and decide; the two message-only + // fields belong on the blocking path. + const content = readWorkflow('ship.md'); + assert.ok(content, 'ship.md must exist'); + + const statusIdx = content.indexOf('STATUS=$(gsd_run query verification.status'); + assert.notEqual(statusIdx, -1, 'ship.md must read verification.status --pick status'); + + const picks = content.match(/gsd_run query verification\.status "\$\{PHASE_DIR\}" --pick (\w+)/g) || []; + assert.deepEqual( + picks.length, + 3, + `ship.md should read status once plus the two message fields, found ${picks.length}`, + ); + + // The gate's own read must come first, and the message-only reads must both + // sit after the blocking prose — i.e. they are not on the passing path. + const blockIdx = content.indexOf('PHASE_VERIFICATION_INCOMPLETE'); + assert.ok(blockIdx > statusIdx, 'the block decision must follow the status read'); + for (const field of ['next_action', 'next_command']) { + const idx = content.indexOf(`--pick ${field}`); + assert.notEqual(idx, -1, `ship.md must still surface ${field}`); + assert.ok( + idx > blockIdx, + `${field} must be read only on the blocking path, not before the gate decides`, + ); + } + }); + + test('review.md still declares jq a prerequisite for the lanes that genuinely need it', () => { + // Dropping the jq pipes from the CONFIG lookups must not drop the project's + // jq-prerequisite declaration: the ollama / lm_studio / llama_cpp / opencode + // / agy lanes parse HTTP + CLI JSON that gsd-tools does not emit, so they + // still hard-require jq. Removing the declaration (as the first cut of this + // fix did) leaves those lanes silently degrading on a jq-less host — the + // exact defect class #2589 exists to close. + const content = readWorkflow('review.md'); + assert.ok(content, 'review.md must exist'); + assert.match( + content, + /command -v jq >\/dev\/null 2>&1 && echo "jq:available" \|\| echo "jq:missing"/, + 'review.md detect_clis must probe jq alongside the other reviewer prerequisites', + ); + for (const lane of ['ollama', 'lm_studio', 'llama_cpp', 'opencode', 'antigravity']) { + assert.ok( + new RegExp(`jq-dependent reviewer lanes[\\s\\S]*\\b${lane}\\b`).test(content), + `review.md must name ${lane} as a jq-dependent lane`, + ); + } + }); + + test('no workflow cites the jq prerequisite by a stale review.md line number', () => { + // plan-review-convergence.md used to cite "review.md:244". That anchor moved + // when the jq pipes were replaced, so cross-references must be by name. + for (const name of fs.readdirSync(WF).filter((f) => f.endsWith('.md'))) { + const content = readWorkflow(name); + if (content == null) continue; + const stale = content.match(/review\.md:\d+/g); + assert.deepEqual( + stale || [], + [], + `${name}: cite review.md by section name, not a line number (found ${JSON.stringify(stale)})`, + ); + } + }); + + test('resolve-execution lookups use --pick, not a jq pipe (sibling of resolve-model)', () => { + // resolve-execution returns an object (model/profile/effort/effort_argv_string); + // the native --pick descends it — same defect class as resolve-model. + const re = /resolve-execution\b[^|\n]*\|\s*jq\b/; + for (const name of AUDITED) { + const content = readWorkflow(name); + if (content == null) continue; + const matches = content.match(new RegExp(re.source, 'g')); + assert.deepEqual( + matches || [], + [], + `${name}: resolve-execution lookups must use --pick, not a jq pipe (found ${JSON.stringify(matches)})`, + ); + } + }); +}); diff --git a/tests/fixtures/golden-install-parity/antigravity.json b/tests/fixtures/golden-install-parity/antigravity.json index f3827ef42..b2df66e25 100644 --- a/tests/fixtures/golden-install-parity/antigravity.json +++ b/tests/fixtures/golden-install-parity/antigravity.json @@ -215,18 +215,18 @@ "gsd-core/workflows/add-phase.md": "820572da6367308c", "gsd-core/workflows/add-tests.md": "6eb1897c448bbd21", "gsd-core/workflows/add-todo.md": "69af1e11021d6765", - "gsd-core/workflows/ai-integration-phase.md": "fe881bd1429758df", + "gsd-core/workflows/ai-integration-phase.md": "95585dbc4065f09c", "gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c", "gsd-core/workflows/audit-fix.md": "fa1c3b3cb96b9031", "gsd-core/workflows/audit-milestone.md": "15f452aa6848dcce", "gsd-core/workflows/audit-uat.md": "ea8ddd910ed16ba4", - "gsd-core/workflows/autonomous.md": "603ce2019835f00e", + "gsd-core/workflows/autonomous.md": "4c772d7c708706d1", "gsd-core/workflows/check-todos.md": "d0c7e3e4df580256", "gsd-core/workflows/cleanup.md": "260c5e46afc1c174", "gsd-core/workflows/code-review-fix.md": "6898f3a043ad67f6", "gsd-core/workflows/code-review.md": "df18d974eb510930", "gsd-core/workflows/complete-milestone.md": "f54214679be6a98a", - "gsd-core/workflows/debug.md": "d573ab06cf0fb93c", + "gsd-core/workflows/debug.md": "ac800460012dc18a", "gsd-core/workflows/diagnose-issues.md": "1a70a1bcd3b98511", "gsd-core/workflows/discovery-phase.md": "222887a5b2094a50", "gsd-core/workflows/discuss-phase-assumptions.md": "51e0f07b1676fc70", @@ -247,7 +247,7 @@ "gsd-core/workflows/do.md": "6be997df35e9e82b", "gsd-core/workflows/docs-update.md": "0b3023a3caa2123f", "gsd-core/workflows/edit-phase.md": "fc932e82ba1f585a", - "gsd-core/workflows/eval-review.md": "9e8b169c05098b57", + "gsd-core/workflows/eval-review.md": "610775f4968f7807", "gsd-core/workflows/execute-phase.md": "8c0521b091bbc1b5", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "1832b97d0923fa67", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "0404bcd32f47715e", @@ -287,11 +287,11 @@ "gsd-core/workflows/onboard.md": "af12b0573b14ce7f", "gsd-core/workflows/pause-work.md": "564de32981a24337", "gsd-core/workflows/plan-milestone-gaps.md": "dd6a4b3a8b05ab6e", - "gsd-core/workflows/plan-phase.md": "7c75d6eaccd0d393", + "gsd-core/workflows/plan-phase.md": "165e3fcee7184009", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "ab0b22244c3389aa", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261", - "gsd-core/workflows/plan-review-convergence.md": "b06546c4bf47e521", + "gsd-core/workflows/plan-review-convergence.md": "bd6f71b3c63a2411", "gsd-core/workflows/plant-seed.md": "1dddbafe892d8cf3", "gsd-core/workflows/pr-branch.md": "dc5598ae8accdecd", "gsd-core/workflows/profile-user.md": "3a3f8e417de0074c", @@ -301,14 +301,14 @@ "gsd-core/workflows/remove-phase.md": "23b9eb0858a2535e", "gsd-core/workflows/remove-workspace.md": "1058d1d3160eb120", "gsd-core/workflows/resume-project.md": "98e2cf8908e73a52", - "gsd-core/workflows/review.md": "b6a91a893a94b56b", + "gsd-core/workflows/review.md": "8ca65b75fb2aa8e2", "gsd-core/workflows/scan.md": "46c5a73f6f682023", "gsd-core/workflows/secure-phase.md": "9564c529052d1d36", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "6d25100a9de15b31", "gsd-core/workflows/settings-integrations.md": "e1fda52e8c9afa5f", "gsd-core/workflows/settings.md": "9b7e0a34f4f41a80", - "gsd-core/workflows/ship.md": "86a7a14b72ed27c4", + "gsd-core/workflows/ship.md": "165bed31823086e0", "gsd-core/workflows/sketch-wrap-up.md": "0f842a609851a401", "gsd-core/workflows/sketch.md": "c42d993c1e9a6240", "gsd-core/workflows/smart-entry.md": "6d887ca5d9df9185", diff --git a/tests/fixtures/golden-install-parity/augment.json b/tests/fixtures/golden-install-parity/augment.json index 96f5968f5..28fe28801 100644 --- a/tests/fixtures/golden-install-parity/augment.json +++ b/tests/fixtures/golden-install-parity/augment.json @@ -286,18 +286,18 @@ "gsd-core/workflows/add-phase.md": "ac43883e2d8e34d8", "gsd-core/workflows/add-tests.md": "7e7268602f9e1b2a", "gsd-core/workflows/add-todo.md": "5dc04cfaa0b6b072", - "gsd-core/workflows/ai-integration-phase.md": "0d6d7183ae189fbe", + "gsd-core/workflows/ai-integration-phase.md": "308378c9044a52e1", "gsd-core/workflows/analyze-dependencies.md": "52942af10f140717", "gsd-core/workflows/audit-fix.md": "7650bcb334e622a6", "gsd-core/workflows/audit-milestone.md": "2beceadd10d8d9b1", "gsd-core/workflows/audit-uat.md": "fcfbec501620b564", - "gsd-core/workflows/autonomous.md": "7e5683728ef33707", + "gsd-core/workflows/autonomous.md": "aed5e67104346cc2", "gsd-core/workflows/check-todos.md": "c484e472cff0e4e3", "gsd-core/workflows/cleanup.md": "df79d1dc7b84d736", "gsd-core/workflows/code-review-fix.md": "5c4fe9921dcd9939", "gsd-core/workflows/code-review.md": "926565c83e9b9f67", "gsd-core/workflows/complete-milestone.md": "8f98d7b05793cf4a", - "gsd-core/workflows/debug.md": "35b63fca942d3e7d", + "gsd-core/workflows/debug.md": "b2232823c619cc63", "gsd-core/workflows/diagnose-issues.md": "7ec385c89a3672d4", "gsd-core/workflows/discovery-phase.md": "0aa8d8d872b53858", "gsd-core/workflows/discuss-phase-assumptions.md": "cbc8ea4ddc4553fb", @@ -318,7 +318,7 @@ "gsd-core/workflows/do.md": "90df4f1fe248cdf3", "gsd-core/workflows/docs-update.md": "a320371be70f43d8", "gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04", - "gsd-core/workflows/eval-review.md": "32d3d7e80ab2bfc7", + "gsd-core/workflows/eval-review.md": "c2933259ff7fb6ac", "gsd-core/workflows/execute-phase.md": "fcc3181bc5593f8f", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "f7782680c2b8ad6b", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "ab70374e44eb85cd", @@ -358,11 +358,11 @@ "gsd-core/workflows/onboard.md": "f29c4fbef3b473fd", "gsd-core/workflows/pause-work.md": "f2b33bba5593d422", "gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc", - "gsd-core/workflows/plan-phase.md": "7487bfc69d75cdfa", + "gsd-core/workflows/plan-phase.md": "4dfd63c95b80741a", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "49f58c3f75be3eb5", - "gsd-core/workflows/plan-review-convergence.md": "1c31d4905c1556c8", + "gsd-core/workflows/plan-review-convergence.md": "db69460dd4df0d29", "gsd-core/workflows/plant-seed.md": "9596db80ab282c6f", "gsd-core/workflows/pr-branch.md": "c87db7ac8c28be1b", "gsd-core/workflows/profile-user.md": "59e5066c5c66572a", @@ -372,14 +372,14 @@ "gsd-core/workflows/remove-phase.md": "df9a45f0b1880999", "gsd-core/workflows/remove-workspace.md": "f67860c795fb4bfe", "gsd-core/workflows/resume-project.md": "f28da1200e4545f4", - "gsd-core/workflows/review.md": "cc0125d717a29c25", + "gsd-core/workflows/review.md": "0e440626c82bd1d9", "gsd-core/workflows/scan.md": "e1c12d542e61720d", "gsd-core/workflows/secure-phase.md": "fda2361739e511ee", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "414db4dbea97ba44", "gsd-core/workflows/settings-integrations.md": "effcef778d4a855f", "gsd-core/workflows/settings.md": "85ceb482dc713169", - "gsd-core/workflows/ship.md": "69abfd9013f0f207", + "gsd-core/workflows/ship.md": "65a7fd84d4657a5e", "gsd-core/workflows/sketch-wrap-up.md": "5f5ebb6a80d610c6", "gsd-core/workflows/sketch.md": "efc5a794b4bd6e78", "gsd-core/workflows/smart-entry.md": "004b4060eab97cb9", diff --git a/tests/fixtures/golden-install-parity/claude-local.json b/tests/fixtures/golden-install-parity/claude-local.json index e508c8acf..436eee65b 100644 --- a/tests/fixtures/golden-install-parity/claude-local.json +++ b/tests/fixtures/golden-install-parity/claude-local.json @@ -285,18 +285,18 @@ "gsd-core/workflows/add-phase.md": "b3c61dc9b4d799ed", "gsd-core/workflows/add-tests.md": "040ed419b025f233", "gsd-core/workflows/add-todo.md": "5f85e6eb5b1136d2", - "gsd-core/workflows/ai-integration-phase.md": "82085726efcdd3b9", + "gsd-core/workflows/ai-integration-phase.md": "bb2ea9e09ffee8a2", "gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c", "gsd-core/workflows/audit-fix.md": "25fee59ee209ec62", "gsd-core/workflows/audit-milestone.md": "06f3bbe4578f4839", "gsd-core/workflows/audit-uat.md": "1c4a02a8c1ab930f", - "gsd-core/workflows/autonomous.md": "6adf957e64518d15", + "gsd-core/workflows/autonomous.md": "e2cfff95bc98501c", "gsd-core/workflows/check-todos.md": "d36898ef5423b4ee", "gsd-core/workflows/cleanup.md": "8490f912cd609049", "gsd-core/workflows/code-review-fix.md": "cebe2ea7da350b22", "gsd-core/workflows/code-review.md": "460976795665bb3e", "gsd-core/workflows/complete-milestone.md": "529119d0ff9664d9", - "gsd-core/workflows/debug.md": "c3c05b35337ec488", + "gsd-core/workflows/debug.md": "df85786f6b7c0b5b", "gsd-core/workflows/diagnose-issues.md": "517bc4b60d4b81c4", "gsd-core/workflows/discovery-phase.md": "6d691c38a911e27d", "gsd-core/workflows/discuss-phase-assumptions.md": "4b8e75593d5abe6f", @@ -317,7 +317,7 @@ "gsd-core/workflows/do.md": "0f7b639ff37660b5", "gsd-core/workflows/docs-update.md": "7aef1019ce141558", "gsd-core/workflows/edit-phase.md": "dbbb6191f5a8b65e", - "gsd-core/workflows/eval-review.md": "11620e0dc4a003dd", + "gsd-core/workflows/eval-review.md": "c0cf2d0c5dd9df36", "gsd-core/workflows/execute-phase.md": "abebe1ef79aa5786", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "9a1f3deffb4dab14", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "ea0ebff5ac00fee6", @@ -357,11 +357,11 @@ "gsd-core/workflows/onboard.md": "f7d0dbcfd94ab130", "gsd-core/workflows/pause-work.md": "da902807d2213204", "gsd-core/workflows/plan-milestone-gaps.md": "7679fac068d1009d", - "gsd-core/workflows/plan-phase.md": "06016fe9285bf9db", + "gsd-core/workflows/plan-phase.md": "b4f63c7f924f915d", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "b810f9f2374e23a5", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261", - "gsd-core/workflows/plan-review-convergence.md": "7db990f90908a5e4", + "gsd-core/workflows/plan-review-convergence.md": "df545a376a37f33d", "gsd-core/workflows/plant-seed.md": "727991ecd521b617", "gsd-core/workflows/pr-branch.md": "513f6cff722eff2d", "gsd-core/workflows/profile-user.md": "7a7786eb43efda0d", @@ -371,14 +371,14 @@ "gsd-core/workflows/remove-phase.md": "8effc8742d58a11a", "gsd-core/workflows/remove-workspace.md": "64b73daff58b9aec", "gsd-core/workflows/resume-project.md": "af9761bcec0f6fe9", - "gsd-core/workflows/review.md": "145646378b6243ec", + "gsd-core/workflows/review.md": "9c3ca42e01b7eb72", "gsd-core/workflows/scan.md": "686e787d3704db90", "gsd-core/workflows/secure-phase.md": "a7272ff8163a61ac", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "94d61da368e9f85b", "gsd-core/workflows/settings-integrations.md": "9e0108e01e78832c", "gsd-core/workflows/settings.md": "a1a35e58da33b23b", - "gsd-core/workflows/ship.md": "09f11bb3ebf6253f", + "gsd-core/workflows/ship.md": "fc19b46dee6e0354", "gsd-core/workflows/sketch-wrap-up.md": "d52a5462bafda830", "gsd-core/workflows/sketch.md": "9bc12018344f8110", "gsd-core/workflows/smart-entry.md": "70445afde3a9ead6", diff --git a/tests/fixtures/golden-install-parity/claude.json b/tests/fixtures/golden-install-parity/claude.json index c5e737b05..737e39f10 100644 --- a/tests/fixtures/golden-install-parity/claude.json +++ b/tests/fixtures/golden-install-parity/claude.json @@ -214,18 +214,18 @@ "gsd-core/workflows/add-phase.md": "b2c06b7ed648658c", "gsd-core/workflows/add-tests.md": "5168c1de6321484c", "gsd-core/workflows/add-todo.md": "1841baacd58b7593", - "gsd-core/workflows/ai-integration-phase.md": "2c7e009d64dea436", + "gsd-core/workflows/ai-integration-phase.md": "164ed8e703474267", "gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c", "gsd-core/workflows/audit-fix.md": "7650bcb334e622a6", "gsd-core/workflows/audit-milestone.md": "72a79876d97da5c1", "gsd-core/workflows/audit-uat.md": "e11db0d74c2a7405", - "gsd-core/workflows/autonomous.md": "722397c04272dfaa", + "gsd-core/workflows/autonomous.md": "b26d23f3eb102969", "gsd-core/workflows/check-todos.md": "166cc8d4f308b064", "gsd-core/workflows/cleanup.md": "df79d1dc7b84d736", "gsd-core/workflows/code-review-fix.md": "6639daf911771bbf", "gsd-core/workflows/code-review.md": "28c98880c09fc89c", "gsd-core/workflows/complete-milestone.md": "c3798c50670f6801", - "gsd-core/workflows/debug.md": "b01d76b258ee5e72", + "gsd-core/workflows/debug.md": "e1fea0a6465e55eb", "gsd-core/workflows/diagnose-issues.md": "4a22064390778eab", "gsd-core/workflows/discovery-phase.md": "89a3084e40430039", "gsd-core/workflows/discuss-phase-assumptions.md": "32b06def681647aa", @@ -246,7 +246,7 @@ "gsd-core/workflows/do.md": "97a456ceda9d4513", "gsd-core/workflows/docs-update.md": "ea47bd2d5a0d1d85", "gsd-core/workflows/edit-phase.md": "8323bfe10faa0c0a", - "gsd-core/workflows/eval-review.md": "7c2f5ff8cc4d06e5", + "gsd-core/workflows/eval-review.md": "02cefe2dbdd0af52", "gsd-core/workflows/execute-phase.md": "f88215925dc01075", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "d2020c5e01c7bd7f", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "ab70374e44eb85cd", @@ -286,11 +286,11 @@ "gsd-core/workflows/onboard.md": "0f0af11294d31715", "gsd-core/workflows/pause-work.md": "5716362557f44ce4", "gsd-core/workflows/plan-milestone-gaps.md": "1b43d12812f7bc1e", - "gsd-core/workflows/plan-phase.md": "b83d7c220f132cc9", + "gsd-core/workflows/plan-phase.md": "52940b65ba6655b8", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261", - "gsd-core/workflows/plan-review-convergence.md": "35fd32d839a2e4ba", + "gsd-core/workflows/plan-review-convergence.md": "ddfd8e3ba2bdd974", "gsd-core/workflows/plant-seed.md": "3dd79b65ad08e456", "gsd-core/workflows/pr-branch.md": "ab157cd8e49621dd", "gsd-core/workflows/profile-user.md": "84fff69a630033ed", @@ -300,14 +300,14 @@ "gsd-core/workflows/remove-phase.md": "ada8a0546c686483", "gsd-core/workflows/remove-workspace.md": "015cde237c75be39", "gsd-core/workflows/resume-project.md": "7f8dc986f0f35d96", - "gsd-core/workflows/review.md": "4d4975c16d79515d", + "gsd-core/workflows/review.md": "4e1ee8ab952db2dc", "gsd-core/workflows/scan.md": "a71e3009998cfc57", "gsd-core/workflows/secure-phase.md": "ba807b4862d7f3c9", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "339def28c34b0797", "gsd-core/workflows/settings-integrations.md": "9c9db643112b2371", "gsd-core/workflows/settings.md": "d3f05e22f21bfb3a", - "gsd-core/workflows/ship.md": "61531360b6ac5a80", + "gsd-core/workflows/ship.md": "cb11a33217e0fc45", "gsd-core/workflows/sketch-wrap-up.md": "121ed4b8127abf04", "gsd-core/workflows/sketch.md": "ac7a5265c6970bdf", "gsd-core/workflows/smart-entry.md": "99c73236890605a1", diff --git a/tests/fixtures/golden-install-parity/cline.json b/tests/fixtures/golden-install-parity/cline.json index b7d9fc472..72f476b38 100644 --- a/tests/fixtures/golden-install-parity/cline.json +++ b/tests/fixtures/golden-install-parity/cline.json @@ -218,18 +218,18 @@ "gsd-core/workflows/add-phase.md": "2558614a81b9e977", "gsd-core/workflows/add-tests.md": "0dd47f73dd3ca32a", "gsd-core/workflows/add-todo.md": "13a465fa41ba5aec", - "gsd-core/workflows/ai-integration-phase.md": "7794d0223c23f396", + "gsd-core/workflows/ai-integration-phase.md": "670b0a143b1ccf98", "gsd-core/workflows/analyze-dependencies.md": "52942af10f140717", "gsd-core/workflows/audit-fix.md": "3db85a39cd17e98c", "gsd-core/workflows/audit-milestone.md": "6af8e2b59dc092f0", "gsd-core/workflows/audit-uat.md": "1fb7b2ab9d587c8f", - "gsd-core/workflows/autonomous.md": "cc5217b1b2238a4c", + "gsd-core/workflows/autonomous.md": "dbdbc526853b4a7f", "gsd-core/workflows/check-todos.md": "5f6b887a365ce692", "gsd-core/workflows/cleanup.md": "6ed44dc47fd9972b", "gsd-core/workflows/code-review-fix.md": "5d2b23be4d1d850b", "gsd-core/workflows/code-review.md": "c8db2eccd1ca9cc5", "gsd-core/workflows/complete-milestone.md": "85be65035bcd4e41", - "gsd-core/workflows/debug.md": "7dedb4c3d1efaf5e", + "gsd-core/workflows/debug.md": "cc34bc7fa35c5d75", "gsd-core/workflows/diagnose-issues.md": "873902ec4e4bf869", "gsd-core/workflows/discovery-phase.md": "0fa751163960abc2", "gsd-core/workflows/discuss-phase-assumptions.md": "3aa5692386943399", @@ -250,7 +250,7 @@ "gsd-core/workflows/do.md": "6b3cad91b3bd1419", "gsd-core/workflows/docs-update.md": "7eb7095ca86d506f", "gsd-core/workflows/edit-phase.md": "9c9fadc047c61d74", - "gsd-core/workflows/eval-review.md": "17fc9b4c4f7e1c74", + "gsd-core/workflows/eval-review.md": "f67caf4dba0586d1", "gsd-core/workflows/execute-phase.md": "769064cfeb1baf4a", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "1b3558cb8f41b65a", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "e01459552d587863", @@ -290,11 +290,11 @@ "gsd-core/workflows/onboard.md": "f29c4fbef3b473fd", "gsd-core/workflows/pause-work.md": "3530607514b0ac00", "gsd-core/workflows/plan-milestone-gaps.md": "bafdc6945cd2bd87", - "gsd-core/workflows/plan-phase.md": "acb779981626bef8", + "gsd-core/workflows/plan-phase.md": "36c8d7bf34528c6c", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "4b0a2cb0f4f28179", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "090c31e22b1508fe", - "gsd-core/workflows/plan-review-convergence.md": "cb03bd703057f395", + "gsd-core/workflows/plan-review-convergence.md": "47193d4e29b3f64a", "gsd-core/workflows/plant-seed.md": "94b54ead506385d3", "gsd-core/workflows/pr-branch.md": "9923878a4f6a2d91", "gsd-core/workflows/profile-user.md": "4c51320e7caa09ca", @@ -304,14 +304,14 @@ "gsd-core/workflows/remove-phase.md": "e336350f8113a328", "gsd-core/workflows/remove-workspace.md": "79d3669cc9eb0b10", "gsd-core/workflows/resume-project.md": "e23981178fa37b3d", - "gsd-core/workflows/review.md": "eb0a2e4e10bf92ab", + "gsd-core/workflows/review.md": "5f9ffdb708203c27", "gsd-core/workflows/scan.md": "f0bd2f64f5530598", "gsd-core/workflows/secure-phase.md": "1a2e389991fc6263", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "69f3a19bf2c61160", "gsd-core/workflows/settings-integrations.md": "a2682897e663fec4", "gsd-core/workflows/settings.md": "17a5de032a64eb22", - "gsd-core/workflows/ship.md": "358433c2e3412069", + "gsd-core/workflows/ship.md": "9c0b622da71862f4", "gsd-core/workflows/sketch-wrap-up.md": "1f44789553180d84", "gsd-core/workflows/sketch.md": "fadc2cbe6763c010", "gsd-core/workflows/smart-entry.md": "22ef18e897b67907", diff --git a/tests/fixtures/golden-install-parity/codebuddy.json b/tests/fixtures/golden-install-parity/codebuddy.json index a9df20ed4..a84e188e8 100644 --- a/tests/fixtures/golden-install-parity/codebuddy.json +++ b/tests/fixtures/golden-install-parity/codebuddy.json @@ -286,18 +286,18 @@ "gsd-core/workflows/add-phase.md": "ac43883e2d8e34d8", "gsd-core/workflows/add-tests.md": "7e7268602f9e1b2a", "gsd-core/workflows/add-todo.md": "5dc04cfaa0b6b072", - "gsd-core/workflows/ai-integration-phase.md": "0d6d7183ae189fbe", + "gsd-core/workflows/ai-integration-phase.md": "308378c9044a52e1", "gsd-core/workflows/analyze-dependencies.md": "52942af10f140717", "gsd-core/workflows/audit-fix.md": "7650bcb334e622a6", "gsd-core/workflows/audit-milestone.md": "2beceadd10d8d9b1", "gsd-core/workflows/audit-uat.md": "fcfbec501620b564", - "gsd-core/workflows/autonomous.md": "7e5683728ef33707", + "gsd-core/workflows/autonomous.md": "aed5e67104346cc2", "gsd-core/workflows/check-todos.md": "c484e472cff0e4e3", "gsd-core/workflows/cleanup.md": "df79d1dc7b84d736", "gsd-core/workflows/code-review-fix.md": "5c4fe9921dcd9939", "gsd-core/workflows/code-review.md": "926565c83e9b9f67", "gsd-core/workflows/complete-milestone.md": "8f98d7b05793cf4a", - "gsd-core/workflows/debug.md": "35b63fca942d3e7d", + "gsd-core/workflows/debug.md": "b2232823c619cc63", "gsd-core/workflows/diagnose-issues.md": "8219a1e1213f498e", "gsd-core/workflows/discovery-phase.md": "0aa8d8d872b53858", "gsd-core/workflows/discuss-phase-assumptions.md": "cbc8ea4ddc4553fb", @@ -318,7 +318,7 @@ "gsd-core/workflows/do.md": "90df4f1fe248cdf3", "gsd-core/workflows/docs-update.md": "a320371be70f43d8", "gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04", - "gsd-core/workflows/eval-review.md": "32d3d7e80ab2bfc7", + "gsd-core/workflows/eval-review.md": "c2933259ff7fb6ac", "gsd-core/workflows/execute-phase.md": "79e703c637e2d7b1", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "f7782680c2b8ad6b", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "ab70374e44eb85cd", @@ -358,11 +358,11 @@ "gsd-core/workflows/onboard.md": "f29c4fbef3b473fd", "gsd-core/workflows/pause-work.md": "f2b33bba5593d422", "gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc", - "gsd-core/workflows/plan-phase.md": "ad8c507f0c8910ad", + "gsd-core/workflows/plan-phase.md": "9242c6d8c447afa8", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "49f58c3f75be3eb5", - "gsd-core/workflows/plan-review-convergence.md": "1c31d4905c1556c8", + "gsd-core/workflows/plan-review-convergence.md": "db69460dd4df0d29", "gsd-core/workflows/plant-seed.md": "9596db80ab282c6f", "gsd-core/workflows/pr-branch.md": "c87db7ac8c28be1b", "gsd-core/workflows/profile-user.md": "1419f1dad1853da0", @@ -372,14 +372,14 @@ "gsd-core/workflows/remove-phase.md": "df9a45f0b1880999", "gsd-core/workflows/remove-workspace.md": "f67860c795fb4bfe", "gsd-core/workflows/resume-project.md": "f28da1200e4545f4", - "gsd-core/workflows/review.md": "cc0125d717a29c25", + "gsd-core/workflows/review.md": "0e440626c82bd1d9", "gsd-core/workflows/scan.md": "e1c12d542e61720d", "gsd-core/workflows/secure-phase.md": "fda2361739e511ee", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "414db4dbea97ba44", "gsd-core/workflows/settings-integrations.md": "effcef778d4a855f", "gsd-core/workflows/settings.md": "85ceb482dc713169", - "gsd-core/workflows/ship.md": "69abfd9013f0f207", + "gsd-core/workflows/ship.md": "65a7fd84d4657a5e", "gsd-core/workflows/sketch-wrap-up.md": "2aba89ecd8f41a0d", "gsd-core/workflows/sketch.md": "2913d90416a3c0f0", "gsd-core/workflows/smart-entry.md": "004b4060eab97cb9", diff --git a/tests/fixtures/golden-install-parity/codex.json b/tests/fixtures/golden-install-parity/codex.json index 1f6199621..37455cefa 100644 --- a/tests/fixtures/golden-install-parity/codex.json +++ b/tests/fixtures/golden-install-parity/codex.json @@ -321,18 +321,18 @@ "gsd-core/workflows/add-phase.md": "d7a401b48271964f", "gsd-core/workflows/add-tests.md": "f2f30978099144d3", "gsd-core/workflows/add-todo.md": "fc26decc33e3e6a4", - "gsd-core/workflows/ai-integration-phase.md": "0954a83ab8315cc3", + "gsd-core/workflows/ai-integration-phase.md": "e83102e5bd9b7c50", "gsd-core/workflows/analyze-dependencies.md": "f799abc00907377f", "gsd-core/workflows/audit-fix.md": "677638d4081117c5", "gsd-core/workflows/audit-milestone.md": "803d30eefb11b5ae", "gsd-core/workflows/audit-uat.md": "2564078edb15b5e9", - "gsd-core/workflows/autonomous.md": "92f08626d4aea668", + "gsd-core/workflows/autonomous.md": "47bf003aefcf806b", "gsd-core/workflows/check-todos.md": "a9a6c39859451fa7", "gsd-core/workflows/cleanup.md": "2f7d77d1b13d0410", "gsd-core/workflows/code-review-fix.md": "90ad86d4781b00ff", "gsd-core/workflows/code-review.md": "d4cf8c064cd81229", "gsd-core/workflows/complete-milestone.md": "bd3d10386edf1121", - "gsd-core/workflows/debug.md": "bc148322c56b3dc6", + "gsd-core/workflows/debug.md": "e8f19fa60b96e516", "gsd-core/workflows/diagnose-issues.md": "1ee3c02cf691c1db", "gsd-core/workflows/discovery-phase.md": "ae93d9d808c8c018", "gsd-core/workflows/discuss-phase-assumptions.md": "b10e736af63ef213", @@ -353,7 +353,7 @@ "gsd-core/workflows/do.md": "b30d5b8eca60ef79", "gsd-core/workflows/docs-update.md": "bf32efe90219d3dd", "gsd-core/workflows/edit-phase.md": "e592a4d85ce5380f", - "gsd-core/workflows/eval-review.md": "c89a63285ead961e", + "gsd-core/workflows/eval-review.md": "4d367d1e028629bd", "gsd-core/workflows/execute-phase.md": "7bcc0a33f91336c7", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "cd8678d082d6e191", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "ab70374e44eb85cd", @@ -393,11 +393,11 @@ "gsd-core/workflows/onboard.md": "f022a379ede13512", "gsd-core/workflows/pause-work.md": "a217770ecafcb2e0", "gsd-core/workflows/plan-milestone-gaps.md": "73d46f77c50a0690", - "gsd-core/workflows/plan-phase.md": "7302646bb14b5326", + "gsd-core/workflows/plan-phase.md": "c6c3a4faf0b2aa2c", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "d838b87563feedf6", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "f10975692cbd036e", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "f5edc589cab52a7b", - "gsd-core/workflows/plan-review-convergence.md": "6f904fb1befa8991", + "gsd-core/workflows/plan-review-convergence.md": "b4e8d6a46e62d68a", "gsd-core/workflows/plant-seed.md": "25b0c824f7eff40e", "gsd-core/workflows/pr-branch.md": "d13e1cc81de40896", "gsd-core/workflows/profile-user.md": "6d23d0594082c78a", @@ -407,14 +407,14 @@ "gsd-core/workflows/remove-phase.md": "9ee0fddd11a0d9d4", "gsd-core/workflows/remove-workspace.md": "d0160c5d05bcb2bb", "gsd-core/workflows/resume-project.md": "9965f87eb278f7f8", - "gsd-core/workflows/review.md": "b8108a114467fafe", + "gsd-core/workflows/review.md": "b16cb18b657562ae", "gsd-core/workflows/scan.md": "dcd6aac25ef39251", "gsd-core/workflows/secure-phase.md": "3ba89719288dd3f3", "gsd-core/workflows/session-report.md": "dd8fa011c9394075", "gsd-core/workflows/settings-advanced.md": "2431433811616f76", "gsd-core/workflows/settings-integrations.md": "d6d222af8690d09b", "gsd-core/workflows/settings.md": "3c8bd45b123b5db6", - "gsd-core/workflows/ship.md": "afaf8471951f9786", + "gsd-core/workflows/ship.md": "f2c6d7991e23623f", "gsd-core/workflows/sketch-wrap-up.md": "07724a390fbb43f6", "gsd-core/workflows/sketch.md": "3f6ed885d2ee5528", "gsd-core/workflows/smart-entry.md": "2914f9d54d365931", diff --git a/tests/fixtures/golden-install-parity/copilot.json b/tests/fixtures/golden-install-parity/copilot.json index 4bb5d3df9..d63f047a6 100644 --- a/tests/fixtures/golden-install-parity/copilot.json +++ b/tests/fixtures/golden-install-parity/copilot.json @@ -216,18 +216,18 @@ "gsd-core/workflows/add-phase.md": "f4fbfad54be5d46f", "gsd-core/workflows/add-tests.md": "bc656e055e09138d", "gsd-core/workflows/add-todo.md": "0f6cdf522df6c87e", - "gsd-core/workflows/ai-integration-phase.md": "eaf002dfaa8e33e3", + "gsd-core/workflows/ai-integration-phase.md": "beba57424c9b358c", "gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c", "gsd-core/workflows/audit-fix.md": "8658bba76328a84f", "gsd-core/workflows/audit-milestone.md": "57d7fdc4687a451e", "gsd-core/workflows/audit-uat.md": "5ea0e30548ed0933", - "gsd-core/workflows/autonomous.md": "dd972ddde9663295", + "gsd-core/workflows/autonomous.md": "39dbe19d74c14e75", "gsd-core/workflows/check-todos.md": "333b04e0d144596b", "gsd-core/workflows/cleanup.md": "90d4119b70f32fce", "gsd-core/workflows/code-review-fix.md": "af3bc2b68165ca44", "gsd-core/workflows/code-review.md": "cb452c4a36c37353", "gsd-core/workflows/complete-milestone.md": "c3d961cc123a7492", - "gsd-core/workflows/debug.md": "ba9a2139851faf2a", + "gsd-core/workflows/debug.md": "3673587bd99c5fa7", "gsd-core/workflows/diagnose-issues.md": "8311fee5f2d6f3b5", "gsd-core/workflows/discovery-phase.md": "c97943b1f3d3db96", "gsd-core/workflows/discuss-phase-assumptions.md": "e3aee2fdbf145e42", @@ -248,7 +248,7 @@ "gsd-core/workflows/do.md": "ba9dd204343ab48b", "gsd-core/workflows/docs-update.md": "f64b067d0d729f04", "gsd-core/workflows/edit-phase.md": "8667c28b22b1599f", - "gsd-core/workflows/eval-review.md": "1ae2d3d3fbf72893", + "gsd-core/workflows/eval-review.md": "6fd7f2b0770b48f1", "gsd-core/workflows/execute-phase.md": "d9ad04be8e897208", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "ca37f91f7bd6f05c", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "e0ec3d9748a0fed9", @@ -288,11 +288,11 @@ "gsd-core/workflows/onboard.md": "357b7ae1367560dd", "gsd-core/workflows/pause-work.md": "9ce66367be6c40db", "gsd-core/workflows/plan-milestone-gaps.md": "5cf589802d08bdf3", - "gsd-core/workflows/plan-phase.md": "4bf4ae1e25fc3a11", + "gsd-core/workflows/plan-phase.md": "7159628ad9cf76a9", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "bb052483744f0a6d", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261", - "gsd-core/workflows/plan-review-convergence.md": "0afd8eb4b0689bc9", + "gsd-core/workflows/plan-review-convergence.md": "972d475548d48809", "gsd-core/workflows/plant-seed.md": "aac7ffbbec7e7a22", "gsd-core/workflows/pr-branch.md": "2833905f119b5722", "gsd-core/workflows/profile-user.md": "e2135bdd20e17620", @@ -302,14 +302,14 @@ "gsd-core/workflows/remove-phase.md": "e262654e319d1bc4", "gsd-core/workflows/remove-workspace.md": "e7e5b5b1e0cc9d81", "gsd-core/workflows/resume-project.md": "40db7f350f5866d8", - "gsd-core/workflows/review.md": "49d74c87b31abce8", + "gsd-core/workflows/review.md": "eaafaf8ba23f356e", "gsd-core/workflows/scan.md": "76aad4e70281c364", "gsd-core/workflows/secure-phase.md": "d60aa4053154e52f", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "230a658de9c017a6", "gsd-core/workflows/settings-integrations.md": "58acee11162b4a4e", "gsd-core/workflows/settings.md": "876e954acd64cb18", - "gsd-core/workflows/ship.md": "268aa7019ac36c6a", + "gsd-core/workflows/ship.md": "b523ad905d1e1f0d", "gsd-core/workflows/sketch-wrap-up.md": "f2590cb6ddbfad94", "gsd-core/workflows/sketch.md": "9cbf5860b6a005e5", "gsd-core/workflows/smart-entry.md": "93f90cd7a12dbbc7", diff --git a/tests/fixtures/golden-install-parity/cursor.json b/tests/fixtures/golden-install-parity/cursor.json index 76a4cfe71..e002fbc20 100644 --- a/tests/fixtures/golden-install-parity/cursor.json +++ b/tests/fixtures/golden-install-parity/cursor.json @@ -286,18 +286,18 @@ "gsd-core/workflows/add-phase.md": "b2c06b7ed648658c", "gsd-core/workflows/add-tests.md": "100349c1d23af47f", "gsd-core/workflows/add-todo.md": "8f2b65d7ce28e4fd", - "gsd-core/workflows/ai-integration-phase.md": "ed2ca9b215566e8e", + "gsd-core/workflows/ai-integration-phase.md": "6d4a309d7176d5d5", "gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c", "gsd-core/workflows/audit-fix.md": "7650bcb334e622a6", "gsd-core/workflows/audit-milestone.md": "72a79876d97da5c1", "gsd-core/workflows/audit-uat.md": "e11db0d74c2a7405", - "gsd-core/workflows/autonomous.md": "4b20eda9a0b587ce", + "gsd-core/workflows/autonomous.md": "409a340e36b90331", "gsd-core/workflows/check-todos.md": "18a405fea9a842dc", "gsd-core/workflows/cleanup.md": "c0c243aa070b993b", "gsd-core/workflows/code-review-fix.md": "716d0967b023eec0", "gsd-core/workflows/code-review.md": "4389abffb5fbb520", "gsd-core/workflows/complete-milestone.md": "2281ee0a53264ca5", - "gsd-core/workflows/debug.md": "1f1105c4a62977a9", + "gsd-core/workflows/debug.md": "46922b963895362a", "gsd-core/workflows/diagnose-issues.md": "1b6787debfcb8c56", "gsd-core/workflows/discovery-phase.md": "13393233272db9b6", "gsd-core/workflows/discuss-phase-assumptions.md": "33a6038c7fea05f9", @@ -318,7 +318,7 @@ "gsd-core/workflows/do.md": "53839c6429ae1234", "gsd-core/workflows/docs-update.md": "215b0122c4d2b1e5", "gsd-core/workflows/edit-phase.md": "8323bfe10faa0c0a", - "gsd-core/workflows/eval-review.md": "9389c58f7384972d", + "gsd-core/workflows/eval-review.md": "e8a7646e1699a17d", "gsd-core/workflows/execute-phase.md": "e8ddb24f9cdca5f0", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "d2020c5e01c7bd7f", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "06b54ecd4015c64c", @@ -358,11 +358,11 @@ "gsd-core/workflows/onboard.md": "7d0c7449b84c7997", "gsd-core/workflows/pause-work.md": "5716362557f44ce4", "gsd-core/workflows/plan-milestone-gaps.md": "1b43d12812f7bc1e", - "gsd-core/workflows/plan-phase.md": "aaf2a8f5851b9d62", + "gsd-core/workflows/plan-phase.md": "862053b9255b27d5", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "e06ccd4d4c0703fb", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "3bed01c3c906ac52", - "gsd-core/workflows/plan-review-convergence.md": "68139431c21ef46d", + "gsd-core/workflows/plan-review-convergence.md": "b2783918bccc0e27", "gsd-core/workflows/plant-seed.md": "3c36a48064aa98d1", "gsd-core/workflows/pr-branch.md": "c67d90c65da47168", "gsd-core/workflows/profile-user.md": "e1a6ec04051931f7", @@ -372,14 +372,14 @@ "gsd-core/workflows/remove-phase.md": "ada8a0546c686483", "gsd-core/workflows/remove-workspace.md": "0572a83d71650937", "gsd-core/workflows/resume-project.md": "7f8dc986f0f35d96", - "gsd-core/workflows/review.md": "837e0cba258335b5", + "gsd-core/workflows/review.md": "f2f9f47f6b9a7c88", "gsd-core/workflows/scan.md": "a71e3009998cfc57", "gsd-core/workflows/secure-phase.md": "b008216148d2afac", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "bf8ea69c8f7ae019", "gsd-core/workflows/settings-integrations.md": "37d4212d83664224", "gsd-core/workflows/settings.md": "f90f106a9490c7c9", - "gsd-core/workflows/ship.md": "c9ba58b7ae7ea07e", + "gsd-core/workflows/ship.md": "9ed024a87a8cb7bc", "gsd-core/workflows/sketch-wrap-up.md": "5be73b7bdf96b539", "gsd-core/workflows/sketch.md": "64543e59b00637d4", "gsd-core/workflows/smart-entry.md": "fdc5113754223df8", diff --git a/tests/fixtures/golden-install-parity/hermes.json b/tests/fixtures/golden-install-parity/hermes.json index 94805fff5..74292e9d9 100644 --- a/tests/fixtures/golden-install-parity/hermes.json +++ b/tests/fixtures/golden-install-parity/hermes.json @@ -215,18 +215,18 @@ "gsd-core/workflows/add-phase.md": "2a6452fc51339b9c", "gsd-core/workflows/add-tests.md": "beaec899e9a70b0e", "gsd-core/workflows/add-todo.md": "aa7be08f52478922", - "gsd-core/workflows/ai-integration-phase.md": "3906d579a47aaa52", + "gsd-core/workflows/ai-integration-phase.md": "fc161460e4eb193b", "gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c", "gsd-core/workflows/audit-fix.md": "7e1d184ffde7aa34", "gsd-core/workflows/audit-milestone.md": "26b787036f929200", "gsd-core/workflows/audit-uat.md": "86d9131fccabf2ad", - "gsd-core/workflows/autonomous.md": "853dd93846332743", + "gsd-core/workflows/autonomous.md": "b1d848b753564dad", "gsd-core/workflows/check-todos.md": "ab38b0c7190b93c4", "gsd-core/workflows/cleanup.md": "c811970042bc4ff1", "gsd-core/workflows/code-review-fix.md": "29845842cbddf628", "gsd-core/workflows/code-review.md": "472dd42214f11979", "gsd-core/workflows/complete-milestone.md": "e87bf463430945d6", - "gsd-core/workflows/debug.md": "4f2d70fd94f2215a", + "gsd-core/workflows/debug.md": "261f6b3f28143cea", "gsd-core/workflows/diagnose-issues.md": "bc0dd9eb0fc5195a", "gsd-core/workflows/discovery-phase.md": "56d07842d140f388", "gsd-core/workflows/discuss-phase-assumptions.md": "57d27108a75835c7", @@ -247,7 +247,7 @@ "gsd-core/workflows/do.md": "b30d1efcb0297580", "gsd-core/workflows/docs-update.md": "02811dd7aa32d5ba", "gsd-core/workflows/edit-phase.md": "7f27003f20e88fb8", - "gsd-core/workflows/eval-review.md": "e7cd5dfcf18e2458", + "gsd-core/workflows/eval-review.md": "6d1c9c167f91b0f8", "gsd-core/workflows/execute-phase.md": "fcf5f258a1e2aeea", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "9b2193de25506b3b", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "4dfefdd56d814d06", @@ -287,11 +287,11 @@ "gsd-core/workflows/onboard.md": "0f0af11294d31715", "gsd-core/workflows/pause-work.md": "ae2d5789a95f70fe", "gsd-core/workflows/plan-milestone-gaps.md": "c86cdc1964256b98", - "gsd-core/workflows/plan-phase.md": "0e72c03f10c29c7e", + "gsd-core/workflows/plan-phase.md": "17b40d35982556f3", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "9607e6d03e93c1c2", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "62f8e4f3b475fe5f", - "gsd-core/workflows/plan-review-convergence.md": "d9c282754c05eb81", + "gsd-core/workflows/plan-review-convergence.md": "3e6356a922e4fe77", "gsd-core/workflows/plant-seed.md": "4643bc78faaf9005", "gsd-core/workflows/pr-branch.md": "ecabd55e4eabf229", "gsd-core/workflows/profile-user.md": "877c2c9b3ab8742c", @@ -301,14 +301,14 @@ "gsd-core/workflows/remove-phase.md": "fce799aae3ab2715", "gsd-core/workflows/remove-workspace.md": "42029a7559f1d8fb", "gsd-core/workflows/resume-project.md": "a0443839f1f83c2d", - "gsd-core/workflows/review.md": "0ba5a89b6b164971", + "gsd-core/workflows/review.md": "5d8751246d8c9dc2", "gsd-core/workflows/scan.md": "5c2370d6a8118b6c", "gsd-core/workflows/secure-phase.md": "c087131f1dd12901", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "49be159144d7f426", "gsd-core/workflows/settings-integrations.md": "75405795c8462a8a", "gsd-core/workflows/settings.md": "41c0f737bfd311fd", - "gsd-core/workflows/ship.md": "15df621a87671c53", + "gsd-core/workflows/ship.md": "f89f774fe4a4ce7b", "gsd-core/workflows/sketch-wrap-up.md": "f1ece50ac65ea281", "gsd-core/workflows/sketch.md": "592283400d70317b", "gsd-core/workflows/smart-entry.md": "4dc50d4af659c651", diff --git a/tests/fixtures/golden-install-parity/kilo.json b/tests/fixtures/golden-install-parity/kilo.json index d6f947e8b..e399017e5 100644 --- a/tests/fixtures/golden-install-parity/kilo.json +++ b/tests/fixtures/golden-install-parity/kilo.json @@ -286,18 +286,18 @@ "gsd-core/workflows/add-phase.md": "b2c06b7ed648658c", "gsd-core/workflows/add-tests.md": "cb6e4492adfcc5d4", "gsd-core/workflows/add-todo.md": "edd50462079c77d0", - "gsd-core/workflows/ai-integration-phase.md": "9b26b4b7b6f7f51f", + "gsd-core/workflows/ai-integration-phase.md": "5c0eac04bd0ad2d6", "gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c", "gsd-core/workflows/audit-fix.md": "677638d4081117c5", "gsd-core/workflows/audit-milestone.md": "e228bb0e5ee5b402", "gsd-core/workflows/audit-uat.md": "e11db0d74c2a7405", - "gsd-core/workflows/autonomous.md": "73f429f7472c9949", + "gsd-core/workflows/autonomous.md": "fa2e85a195c98636", "gsd-core/workflows/check-todos.md": "27ab86858d04c7a9", "gsd-core/workflows/cleanup.md": "1c669fc358db3e19", "gsd-core/workflows/code-review-fix.md": "a05d2defb5d25b4e", "gsd-core/workflows/code-review.md": "82a00defcb48a15e", "gsd-core/workflows/complete-milestone.md": "e507b10f26188186", - "gsd-core/workflows/debug.md": "b422705db07e38cf", + "gsd-core/workflows/debug.md": "764cfa8a2fed9b52", "gsd-core/workflows/diagnose-issues.md": "b64b0ba4ab7716e4", "gsd-core/workflows/discovery-phase.md": "af5ec483093bcede", "gsd-core/workflows/discuss-phase-assumptions.md": "59da42e4aa72f52b", @@ -318,7 +318,7 @@ "gsd-core/workflows/do.md": "ea068f5a797f2178", "gsd-core/workflows/docs-update.md": "3c0d5ef72202d246", "gsd-core/workflows/edit-phase.md": "8323bfe10faa0c0a", - "gsd-core/workflows/eval-review.md": "35be91cd22a9bc11", + "gsd-core/workflows/eval-review.md": "fb3b8244d66972ee", "gsd-core/workflows/execute-phase.md": "e41ab56e1388afc8", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "b1e6588cd32a6f08", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "ab70374e44eb85cd", @@ -358,11 +358,11 @@ "gsd-core/workflows/onboard.md": "c8d9795021d4fce6", "gsd-core/workflows/pause-work.md": "a6e5336c409fdc8b", "gsd-core/workflows/plan-milestone-gaps.md": "1b43d12812f7bc1e", - "gsd-core/workflows/plan-phase.md": "a149455c8d3a293c", + "gsd-core/workflows/plan-phase.md": "05b86da6954ee8dd", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "f10975692cbd036e", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261", - "gsd-core/workflows/plan-review-convergence.md": "232c93a9aed224fe", + "gsd-core/workflows/plan-review-convergence.md": "2057c9018cdb6d20", "gsd-core/workflows/plant-seed.md": "107bfe8f5b2a7843", "gsd-core/workflows/pr-branch.md": "ab157cd8e49621dd", "gsd-core/workflows/profile-user.md": "645f81d80c4775c4", @@ -372,14 +372,14 @@ "gsd-core/workflows/remove-phase.md": "ada8a0546c686483", "gsd-core/workflows/remove-workspace.md": "f5dc82bb63e2efa4", "gsd-core/workflows/resume-project.md": "7f8dc986f0f35d96", - "gsd-core/workflows/review.md": "e86d4d7ac6b8a025", + "gsd-core/workflows/review.md": "c1152ff4aa9e52a4", "gsd-core/workflows/scan.md": "c039d3e40d26b606", "gsd-core/workflows/secure-phase.md": "5a8fbf603d218100", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "edd858cd6cfddaf1", "gsd-core/workflows/settings-integrations.md": "3ec4f77c421b87b4", "gsd-core/workflows/settings.md": "0e3cf91e952b48a2", - "gsd-core/workflows/ship.md": "3182bcbe41c54fcf", + "gsd-core/workflows/ship.md": "02e8f7ae72c344e4", "gsd-core/workflows/sketch-wrap-up.md": "888c0548e63197b3", "gsd-core/workflows/sketch.md": "75ffbd233fd9a762", "gsd-core/workflows/smart-entry.md": "2ad5b63a9deea0ce", diff --git a/tests/fixtures/golden-install-parity/kimi-code.json b/tests/fixtures/golden-install-parity/kimi-code.json index 82d95d75d..44147e7f3 100644 --- a/tests/fixtures/golden-install-parity/kimi-code.json +++ b/tests/fixtures/golden-install-parity/kimi-code.json @@ -243,18 +243,18 @@ "gsd-core/workflows/add-phase.md": "ac43883e2d8e34d8", "gsd-core/workflows/add-tests.md": "7e7268602f9e1b2a", "gsd-core/workflows/add-todo.md": "5dc04cfaa0b6b072", - "gsd-core/workflows/ai-integration-phase.md": "0d6d7183ae189fbe", + "gsd-core/workflows/ai-integration-phase.md": "308378c9044a52e1", "gsd-core/workflows/analyze-dependencies.md": "52942af10f140717", "gsd-core/workflows/audit-fix.md": "7650bcb334e622a6", "gsd-core/workflows/audit-milestone.md": "2beceadd10d8d9b1", "gsd-core/workflows/audit-uat.md": "fcfbec501620b564", - "gsd-core/workflows/autonomous.md": "7e5683728ef33707", + "gsd-core/workflows/autonomous.md": "aed5e67104346cc2", "gsd-core/workflows/check-todos.md": "c484e472cff0e4e3", "gsd-core/workflows/cleanup.md": "df79d1dc7b84d736", "gsd-core/workflows/code-review-fix.md": "5c4fe9921dcd9939", "gsd-core/workflows/code-review.md": "926565c83e9b9f67", "gsd-core/workflows/complete-milestone.md": "8f98d7b05793cf4a", - "gsd-core/workflows/debug.md": "35b63fca942d3e7d", + "gsd-core/workflows/debug.md": "b2232823c619cc63", "gsd-core/workflows/diagnose-issues.md": "8a93b2aece3d79f0", "gsd-core/workflows/discovery-phase.md": "0aa8d8d872b53858", "gsd-core/workflows/discuss-phase-assumptions.md": "cbc8ea4ddc4553fb", @@ -275,7 +275,7 @@ "gsd-core/workflows/do.md": "90df4f1fe248cdf3", "gsd-core/workflows/docs-update.md": "a320371be70f43d8", "gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04", - "gsd-core/workflows/eval-review.md": "32d3d7e80ab2bfc7", + "gsd-core/workflows/eval-review.md": "c2933259ff7fb6ac", "gsd-core/workflows/execute-phase.md": "6a663b8755ed216e", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "f7782680c2b8ad6b", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "ab70374e44eb85cd", @@ -315,11 +315,11 @@ "gsd-core/workflows/onboard.md": "f29c4fbef3b473fd", "gsd-core/workflows/pause-work.md": "f2b33bba5593d422", "gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc", - "gsd-core/workflows/plan-phase.md": "2809df9f75f00676", + "gsd-core/workflows/plan-phase.md": "8c25006c81b99eed", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "49f58c3f75be3eb5", - "gsd-core/workflows/plan-review-convergence.md": "1c31d4905c1556c8", + "gsd-core/workflows/plan-review-convergence.md": "db69460dd4df0d29", "gsd-core/workflows/plant-seed.md": "9596db80ab282c6f", "gsd-core/workflows/pr-branch.md": "c87db7ac8c28be1b", "gsd-core/workflows/profile-user.md": "37af07833c81a0bd", @@ -329,14 +329,14 @@ "gsd-core/workflows/remove-phase.md": "df9a45f0b1880999", "gsd-core/workflows/remove-workspace.md": "f67860c795fb4bfe", "gsd-core/workflows/resume-project.md": "f28da1200e4545f4", - "gsd-core/workflows/review.md": "cc0125d717a29c25", + "gsd-core/workflows/review.md": "0e440626c82bd1d9", "gsd-core/workflows/scan.md": "e1c12d542e61720d", "gsd-core/workflows/secure-phase.md": "fda2361739e511ee", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "414db4dbea97ba44", "gsd-core/workflows/settings-integrations.md": "effcef778d4a855f", "gsd-core/workflows/settings.md": "85ceb482dc713169", - "gsd-core/workflows/ship.md": "69abfd9013f0f207", + "gsd-core/workflows/ship.md": "65a7fd84d4657a5e", "gsd-core/workflows/sketch-wrap-up.md": "b767a1d3db129a8a", "gsd-core/workflows/sketch.md": "5f0a7d3640cdff54", "gsd-core/workflows/smart-entry.md": "004b4060eab97cb9", diff --git a/tests/fixtures/golden-install-parity/kimi.json b/tests/fixtures/golden-install-parity/kimi.json index 20edb907e..4b8489575 100644 --- a/tests/fixtures/golden-install-parity/kimi.json +++ b/tests/fixtures/golden-install-parity/kimi.json @@ -279,18 +279,18 @@ "gsd-core/workflows/add-phase.md": "ac43883e2d8e34d8", "gsd-core/workflows/add-tests.md": "7e7268602f9e1b2a", "gsd-core/workflows/add-todo.md": "5dc04cfaa0b6b072", - "gsd-core/workflows/ai-integration-phase.md": "0d6d7183ae189fbe", + "gsd-core/workflows/ai-integration-phase.md": "308378c9044a52e1", "gsd-core/workflows/analyze-dependencies.md": "52942af10f140717", "gsd-core/workflows/audit-fix.md": "7650bcb334e622a6", "gsd-core/workflows/audit-milestone.md": "2beceadd10d8d9b1", "gsd-core/workflows/audit-uat.md": "fcfbec501620b564", - "gsd-core/workflows/autonomous.md": "7e5683728ef33707", + "gsd-core/workflows/autonomous.md": "aed5e67104346cc2", "gsd-core/workflows/check-todos.md": "c484e472cff0e4e3", "gsd-core/workflows/cleanup.md": "df79d1dc7b84d736", "gsd-core/workflows/code-review-fix.md": "5c4fe9921dcd9939", "gsd-core/workflows/code-review.md": "926565c83e9b9f67", "gsd-core/workflows/complete-milestone.md": "8f98d7b05793cf4a", - "gsd-core/workflows/debug.md": "35b63fca942d3e7d", + "gsd-core/workflows/debug.md": "b2232823c619cc63", "gsd-core/workflows/diagnose-issues.md": "232f9e87bf60d8b4", "gsd-core/workflows/discovery-phase.md": "0aa8d8d872b53858", "gsd-core/workflows/discuss-phase-assumptions.md": "cbc8ea4ddc4553fb", @@ -311,7 +311,7 @@ "gsd-core/workflows/do.md": "90df4f1fe248cdf3", "gsd-core/workflows/docs-update.md": "a320371be70f43d8", "gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04", - "gsd-core/workflows/eval-review.md": "32d3d7e80ab2bfc7", + "gsd-core/workflows/eval-review.md": "c2933259ff7fb6ac", "gsd-core/workflows/execute-phase.md": "df8c032fb91cedbd", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "f7782680c2b8ad6b", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "ab70374e44eb85cd", @@ -351,11 +351,11 @@ "gsd-core/workflows/onboard.md": "f29c4fbef3b473fd", "gsd-core/workflows/pause-work.md": "f2b33bba5593d422", "gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc", - "gsd-core/workflows/plan-phase.md": "2809df9f75f00676", + "gsd-core/workflows/plan-phase.md": "8c25006c81b99eed", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "49f58c3f75be3eb5", - "gsd-core/workflows/plan-review-convergence.md": "1c31d4905c1556c8", + "gsd-core/workflows/plan-review-convergence.md": "db69460dd4df0d29", "gsd-core/workflows/plant-seed.md": "9596db80ab282c6f", "gsd-core/workflows/pr-branch.md": "c87db7ac8c28be1b", "gsd-core/workflows/profile-user.md": "37af07833c81a0bd", @@ -365,14 +365,14 @@ "gsd-core/workflows/remove-phase.md": "df9a45f0b1880999", "gsd-core/workflows/remove-workspace.md": "f67860c795fb4bfe", "gsd-core/workflows/resume-project.md": "f28da1200e4545f4", - "gsd-core/workflows/review.md": "cc0125d717a29c25", + "gsd-core/workflows/review.md": "0e440626c82bd1d9", "gsd-core/workflows/scan.md": "e1c12d542e61720d", "gsd-core/workflows/secure-phase.md": "fda2361739e511ee", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "414db4dbea97ba44", "gsd-core/workflows/settings-integrations.md": "effcef778d4a855f", "gsd-core/workflows/settings.md": "85ceb482dc713169", - "gsd-core/workflows/ship.md": "69abfd9013f0f207", + "gsd-core/workflows/ship.md": "65a7fd84d4657a5e", "gsd-core/workflows/sketch-wrap-up.md": "b767a1d3db129a8a", "gsd-core/workflows/sketch.md": "5f0a7d3640cdff54", "gsd-core/workflows/smart-entry.md": "004b4060eab97cb9", diff --git a/tests/fixtures/golden-install-parity/opencode.json b/tests/fixtures/golden-install-parity/opencode.json index 4bf370b70..fef9dbd01 100644 --- a/tests/fixtures/golden-install-parity/opencode.json +++ b/tests/fixtures/golden-install-parity/opencode.json @@ -286,18 +286,18 @@ "gsd-core/workflows/add-phase.md": "739e34f6122e1e61", "gsd-core/workflows/add-tests.md": "582b03df9cb71fe0", "gsd-core/workflows/add-todo.md": "2ccd1c97a3636c36", - "gsd-core/workflows/ai-integration-phase.md": "be951047fcdf6f67", + "gsd-core/workflows/ai-integration-phase.md": "95afc8120daf3828", "gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c", "gsd-core/workflows/audit-fix.md": "0085e65548706996", "gsd-core/workflows/audit-milestone.md": "86c4dcd30648322f", "gsd-core/workflows/audit-uat.md": "c800099fab1e1c1b", - "gsd-core/workflows/autonomous.md": "6cb0c014f5f56965", + "gsd-core/workflows/autonomous.md": "0757a088361be372", "gsd-core/workflows/check-todos.md": "527cfab62417c719", "gsd-core/workflows/cleanup.md": "9d510a45aec81ba1", "gsd-core/workflows/code-review-fix.md": "2c16f549e4e46553", "gsd-core/workflows/code-review.md": "5262146d89e12bfa", "gsd-core/workflows/complete-milestone.md": "9482dadd0f8902d2", - "gsd-core/workflows/debug.md": "5e9ba9e7328902fe", + "gsd-core/workflows/debug.md": "c1ea3f073fca8777", "gsd-core/workflows/diagnose-issues.md": "1e7c760973276b57", "gsd-core/workflows/discovery-phase.md": "0ef23f38adfb0e6e", "gsd-core/workflows/discuss-phase-assumptions.md": "c59dc0a63fb83b46", @@ -318,7 +318,7 @@ "gsd-core/workflows/do.md": "532afe82bbf9f775", "gsd-core/workflows/docs-update.md": "f6210dc8ff7776d5", "gsd-core/workflows/edit-phase.md": "1876c855fb0a0a39", - "gsd-core/workflows/eval-review.md": "1973f08d0eb34159", + "gsd-core/workflows/eval-review.md": "4f932c3ea3eb807b", "gsd-core/workflows/execute-phase.md": "78169e590b406fa8", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "a15993affd62f4bf", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "f74ce2de21b2d252", @@ -358,11 +358,11 @@ "gsd-core/workflows/onboard.md": "ca3a59a2e36b829a", "gsd-core/workflows/pause-work.md": "70c72beca55c080a", "gsd-core/workflows/plan-milestone-gaps.md": "0a9dacd422cd9533", - "gsd-core/workflows/plan-phase.md": "8cc195c679a9349a", + "gsd-core/workflows/plan-phase.md": "e6004345ec4c8129", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "3a09141de7f3dedb", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261", - "gsd-core/workflows/plan-review-convergence.md": "f91c297dce1253a2", + "gsd-core/workflows/plan-review-convergence.md": "216a41c2c24844f7", "gsd-core/workflows/plant-seed.md": "ac8bbe2d9d52f2c1", "gsd-core/workflows/pr-branch.md": "929b7cb0c99c7b9e", "gsd-core/workflows/profile-user.md": "9275d5895237b801", @@ -372,14 +372,14 @@ "gsd-core/workflows/remove-phase.md": "dea4661e8f89596f", "gsd-core/workflows/remove-workspace.md": "21a8581add5f31ae", "gsd-core/workflows/resume-project.md": "ad9f06a10bab8cc0", - "gsd-core/workflows/review.md": "65770618edc68d3f", + "gsd-core/workflows/review.md": "1b3bf694dcace23e", "gsd-core/workflows/scan.md": "cbfb79df855e5e61", "gsd-core/workflows/secure-phase.md": "ef09f40dfd4d2424", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "252b0d3edc315339", "gsd-core/workflows/settings-integrations.md": "1c3997dc6953e7eb", "gsd-core/workflows/settings.md": "a244850ce2f7b8dd", - "gsd-core/workflows/ship.md": "8c78011cb1597092", + "gsd-core/workflows/ship.md": "0476cabbfb2d9be3", "gsd-core/workflows/sketch-wrap-up.md": "681800323681c5c6", "gsd-core/workflows/sketch.md": "da82c9be7074545c", "gsd-core/workflows/smart-entry.md": "c4c780d3aa2124f8", diff --git a/tests/fixtures/golden-install-parity/pi.json b/tests/fixtures/golden-install-parity/pi.json index ec1246631..1e393030c 100644 --- a/tests/fixtures/golden-install-parity/pi.json +++ b/tests/fixtures/golden-install-parity/pi.json @@ -182,18 +182,18 @@ "gsd-core/workflows/add-phase.md": "ac43883e2d8e34d8", "gsd-core/workflows/add-tests.md": "7e7268602f9e1b2a", "gsd-core/workflows/add-todo.md": "5dc04cfaa0b6b072", - "gsd-core/workflows/ai-integration-phase.md": "0d6d7183ae189fbe", + "gsd-core/workflows/ai-integration-phase.md": "308378c9044a52e1", "gsd-core/workflows/analyze-dependencies.md": "52942af10f140717", "gsd-core/workflows/audit-fix.md": "7650bcb334e622a6", "gsd-core/workflows/audit-milestone.md": "2beceadd10d8d9b1", "gsd-core/workflows/audit-uat.md": "fcfbec501620b564", - "gsd-core/workflows/autonomous.md": "7e5683728ef33707", + "gsd-core/workflows/autonomous.md": "aed5e67104346cc2", "gsd-core/workflows/check-todos.md": "c484e472cff0e4e3", "gsd-core/workflows/cleanup.md": "df79d1dc7b84d736", "gsd-core/workflows/code-review-fix.md": "5c4fe9921dcd9939", "gsd-core/workflows/code-review.md": "926565c83e9b9f67", "gsd-core/workflows/complete-milestone.md": "8f98d7b05793cf4a", - "gsd-core/workflows/debug.md": "35b63fca942d3e7d", + "gsd-core/workflows/debug.md": "b2232823c619cc63", "gsd-core/workflows/diagnose-issues.md": "324b8a085cdb07e2", "gsd-core/workflows/discovery-phase.md": "0aa8d8d872b53858", "gsd-core/workflows/discuss-phase-assumptions.md": "cbc8ea4ddc4553fb", @@ -214,7 +214,7 @@ "gsd-core/workflows/do.md": "90df4f1fe248cdf3", "gsd-core/workflows/docs-update.md": "a320371be70f43d8", "gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04", - "gsd-core/workflows/eval-review.md": "32d3d7e80ab2bfc7", + "gsd-core/workflows/eval-review.md": "c2933259ff7fb6ac", "gsd-core/workflows/execute-phase.md": "4eddcc41c823db8b", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "f7782680c2b8ad6b", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "ab70374e44eb85cd", @@ -254,11 +254,11 @@ "gsd-core/workflows/onboard.md": "f29c4fbef3b473fd", "gsd-core/workflows/pause-work.md": "f2b33bba5593d422", "gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc", - "gsd-core/workflows/plan-phase.md": "4c9670c21445ef15", + "gsd-core/workflows/plan-phase.md": "1044f21a80a6ddc6", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "49f58c3f75be3eb5", - "gsd-core/workflows/plan-review-convergence.md": "1c31d4905c1556c8", + "gsd-core/workflows/plan-review-convergence.md": "db69460dd4df0d29", "gsd-core/workflows/plant-seed.md": "9596db80ab282c6f", "gsd-core/workflows/pr-branch.md": "c87db7ac8c28be1b", "gsd-core/workflows/profile-user.md": "e5c0e0a0dc54dccb", @@ -268,14 +268,14 @@ "gsd-core/workflows/remove-phase.md": "df9a45f0b1880999", "gsd-core/workflows/remove-workspace.md": "f67860c795fb4bfe", "gsd-core/workflows/resume-project.md": "f28da1200e4545f4", - "gsd-core/workflows/review.md": "cc0125d717a29c25", + "gsd-core/workflows/review.md": "0e440626c82bd1d9", "gsd-core/workflows/scan.md": "e1c12d542e61720d", "gsd-core/workflows/secure-phase.md": "fda2361739e511ee", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "414db4dbea97ba44", "gsd-core/workflows/settings-integrations.md": "effcef778d4a855f", "gsd-core/workflows/settings.md": "85ceb482dc713169", - "gsd-core/workflows/ship.md": "69abfd9013f0f207", + "gsd-core/workflows/ship.md": "65a7fd84d4657a5e", "gsd-core/workflows/sketch-wrap-up.md": "838c701bd072ae73", "gsd-core/workflows/sketch.md": "70df86d9d8eeba0f", "gsd-core/workflows/smart-entry.md": "004b4060eab97cb9", diff --git a/tests/fixtures/golden-install-parity/qwen.json b/tests/fixtures/golden-install-parity/qwen.json index 72e11227e..0bc745ed7 100644 --- a/tests/fixtures/golden-install-parity/qwen.json +++ b/tests/fixtures/golden-install-parity/qwen.json @@ -215,18 +215,18 @@ "gsd-core/workflows/add-phase.md": "395fb0f9f0385073", "gsd-core/workflows/add-tests.md": "1f95484dbcd26015", "gsd-core/workflows/add-todo.md": "38dc89ce5080120f", - "gsd-core/workflows/ai-integration-phase.md": "6b6cdfae4c2e9968", + "gsd-core/workflows/ai-integration-phase.md": "81f16f3b6d5ef91a", "gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c", "gsd-core/workflows/audit-fix.md": "7228bc0ab0c21c75", "gsd-core/workflows/audit-milestone.md": "5caebfe62a70c0ae", "gsd-core/workflows/audit-uat.md": "97d441d07e7972b3", - "gsd-core/workflows/autonomous.md": "3014ff90115f0daf", + "gsd-core/workflows/autonomous.md": "edd128e7fcbc2027", "gsd-core/workflows/check-todos.md": "dbc9c401c0922d92", "gsd-core/workflows/cleanup.md": "48aa7291ace5d413", "gsd-core/workflows/code-review-fix.md": "085c9fc820114060", "gsd-core/workflows/code-review.md": "5a374f27e65b1f11", "gsd-core/workflows/complete-milestone.md": "69925bcfd955d31e", - "gsd-core/workflows/debug.md": "737784dab3f4eba3", + "gsd-core/workflows/debug.md": "80af3825ce0e3279", "gsd-core/workflows/diagnose-issues.md": "2ae0a1917a9a8a99", "gsd-core/workflows/discovery-phase.md": "6ad9da4779d7b6b0", "gsd-core/workflows/discuss-phase-assumptions.md": "59e306227f2fe6a2", @@ -247,7 +247,7 @@ "gsd-core/workflows/do.md": "2e784b2d6a02ea94", "gsd-core/workflows/docs-update.md": "226550a6d556b09f", "gsd-core/workflows/edit-phase.md": "0fb5e0123cfc6f36", - "gsd-core/workflows/eval-review.md": "88431952699d9fa6", + "gsd-core/workflows/eval-review.md": "57a5eaade256fee4", "gsd-core/workflows/execute-phase.md": "da1e79f7407090a9", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "0e0949db56deebeb", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "2ca3c7397d44613f", @@ -287,11 +287,11 @@ "gsd-core/workflows/onboard.md": "0f0af11294d31715", "gsd-core/workflows/pause-work.md": "be33f84dc1d4822f", "gsd-core/workflows/plan-milestone-gaps.md": "d98e98486123eb97", - "gsd-core/workflows/plan-phase.md": "4ba6968762e95ac6", + "gsd-core/workflows/plan-phase.md": "ae220eaa7d90e137", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "c22ff5ea46de665a", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "d050d8d551ed1756", - "gsd-core/workflows/plan-review-convergence.md": "7b887180677f11ac", + "gsd-core/workflows/plan-review-convergence.md": "0b3451886cd307c3", "gsd-core/workflows/plant-seed.md": "6b7375b5d52be7c7", "gsd-core/workflows/pr-branch.md": "cef0f65b16d500b4", "gsd-core/workflows/profile-user.md": "bb02367a5fc8653c", @@ -301,14 +301,14 @@ "gsd-core/workflows/remove-phase.md": "e8ae4fbbfac700f0", "gsd-core/workflows/remove-workspace.md": "ae520235f4d1f4a5", "gsd-core/workflows/resume-project.md": "7f20769f302e5427", - "gsd-core/workflows/review.md": "0c0037cacbee532f", + "gsd-core/workflows/review.md": "7412a3b9ff1b0291", "gsd-core/workflows/scan.md": "b7efd0d381a3b8a5", "gsd-core/workflows/secure-phase.md": "f7bfa7175102af31", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "5e05212fb5cba531", "gsd-core/workflows/settings-integrations.md": "c9fb71d26fd93527", "gsd-core/workflows/settings.md": "83a13de5926ead14", - "gsd-core/workflows/ship.md": "abd52f1aebca6128", + "gsd-core/workflows/ship.md": "c60788a84581ac11", "gsd-core/workflows/sketch-wrap-up.md": "89e0eab2af946b04", "gsd-core/workflows/sketch.md": "6e68bbff5c1e6db0", "gsd-core/workflows/smart-entry.md": "072ac6efe8aafc38", diff --git a/tests/fixtures/golden-install-parity/trae.json b/tests/fixtures/golden-install-parity/trae.json index ac49b0e59..99ee46c34 100644 --- a/tests/fixtures/golden-install-parity/trae.json +++ b/tests/fixtures/golden-install-parity/trae.json @@ -215,18 +215,18 @@ "gsd-core/workflows/add-phase.md": "7403cf0bc93a9699", "gsd-core/workflows/add-tests.md": "0eb1496a1afdff33", "gsd-core/workflows/add-todo.md": "bc8dcc0faf1e46f8", - "gsd-core/workflows/ai-integration-phase.md": "a94affaaeba7a2c2", + "gsd-core/workflows/ai-integration-phase.md": "a45f85a616295092", "gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c", "gsd-core/workflows/audit-fix.md": "04ca2d8293c07725", "gsd-core/workflows/audit-milestone.md": "bb5d1831ce8635b5", "gsd-core/workflows/audit-uat.md": "6e768b1c208a787a", - "gsd-core/workflows/autonomous.md": "c482645c5d1ead46", + "gsd-core/workflows/autonomous.md": "e7702a642488473e", "gsd-core/workflows/check-todos.md": "31a2b2a5a28a409a", "gsd-core/workflows/cleanup.md": "ad625e9596e04cda", "gsd-core/workflows/code-review-fix.md": "1d178e04d0cda764", "gsd-core/workflows/code-review.md": "49161f95934679d5", "gsd-core/workflows/complete-milestone.md": "98951eb5783fe72c", - "gsd-core/workflows/debug.md": "e94e12fc47107af5", + "gsd-core/workflows/debug.md": "7092bcfbb0b05fe0", "gsd-core/workflows/diagnose-issues.md": "207dcdb85650d239", "gsd-core/workflows/discovery-phase.md": "7644e2d890a21212", "gsd-core/workflows/discuss-phase-assumptions.md": "0c185a487ce7a202", @@ -247,7 +247,7 @@ "gsd-core/workflows/do.md": "6b56aa4a44ca61fc", "gsd-core/workflows/docs-update.md": "89e760e665ff99f8", "gsd-core/workflows/edit-phase.md": "7facd0faa33c8cad", - "gsd-core/workflows/eval-review.md": "90a29a4fa0cdd947", + "gsd-core/workflows/eval-review.md": "263c8971520f632e", "gsd-core/workflows/execute-phase.md": "67f3aaa7eae674e2", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "296b812e8d0e9ce8", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "c1d6db937a51d433", @@ -287,11 +287,11 @@ "gsd-core/workflows/onboard.md": "015695a7e9cf59bc", "gsd-core/workflows/pause-work.md": "c20d267e28ce92f0", "gsd-core/workflows/plan-milestone-gaps.md": "26db7b9329b7ddc8", - "gsd-core/workflows/plan-phase.md": "199e9ac7147cdafb", + "gsd-core/workflows/plan-phase.md": "89eb12b0d0561bcc", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "e06ccd4d4c0703fb", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "778b73a8db6f7c32", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "619946c879f33b9d", - "gsd-core/workflows/plan-review-convergence.md": "610d816af89b1b16", + "gsd-core/workflows/plan-review-convergence.md": "ce4685ee46d343d2", "gsd-core/workflows/plant-seed.md": "622f246ea8e163fa", "gsd-core/workflows/pr-branch.md": "79fd55b88ea2db9c", "gsd-core/workflows/profile-user.md": "aa0737531d487f10", @@ -301,14 +301,14 @@ "gsd-core/workflows/remove-phase.md": "a46c2fe853bf4e86", "gsd-core/workflows/remove-workspace.md": "8ddc5f04f7c48d6c", "gsd-core/workflows/resume-project.md": "f242e4c8aba18ea2", - "gsd-core/workflows/review.md": "db77e672b2312bba", + "gsd-core/workflows/review.md": "96deafef432bef80", "gsd-core/workflows/scan.md": "3b14bcb51d3a4de8", "gsd-core/workflows/secure-phase.md": "267393d5b02b5334", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "39e66386f6c48025", "gsd-core/workflows/settings-integrations.md": "8bb1c2bdebbc56e6", "gsd-core/workflows/settings.md": "db6121276c6f63a4", - "gsd-core/workflows/ship.md": "2a03bf15d123106d", + "gsd-core/workflows/ship.md": "c6f64de23299425c", "gsd-core/workflows/sketch-wrap-up.md": "dbec602d104cb951", "gsd-core/workflows/sketch.md": "6a6e543f2b667278", "gsd-core/workflows/smart-entry.md": "5631e2e70b02abba", diff --git a/tests/fixtures/golden-install-parity/windsurf.json b/tests/fixtures/golden-install-parity/windsurf.json index 695c3f9c8..5a37a1851 100644 --- a/tests/fixtures/golden-install-parity/windsurf.json +++ b/tests/fixtures/golden-install-parity/windsurf.json @@ -215,18 +215,18 @@ "gsd-core/workflows/add-phase.md": "78cca7f86793f7f8", "gsd-core/workflows/add-tests.md": "4a244c69af35ede3", "gsd-core/workflows/add-todo.md": "21cdcf699aac8c64", - "gsd-core/workflows/ai-integration-phase.md": "ead319c879215ec7", + "gsd-core/workflows/ai-integration-phase.md": "eab19bf009d39266", "gsd-core/workflows/analyze-dependencies.md": "77aff48f97fa6f1c", "gsd-core/workflows/audit-fix.md": "fd8ba9db9c56dd81", "gsd-core/workflows/audit-milestone.md": "4737b1e182366d2f", "gsd-core/workflows/audit-uat.md": "d496e39402e160de", - "gsd-core/workflows/autonomous.md": "fe7bb7c978f305a2", + "gsd-core/workflows/autonomous.md": "c6638fb24a9f9024", "gsd-core/workflows/check-todos.md": "c72eec15c87fa877", "gsd-core/workflows/cleanup.md": "da44b987853e1a74", "gsd-core/workflows/code-review-fix.md": "d019b6339f25c95c", "gsd-core/workflows/code-review.md": "5bd0d7e7a5dad521", "gsd-core/workflows/complete-milestone.md": "3324ec6da5856f21", - "gsd-core/workflows/debug.md": "e6237b0cecfb8fdc", + "gsd-core/workflows/debug.md": "e6e1b5963b969eb8", "gsd-core/workflows/diagnose-issues.md": "3991fb0ec18050e2", "gsd-core/workflows/discovery-phase.md": "313c3a5213449309", "gsd-core/workflows/discuss-phase-assumptions.md": "b065ff2ee57fe847", @@ -247,7 +247,7 @@ "gsd-core/workflows/do.md": "c2ee0bb845bc1cf1", "gsd-core/workflows/docs-update.md": "6bd25d0123ee6c73", "gsd-core/workflows/edit-phase.md": "c0ae7d0063f3e789", - "gsd-core/workflows/eval-review.md": "713de00ea5326988", + "gsd-core/workflows/eval-review.md": "26051580110e6217", "gsd-core/workflows/execute-phase.md": "043544b7a948cae5", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "3194ecd382690755", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "becb931701890353", @@ -287,11 +287,11 @@ "gsd-core/workflows/onboard.md": "7d0c7449b84c7997", "gsd-core/workflows/pause-work.md": "93fcc1c845da6396", "gsd-core/workflows/plan-milestone-gaps.md": "7880866ee1caf923", - "gsd-core/workflows/plan-phase.md": "a47b8a4e649fbc14", + "gsd-core/workflows/plan-phase.md": "746b22884b1dda55", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "e06ccd4d4c0703fb", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "80b1ba493a9a967f", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "3fed4740a91d0443", - "gsd-core/workflows/plan-review-convergence.md": "27dcce3dbca22e3d", + "gsd-core/workflows/plan-review-convergence.md": "d9700b18dfb71452", "gsd-core/workflows/plant-seed.md": "caa8fef75821b24c", "gsd-core/workflows/pr-branch.md": "acd59f915d018ad4", "gsd-core/workflows/profile-user.md": "33b150468a6789db", @@ -301,14 +301,14 @@ "gsd-core/workflows/remove-phase.md": "e7a6af429b36e77b", "gsd-core/workflows/remove-workspace.md": "30ca05fe4a3efc25", "gsd-core/workflows/resume-project.md": "82cfe1b8cb17c085", - "gsd-core/workflows/review.md": "8e345b36846e11e3", + "gsd-core/workflows/review.md": "2d067a516e323db9", "gsd-core/workflows/scan.md": "4a910da5e34f2685", "gsd-core/workflows/secure-phase.md": "d5d811bc468ce7f2", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "2f86ec7b998f9485", "gsd-core/workflows/settings-integrations.md": "159d0ae32b511129", "gsd-core/workflows/settings.md": "26fff45b86d827aa", - "gsd-core/workflows/ship.md": "91942daa93056112", + "gsd-core/workflows/ship.md": "aa9adf13460077cf", "gsd-core/workflows/sketch-wrap-up.md": "10063f56c2c7f141", "gsd-core/workflows/sketch.md": "c15716376df41c97", "gsd-core/workflows/smart-entry.md": "3fed94530109124b", diff --git a/tests/fixtures/golden-install-parity/zcode.json b/tests/fixtures/golden-install-parity/zcode.json index c9a67bce2..fb57cd52d 100644 --- a/tests/fixtures/golden-install-parity/zcode.json +++ b/tests/fixtures/golden-install-parity/zcode.json @@ -286,18 +286,18 @@ "gsd-core/workflows/add-phase.md": "ac43883e2d8e34d8", "gsd-core/workflows/add-tests.md": "7e7268602f9e1b2a", "gsd-core/workflows/add-todo.md": "5dc04cfaa0b6b072", - "gsd-core/workflows/ai-integration-phase.md": "0d6d7183ae189fbe", + "gsd-core/workflows/ai-integration-phase.md": "308378c9044a52e1", "gsd-core/workflows/analyze-dependencies.md": "52942af10f140717", "gsd-core/workflows/audit-fix.md": "7650bcb334e622a6", "gsd-core/workflows/audit-milestone.md": "2beceadd10d8d9b1", "gsd-core/workflows/audit-uat.md": "fcfbec501620b564", - "gsd-core/workflows/autonomous.md": "7e5683728ef33707", + "gsd-core/workflows/autonomous.md": "aed5e67104346cc2", "gsd-core/workflows/check-todos.md": "c484e472cff0e4e3", "gsd-core/workflows/cleanup.md": "df79d1dc7b84d736", "gsd-core/workflows/code-review-fix.md": "5c4fe9921dcd9939", "gsd-core/workflows/code-review.md": "926565c83e9b9f67", "gsd-core/workflows/complete-milestone.md": "8f98d7b05793cf4a", - "gsd-core/workflows/debug.md": "35b63fca942d3e7d", + "gsd-core/workflows/debug.md": "b2232823c619cc63", "gsd-core/workflows/diagnose-issues.md": "9a1591d7b17ed778", "gsd-core/workflows/discovery-phase.md": "0aa8d8d872b53858", "gsd-core/workflows/discuss-phase-assumptions.md": "cbc8ea4ddc4553fb", @@ -318,7 +318,7 @@ "gsd-core/workflows/do.md": "90df4f1fe248cdf3", "gsd-core/workflows/docs-update.md": "a320371be70f43d8", "gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04", - "gsd-core/workflows/eval-review.md": "32d3d7e80ab2bfc7", + "gsd-core/workflows/eval-review.md": "c2933259ff7fb6ac", "gsd-core/workflows/execute-phase.md": "1fb281c6e0511e2a", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "f7782680c2b8ad6b", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "ab70374e44eb85cd", @@ -358,11 +358,11 @@ "gsd-core/workflows/onboard.md": "f29c4fbef3b473fd", "gsd-core/workflows/pause-work.md": "f2b33bba5593d422", "gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc", - "gsd-core/workflows/plan-phase.md": "c5ef714f47d857dc", + "gsd-core/workflows/plan-phase.md": "c0a589a39100d6f8", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "49f58c3f75be3eb5", - "gsd-core/workflows/plan-review-convergence.md": "1c31d4905c1556c8", + "gsd-core/workflows/plan-review-convergence.md": "db69460dd4df0d29", "gsd-core/workflows/plant-seed.md": "9596db80ab282c6f", "gsd-core/workflows/pr-branch.md": "c87db7ac8c28be1b", "gsd-core/workflows/profile-user.md": "74005f062c870393", @@ -372,14 +372,14 @@ "gsd-core/workflows/remove-phase.md": "df9a45f0b1880999", "gsd-core/workflows/remove-workspace.md": "f67860c795fb4bfe", "gsd-core/workflows/resume-project.md": "f28da1200e4545f4", - "gsd-core/workflows/review.md": "cc0125d717a29c25", + "gsd-core/workflows/review.md": "0e440626c82bd1d9", "gsd-core/workflows/scan.md": "e1c12d542e61720d", "gsd-core/workflows/secure-phase.md": "fda2361739e511ee", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "414db4dbea97ba44", "gsd-core/workflows/settings-integrations.md": "effcef778d4a855f", "gsd-core/workflows/settings.md": "85ceb482dc713169", - "gsd-core/workflows/ship.md": "69abfd9013f0f207", + "gsd-core/workflows/ship.md": "65a7fd84d4657a5e", "gsd-core/workflows/sketch-wrap-up.md": "86db87b16548117e", "gsd-core/workflows/sketch.md": "fcd52f8d9076e183", "gsd-core/workflows/smart-entry.md": "004b4060eab97cb9", diff --git a/tests/workflow-size-baseline.json b/tests/workflow-size-baseline.json index 424971eb3..7e7c82fad 100644 --- a/tests/workflow-size-baseline.json +++ b/tests/workflow-size-baseline.json @@ -3,18 +3,18 @@ "add-phase.md": 7578, "add-tests.md": 17247, "add-todo.md": 11020, - "ai-integration-phase.md": 15420, + "ai-integration-phase.md": 15356, "analyze-dependencies.md": 3887, "audit-fix.md": 12329, "audit-milestone.md": 19034, "audit-uat.md": 7469, - "autonomous.md": 42474, + "autonomous.md": 42468, "check-todos.md": 9771, "cleanup.md": 10319, "code-review-fix.md": 24906, "code-review.md": 33110, "complete-milestone.md": 31436, - "debug.md": 20253, + "debug.md": 20175, "diagnose-issues.md": 13444, "discovery-phase.md": 13543, "discuss-phase-assumptions.md": 28253, @@ -23,7 +23,7 @@ "do.md": 10731, "docs-update.md": 56494, "edit-phase.md": 12927, - "eval-review.md": 10332, + "eval-review.md": 10316, "execute-phase.md": 90143, "execute-plan.md": 35143, "explore.md": 11127, @@ -53,8 +53,8 @@ "onboard.md": 8877, "pause-work.md": 14441, "plan-milestone-gaps.md": 11809, - "plan-phase.md": 94445, - "plan-review-convergence.md": 26285, + "plan-phase.md": 94427, + "plan-review-convergence.md": 26363, "plant-seed.md": 12150, "pr-branch.md": 15963, "profile-user.md": 21624, @@ -64,14 +64,14 @@ "remove-phase.md": 8513, "remove-workspace.md": 7916, "resume-project.md": 17270, - "review.md": 52964, + "review.md": 54036, "scan.md": 8314, "secure-phase.md": 14627, "session-report.md": 4044, "settings-advanced.md": 40019, "settings-integrations.md": 16257, "settings.md": 33832, - "ship.md": 29367, + "ship.md": 29834, "sketch-wrap-up.md": 14267, "sketch.md": 20369, "smart-entry.md": 11489,