diff --git a/.changeset/2402-response-language-orchestrator-coverage.md b/.changeset/2402-response-language-orchestrator-coverage.md new file mode 100644 index 000000000..5395b989b --- /dev/null +++ b/.changeset/2402-response-language-orchestrator-coverage.md @@ -0,0 +1,5 @@ +--- +type: Fixed +pr: 2457 +--- +**`response_language` now reaches orchestrator-owned prompts across most workflows and the UAT verification checkpoint frame** — previously only subagent prompts honored a configured `response_language`; the orchestrator's own questions (verify-work, new-project, new-milestone, quick, manager, and others) and the hardcoded English UAT checkpoint banner stayed in English regardless of configuration. Both now render in the configured language, with output byte-identical to before when unset. (#2402) diff --git a/docs/INVENTORY-MANIFEST.json b/docs/INVENTORY-MANIFEST.json index 9ffb6afae..e210e8a81 100644 --- a/docs/INVENTORY-MANIFEST.json +++ b/docs/INVENTORY-MANIFEST.json @@ -230,6 +230,7 @@ "execute-phase-between-wave-reset.md", "execute-phase-context-guard.md", "execute-phase-requirement-revert.md", + "execute-phase-response-language.md", "execute-phase-wave-guard.md", "executor-examples.md", "gate-prompts.md", diff --git a/docs/INVENTORY.md b/docs/INVENTORY.md index ff8ce5359..bfba70a18 100644 --- a/docs/INVENTORY.md +++ b/docs/INVENTORY.md @@ -316,6 +316,7 @@ Full roster at `gsd-core/references/*.md`. References are shared knowledge docum | `context-budget.md` | Context window budget allocation rules. | | `execute-phase-context-guard.md` | Context exhaustion guard step for `execute-phase` wave loop — `workflow.context_guard_mode` dispatch table (warn/auto/off) and POOR-tier pause-work trigger (#1452). | | `execute-phase-requirement-revert.md` | Gap-report step for `execute-phase` — reverts this phase's own shared requirement IDs out of `Complete` in REQUIREMENTS.md before rendering a `gaps_found` report, scoped to `PHASE_REQ_IDS` so other phases' rows are untouched (#2388). | +| `execute-phase-response-language.md` | Response-language directive for `execute-phase` orchestrator output (questions, narration, report-template prose); extracted to keep the workflow under the frozen pre-phase-6 byte ceiling (#2402). | | `continuation-format.md` | Session continuation/resume format. | | `domain-probes.md` | Domain-specific probing questions for discuss-phase. | | `edge-probe.md` | Spec-phase edge-completeness probe — 8-category edge taxonomy, shape classification, and the `requirements → checks → verifier` resolution model (Step 5.5). | diff --git a/gsd-core/references/execute-phase-response-language.md b/gsd-core/references/execute-phase-response-language.md new file mode 100644 index 000000000..8c1d60c11 --- /dev/null +++ b/gsd-core/references/execute-phase-response-language.md @@ -0,0 +1,7 @@ +# Execute-Phase Response-Language Directive (#2402) + +**If `response_language` is set:** User-facing orchestrator output (questions, narration, report-template prose) in `{response_language}`; technical terms, code, file paths, and subagent prompts stay in English. Pass `response_language: {value}` into every spawned subagent prompt so any user-facing output they produce stays in the configured language. + +The literal report templates embedded in this workflow (`## Execution Plan`, `## Phase {X}: {Name} Execution Complete`, `## ⚠ Phase {X}: {Name} — Gaps Found`, etc.) are a structural source, not literal output to copy verbatim — render their prose translated into `{response_language}` while keeping headings' structural markers, table columns, IDs, commands, and file paths unchanged. + +This directive was extracted from `workflows/execute-phase.md` to keep that file under the frozen pre-phase-6 byte ceiling (ADR-857 Phase 6 capstone, `tests/fix-2285-claude-orchestration-wiring.test.cjs`). The `@-reference` is eager, so the runtime still loads this content alongside the workflow — the extraction is purely a file-size discipline, not a lazy-load optimization. diff --git a/gsd-core/workflows/add-tests.md b/gsd-core/workflows/add-tests.md index cc710178a..88803ca23 100644 --- a/gsd-core/workflows/add-tests.md +++ b/gsd-core/workflows/add-tests.md @@ -38,7 +38,9 @@ INIT=$(gsd_run query init.phase-op "${PHASE_ARG}") if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi ``` -Extract from init JSON: `phase_dir`, `phase_number`, `phase_name`. +Extract from init JSON: `phase_dir`, `phase_number`, `phase_name`, `response_language`. + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. Verify the phase directory exists. If not: ``` diff --git a/gsd-core/workflows/add-todo.md b/gsd-core/workflows/add-todo.md index 7f1cfbfce..2d0473736 100644 --- a/gsd-core/workflows/add-todo.md +++ b/gsd-core/workflows/add-todo.md @@ -17,7 +17,9 @@ INIT=$(gsd_run query init.todos) if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi ``` -Extract from init JSON: `commit_docs`, `date`, `timestamp`, `todo_count`, `todos`, `pending_dir`, `todos_dir_exists`. +Extract from init JSON: `commit_docs`, `date`, `timestamp`, `todo_count`, `todos`, `pending_dir`, `todos_dir_exists`, `response_language`. + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. Ensure directories exist: ```bash diff --git a/gsd-core/workflows/ai-integration-phase.md b/gsd-core/workflows/ai-integration-phase.md index 746025efc..742c704a4 100644 --- a/gsd-core/workflows/ai-integration-phase.md +++ b/gsd-core/workflows/ai-integration-phase.md @@ -25,7 +25,9 @@ INIT=$(gsd_run query init.plan-phase "$PHASE") if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi ``` -Parse JSON for: `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `padded_phase`, `has_context`, `has_research`, `commit_docs`. +Parse JSON for: `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `padded_phase`, `has_context`, `has_research`, `commit_docs`, `response_language`. + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. **File paths:** `state_path`, `roadmap_path`, `requirements_path`, `context_path`. diff --git a/gsd-core/workflows/check-todos.md b/gsd-core/workflows/check-todos.md index 4b56d7a99..e0aea3964 100644 --- a/gsd-core/workflows/check-todos.md +++ b/gsd-core/workflows/check-todos.md @@ -17,7 +17,9 @@ INIT=$(gsd_run query init.todos) if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi ``` -Extract from init JSON: `todo_count`, `todos`, `pending_dir`. +Extract from init JSON: `todo_count`, `todos`, `pending_dir`, `response_language`. + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. If `todo_count` is 0: ``` diff --git a/gsd-core/workflows/cleanup.md b/gsd-core/workflows/cleanup.md index 05c5b77b8..042046e40 100644 --- a/gsd-core/workflows/cleanup.md +++ b/gsd-core/workflows/cleanup.md @@ -13,6 +13,13 @@ Archive accumulated phase directories from completed milestones into `.planning/ +```bash +_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") +``` + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + @@ -161,7 +168,6 @@ Notes: Commit the changes: ```bash -_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi gsd_run query commit "chore: archive phase directories from completed milestones" --files .planning/milestones/ .planning/phases/ ``` diff --git a/gsd-core/workflows/complete-milestone.md b/gsd-core/workflows/complete-milestone.md index 75d6bdd76..10fd92d09 100644 --- a/gsd-core/workflows/complete-milestone.md +++ b/gsd-core/workflows/complete-milestone.md @@ -42,9 +42,12 @@ Before proceeding with milestone close, run the comprehensive open artifact audi ```bash _GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") gsd_run query audit-open ``` +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + If the output contains open items (any section with count > 0): Display the full audit report to the user. diff --git a/gsd-core/workflows/debug.md b/gsd-core/workflows/debug.md index ea29463af..58ae5f467 100644 --- a/gsd-core/workflows/debug.md +++ b/gsd-core/workflows/debug.md @@ -21,7 +21,11 @@ INIT=$(gsd_run query state.load) if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi ``` -Extract `commit_docs` from init JSON. Extract `debug_dir` from init JSON — an absolute path anchored on `project_root` (#2376: `debug_file_path` values handed to the spawned `gsd-debug-session-manager` must resolve regardless of that subagent's own cwd, which may differ from the orchestrator's — build them as `{debug_dir}/{slug}.md`, never a bare `.planning/debug/...` literal). Resolve debugger model: +Extract `commit_docs` and `config.response_language` from init JSON. Extract `debug_dir` from init JSON — an absolute path anchored on `project_root` (#2376: `debug_file_path` values handed to the spawned `gsd-debug-session-manager` must resolve regardless of that subagent's own cwd, which may differ from the orchestrator's — build them as `{debug_dir}/{slug}.md`, never a bare `.planning/debug/...` literal). + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + +Resolve debugger model: ```bash debugger_model=$(gsd_run query resolve-model gsd-debugger 2>/dev/null | jq -r '.model' 2>/dev/null || true) ``` diff --git a/gsd-core/workflows/discovery-phase.md b/gsd-core/workflows/discovery-phase.md index 9ad3a94db..dc83520c1 100644 --- a/gsd-core/workflows/discovery-phase.md +++ b/gsd-core/workflows/discovery-phase.md @@ -6,6 +6,13 @@ Called from plan-phase.md's mandatory_discovery step with a depth parameter. NOTE: For comprehensive ecosystem research ("how do experts build this"), use /gsd:plan-phase --research-phase instead, which produces RESEARCH.md. +```bash +_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") +``` + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + **This workflow supports three depth levels:** diff --git a/gsd-core/workflows/discuss-phase-assumptions.md b/gsd-core/workflows/discuss-phase-assumptions.md index 6aa600c70..fa5747f90 100644 --- a/gsd-core/workflows/discuss-phase-assumptions.md +++ b/gsd-core/workflows/discuss-phase-assumptions.md @@ -65,6 +65,7 @@ Phase number from argument (required). ```bash _GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") INIT=$(gsd_run query init.phase-op "${PHASE}") if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi AGENT_SKILLS_ANALYZER=$(gsd_run query agent-skills gsd-assumptions-analyzer) @@ -73,6 +74,8 @@ AGENT_SKILLS_ANALYZER=$(gsd_run query agent-skills gsd-assumptions-analyzer) ANALYZER_MODEL=$(gsd_run query resolve-model gsd-assumptions-analyzer --raw) ``` +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + Parse JSON for: `commit_docs`, `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `padded_phase`, `has_research`, `has_context`, `has_plans`, `has_verification`, `plan_count`, `roadmap_exists`, `planning_exists`. diff --git a/gsd-core/workflows/do.md b/gsd-core/workflows/do.md index db0dfa312..8b49d6856 100644 --- a/gsd-core/workflows/do.md +++ b/gsd-core/workflows/do.md @@ -8,6 +8,13 @@ Read all files referenced by the invoking prompt's execution_context before star +```bash +_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") +``` + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + **Check for input.** @@ -26,7 +33,6 @@ Wait for response before continuing. **Check if project exists.** ```bash -_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi INIT=$(gsd_run query state.load 2>/dev/null) ``` diff --git a/gsd-core/workflows/docs-update.md b/gsd-core/workflows/docs-update.md index 2aacb05d8..d8ffcdd5e 100644 --- a/gsd-core/workflows/docs-update.md +++ b/gsd-core/workflows/docs-update.md @@ -28,6 +28,7 @@ Extract from init JSON: - `doc_tooling` — object with booleans: `docusaurus`, `vitepress`, `mkdocs`, `storybook` - `monorepo_workspaces` — array of workspace glob patterns (empty if not a monorepo) - `project_root` — absolute path to the project root +- `response_language` — if set, present all user-facing questions, prompts, and explanations in this workflow in that language; technical terms, code, file paths, and subagent prompts stay in English diff --git a/gsd-core/workflows/eval-review.md b/gsd-core/workflows/eval-review.md index 187eaac39..70aeeea0d 100644 --- a/gsd-core/workflows/eval-review.md +++ b/gsd-core/workflows/eval-review.md @@ -14,10 +14,13 @@ Use after /gsd:execute-phase to verify that the evaluation strategy from AI-SPEC ```bash _GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") INIT=$(gsd_run query init.phase-op "${PHASE_ARG}") if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi ``` +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + Parse: `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `padded_phase`, `commit_docs`. ```bash diff --git a/gsd-core/workflows/execute-phase.md b/gsd-core/workflows/execute-phase.md index b4b81a121..4ab92545b 100644 --- a/gsd-core/workflows/execute-phase.md +++ b/gsd-core/workflows/execute-phase.md @@ -86,7 +86,7 @@ Parse JSON for: `executor_model`, `verifier_model`, `commit_docs`, `parallelizat **Model resolution:** If `executor_model` is `"inherit"`, omit the `model=` parameter from all `Agent()` calls — do NOT pass `model="inherit"` to Agent. Omitting the `model=` parameter causes Claude Code to inherit the current orchestrator model automatically. Only set `model=` when `executor_model` is an explicit model name (e.g., `"claude-sonnet-5"`, `"claude-opus-4-8"`). -**If `response_language` is set:** Include `response_language: {value}` in all spawned subagent prompts so any user-facing output stays in the configured language. +@~/.claude/gsd-core/references/execute-phase-response-language.md Read runtime/worktree config and fail closed before any executor dispatch: @@ -1415,7 +1415,7 @@ Commit the file: gsd_run query commit "test({phase_num}): persist human verification items as UAT" --files "{phase_dir}/{phase_num}-UAT.md" ``` -**Step B: Present to user:** +**Step B: Present to user**: ``` ## ◷ Phase {X}: {Name} — Human Verification Needed @@ -1481,7 +1481,7 @@ The CLI handles: Extract from result: `next_phase`, `next_phase_name`, `is_last_phase`, `warnings`, `has_warnings`. -**If has_warnings is true:** +**If has_warnings is true**: ``` ## Phase {X} marked complete with {N} warnings: diff --git a/gsd-core/workflows/execute-plan.md b/gsd-core/workflows/execute-plan.md index e6e053085..d148fa455 100644 --- a/gsd-core/workflows/execute-plan.md +++ b/gsd-core/workflows/execute-plan.md @@ -48,7 +48,9 @@ INIT=$(gsd_run query init.execute-phase "${PHASE}") if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi ``` -Extract from init JSON: `executor_model`, `commit_docs`, `sub_repos`, `phase_dir`, `phase_number`, `plans`, `summaries`, `incomplete_plans`, `state_path`, `config_path`. +Extract from init JSON: `executor_model`, `commit_docs`, `sub_repos`, `phase_dir`, `phase_number`, `plans`, `summaries`, `incomplete_plans`, `state_path`, `config_path`, `response_language`. + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. If `.planning/` missing: error. diff --git a/gsd-core/workflows/graduation.md b/gsd-core/workflows/graduation.md index 89f6f7180..749f0c38c 100644 --- a/gsd-core/workflows/graduation.md +++ b/gsd-core/workflows/graduation.md @@ -22,11 +22,14 @@ Read from project config (`config.json`): ```bash _GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") GRADUATION_ENABLED=$(gsd_run query config-get features.graduation 2>/dev/null || echo "true") GRADUATION_WINDOW=$(gsd_run query config-get features.graduation_window 2>/dev/null || echo "5") GRADUATION_THRESHOLD=$(gsd_run query config-get features.graduation_threshold 2>/dev/null || echo "3") ``` +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + **Skip silently (print nothing) if:** - `features.graduation` is `false` - Fewer than `graduation_threshold` completed prior phases exist (not enough data) diff --git a/gsd-core/workflows/health.md b/gsd-core/workflows/health.md index 05a7aa901..828946934 100644 --- a/gsd-core/workflows/health.md +++ b/gsd-core/workflows/health.md @@ -7,6 +7,13 @@ Read all files referenced by the invoking prompt's execution_context before star +```bash +_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") +``` + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + **Parse arguments:** @@ -49,7 +56,6 @@ available — replace the prompt with a plain-text two-question sequence plain text from the user's response. ```bash -_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi gsd_run query validate.context \ --tokens-used "$TOKENS_USED" \ --context-window "$CONTEXT_WINDOW" diff --git a/gsd-core/workflows/import.md b/gsd-core/workflows/import.md index 3182f8b59..6bee64ba6 100644 --- a/gsd-core/workflows/import.md +++ b/gsd-core/workflows/import.md @@ -11,6 +11,13 @@ Future: `--prd` mode (PRD extraction into PROJECT.md + REQUIREMENTS.md + ROADMAP Display the stage banner: +```bash +_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") +``` + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + ``` ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ @@ -176,7 +183,6 @@ Apply GSD naming convention for the output filename: Determine the target directory by querying `init.phase-op` for the phase number extracted in `plan_read_input`. This ensures the `project_code` prefix from `.planning/config.json` is applied: ```bash -_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi INIT=$(gsd_run query init.phase-op "{NN}") if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi expected_phase_dir=$(echo "$INIT" | node -e "process.stdout.write(JSON.parse(require('fs').readFileSync('/dev/stdin','utf8')).expected_phase_dir)") diff --git a/gsd-core/workflows/inbox.md b/gsd-core/workflows/inbox.md index 353e00e08..79f1a78df 100644 --- a/gsd-core/workflows/inbox.md +++ b/gsd-core/workflows/inbox.md @@ -17,6 +17,13 @@ Before starting, read these project files to understand the review criteria: +```bash +_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") +``` + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + Verify prerequisites: diff --git a/gsd-core/workflows/ingest-docs.md b/gsd-core/workflows/ingest-docs.md index 6c6a40df9..6878771db 100644 --- a/gsd-core/workflows/ingest-docs.md +++ b/gsd-core/workflows/ingest-docs.md @@ -53,10 +53,13 @@ Run the init query: ```bash _GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") INIT=$(gsd_run init ingest-docs) if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi ``` +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + Parse `project_exists`, `planning_exists`, `has_git`, `git_worktree_root`, `in_nested_subdir`, `project_path` from INIT. **Absolute path fields (#2376):** INIT also carries `requirements_path`, `roadmap_path`, `state_path`, `intel_dir`, and `conflicts_path` — all anchored on `project_root`, not the orchestrator's own cwd. Use these (not bare `.planning/...` literals) whenever building ``/output paths for a spawned subagent, since that subagent's own cwd may differ from the orchestrator's. diff --git a/gsd-core/workflows/manager.md b/gsd-core/workflows/manager.md index 85cc28390..22cf96820 100644 --- a/gsd-core/workflows/manager.md +++ b/gsd-core/workflows/manager.md @@ -24,7 +24,9 @@ INIT=$(gsd_run query init.manager) if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi ``` -Parse JSON for: `milestone_version`, `milestone_name`, `phase_count`, `completed_count`, `in_progress_count`, `phases`, `recommended_actions`, `all_complete`, `waiting_signal`, `manager_flags`, and the optional trio `queued_milestone_version`, `queued_milestone_name`, `queued_phases` (added in SDK fix `2495-2496-2497` — may be absent on older SDK versions, treat missing as empty). +Parse JSON for: `milestone_version`, `milestone_name`, `phase_count`, `completed_count`, `in_progress_count`, `phases`, `recommended_actions`, `all_complete`, `waiting_signal`, `manager_flags`, `response_language`, and the optional trio `queued_milestone_version`, `queued_milestone_name`, `queued_phases` (added in SDK fix `2495-2496-2497` — may be absent on older SDK versions, treat missing as empty). + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. Subagent dispatches (discuss/plan/execute) stay in English at the prompt level; include `response_language` in their spawn args per the workflow being dispatched. `manager_flags` contains per-step passthrough flags from config: - `manager_flags.discuss` — appended to `/gsd:discuss-phase` args (e.g. `"--auto --analyze"`) diff --git a/gsd-core/workflows/mvp-phase.md b/gsd-core/workflows/mvp-phase.md index 4985c521b..7ed310365 100644 --- a/gsd-core/workflows/mvp-phase.md +++ b/gsd-core/workflows/mvp-phase.md @@ -35,6 +35,7 @@ Normalize per `@~/.claude/gsd-core/references/phase-argument-parsing.md` (zero-p ```bash _GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") PHASE_INFO=$(gsd_run query roadmap.get-phase "${PHASE}") PHASE_FOUND=$(echo "$PHASE_INFO" | jq -r '.found') PHASE_NAME=$(echo "$PHASE_INFO" | jq -r '.phase_name') @@ -54,6 +55,8 @@ else fi ``` +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + If `PHASE_FOUND` is `false`: error and exit. Suggest `/gsd add-phase` or `/gsd insert-phase` to create the phase first. **Status guard.** If the phase is `in_progress` (has plans but not complete) or `completed`, refuse unless `--force` is in `$ARGUMENTS`: diff --git a/gsd-core/workflows/new-milestone.md b/gsd-core/workflows/new-milestone.md index 03d79db94..bfcb010c3 100644 --- a/gsd-core/workflows/new-milestone.md +++ b/gsd-core/workflows/new-milestone.md @@ -30,13 +30,17 @@ Parse `$ARGUMENTS` before doing anything else: Parse `GSD_WS` and `MILESTONE_ARG` using the established idiom (see `verify-work.md`): ```bash +_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi GSD_WS="" echo "$ARGUMENTS" | grep -qE -- '--ws[[:space:]]+[^[:space:]]+' && GSD_WS=$(echo "$ARGUMENTS" | grep -oE -- '--ws[[:space:]]+[^[:space:]]+') MILESTONE_ARG=$(echo "$ARGUMENTS" | sed -E 's/--ws[[:space:]]+[^[:space:]]+//g' | xargs) +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") ``` `GSD_WS` must chain to every downstream routing suggestion in this workflow (Step 4's shared-file guard, and the `/gsd:discuss-phase`/`/gsd:plan-phase` routing hints below) per the routing-propagation contract in `references/workstream-flag.md` — never let it silently drop. +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow (including the "What do you want to build next?" prompt and seed-selection questions below) MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + - Read PROJECT.md (existing project, validated requirements, decisions) - Read MILESTONES.md (what shipped previously) - Read STATE.md (pending todos, blockers) @@ -195,7 +199,6 @@ blockers, todos) is preserved across the switch — symmetric with `milestone.complete`. ```bash -_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi OUTGOING_MILESTONE=$(gsd_run query state.get milestone --raw 2>/dev/null || true) printf '%s' "$OUTGOING_MILESTONE" > .planning/.gsd-outgoing-milestone 2>/dev/null || true echo "Outgoing milestone (phase history archives under THIS version in step 6): ${OUTGOING_MILESTONE:-}" diff --git a/gsd-core/workflows/new-project.md b/gsd-core/workflows/new-project.md index e447de10e..0a661bff6 100644 --- a/gsd-core/workflows/new-project.md +++ b/gsd-core/workflows/new-project.md @@ -65,7 +65,9 @@ AGENT_SKILLS_SYNTHESIZER=$(gsd_run query agent-skills gsd-research-synthesizer) AGENT_SKILLS_ROADMAPPER=$(gsd_run query agent-skills gsd-roadmapper) ``` -Parse JSON for: `researcher_model`, `synthesizer_model`, `roadmapper_model`, `commit_docs`, `project_exists`, `has_codebase_map`, `planning_exists`, `has_existing_code`, `has_package_file`, `is_brownfield`, `needs_codebase_map`, `has_git`, `git_worktree_root`, `in_nested_subdir`, `project_path`, `agents_installed`, `missing_agents`, `agent_runtime`, `agents_dir`, `required_agents`, `required_agents_installed`, `missing_required_agents`, `agent_skill_payloads_available`, `agent_skill_payload_agents`, `requirements_path`, `roadmap_path`, `config_path`, `research_dir`. +Parse JSON for: `researcher_model`, `synthesizer_model`, `roadmapper_model`, `commit_docs`, `project_exists`, `has_codebase_map`, `planning_exists`, `has_existing_code`, `has_package_file`, `is_brownfield`, `needs_codebase_map`, `has_git`, `git_worktree_root`, `in_nested_subdir`, `project_path`, `agents_installed`, `missing_agents`, `agent_runtime`, `agents_dir`, `required_agents`, `required_agents_installed`, `missing_required_agents`, `agent_skill_payloads_available`, `agent_skill_payload_agents`, `requirements_path`, `roadmap_path`, `config_path`, `research_dir`, `response_language`. + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. **If `agents_installed` is false:** Display a warning before proceeding: ```text diff --git a/gsd-core/workflows/new-workspace.md b/gsd-core/workflows/new-workspace.md index 1328597d7..6c10a3558 100644 --- a/gsd-core/workflows/new-workspace.md +++ b/gsd-core/workflows/new-workspace.md @@ -18,7 +18,9 @@ INIT=$(gsd_run query init.new-workspace) if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi ``` -Parse JSON for: `default_workspace_base`, `child_repos`, `child_repo_count`, `worktree_available`, `is_git_repo`, `cwd_repo_name`, `project_root`. +Parse JSON for: `default_workspace_base`, `child_repos`, `child_repo_count`, `worktree_available`, `is_git_repo`, `cwd_repo_name`, `project_root`, `response_language`. + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. ## 2. Parse Arguments diff --git a/gsd-core/workflows/onboard.md b/gsd-core/workflows/onboard.md index dbcd7c147..eced3b0a7 100644 --- a/gsd-core/workflows/onboard.md +++ b/gsd-core/workflows/onboard.md @@ -31,6 +31,9 @@ Parse JSON fields from `INIT`: - `missing_codebase_map_files`, `missing_fast_codebase_map_files` - `has_docs_candidates`, `doc_candidate_count`, `onboarding_summary_exists` - `commit_docs`, `text_mode`, `has_git`, `git_worktree_root`, `in_nested_subdir` +- `response_language` + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. Set: - `TEXT_MODE=true` if `--text` is present or `text_mode` is true. When `TEXT_MODE` is active, replace every `AskUserQuestion` call below with a plain-text numbered list and ask the user to type their choice number — required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available. diff --git a/gsd-core/workflows/plan-phase.md b/gsd-core/workflows/plan-phase.md index 413da4625..3e6736e9a 100644 --- a/gsd-core/workflows/plan-phase.md +++ b/gsd-core/workflows/plan-phase.md @@ -83,7 +83,7 @@ When `CONTEXT_WINDOW >= 500000`, the planner prompt includes the 3 most recent p Parse JSON for: `researcher_model`, `planner_model`, `checker_model`, `research_enabled`, `plan_checker_enabled`, `nyquist_validation_enabled`, `commit_docs`, `text_mode`, `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `padded_phase`, `has_research`, `has_context`, `has_reviews`, `has_plans`, `plan_count`, `phase_status` (#3569), `planning_exists`, `roadmap_exists`, `phase_req_ids`, `response_language`, `granularity`. -**If `response_language` is set:** Include `response_language: {value}` in all spawned subagent prompts so any user-facing output stays in the configured language. +**If `response_language` is set:** All user-facing orchestrator output MUST be in `{response_language}`; technical terms, code, paths, and subagent prompts stay in English. Pass `response_language: {value}` into every spawned subagent prompt. **File paths (for blocks):** `state_path`, `roadmap_path`, `requirements_path`, `context_path`, `research_path`, `verification_path`, `uat_path`, `reviews_path`. These are null if files don't exist. diff --git a/gsd-core/workflows/plant-seed.md b/gsd-core/workflows/plant-seed.md index 9e0c5611c..1e95f2378 100644 --- a/gsd-core/workflows/plant-seed.md +++ b/gsd-core/workflows/plant-seed.md @@ -136,8 +136,11 @@ Store relevant file paths as `$BREADCRUMBS`. ```bash _GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") gsd_run query commit "docs: plant seed — {$IDEA}" --files .planning/seeds/SEED-{PADDED}-{slug}.md ``` + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. diff --git a/gsd-core/workflows/profile-user.md b/gsd-core/workflows/profile-user.md index cd22177ec..9a2cbb6d6 100644 --- a/gsd-core/workflows/profile-user.md +++ b/gsd-core/workflows/profile-user.md @@ -14,6 +14,13 @@ Key references: +```bash +_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") +``` + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + ## 1. Initialize @@ -130,7 +137,6 @@ Display: "◆ Scanning sessions..." Run session scan: ```bash -_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi SCAN_RESULT=$(gsd_run query scan-sessions --json 2>/dev/null) ``` diff --git a/gsd-core/workflows/quick.md b/gsd-core/workflows/quick.md index 40e87198e..5df4e8e02 100644 --- a/gsd-core/workflows/quick.md +++ b/gsd-core/workflows/quick.md @@ -38,6 +38,13 @@ Parse `$ARGUMENTS` for: After parsing, normalize: if `$DISCUSS_MODE` and `$RESEARCH_MODE` and `$VALIDATE_MODE` are all true, set `$FULL_MODE=true`. This ensures `--discuss --research --validate` is treated identically to `--full`. +```bash +_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") +``` + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + If `$DESCRIPTION` is empty after parsing, prompt user interactively: @@ -125,7 +132,6 @@ If `$VALIDATE_MODE` only: **Step 2: Initialize** ```bash -_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi INIT=$(gsd_run query init.quick "$DESCRIPTION") if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi AGENT_SKILLS_PLANNER=$(gsd_run query agent-skills gsd-planner) @@ -134,7 +140,7 @@ AGENT_SKILLS_CHECKER=$(gsd_run query agent-skills gsd-plan-checker) AGENT_SKILLS_VERIFIER=$(gsd_run query agent-skills gsd-verifier) ``` -Parse JSON for: `planner_model`, `executor_model`, `checker_model`, `verifier_model`, `reviewer_model`, `commit_docs`, `branch_name`, `quick_id`, `slug`, `date`, `timestamp`, `quick_dir`, `task_dir`, `roadmap_exists`, `planning_exists`. +Parse JSON for: `planner_model`, `executor_model`, `checker_model`, `verifier_model`, `reviewer_model`, `commit_docs`, `branch_name`, `quick_id`, `slug`, `date`, `timestamp`, `quick_dir`, `task_dir`, `roadmap_exists`, `planning_exists`, `response_language`. `init.quick` does not emit dedicated `state_path`/`project_path` fields, so derive them from the already-absolute `quick_dir` (#2376 — files handed to a spawned subagent must resolve regardless of that subagent's own cwd): ```bash diff --git a/gsd-core/workflows/remove-workspace.md b/gsd-core/workflows/remove-workspace.md index f249a3275..4e575af07 100644 --- a/gsd-core/workflows/remove-workspace.md +++ b/gsd-core/workflows/remove-workspace.md @@ -14,10 +14,13 @@ Extract workspace name from $ARGUMENTS. ```bash _GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") INIT=$(gsd_run query init.remove-workspace "$WORKSPACE_NAME") if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi ``` +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + Parse JSON for: `workspace_name`, `workspace_path`, `has_manifest`, `strategy`, `repos`, `repo_count`, `dirty_repos`, `has_dirty_repos`. **If no workspace name provided:** diff --git a/gsd-core/workflows/secure-phase.md b/gsd-core/workflows/secure-phase.md index 266e35e1c..37391a911 100644 --- a/gsd-core/workflows/secure-phase.md +++ b/gsd-core/workflows/secure-phase.md @@ -17,11 +17,14 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo ```bash _GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") INIT=$(gsd_run query init.phase-op "${PHASE_ARG}") if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi AGENT_SKILLS_AUDITOR=$(gsd_run query agent-skills gsd-security-auditor) ``` +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + Parse: `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `padded_phase`. ```bash diff --git a/gsd-core/workflows/settings-integrations.md b/gsd-core/workflows/settings-integrations.md index 7ea7f38fe..956f2096b 100644 --- a/gsd-core/workflows/settings-integrations.md +++ b/gsd-core/workflows/settings-integrations.md @@ -43,6 +43,7 @@ Ensure config exists and resolve the active config path (flat vs workstream, #22 ```bash _GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") gsd_run query config-ensure-section if [[ -z "${GSD_CONFIG_PATH:-}" ]]; then if [[ -f .planning/active-workstream ]]; then @@ -54,6 +55,8 @@ if [[ -z "${GSD_CONFIG_PATH:-}" ]]; then fi ``` +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + Store `$GSD_CONFIG_PATH`. Every subsequent read/write uses it. diff --git a/gsd-core/workflows/settings.md b/gsd-core/workflows/settings.md index 550ae1fda..908024492 100644 --- a/gsd-core/workflows/settings.md +++ b/gsd-core/workflows/settings.md @@ -13,6 +13,7 @@ Ensure config exists and load current state: ```bash _GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") gsd_run query config-ensure-section INIT=$(gsd_run query state.load) if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi @@ -27,6 +28,8 @@ if [[ -z "${GSD_CONFIG_PATH:-}" ]]; then fi ``` +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + Creates `config.json` (at the resolved path) with defaults if missing. `INIT` still holds `state.load` output for any step that needs STATE fields. Store `$GSD_CONFIG_PATH` — all subsequent reads and writes use this path, not a hardcoded `.planning/config.json`, so active-workstream installs target the correct file (#2282). diff --git a/gsd-core/workflows/ship.md b/gsd-core/workflows/ship.md index f54901e73..4f0161452 100644 --- a/gsd-core/workflows/ship.md +++ b/gsd-core/workflows/ship.md @@ -25,10 +25,13 @@ Parse arguments and load project state: ```bash _GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") INIT=$(gsd_run query init.phase-op "${PHASE_ARG}") if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi ``` +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + Parse from init JSON: `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `padded_phase`, `commit_docs`. Also load config for branching strategy: diff --git a/gsd-core/workflows/sketch.md b/gsd-core/workflows/sketch.md index f26d43481..6c8cd937b 100644 --- a/gsd-core/workflows/sketch.md +++ b/gsd-core/workflows/sketch.md @@ -100,8 +100,11 @@ ls -d .planning/sketches/[0-9][0-9][0-9]-* 2>/dev/null | sort | tail -1 Check `commit_docs` config: ```bash _GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") COMMIT_DOCS=$(gsd_run query config-get commit_docs 2>/dev/null || echo "true") ``` + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. diff --git a/gsd-core/workflows/smart-entry.md b/gsd-core/workflows/smart-entry.md index cda6da388..4fd8d2853 100644 --- a/gsd-core/workflows/smart-entry.md +++ b/gsd-core/workflows/smart-entry.md @@ -30,9 +30,12 @@ Run this resolver block exactly. It locates `gsd-tools.cjs` across every support ```bash _GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") SNAPSHOT=$(gsd_run smart-entry --json 2>/dev/null) ``` +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + Parse `SNAPSHOT` as JSON. It has the shape: ```json diff --git a/gsd-core/workflows/spike.md b/gsd-core/workflows/spike.md index 6240cdb9e..2a6e578d6 100644 --- a/gsd-core/workflows/spike.md +++ b/gsd-core/workflows/spike.md @@ -13,6 +13,13 @@ Read all files referenced by the invoking prompt's execution_context before star +```bash +_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") +``` + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + ``` @@ -96,7 +103,6 @@ ls -d .planning/spikes/[0-9][0-9][0-9]-* 2>/dev/null | sort | tail -1 Check `commit_docs` config: ```bash -_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi COMMIT_DOCS=$(gsd_run query config-get commit_docs 2>/dev/null || echo "true") ``` diff --git a/gsd-core/workflows/ui-phase.md b/gsd-core/workflows/ui-phase.md index 840a09fbe..9a7100ef3 100644 --- a/gsd-core/workflows/ui-phase.md +++ b/gsd-core/workflows/ui-phase.md @@ -26,7 +26,9 @@ AGENT_SKILLS_UI=$(gsd_run query agent-skills gsd-ui-researcher) AGENT_SKILLS_UI_CHECKER=$(gsd_run query agent-skills gsd-ui-checker) ``` -Parse JSON for: `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `padded_phase`, `has_context`, `has_research`, `commit_docs`. +Parse JSON for: `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `padded_phase`, `has_context`, `has_research`, `commit_docs`, `response_language`. + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. **File paths:** `state_path`, `roadmap_path`, `requirements_path`, `context_path`, `research_path`. diff --git a/gsd-core/workflows/ui-review.md b/gsd-core/workflows/ui-review.md index 106bdaa1f..281f5b499 100644 --- a/gsd-core/workflows/ui-review.md +++ b/gsd-core/workflows/ui-review.md @@ -17,11 +17,14 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo ```bash _GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") INIT=$(gsd_run query init.phase-op "${PHASE_ARG}") if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi AGENT_SKILLS_UI_REVIEWER=$(gsd_run query agent-skills gsd-ui-auditor) ``` +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + Parse: `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `padded_phase`, `commit_docs`. ```bash diff --git a/gsd-core/workflows/undo.md b/gsd-core/workflows/undo.md index 540719914..14d5f7541 100644 --- a/gsd-core/workflows/undo.md +++ b/gsd-core/workflows/undo.md @@ -8,6 +8,13 @@ Safe git revert workflow. Rolls back GSD phase or plan commits using the phase m +```bash +_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") +``` + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + Display the stage banner: diff --git a/gsd-core/workflows/update.md b/gsd-core/workflows/update.md index d3ac790fa..71db183d3 100644 --- a/gsd-core/workflows/update.md +++ b/gsd-core/workflows/update.md @@ -7,6 +7,8 @@ Read all files referenced by the invoking prompt's execution_context before star +**If `response_language` is configured:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in that language. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + Detect the installed GSD version, scope, runtime, and config dir. diff --git a/gsd-core/workflows/validate-phase.md b/gsd-core/workflows/validate-phase.md index f2e817189..a5cdb90ad 100644 --- a/gsd-core/workflows/validate-phase.md +++ b/gsd-core/workflows/validate-phase.md @@ -17,11 +17,14 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo ```bash _GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${HERMES_HOME:-$HOME/.hermes}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEX_HOME:-$HOME/.codex}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${GSD_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi +RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/dev/null || echo "") INIT=$(gsd_run query init.phase-op "${PHASE_ARG}") if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi AGENT_SKILLS_AUDITOR=$(gsd_run query agent-skills gsd-nyquist-auditor) ``` +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. + Parse: `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `padded_phase`. ```bash diff --git a/gsd-core/workflows/verify-work.md b/gsd-core/workflows/verify-work.md index 7fda0b1fa..c87b2a2a2 100644 --- a/gsd-core/workflows/verify-work.md +++ b/gsd-core/workflows/verify-work.md @@ -48,7 +48,9 @@ AGENT_SKILLS_PLANNER=$(gsd_run query agent-skills gsd-planner) AGENT_SKILLS_CHECKER=$(gsd_run query agent-skills gsd-plan-checker) ``` -Parse JSON for: `planner_model`, `checker_model`, `commit_docs`, `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `has_verification`, `uat_path`, `state_path`, `roadmap_path`. +Parse JSON for: `planner_model`, `checker_model`, `commit_docs`, `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `has_verification`, `uat_path`, `state_path`, `roadmap_path`, `response_language`. + +**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated. ```bash # MVP mode detection via the centralized phase.mvp-mode resolver. @@ -245,6 +247,8 @@ For each deliverable, create a test: - name: Brief test name - expected: What the user should see/experience (specific, observable) +**If `response_language` is set, write the `name` and `expected` text in `{response_language}`** — the examples below are illustrative templates only, not literal output to copy. + Examples: - Accomplishment: "Added comment threading with infinite nesting" → Test: "Reply to a Comment" diff --git a/src/docs.cts b/src/docs.cts index f8ab16438..b31a07a19 100644 --- a/src/docs.cts +++ b/src/docs.cts @@ -285,6 +285,12 @@ function cmdDocsInit(cwd: string, raw: boolean): void { const agentStatus = checkAgentsInstalled(); result['agents_installed'] = agentStatus.agents_installed; result['missing_agents'] = agentStatus.missing_agents; + // #2402: withProjectRoot injects response_language when set; cmdDocsInit predates + // that helper and never picked it up, so docs-update's orchestrator-owned prompts + // silently stayed English even with response_language configured. + if (config.response_language) { + result['response_language'] = config.response_language; + } output(result, raw, undefined); } diff --git a/src/init.cts b/src/init.cts index 4006204de..395b6b0e8 100644 --- a/src/init.cts +++ b/src/init.cts @@ -2092,7 +2092,9 @@ function cmdInitRemoveWorkspace(cwd: string, name: string | undefined, raw: bool has_dirty_repos: dirtyRepos.length > 0, }; - output(result, raw); + // #2402: sibling init commands route through withProjectRoot so response_language + // (and project_root/agents_installed) reach the workflow; this one didn't. + output(withProjectRoot(cwd, result), raw); } function buildAgentSkillsBlock( diff --git a/src/uat.cts b/src/uat.cts index c8c6f6e24..d7f69475b 100644 --- a/src/uat.cts +++ b/src/uat.cts @@ -36,6 +36,9 @@ const { extractFrontmatter } = frontmatter; import phaseIdMod = require('./phase-id.cjs'); const { PHASE_NUMBER_TOKEN_SOURCE } = phaseIdMod; import { requireSafePath, sanitizeForDisplay } from './security.cjs'; +// eslint-disable-next-line @typescript-eslint/no-require-imports -- config-loader.cjs is an export= CommonJS module +import configLoader = require('./config-loader.cjs'); +const { loadConfig } = configLoader; // ─── Types ──────────────────────────────────────────────────────────────────── @@ -200,7 +203,9 @@ function cmdRenderCheckpoint(cwd: string, options: { file?: string } = {}, raw: error('UAT session is already complete; no pending checkpoint to render'); } - const checkpoint = buildCheckpoint(currentTest as Required> & { complete: false }); + const config = loadConfig(cwd); + const responseLanguage = typeof config.response_language === 'string' ? config.response_language : undefined; + const checkpoint = buildCheckpoint(currentTest as Required> & { complete: false }, responseLanguage); output({ file_path: toPosixPath(path.relative(cwd, resolvedPath)), test_number: currentTest.number, @@ -342,11 +347,130 @@ function parseExpectedFromTestBlock(block: string): string | null { } // ─── buildCheckpoint ────────────────────────────────────────────────────────── +// +// Localized frame strings (#2402): the checkpoint banner + instruction line are +// the byte-for-byte block verify-work.md reprints verbatim, so the model can't +// translate it after the fact — the frame must already be in `response_language` +// when this function returns it. Bounded table with an ENGLISH FALLBACK for +// unset/unrecognized languages keeps the default path byte-identical. -function buildCheckpoint(currentTest: { number: number; name: string; expected: string }): string { +interface CheckpointFrame { + banner: string; + instruction: string; +} + +const CHECKPOINT_BOX_WIDTH = 64; // total column width of the ╔══...╗ border, borders stay byte-identical + +const CHECKPOINT_FRAMES: Record = { + english: { + banner: 'CHECKPOINT: Verification Required', + instruction: 'Type `pass` or describe what\'s wrong.', + }, + spanish: { + banner: 'PUNTO DE CONTROL: Verificación requerida', + instruction: 'Escribe `pass` o describe qué está mal.', + }, + french: { + banner: 'POINT DE CONTRÔLE : Vérification requise', + instruction: 'Tapez `pass` ou décrivez ce qui ne va pas.', + }, + german: { + banner: 'KONTROLLPUNKT: Überprüfung erforderlich', + instruction: 'Gib `pass` ein oder beschreibe, was nicht stimmt.', + }, + portuguese: { + banner: 'PONTO DE VERIFICAÇÃO: Verificação necessária', + instruction: 'Digite `pass` ou descreva o que está errado.', + }, + japanese: { + banner: 'チェックポイント: 検証が必要です', + instruction: '`pass` と入力するか、問題点を説明してください。', + }, + chinese: { + banner: '检查点:需要验证', + instruction: '输入 `pass` 或描述问题所在。', + }, + korean: { + banner: '체크포인트: 검증 필요', + instruction: '`pass`를 입력하거나 문제를 설명하세요.', + }, + italian: { + banner: 'PUNTO DI CONTROLLO: Verifica richiesta', + instruction: 'Digita `pass` o descrivi cosa non va.', + }, +}; + +// Free-form response_language aliases → canonical CHECKPOINT_FRAMES key. +const CHECKPOINT_LANGUAGE_ALIASES: Record = { + english: 'english', en: 'english', 'en-us': 'english', 'en-gb': 'english', + spanish: 'spanish', es: 'spanish', 'español': 'spanish', espanol: 'spanish', castellano: 'spanish', + french: 'french', fr: 'french', 'français': 'french', francais: 'french', + german: 'german', de: 'german', deutsch: 'german', + portuguese: 'portuguese', pt: 'portuguese', 'pt-br': 'portuguese', 'português': 'portuguese', portugues: 'portuguese', 'brazilian portuguese': 'portuguese', + japanese: 'japanese', ja: 'japanese', '日本語': 'japanese', + chinese: 'chinese', zh: 'chinese', 'zh-cn': 'chinese', 'zh-tw': 'chinese', mandarin: 'chinese', 'simplified chinese': 'chinese', 'traditional chinese': 'chinese', '中文': 'chinese', + korean: 'korean', ko: 'korean', '한국어': 'korean', + italian: 'italian', it: 'italian', italiano: 'italian', +}; + +function resolveCheckpointFrame(responseLanguage: string | undefined): CheckpointFrame { + if (!responseLanguage) return CHECKPOINT_FRAMES.english; + const key = CHECKPOINT_LANGUAGE_ALIASES[responseLanguage.trim().toLowerCase()]; + return (key && CHECKPOINT_FRAMES[key]) || CHECKPOINT_FRAMES.english; +} + +// Approximate East Asian Width ranges (Unicode property values W and F) — the +// CJK scripts CHECKPOINT_FRAMES ships (Japanese/Chinese/Korean) render each +// matching code point at 2 terminal/display columns, not 1. Padding computed +// from `.length` (UTF-16 code units) undercounts these by one column per +// wide character, visually misaligning the box's right border (#2402 review +// medium finding). Latin-script frames (English/Spanish/French/German/ +// Portuguese/Italian) contain no wide code points, so displayWidth === length +// for them — no behavior change there. +function isWideCodePoint(codePoint: number): boolean { + return ( + (codePoint >= 0x1100 && codePoint <= 0x115f) || // Hangul Jamo + codePoint === 0x2329 || codePoint === 0x232a || + (codePoint >= 0x2e80 && codePoint <= 0x303e) || // CJK Radicals .. CJK Symbols and Punctuation + (codePoint >= 0x3041 && codePoint <= 0x33ff) || // Hiragana .. CJK Compatibility + (codePoint >= 0x3400 && codePoint <= 0x4dbf) || // CJK Unified Ideographs Extension A + (codePoint >= 0x4e00 && codePoint <= 0x9fff) || // CJK Unified Ideographs + (codePoint >= 0xa000 && codePoint <= 0xa4cf) || // Yi Syllables + (codePoint >= 0xac00 && codePoint <= 0xd7a3) || // Hangul Syllables + (codePoint >= 0xf900 && codePoint <= 0xfaff) || // CJK Compatibility Ideographs + (codePoint >= 0xfe30 && codePoint <= 0xfe4f) || // CJK Compatibility Forms + (codePoint >= 0xff00 && codePoint <= 0xff60) || // Fullwidth Forms + (codePoint >= 0xffe0 && codePoint <= 0xffe6) || + (codePoint >= 0x20000 && codePoint <= 0x3fffd) // CJK Unified Ideographs Extension B+ / supplementary + ); +} + +// Iterates by Unicode code point (not UTF-16 code unit) so astral characters +// are measured once, not as two surrogate units. +function displayWidth(text: string): number { + let width = 0; + for (const ch of text) { + width += isWideCodePoint(ch.codePointAt(0) as number) ? 2 : 1; + } + return width; +} + +// Pads `text` into a `║ text… ║` line matching CHECKPOINT_BOX_WIDTH. Content +// that overflows the box (a longer translated string) is left unpadded rather +// than truncated — a slightly ragged border beats losing text. +function checkpointBoxLine(text: string): string { + const innerWidth = CHECKPOINT_BOX_WIDTH - 2; + const content = ` ${text}`; + const padLength = innerWidth - displayWidth(content); + const padded = padLength > 0 ? content + ' '.repeat(padLength) : content; + return `║${padded}║`; +} + +function buildCheckpoint(currentTest: { number: number; name: string; expected: string }, responseLanguage?: string): string { + const frame = resolveCheckpointFrame(responseLanguage); return [ '╔══════════════════════════════════════════════════════════════╗', - '║ CHECKPOINT: Verification Required ║', + checkpointBoxLine(frame.banner), '╚══════════════════════════════════════════════════════════════╝', '', `**Test ${currentTest.number}: ${currentTest.name}**`, @@ -354,7 +478,7 @@ function buildCheckpoint(currentTest: { number: number; name: string; expected: currentTest.expected, '', '──────────────────────────────────────────────────────────────', - 'Type `pass` or describe what\'s wrong.', + frame.instruction, '──────────────────────────────────────────────────────────────', ].join('\n'); } diff --git a/tests/docs-update.test.cjs b/tests/docs-update.test.cjs index 858c796c6..c87326885 100644 --- a/tests/docs-update.test.cjs +++ b/tests/docs-update.test.cjs @@ -91,6 +91,47 @@ describe('docs-init command', () => { }); }); +// ─── response_language wiring (#2402) ───────────────────────────────────────── +// +// cmdDocsInit predates withProjectRoot (init.cts) and never picked up +// response_language, so docs-update's orchestrator-owned prompts silently +// stayed English even with response_language configured. Mirrors the +// established `init manager` response_language coverage pattern +// (tests/init-manager.test.cjs). + +describe('docs-init response_language wiring (#2402)', () => { + let tmpDir; + + beforeEach(() => { + tmpDir = createTempProject(); + }); + + afterEach(() => { + cleanup(tmpDir); + }); + + test('output includes response_language when configured', () => { + fs.writeFileSync( + path.join(tmpDir, '.planning', 'config.json'), + JSON.stringify({ response_language: 'Japanese' }) + ); + + const result = runGsdTools(['docs-init'], tmpDir); + assert.ok(result.success, `Command failed: ${result.error}`); + + const data = JSON.parse(result.output); + assert.strictEqual(data.response_language, 'Japanese'); + }); + + test('output omits response_language when not configured', () => { + const result = runGsdTools(['docs-init'], tmpDir); + assert.ok(result.success, `Command failed: ${result.error}`); + + const data = JSON.parse(result.output); + assert.strictEqual(data.response_language, undefined); + }); +}); + // ─── project type detection ─────────────────────────────────────────────────── describe('project type detection', () => { diff --git a/tests/fixtures/golden-install-parity/antigravity.json b/tests/fixtures/golden-install-parity/antigravity.json index 698884413..ef5946a57 100644 --- a/tests/fixtures/golden-install-parity/antigravity.json +++ b/tests/fixtures/golden-install-parity/antigravity.json @@ -89,6 +89,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e", "gsd-core/references/execute-phase-context-guard.md": "a5a1058d35806a8e", "gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2", + "gsd-core/references/execute-phase-response-language.md": "c240dc476dd15df5", "gsd-core/references/execute-phase-wave-guard.md": "826cf9315e592a1d", "gsd-core/references/executor-examples.md": "ba59243ed45c8ab1", "gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4", @@ -208,23 +209,23 @@ "gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335", "gsd-core/workflows/add-backlog.md": "8cc2e884a021b79b", "gsd-core/workflows/add-phase.md": "820572da6367308c", - "gsd-core/workflows/add-tests.md": "ad6d49634e04ca7c", - "gsd-core/workflows/add-todo.md": "e410a72c168e43c0", - "gsd-core/workflows/ai-integration-phase.md": "ea5a229a9cad3b4d", + "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/analyze-dependencies.md": "77aff48f97fa6f1c", "gsd-core/workflows/audit-fix.md": "68d2133e0d483905", "gsd-core/workflows/audit-milestone.md": "280cd85908dd45cb", "gsd-core/workflows/audit-uat.md": "ea8ddd910ed16ba4", "gsd-core/workflows/autonomous.md": "603ce2019835f00e", - "gsd-core/workflows/check-todos.md": "5a62092df800ad7c", - "gsd-core/workflows/cleanup.md": "12c8fd85d3010fe6", + "gsd-core/workflows/check-todos.md": "d05762462ced3702", + "gsd-core/workflows/cleanup.md": "260c5e46afc1c174", "gsd-core/workflows/code-review-fix.md": "60640e633b0a124b", "gsd-core/workflows/code-review.md": "1a72ce22df16b3fa", - "gsd-core/workflows/complete-milestone.md": "aaf272074acec69d", - "gsd-core/workflows/debug.md": "220b0ddc8bc4fb59", + "gsd-core/workflows/complete-milestone.md": "f54214679be6a98a", + "gsd-core/workflows/debug.md": "013255ecf10f5219", "gsd-core/workflows/diagnose-issues.md": "27c2012f67f9cf79", - "gsd-core/workflows/discovery-phase.md": "3de990caffdde4f8", - "gsd-core/workflows/discuss-phase-assumptions.md": "8581fd77def7ce84", + "gsd-core/workflows/discovery-phase.md": "222887a5b2094a50", + "gsd-core/workflows/discuss-phase-assumptions.md": "6e6a0c20cf0a04b7", "gsd-core/workflows/discuss-phase-power.md": "5c0d1ca6abda0383", "gsd-core/workflows/discuss-phase.md": "c0a977154470b7f5", "gsd-core/workflows/discuss-phase/modes/advisor.md": "ab0c68941386998b", @@ -239,88 +240,88 @@ "gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb", "gsd-core/workflows/discuss-phase/templates/context.md": "9804674fccada405", "gsd-core/workflows/discuss-phase/templates/discussion-log.md": "2b56ec2868cbddb4", - "gsd-core/workflows/do.md": "3eddf1cc9e04b685", - "gsd-core/workflows/docs-update.md": "8e986e26d0e6e1a0", + "gsd-core/workflows/do.md": "6be997df35e9e82b", + "gsd-core/workflows/docs-update.md": "16acb903dbe2bcbe", "gsd-core/workflows/edit-phase.md": "fc932e82ba1f585a", - "gsd-core/workflows/eval-review.md": "eb4040eaa5b8497f", - "gsd-core/workflows/execute-phase.md": "2e9ca8842df9e543", + "gsd-core/workflows/eval-review.md": "9e8b169c05098b57", + "gsd-core/workflows/execute-phase.md": "e96e1fa1b78b8a21", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "55d0706e80a2554a", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "13aa54f8279960ae", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "476f88892510a09e", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "b5eec9e33626aefa", + "gsd-core/workflows/execute-plan.md": "8d0cd5e80d86de35", "gsd-core/workflows/explore.md": "934c00f9f216dbdb", "gsd-core/workflows/extract-learnings.md": "167ea7f0e23bf496", "gsd-core/workflows/fast.md": "568e6c3ec00b6e00", "gsd-core/workflows/forensics.md": "b64f0309b8c3fde1", - "gsd-core/workflows/graduation.md": "a9d8f15ba81a993f", - "gsd-core/workflows/health.md": "1ac4d567ee95acfb", + "gsd-core/workflows/graduation.md": "c892887f212c9cff", + "gsd-core/workflows/health.md": "8202d3532bde3952", "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3", "gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0", "gsd-core/workflows/help/modes/full.md": "80d03a09b561766b", "gsd-core/workflows/help/modes/topic.md": "0bf9ab39d7044d69", - "gsd-core/workflows/import.md": "3885f4fd9f20597d", - "gsd-core/workflows/inbox.md": "a448220c548f27bc", - "gsd-core/workflows/ingest-docs.md": "c7efcceb0eb11822", + "gsd-core/workflows/import.md": "7778705ca6c3bc23", + "gsd-core/workflows/inbox.md": "923bf25e18a71698", + "gsd-core/workflows/ingest-docs.md": "74c6dcea23eb0569", "gsd-core/workflows/insert-phase.md": "cdd83cf77d0f7485", "gsd-core/workflows/list-phase-assumptions.md": "e7b5e35c9452e3b3", "gsd-core/workflows/list-seeds.md": "3a8b612306ecf9c3", "gsd-core/workflows/list-workspaces.md": "f6b1bc9fa13cc155", - "gsd-core/workflows/manager.md": "77133c13a8d303d5", + "gsd-core/workflows/manager.md": "7cd083b4f5b721b6", "gsd-core/workflows/map-codebase.md": "bd7fe5c0ff0768e0", "gsd-core/workflows/milestone-summary.md": "c4620853fe489126", - "gsd-core/workflows/mvp-phase.md": "5f0e355ff4583d67", - "gsd-core/workflows/new-milestone.md": "74d4c6d4549a32fd", - "gsd-core/workflows/new-project.md": "0c170425e247ec03", - "gsd-core/workflows/new-workspace.md": "21bfae58b9cc2990", + "gsd-core/workflows/mvp-phase.md": "3675856fb091e68a", + "gsd-core/workflows/new-milestone.md": "ebc6ba9d92a2304e", + "gsd-core/workflows/new-project.md": "8d61773d599cf64c", + "gsd-core/workflows/new-workspace.md": "2310910fea2368db", "gsd-core/workflows/next.md": "8beefb4335dd7c41", "gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b", "gsd-core/workflows/note.md": "3ce09c0aa0a20599", - "gsd-core/workflows/onboard.md": "69d871aa53a1a859", + "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": "27c60469f88532f2", + "gsd-core/workflows/plan-phase.md": "4488a41ec68c9da4", "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/plant-seed.md": "6cf726be6427a35a", + "gsd-core/workflows/plant-seed.md": "1dddbafe892d8cf3", "gsd-core/workflows/pr-branch.md": "dc5598ae8accdecd", - "gsd-core/workflows/profile-user.md": "355af92ac285567f", + "gsd-core/workflows/profile-user.md": "3a3f8e417de0074c", "gsd-core/workflows/progress.md": "9fb8c93970e0b4aa", - "gsd-core/workflows/quick.md": "29739776f5c91338", + "gsd-core/workflows/quick.md": "0dc4065a3cb40b67", "gsd-core/workflows/reapply-patches.md": "4dcd6117d0a507ca", "gsd-core/workflows/remove-phase.md": "23b9eb0858a2535e", - "gsd-core/workflows/remove-workspace.md": "d0bd7e0601138798", + "gsd-core/workflows/remove-workspace.md": "1058d1d3160eb120", "gsd-core/workflows/resume-project.md": "98e2cf8908e73a52", "gsd-core/workflows/review.md": "6f6575621367b9ff", "gsd-core/workflows/scan.md": "1feb5f040e426562", - "gsd-core/workflows/secure-phase.md": "52ddc46233e8fa66", + "gsd-core/workflows/secure-phase.md": "34c0aba32c922218", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "6d25100a9de15b31", - "gsd-core/workflows/settings-integrations.md": "4d3001ad2b5dad8f", - "gsd-core/workflows/settings.md": "8258f7bd3700d608", - "gsd-core/workflows/ship.md": "3fb340ea87726ed2", + "gsd-core/workflows/settings-integrations.md": "e1fda52e8c9afa5f", + "gsd-core/workflows/settings.md": "9b7e0a34f4f41a80", + "gsd-core/workflows/ship.md": "0eca9ab4bcdeeb17", "gsd-core/workflows/sketch-wrap-up.md": "0f842a609851a401", - "gsd-core/workflows/sketch.md": "314b7d323c6b57eb", - "gsd-core/workflows/smart-entry.md": "3ce5b6228238fdb6", + "gsd-core/workflows/sketch.md": "c42d993c1e9a6240", + "gsd-core/workflows/smart-entry.md": "6d887ca5d9df9185", "gsd-core/workflows/spec-phase.md": "978462218855c213", "gsd-core/workflows/spike-wrap-up.md": "8db41edc87cb7886", - "gsd-core/workflows/spike.md": "dd8d139947a8fb31", + "gsd-core/workflows/spike.md": "a6daeb0b927563a3", "gsd-core/workflows/stats.md": "b64bda5c0a1a06fb", "gsd-core/workflows/sync-skills.md": "8326a7ff0411b077", "gsd-core/workflows/thread.md": "31201839d0530e89", "gsd-core/workflows/transition.md": "d3486f115d808175", - "gsd-core/workflows/ui-phase.md": "be51b5f5229ac856", - "gsd-core/workflows/ui-review.md": "ba558aaf1ad9f58d", + "gsd-core/workflows/ui-phase.md": "377385c2c2af8791", + "gsd-core/workflows/ui-review.md": "a5728055817ab45c", "gsd-core/workflows/ultraplan-phase.md": "d8e92b0b7214eba6", - "gsd-core/workflows/undo.md": "6ab639d1fc7e0721", - "gsd-core/workflows/update.md": "2c58df5e21c41c31", - "gsd-core/workflows/validate-phase.md": "ae3f0180a2316fcd", + "gsd-core/workflows/undo.md": "a2c65d90d5761f71", + "gsd-core/workflows/update.md": "61e8f7c4f63444ae", + "gsd-core/workflows/validate-phase.md": "f6f20a30b497b462", "gsd-core/workflows/verify-phase.md": "913acaef091797d7", - "gsd-core/workflows/verify-work.md": "1d404aed6a3baf4b", + "gsd-core/workflows/verify-work.md": "61b6aa9ab3a8ac68", "hooks/gsd-check-update-worker.js": "fa301e6366270d5f", "hooks/gsd-check-update.js": "4617a98bf529e4c3", "hooks/gsd-config-reload.js": "96546e0e8bb47904", diff --git a/tests/fixtures/golden-install-parity/augment.json b/tests/fixtures/golden-install-parity/augment.json index 6b22a833b..943f1349f 100644 --- a/tests/fixtures/golden-install-parity/augment.json +++ b/tests/fixtures/golden-install-parity/augment.json @@ -160,6 +160,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e", "gsd-core/references/execute-phase-context-guard.md": "982006c1f3364242", "gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2", + "gsd-core/references/execute-phase-response-language.md": "c240dc476dd15df5", "gsd-core/references/execute-phase-wave-guard.md": "de9ac22cead4cfd8", "gsd-core/references/executor-examples.md": "ba59243ed45c8ab1", "gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4", @@ -279,23 +280,23 @@ "gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335", "gsd-core/workflows/add-backlog.md": "1bc7377b105194fc", "gsd-core/workflows/add-phase.md": "ac43883e2d8e34d8", - "gsd-core/workflows/add-tests.md": "24b0d8157a9ccb8b", - "gsd-core/workflows/add-todo.md": "953314cdfef56bc4", - "gsd-core/workflows/ai-integration-phase.md": "45c727e49de71636", + "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/analyze-dependencies.md": "52942af10f140717", "gsd-core/workflows/audit-fix.md": "d511f4094ce351aa", "gsd-core/workflows/audit-milestone.md": "3835762c3147a927", "gsd-core/workflows/audit-uat.md": "fcfbec501620b564", "gsd-core/workflows/autonomous.md": "7e5683728ef33707", - "gsd-core/workflows/check-todos.md": "bdeaf43f9c61e0cc", - "gsd-core/workflows/cleanup.md": "0daa2f2720c111f1", + "gsd-core/workflows/check-todos.md": "f39e3251a78f6f5a", + "gsd-core/workflows/cleanup.md": "df79d1dc7b84d736", "gsd-core/workflows/code-review-fix.md": "2e113d1f4350a075", "gsd-core/workflows/code-review.md": "c877ad812b4a511e", - "gsd-core/workflows/complete-milestone.md": "c1f91b77f4ace7f2", - "gsd-core/workflows/debug.md": "79c2f7dc12815e30", + "gsd-core/workflows/complete-milestone.md": "8f98d7b05793cf4a", + "gsd-core/workflows/debug.md": "a2d04237fbbce72b", "gsd-core/workflows/diagnose-issues.md": "a4d015391e079b90", - "gsd-core/workflows/discovery-phase.md": "3ba7cfb89fb1e761", - "gsd-core/workflows/discuss-phase-assumptions.md": "f5b765d33eba4f88", + "gsd-core/workflows/discovery-phase.md": "0aa8d8d872b53858", + "gsd-core/workflows/discuss-phase-assumptions.md": "185419d61517727b", "gsd-core/workflows/discuss-phase-power.md": "0841f7dc6e9a054a", "gsd-core/workflows/discuss-phase.md": "5c5e8d8c2c9d95aa", "gsd-core/workflows/discuss-phase/modes/advisor.md": "db488d74d080c653", @@ -310,88 +311,88 @@ "gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb", "gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f", "gsd-core/workflows/discuss-phase/templates/discussion-log.md": "1bbd7703f11128e1", - "gsd-core/workflows/do.md": "7512dd1892f118a1", - "gsd-core/workflows/docs-update.md": "f35922d15b7061c9", + "gsd-core/workflows/do.md": "90df4f1fe248cdf3", + "gsd-core/workflows/docs-update.md": "b5cdf1c35043cf7b", "gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04", - "gsd-core/workflows/eval-review.md": "f898936e2cfe4130", - "gsd-core/workflows/execute-phase.md": "982d35b8ed16619d", + "gsd-core/workflows/eval-review.md": "32d3d7e80ab2bfc7", + "gsd-core/workflows/execute-phase.md": "1325f146afc9404a", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "4e265392b3f2ba0e", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "7b2d9a4a4013fd6a", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "7a49bc47da5411ea", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "83cb02952b514bd8", + "gsd-core/workflows/execute-plan.md": "6d93a4c4383b1cb3", "gsd-core/workflows/explore.md": "6c04f2e658d93261", "gsd-core/workflows/extract-learnings.md": "b6f01ca3d8f58de4", "gsd-core/workflows/fast.md": "11f5cd10ae5cc7d3", "gsd-core/workflows/forensics.md": "0d500a3f5ab26913", - "gsd-core/workflows/graduation.md": "47f1594c88c08501", - "gsd-core/workflows/health.md": "107e3c72e76d9535", + "gsd-core/workflows/graduation.md": "973dcebcd17e1b10", + "gsd-core/workflows/health.md": "c25b5e5f62874c31", "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0", "gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50", "gsd-core/workflows/help/modes/full.md": "110608f0352bb0a3", "gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d", - "gsd-core/workflows/import.md": "12c6cbcbdecb6392", - "gsd-core/workflows/inbox.md": "437f981ef9ae7b26", - "gsd-core/workflows/ingest-docs.md": "f7c3fa659ca77bc5", + "gsd-core/workflows/import.md": "31a0f3a33154939f", + "gsd-core/workflows/inbox.md": "a7d439981775bc29", + "gsd-core/workflows/ingest-docs.md": "e5c63b5e539f6e17", "gsd-core/workflows/insert-phase.md": "08dca838d831bb5b", "gsd-core/workflows/list-phase-assumptions.md": "53dd4b69536c1bc3", "gsd-core/workflows/list-seeds.md": "b687f2a843032d65", "gsd-core/workflows/list-workspaces.md": "7f94e18b5c549453", - "gsd-core/workflows/manager.md": "3ba7a3e8213c4b23", + "gsd-core/workflows/manager.md": "c18fab593344253d", "gsd-core/workflows/map-codebase.md": "8fb02d635a86d6b2", "gsd-core/workflows/milestone-summary.md": "e0cdfddbd39a9043", - "gsd-core/workflows/mvp-phase.md": "344dd300e0cc1e74", - "gsd-core/workflows/new-milestone.md": "6227eaddad367bc5", - "gsd-core/workflows/new-project.md": "00016f35bf5cd2f2", - "gsd-core/workflows/new-workspace.md": "017688423110ed66", + "gsd-core/workflows/mvp-phase.md": "58a952b4715db283", + "gsd-core/workflows/new-milestone.md": "f6029bcb535bee69", + "gsd-core/workflows/new-project.md": "bb53336d89c51ee4", + "gsd-core/workflows/new-workspace.md": "bbeb706c7a697617", "gsd-core/workflows/next.md": "13fb800f2472d970", "gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b", "gsd-core/workflows/note.md": "5a99eb396c744619", - "gsd-core/workflows/onboard.md": "6f9e6c0b484271a9", + "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": "dd23944278603a87", + "gsd-core/workflows/plan-phase.md": "32703b6b822f44c0", "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/plant-seed.md": "10b92ae08a6fdede", + "gsd-core/workflows/plant-seed.md": "9596db80ab282c6f", "gsd-core/workflows/pr-branch.md": "c87db7ac8c28be1b", - "gsd-core/workflows/profile-user.md": "14263db831230142", + "gsd-core/workflows/profile-user.md": "59e5066c5c66572a", "gsd-core/workflows/progress.md": "46c83ad61b3c4a84", - "gsd-core/workflows/quick.md": "988fbe85a0251cf1", + "gsd-core/workflows/quick.md": "8c2bb04edaa6a429", "gsd-core/workflows/reapply-patches.md": "39050f72601aec89", "gsd-core/workflows/remove-phase.md": "df9a45f0b1880999", - "gsd-core/workflows/remove-workspace.md": "a7ca66db6b7c132c", + "gsd-core/workflows/remove-workspace.md": "f67860c795fb4bfe", "gsd-core/workflows/resume-project.md": "f28da1200e4545f4", "gsd-core/workflows/review.md": "f1fbefbd64bd890e", "gsd-core/workflows/scan.md": "e6424af05656725a", - "gsd-core/workflows/secure-phase.md": "22ab3bb5da494ea7", + "gsd-core/workflows/secure-phase.md": "f8b9436c35372281", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "414db4dbea97ba44", - "gsd-core/workflows/settings-integrations.md": "70515c5838fb9826", - "gsd-core/workflows/settings.md": "d96ddf01fb85e61e", - "gsd-core/workflows/ship.md": "4642ebbaa38f8cc2", + "gsd-core/workflows/settings-integrations.md": "effcef778d4a855f", + "gsd-core/workflows/settings.md": "85ceb482dc713169", + "gsd-core/workflows/ship.md": "09056fccdf20e41b", "gsd-core/workflows/sketch-wrap-up.md": "5f5ebb6a80d610c6", - "gsd-core/workflows/sketch.md": "8319cedf3f93fc35", - "gsd-core/workflows/smart-entry.md": "449238eb94abe187", + "gsd-core/workflows/sketch.md": "efc5a794b4bd6e78", + "gsd-core/workflows/smart-entry.md": "004b4060eab97cb9", "gsd-core/workflows/spec-phase.md": "fa8669b75392cf6c", "gsd-core/workflows/spike-wrap-up.md": "8467dadf2af758e6", - "gsd-core/workflows/spike.md": "7727c07bb221c8cc", + "gsd-core/workflows/spike.md": "a159bf4018564cb2", "gsd-core/workflows/stats.md": "76a42cbeaf6007c2", "gsd-core/workflows/sync-skills.md": "b505e6f8331c0918", "gsd-core/workflows/thread.md": "927e7eeefd2fcf5c", "gsd-core/workflows/transition.md": "aea486bb7a0e80e7", - "gsd-core/workflows/ui-phase.md": "0ae35f603071630e", - "gsd-core/workflows/ui-review.md": "7acfc485526d064b", + "gsd-core/workflows/ui-phase.md": "8271b83199961d98", + "gsd-core/workflows/ui-review.md": "202c4e399cd95719", "gsd-core/workflows/ultraplan-phase.md": "0fb8291153e3937d", - "gsd-core/workflows/undo.md": "96d2775f008b3a85", - "gsd-core/workflows/update.md": "fd160e13f8b7e83c", - "gsd-core/workflows/validate-phase.md": "ce9890f21c6e5607", + "gsd-core/workflows/undo.md": "1712417bade30b30", + "gsd-core/workflows/update.md": "947c8b421de2eb59", + "gsd-core/workflows/validate-phase.md": "2e19caff07397728", "gsd-core/workflows/verify-phase.md": "d26a2c3269340caf", - "gsd-core/workflows/verify-work.md": "86c6f0c77b5adc72", + "gsd-core/workflows/verify-work.md": "5b92e34f1d0da848", "hooks/gsd-check-update-worker.js": "cc1ef5f840f9dfc9", "hooks/gsd-check-update.js": "7b3a7983d5f1f5d3", "hooks/gsd-config-reload.js": "96546e0e8bb47904", diff --git a/tests/fixtures/golden-install-parity/claude-local.json b/tests/fixtures/golden-install-parity/claude-local.json index 176d0a5fa..f33b6b287 100644 --- a/tests/fixtures/golden-install-parity/claude-local.json +++ b/tests/fixtures/golden-install-parity/claude-local.json @@ -159,6 +159,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e", "gsd-core/references/execute-phase-context-guard.md": "a5a1058d35806a8e", "gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2", + "gsd-core/references/execute-phase-response-language.md": "c240dc476dd15df5", "gsd-core/references/execute-phase-wave-guard.md": "de9ac22cead4cfd8", "gsd-core/references/executor-examples.md": "ba59243ed45c8ab1", "gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4", @@ -278,23 +279,23 @@ "gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335", "gsd-core/workflows/add-backlog.md": "8d05775f367d1e48", "gsd-core/workflows/add-phase.md": "b3c61dc9b4d799ed", - "gsd-core/workflows/add-tests.md": "ffbaf55a25f455a2", - "gsd-core/workflows/add-todo.md": "0a0f4d718ea50bea", - "gsd-core/workflows/ai-integration-phase.md": "462b75ae916e2793", + "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/analyze-dependencies.md": "77aff48f97fa6f1c", "gsd-core/workflows/audit-fix.md": "f03266102d4ee978", "gsd-core/workflows/audit-milestone.md": "ae8605b4ecc37c0b", "gsd-core/workflows/audit-uat.md": "1c4a02a8c1ab930f", "gsd-core/workflows/autonomous.md": "6adf957e64518d15", - "gsd-core/workflows/check-todos.md": "8f2c6b27f18cc5e2", - "gsd-core/workflows/cleanup.md": "bfbab4b981d39544", + "gsd-core/workflows/check-todos.md": "f403daa26ba34cfb", + "gsd-core/workflows/cleanup.md": "8490f912cd609049", "gsd-core/workflows/code-review-fix.md": "78c716068ccdf820", "gsd-core/workflows/code-review.md": "7db21e884906595e", - "gsd-core/workflows/complete-milestone.md": "9962377cddee50d7", - "gsd-core/workflows/debug.md": "89cbdec677d92844", + "gsd-core/workflows/complete-milestone.md": "529119d0ff9664d9", + "gsd-core/workflows/debug.md": "a2986ce2b2fad490", "gsd-core/workflows/diagnose-issues.md": "a631d913c36dc2b0", - "gsd-core/workflows/discovery-phase.md": "a20dfb32adec51de", - "gsd-core/workflows/discuss-phase-assumptions.md": "35a3b2d1285565d8", + "gsd-core/workflows/discovery-phase.md": "6d691c38a911e27d", + "gsd-core/workflows/discuss-phase-assumptions.md": "c1f11ad5f5b3407e", "gsd-core/workflows/discuss-phase-power.md": "290c0d83d783f9f6", "gsd-core/workflows/discuss-phase.md": "ff2563dc378c5e5c", "gsd-core/workflows/discuss-phase/modes/advisor.md": "f64ece6d53b6d432", @@ -309,88 +310,88 @@ "gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb", "gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f", "gsd-core/workflows/discuss-phase/templates/discussion-log.md": "1bbd7703f11128e1", - "gsd-core/workflows/do.md": "149084d893a23024", - "gsd-core/workflows/docs-update.md": "cd753783ab95da00", + "gsd-core/workflows/do.md": "0f7b639ff37660b5", + "gsd-core/workflows/docs-update.md": "99908189254c0131", "gsd-core/workflows/edit-phase.md": "dbbb6191f5a8b65e", - "gsd-core/workflows/eval-review.md": "086a1f2b3c11462c", - "gsd-core/workflows/execute-phase.md": "66e4f92099ba3a7a", + "gsd-core/workflows/eval-review.md": "11620e0dc4a003dd", + "gsd-core/workflows/execute-phase.md": "4e272ba9df401dc5", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "6d38bfd540030da4", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "a7f9b9a45303382f", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "b14d7fa2c4ec2406", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "587757b937368212", + "gsd-core/workflows/execute-plan.md": "16c4d168d424b030", "gsd-core/workflows/explore.md": "95e463d4bdd6dadd", "gsd-core/workflows/extract-learnings.md": "fd75072c339b58bd", "gsd-core/workflows/fast.md": "7f7687b920d79b29", "gsd-core/workflows/forensics.md": "857d7b064f4cca21", - "gsd-core/workflows/graduation.md": "ecf8da93e094fd2e", - "gsd-core/workflows/health.md": "551e63aa6f3df711", + "gsd-core/workflows/graduation.md": "7a1d9e1327dce4e7", + "gsd-core/workflows/health.md": "dddcdd72162d23b5", "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3", "gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0", "gsd-core/workflows/help/modes/full.md": "2388596fd5bcbd07", "gsd-core/workflows/help/modes/topic.md": "6e42db16f1568be9", - "gsd-core/workflows/import.md": "477b3d7676ce1a66", - "gsd-core/workflows/inbox.md": "91aac6360e1a8672", - "gsd-core/workflows/ingest-docs.md": "9f8e42decf5adf82", + "gsd-core/workflows/import.md": "5b78323f7538abb6", + "gsd-core/workflows/inbox.md": "47e718a37c7a738f", + "gsd-core/workflows/ingest-docs.md": "a6d3cfe0bc9d338e", "gsd-core/workflows/insert-phase.md": "ae977afd1509dc86", "gsd-core/workflows/list-phase-assumptions.md": "2a6b6a5acfb7742c", "gsd-core/workflows/list-seeds.md": "7576156b91e9abee", "gsd-core/workflows/list-workspaces.md": "90caeeb11cec0128", - "gsd-core/workflows/manager.md": "36559ff897e55c09", + "gsd-core/workflows/manager.md": "9dcb5eaf64f86627", "gsd-core/workflows/map-codebase.md": "0cad5825e637e7fc", "gsd-core/workflows/milestone-summary.md": "99636900c216c8d2", - "gsd-core/workflows/mvp-phase.md": "254baac57e85dca7", - "gsd-core/workflows/new-milestone.md": "7c39849d67fc0256", - "gsd-core/workflows/new-project.md": "287483eea4d1415c", - "gsd-core/workflows/new-workspace.md": "26615bf710f0a324", + "gsd-core/workflows/mvp-phase.md": "88cf363abd25f41e", + "gsd-core/workflows/new-milestone.md": "1a4717b3abe97133", + "gsd-core/workflows/new-project.md": "3cb398a0e64db7b1", + "gsd-core/workflows/new-workspace.md": "8ec67b5bc4c3f95a", "gsd-core/workflows/next.md": "1193222c5618d3db", "gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b", "gsd-core/workflows/note.md": "a2cc926854a5666c", - "gsd-core/workflows/onboard.md": "b86d78eef6c77e5b", + "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": "ac61699f0eeccccf", + "gsd-core/workflows/plan-phase.md": "50fad2ee2017f9e9", "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/plant-seed.md": "fbe964fcdb244802", + "gsd-core/workflows/plant-seed.md": "727991ecd521b617", "gsd-core/workflows/pr-branch.md": "513f6cff722eff2d", - "gsd-core/workflows/profile-user.md": "3b34dcb337d50f4b", + "gsd-core/workflows/profile-user.md": "7a7786eb43efda0d", "gsd-core/workflows/progress.md": "01079a85cbc41ffe", - "gsd-core/workflows/quick.md": "0f49d4553de5da88", + "gsd-core/workflows/quick.md": "da526cdfe5fbe79b", "gsd-core/workflows/reapply-patches.md": "44a96b52b975e9bb", "gsd-core/workflows/remove-phase.md": "8effc8742d58a11a", - "gsd-core/workflows/remove-workspace.md": "10882656198d9075", + "gsd-core/workflows/remove-workspace.md": "64b73daff58b9aec", "gsd-core/workflows/resume-project.md": "af9761bcec0f6fe9", "gsd-core/workflows/review.md": "8c05b76fe9d00c30", "gsd-core/workflows/scan.md": "9126e95bf9c50f7e", - "gsd-core/workflows/secure-phase.md": "8030d2b2a5bfdf07", + "gsd-core/workflows/secure-phase.md": "396e2f708abfa7a1", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "94d61da368e9f85b", - "gsd-core/workflows/settings-integrations.md": "dfe3672c4fabf139", - "gsd-core/workflows/settings.md": "acdd79110699a608", - "gsd-core/workflows/ship.md": "30ff5e4ebf0edee8", + "gsd-core/workflows/settings-integrations.md": "9e0108e01e78832c", + "gsd-core/workflows/settings.md": "a1a35e58da33b23b", + "gsd-core/workflows/ship.md": "205632a5eb12e473", "gsd-core/workflows/sketch-wrap-up.md": "d52a5462bafda830", - "gsd-core/workflows/sketch.md": "dbe6acc4d976060c", - "gsd-core/workflows/smart-entry.md": "1850447c045f36d8", + "gsd-core/workflows/sketch.md": "9bc12018344f8110", + "gsd-core/workflows/smart-entry.md": "70445afde3a9ead6", "gsd-core/workflows/spec-phase.md": "ec4d7e4e83bb001d", "gsd-core/workflows/spike-wrap-up.md": "4bdfaf9d05c63e7c", - "gsd-core/workflows/spike.md": "1571a05457beea8d", + "gsd-core/workflows/spike.md": "0ec1ff41fefe5012", "gsd-core/workflows/stats.md": "3953356f476b5053", "gsd-core/workflows/sync-skills.md": "5624d529dae1ad79", "gsd-core/workflows/thread.md": "14a9d195572a198f", "gsd-core/workflows/transition.md": "42c46f7bdf3d97cc", - "gsd-core/workflows/ui-phase.md": "50b0dd962c8029b9", - "gsd-core/workflows/ui-review.md": "9c6005236e2067b5", + "gsd-core/workflows/ui-phase.md": "d71b0a3c222d152b", + "gsd-core/workflows/ui-review.md": "3a93e532c91811ed", "gsd-core/workflows/ultraplan-phase.md": "b926ba7e4de0c76d", - "gsd-core/workflows/undo.md": "d759702f84e308fa", - "gsd-core/workflows/update.md": "2a59b4edf4a3c8c7", - "gsd-core/workflows/validate-phase.md": "3150904744b4a1bd", + "gsd-core/workflows/undo.md": "71ee46d4ab85e5c4", + "gsd-core/workflows/update.md": "0e01b1dc9a2c61fa", + "gsd-core/workflows/validate-phase.md": "9d5597928a602bf0", "gsd-core/workflows/verify-phase.md": "90773de32a966c85", - "gsd-core/workflows/verify-work.md": "eceb0f76087c81c3", + "gsd-core/workflows/verify-work.md": "dcdcf728589e4856", "hooks/gsd-check-update-worker.js": "a530efdb5fdc0da3", "hooks/gsd-check-update.js": "25cde66a12d6b886", "hooks/gsd-config-reload.js": "96546e0e8bb47904", diff --git a/tests/fixtures/golden-install-parity/claude.json b/tests/fixtures/golden-install-parity/claude.json index 6ba17b956..3cac955ca 100644 --- a/tests/fixtures/golden-install-parity/claude.json +++ b/tests/fixtures/golden-install-parity/claude.json @@ -88,6 +88,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e", "gsd-core/references/execute-phase-context-guard.md": "a5a1058d35806a8e", "gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2", + "gsd-core/references/execute-phase-response-language.md": "c240dc476dd15df5", "gsd-core/references/execute-phase-wave-guard.md": "de9ac22cead4cfd8", "gsd-core/references/executor-examples.md": "ba59243ed45c8ab1", "gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4", @@ -207,23 +208,23 @@ "gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335", "gsd-core/workflows/add-backlog.md": "485c4b6673ddf832", "gsd-core/workflows/add-phase.md": "b2c06b7ed648658c", - "gsd-core/workflows/add-tests.md": "c4b133a102d36a27", - "gsd-core/workflows/add-todo.md": "2c5176263ad4ae8f", - "gsd-core/workflows/ai-integration-phase.md": "a280593ad22fc9a3", + "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/analyze-dependencies.md": "77aff48f97fa6f1c", "gsd-core/workflows/audit-fix.md": "d511f4094ce351aa", "gsd-core/workflows/audit-milestone.md": "9f8ec364e58d5710", "gsd-core/workflows/audit-uat.md": "e11db0d74c2a7405", "gsd-core/workflows/autonomous.md": "722397c04272dfaa", - "gsd-core/workflows/check-todos.md": "6c2a43d1d3e86589", - "gsd-core/workflows/cleanup.md": "0daa2f2720c111f1", + "gsd-core/workflows/check-todos.md": "a5b8d73734b1fe7a", + "gsd-core/workflows/cleanup.md": "df79d1dc7b84d736", "gsd-core/workflows/code-review-fix.md": "722416b71b31c5fc", "gsd-core/workflows/code-review.md": "3fd49c93357fe4f7", - "gsd-core/workflows/complete-milestone.md": "dcf1182398efb1ca", - "gsd-core/workflows/debug.md": "d9396e0be41bdb3c", + "gsd-core/workflows/complete-milestone.md": "c3798c50670f6801", + "gsd-core/workflows/debug.md": "f6b3f24de830ae49", "gsd-core/workflows/diagnose-issues.md": "d66a88cae4aa6d99", - "gsd-core/workflows/discovery-phase.md": "6161c60d752d0058", - "gsd-core/workflows/discuss-phase-assumptions.md": "a8cd1db094fefd35", + "gsd-core/workflows/discovery-phase.md": "89a3084e40430039", + "gsd-core/workflows/discuss-phase-assumptions.md": "590a8c842acd7e02", "gsd-core/workflows/discuss-phase-power.md": "290c0d83d783f9f6", "gsd-core/workflows/discuss-phase.md": "df56c8cd170b2150", "gsd-core/workflows/discuss-phase/modes/advisor.md": "db488d74d080c653", @@ -238,88 +239,88 @@ "gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb", "gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f", "gsd-core/workflows/discuss-phase/templates/discussion-log.md": "1bbd7703f11128e1", - "gsd-core/workflows/do.md": "61b92fb4d0bf3975", - "gsd-core/workflows/docs-update.md": "63082608d3ae92be", + "gsd-core/workflows/do.md": "97a456ceda9d4513", + "gsd-core/workflows/docs-update.md": "e94d48c979be0211", "gsd-core/workflows/edit-phase.md": "8323bfe10faa0c0a", - "gsd-core/workflows/eval-review.md": "f59e8329dae1e528", - "gsd-core/workflows/execute-phase.md": "7a7f63e7839f530d", + "gsd-core/workflows/eval-review.md": "7c2f5ff8cc4d06e5", + "gsd-core/workflows/execute-phase.md": "95ab6bf45302a773", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "facb0e816d87a0c7", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "7b2d9a4a4013fd6a", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "7a49bc47da5411ea", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "bc1c2a159117642c", + "gsd-core/workflows/execute-plan.md": "92a4065d92966e03", "gsd-core/workflows/explore.md": "b9eea1bac358c9ce", "gsd-core/workflows/extract-learnings.md": "d8177b0c13b7e5ee", "gsd-core/workflows/fast.md": "41a6568b873aef99", "gsd-core/workflows/forensics.md": "c01da0178fb97b21", - "gsd-core/workflows/graduation.md": "47f1594c88c08501", - "gsd-core/workflows/health.md": "f934b1f1e9f3ae72", + "gsd-core/workflows/graduation.md": "973dcebcd17e1b10", + "gsd-core/workflows/health.md": "a0ec33a0401a4dbe", "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3", "gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0", "gsd-core/workflows/help/modes/full.md": "3d55c7266241f79d", "gsd-core/workflows/help/modes/topic.md": "6e42db16f1568be9", - "gsd-core/workflows/import.md": "3f40ccd2e8cbc708", - "gsd-core/workflows/inbox.md": "91aac6360e1a8672", - "gsd-core/workflows/ingest-docs.md": "bea47796f6b86172", + "gsd-core/workflows/import.md": "171471150be5a722", + "gsd-core/workflows/inbox.md": "e47920b4495b019a", + "gsd-core/workflows/ingest-docs.md": "aa1b8122f3d168b4", "gsd-core/workflows/insert-phase.md": "964ca91863a8749a", "gsd-core/workflows/list-phase-assumptions.md": "2a6b6a5acfb7742c", "gsd-core/workflows/list-seeds.md": "5a46337f55ae8453", "gsd-core/workflows/list-workspaces.md": "418570fbc8b938da", - "gsd-core/workflows/manager.md": "e39dd3c23a782eb5", + "gsd-core/workflows/manager.md": "441d052077bee516", "gsd-core/workflows/map-codebase.md": "4c7bef74d1c3e95e", "gsd-core/workflows/milestone-summary.md": "ad8e69fcb3463ce4", - "gsd-core/workflows/mvp-phase.md": "344dd300e0cc1e74", - "gsd-core/workflows/new-milestone.md": "bbc2dc21f532f810", - "gsd-core/workflows/new-project.md": "5eb1e4e361e67c43", - "gsd-core/workflows/new-workspace.md": "04356c9b675da7c9", + "gsd-core/workflows/mvp-phase.md": "58a952b4715db283", + "gsd-core/workflows/new-milestone.md": "7b8cdada362581b0", + "gsd-core/workflows/new-project.md": "3d79b98bf4c65ca0", + "gsd-core/workflows/new-workspace.md": "63ab4cb51ad88df4", "gsd-core/workflows/next.md": "ef30b829a6d5c5f6", "gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b", "gsd-core/workflows/note.md": "42b66686b2c102cb", - "gsd-core/workflows/onboard.md": "3c50ed1f1fd07619", + "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": "692b3f711e91b3da", + "gsd-core/workflows/plan-phase.md": "9a274b986f3a28e5", "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/plant-seed.md": "af50e9f10d3cc6e1", + "gsd-core/workflows/plant-seed.md": "3dd79b65ad08e456", "gsd-core/workflows/pr-branch.md": "ab157cd8e49621dd", - "gsd-core/workflows/profile-user.md": "ff3820a27731ceb8", + "gsd-core/workflows/profile-user.md": "84fff69a630033ed", "gsd-core/workflows/progress.md": "1b56219777ea078c", - "gsd-core/workflows/quick.md": "46da35933571f3f6", + "gsd-core/workflows/quick.md": "a332fd9277e28f98", "gsd-core/workflows/reapply-patches.md": "ba9406b60f2c4041", "gsd-core/workflows/remove-phase.md": "ada8a0546c686483", - "gsd-core/workflows/remove-workspace.md": "f3ab3a88a7e9e1ed", + "gsd-core/workflows/remove-workspace.md": "015cde237c75be39", "gsd-core/workflows/resume-project.md": "7f8dc986f0f35d96", "gsd-core/workflows/review.md": "013126685d8a9d50", "gsd-core/workflows/scan.md": "1890c846b98690bb", - "gsd-core/workflows/secure-phase.md": "d6ac1f4db6a5da75", + "gsd-core/workflows/secure-phase.md": "3f8fabf375f7d880", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "339def28c34b0797", - "gsd-core/workflows/settings-integrations.md": "53649313d20694ae", - "gsd-core/workflows/settings.md": "7e7458cdb2b68ec5", - "gsd-core/workflows/ship.md": "cf9425876e736a52", + "gsd-core/workflows/settings-integrations.md": "9c9db643112b2371", + "gsd-core/workflows/settings.md": "d3f05e22f21bfb3a", + "gsd-core/workflows/ship.md": "965497167a9df93b", "gsd-core/workflows/sketch-wrap-up.md": "121ed4b8127abf04", - "gsd-core/workflows/sketch.md": "737c0492686fea2d", - "gsd-core/workflows/smart-entry.md": "ad20cf74ae2e8291", + "gsd-core/workflows/sketch.md": "ac7a5265c6970bdf", + "gsd-core/workflows/smart-entry.md": "99c73236890605a1", "gsd-core/workflows/spec-phase.md": "d935df4ab9dd4f7c", "gsd-core/workflows/spike-wrap-up.md": "e2704024992b3fee", - "gsd-core/workflows/spike.md": "6dce83a2c5e7e49c", + "gsd-core/workflows/spike.md": "a5b1e3c15271f21e", "gsd-core/workflows/stats.md": "e7852c5d8f2b05a9", "gsd-core/workflows/sync-skills.md": "b505e6f8331c0918", "gsd-core/workflows/thread.md": "3b2c560d7189576d", "gsd-core/workflows/transition.md": "fb35a3de7feaa056", - "gsd-core/workflows/ui-phase.md": "05eb644af3a15516", - "gsd-core/workflows/ui-review.md": "7b488a7486a6b7cf", + "gsd-core/workflows/ui-phase.md": "5afb127aea056fd6", + "gsd-core/workflows/ui-review.md": "480596326d80473e", "gsd-core/workflows/ultraplan-phase.md": "328664400a001fd5", - "gsd-core/workflows/undo.md": "791e0bf96d9a057f", - "gsd-core/workflows/update.md": "f9e7d8a760d0d3c8", - "gsd-core/workflows/validate-phase.md": "7a3db6ab8ce9f380", + "gsd-core/workflows/undo.md": "894deb5d28769ac9", + "gsd-core/workflows/update.md": "aad041e79d84b189", + "gsd-core/workflows/validate-phase.md": "556a3a96ce79aae0", "gsd-core/workflows/verify-phase.md": "b8cca6ef3be502b9", - "gsd-core/workflows/verify-work.md": "fc8dacbe15266b03", + "gsd-core/workflows/verify-work.md": "21702d59ce37371c", "hooks/gsd-check-update-worker.js": "a530efdb5fdc0da3", "hooks/gsd-check-update.js": "25cde66a12d6b886", "hooks/gsd-config-reload.js": "96546e0e8bb47904", diff --git a/tests/fixtures/golden-install-parity/cline.json b/tests/fixtures/golden-install-parity/cline.json index a87ac4b09..90d6918fd 100644 --- a/tests/fixtures/golden-install-parity/cline.json +++ b/tests/fixtures/golden-install-parity/cline.json @@ -92,6 +92,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md": "e9582246dbc617e0", "gsd-core/references/execute-phase-context-guard.md": "982006c1f3364242", "gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2", + "gsd-core/references/execute-phase-response-language.md": "c240dc476dd15df5", "gsd-core/references/execute-phase-wave-guard.md": "742bb890af014c87", "gsd-core/references/executor-examples.md": "ba59243ed45c8ab1", "gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4", @@ -211,23 +212,23 @@ "gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335", "gsd-core/workflows/add-backlog.md": "6c4393113fa9d209", "gsd-core/workflows/add-phase.md": "2558614a81b9e977", - "gsd-core/workflows/add-tests.md": "0354376bffdc0080", - "gsd-core/workflows/add-todo.md": "aa89018230c87f13", - "gsd-core/workflows/ai-integration-phase.md": "878d0a2c6eb08c88", + "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/analyze-dependencies.md": "52942af10f140717", "gsd-core/workflows/audit-fix.md": "635168ce87774bd4", "gsd-core/workflows/audit-milestone.md": "202b726748604c93", "gsd-core/workflows/audit-uat.md": "1fb7b2ab9d587c8f", "gsd-core/workflows/autonomous.md": "cc5217b1b2238a4c", - "gsd-core/workflows/check-todos.md": "32fdf33f5dc8bdde", - "gsd-core/workflows/cleanup.md": "b0ebfc48792b407b", + "gsd-core/workflows/check-todos.md": "a68b369d64c9365c", + "gsd-core/workflows/cleanup.md": "6ed44dc47fd9972b", "gsd-core/workflows/code-review-fix.md": "e4549af672e74e6f", "gsd-core/workflows/code-review.md": "e2bfb4267041812a", - "gsd-core/workflows/complete-milestone.md": "c0808127038a8f86", - "gsd-core/workflows/debug.md": "4758a68d5c76447d", + "gsd-core/workflows/complete-milestone.md": "85be65035bcd4e41", + "gsd-core/workflows/debug.md": "7e5dadd9e8423452", "gsd-core/workflows/diagnose-issues.md": "164efb4842d1fe75", - "gsd-core/workflows/discovery-phase.md": "3ba7cfb89fb1e761", - "gsd-core/workflows/discuss-phase-assumptions.md": "9efcb2ef6a9245b3", + "gsd-core/workflows/discovery-phase.md": "0fa751163960abc2", + "gsd-core/workflows/discuss-phase-assumptions.md": "15bba3e88a011f67", "gsd-core/workflows/discuss-phase-power.md": "0841f7dc6e9a054a", "gsd-core/workflows/discuss-phase.md": "a290d5ee19607bb7", "gsd-core/workflows/discuss-phase/modes/advisor.md": "250de9aae90daebc", @@ -242,88 +243,88 @@ "gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb", "gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f", "gsd-core/workflows/discuss-phase/templates/discussion-log.md": "1bbd7703f11128e1", - "gsd-core/workflows/do.md": "045a18f30efb1202", - "gsd-core/workflows/docs-update.md": "39f288623a8f6f32", + "gsd-core/workflows/do.md": "6b3cad91b3bd1419", + "gsd-core/workflows/docs-update.md": "4bcb3d9630d6bb10", "gsd-core/workflows/edit-phase.md": "9c9fadc047c61d74", - "gsd-core/workflows/eval-review.md": "3e1d7829ed2ed494", - "gsd-core/workflows/execute-phase.md": "5aa6d3220bb3c755", + "gsd-core/workflows/eval-review.md": "17fc9b4c4f7e1c74", + "gsd-core/workflows/execute-phase.md": "1c703e5f1855b1e2", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "67ebc93f51968cb6", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "35612890c1173577", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "26825e1aacf224d0", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "0db7b9db6454f380", + "gsd-core/workflows/execute-plan.md": "f3e7d5ae2103a8ff", "gsd-core/workflows/explore.md": "e83af8ceae314cf9", "gsd-core/workflows/extract-learnings.md": "6f39375b7dc775f9", "gsd-core/workflows/fast.md": "e4f74a454b6ca5e8", "gsd-core/workflows/forensics.md": "9fc65a8eed5d8bfc", - "gsd-core/workflows/graduation.md": "16fedecda36769eb", - "gsd-core/workflows/health.md": "788fad84fa42eb9f", + "gsd-core/workflows/graduation.md": "68d83a47e9cfaa7a", + "gsd-core/workflows/health.md": "ac50e6c68edc2667", "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0", "gsd-core/workflows/help/modes/default.md": "86f7a14ad06e2f6f", "gsd-core/workflows/help/modes/full.md": "e4f1ae9d0902dda0", "gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d", - "gsd-core/workflows/import.md": "53a3069f244edd8b", - "gsd-core/workflows/inbox.md": "437f981ef9ae7b26", - "gsd-core/workflows/ingest-docs.md": "d9d29b5329285af8", + "gsd-core/workflows/import.md": "d24be8c61759b593", + "gsd-core/workflows/inbox.md": "2e584f45e52f26f5", + "gsd-core/workflows/ingest-docs.md": "d79478beb9da40cc", "gsd-core/workflows/insert-phase.md": "147f0009ec74b589", "gsd-core/workflows/list-phase-assumptions.md": "53dd4b69536c1bc3", "gsd-core/workflows/list-seeds.md": "25050c5e1b2b7176", "gsd-core/workflows/list-workspaces.md": "8f0707ecbc395856", - "gsd-core/workflows/manager.md": "05eee19fe93c063d", + "gsd-core/workflows/manager.md": "2988de4db361ceae", "gsd-core/workflows/map-codebase.md": "34527a4bc301564f", "gsd-core/workflows/milestone-summary.md": "20e56b9e3902e1d2", - "gsd-core/workflows/mvp-phase.md": "3e3936e1f247ac7c", - "gsd-core/workflows/new-milestone.md": "2b53742bc07121b2", - "gsd-core/workflows/new-project.md": "4e7a8136f2aa1d94", - "gsd-core/workflows/new-workspace.md": "f5eed5dd9a21878f", + "gsd-core/workflows/mvp-phase.md": "a95d43689a43163c", + "gsd-core/workflows/new-milestone.md": "f7ca5f829520d7ec", + "gsd-core/workflows/new-project.md": "666859d1dab84b46", + "gsd-core/workflows/new-workspace.md": "dc67033c5ad37f97", "gsd-core/workflows/next.md": "3f8b61a35587a021", "gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b", "gsd-core/workflows/note.md": "5a99eb396c744619", - "gsd-core/workflows/onboard.md": "6f9e6c0b484271a9", + "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": "c2be936c9b73ea8a", + "gsd-core/workflows/plan-phase.md": "cdb95e556e63cb09", "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/plant-seed.md": "a2cdd513663226f1", + "gsd-core/workflows/plant-seed.md": "94b54ead506385d3", "gsd-core/workflows/pr-branch.md": "9923878a4f6a2d91", - "gsd-core/workflows/profile-user.md": "26f74db0a7fcd268", + "gsd-core/workflows/profile-user.md": "4c51320e7caa09ca", "gsd-core/workflows/progress.md": "53b4310b873d233e", - "gsd-core/workflows/quick.md": "f4d73a7a52b11bd1", + "gsd-core/workflows/quick.md": "0b48dc882c83bad5", "gsd-core/workflows/reapply-patches.md": "eb4272145a117904", "gsd-core/workflows/remove-phase.md": "e336350f8113a328", - "gsd-core/workflows/remove-workspace.md": "e685dfbd736dfd90", + "gsd-core/workflows/remove-workspace.md": "79d3669cc9eb0b10", "gsd-core/workflows/resume-project.md": "e23981178fa37b3d", "gsd-core/workflows/review.md": "075ea1aa6a2b8339", "gsd-core/workflows/scan.md": "aa2ddc734251c24c", - "gsd-core/workflows/secure-phase.md": "00de56d6d993bb2c", + "gsd-core/workflows/secure-phase.md": "f7c624c1ab3cde3f", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "69f3a19bf2c61160", - "gsd-core/workflows/settings-integrations.md": "76eee76d6eb57657", - "gsd-core/workflows/settings.md": "3701faed09d55247", - "gsd-core/workflows/ship.md": "e2eb0a000c515798", + "gsd-core/workflows/settings-integrations.md": "a2682897e663fec4", + "gsd-core/workflows/settings.md": "17a5de032a64eb22", + "gsd-core/workflows/ship.md": "d094208aca181f9c", "gsd-core/workflows/sketch-wrap-up.md": "1f44789553180d84", - "gsd-core/workflows/sketch.md": "2226779b6003a71c", - "gsd-core/workflows/smart-entry.md": "9a64f43927641ca4", + "gsd-core/workflows/sketch.md": "fadc2cbe6763c010", + "gsd-core/workflows/smart-entry.md": "22ef18e897b67907", "gsd-core/workflows/spec-phase.md": "641208ed90684364", "gsd-core/workflows/spike-wrap-up.md": "846958e0012a0899", - "gsd-core/workflows/spike.md": "868b15cdf229cc43", + "gsd-core/workflows/spike.md": "94dd22a21565921c", "gsd-core/workflows/stats.md": "f9241bb65770c5a4", "gsd-core/workflows/sync-skills.md": "b505e6f8331c0918", "gsd-core/workflows/thread.md": "d71b1e815925c5cc", "gsd-core/workflows/transition.md": "6fa9751b097a3f52", - "gsd-core/workflows/ui-phase.md": "c7e6a2ab78e74c1b", - "gsd-core/workflows/ui-review.md": "8cd9605add21301e", + "gsd-core/workflows/ui-phase.md": "b1a53f472f52679b", + "gsd-core/workflows/ui-review.md": "30270ae78e5bff68", "gsd-core/workflows/ultraplan-phase.md": "ceff456b1e9d94d8", - "gsd-core/workflows/undo.md": "96d2775f008b3a85", - "gsd-core/workflows/update.md": "165beec33490bd28", - "gsd-core/workflows/validate-phase.md": "706627c190ae11aa", + "gsd-core/workflows/undo.md": "8de0e036f58d9b17", + "gsd-core/workflows/update.md": "387f9721372101a0", + "gsd-core/workflows/validate-phase.md": "5a232acb321b4a58", "gsd-core/workflows/verify-phase.md": "a8b3c15e7ef9c394", - "gsd-core/workflows/verify-work.md": "bd20cf21e7a1e132", + "gsd-core/workflows/verify-work.md": "14778e367d6ad337", "scripts/changeset/README.md": "86ff89331dfd94b2", "scripts/changeset/cli.cjs": "68f92a344b199271", "scripts/changeset/github-release-notes.cjs": "795677f0c009b132", diff --git a/tests/fixtures/golden-install-parity/codebuddy.json b/tests/fixtures/golden-install-parity/codebuddy.json index 2348c9015..6167e8acc 100644 --- a/tests/fixtures/golden-install-parity/codebuddy.json +++ b/tests/fixtures/golden-install-parity/codebuddy.json @@ -160,6 +160,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e", "gsd-core/references/execute-phase-context-guard.md": "982006c1f3364242", "gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2", + "gsd-core/references/execute-phase-response-language.md": "c240dc476dd15df5", "gsd-core/references/execute-phase-wave-guard.md": "de9ac22cead4cfd8", "gsd-core/references/executor-examples.md": "ba59243ed45c8ab1", "gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4", @@ -279,23 +280,23 @@ "gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335", "gsd-core/workflows/add-backlog.md": "1bc7377b105194fc", "gsd-core/workflows/add-phase.md": "ac43883e2d8e34d8", - "gsd-core/workflows/add-tests.md": "24b0d8157a9ccb8b", - "gsd-core/workflows/add-todo.md": "953314cdfef56bc4", - "gsd-core/workflows/ai-integration-phase.md": "45c727e49de71636", + "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/analyze-dependencies.md": "52942af10f140717", "gsd-core/workflows/audit-fix.md": "d511f4094ce351aa", "gsd-core/workflows/audit-milestone.md": "3835762c3147a927", "gsd-core/workflows/audit-uat.md": "fcfbec501620b564", "gsd-core/workflows/autonomous.md": "7e5683728ef33707", - "gsd-core/workflows/check-todos.md": "bdeaf43f9c61e0cc", - "gsd-core/workflows/cleanup.md": "0daa2f2720c111f1", + "gsd-core/workflows/check-todos.md": "f39e3251a78f6f5a", + "gsd-core/workflows/cleanup.md": "df79d1dc7b84d736", "gsd-core/workflows/code-review-fix.md": "2e113d1f4350a075", "gsd-core/workflows/code-review.md": "c877ad812b4a511e", - "gsd-core/workflows/complete-milestone.md": "c1f91b77f4ace7f2", - "gsd-core/workflows/debug.md": "79c2f7dc12815e30", + "gsd-core/workflows/complete-milestone.md": "8f98d7b05793cf4a", + "gsd-core/workflows/debug.md": "a2d04237fbbce72b", "gsd-core/workflows/diagnose-issues.md": "a00507a8aea82796", - "gsd-core/workflows/discovery-phase.md": "3ba7cfb89fb1e761", - "gsd-core/workflows/discuss-phase-assumptions.md": "f5b765d33eba4f88", + "gsd-core/workflows/discovery-phase.md": "0aa8d8d872b53858", + "gsd-core/workflows/discuss-phase-assumptions.md": "185419d61517727b", "gsd-core/workflows/discuss-phase-power.md": "0841f7dc6e9a054a", "gsd-core/workflows/discuss-phase.md": "02a5381c9a2173be", "gsd-core/workflows/discuss-phase/modes/advisor.md": "db488d74d080c653", @@ -310,88 +311,88 @@ "gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb", "gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f", "gsd-core/workflows/discuss-phase/templates/discussion-log.md": "1bbd7703f11128e1", - "gsd-core/workflows/do.md": "7512dd1892f118a1", - "gsd-core/workflows/docs-update.md": "f35922d15b7061c9", + "gsd-core/workflows/do.md": "90df4f1fe248cdf3", + "gsd-core/workflows/docs-update.md": "b5cdf1c35043cf7b", "gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04", - "gsd-core/workflows/eval-review.md": "f898936e2cfe4130", - "gsd-core/workflows/execute-phase.md": "77629722f47ec6c7", + "gsd-core/workflows/eval-review.md": "32d3d7e80ab2bfc7", + "gsd-core/workflows/execute-phase.md": "b090500cb2b6fe9f", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "4e265392b3f2ba0e", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "7b2d9a4a4013fd6a", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "7a49bc47da5411ea", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "1c26c1cf464fa6b7", + "gsd-core/workflows/execute-plan.md": "51cb2b05be8090ed", "gsd-core/workflows/explore.md": "6c04f2e658d93261", "gsd-core/workflows/extract-learnings.md": "b6f01ca3d8f58de4", "gsd-core/workflows/fast.md": "11f5cd10ae5cc7d3", "gsd-core/workflows/forensics.md": "0d500a3f5ab26913", - "gsd-core/workflows/graduation.md": "47f1594c88c08501", - "gsd-core/workflows/health.md": "107e3c72e76d9535", + "gsd-core/workflows/graduation.md": "973dcebcd17e1b10", + "gsd-core/workflows/health.md": "c25b5e5f62874c31", "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0", "gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50", "gsd-core/workflows/help/modes/full.md": "5eefc87999cde1a6", "gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d", - "gsd-core/workflows/import.md": "12c6cbcbdecb6392", - "gsd-core/workflows/inbox.md": "437f981ef9ae7b26", - "gsd-core/workflows/ingest-docs.md": "f7c3fa659ca77bc5", + "gsd-core/workflows/import.md": "31a0f3a33154939f", + "gsd-core/workflows/inbox.md": "a7d439981775bc29", + "gsd-core/workflows/ingest-docs.md": "e5c63b5e539f6e17", "gsd-core/workflows/insert-phase.md": "08dca838d831bb5b", "gsd-core/workflows/list-phase-assumptions.md": "53dd4b69536c1bc3", "gsd-core/workflows/list-seeds.md": "b687f2a843032d65", "gsd-core/workflows/list-workspaces.md": "7f94e18b5c549453", - "gsd-core/workflows/manager.md": "3ba7a3e8213c4b23", + "gsd-core/workflows/manager.md": "c18fab593344253d", "gsd-core/workflows/map-codebase.md": "8fb02d635a86d6b2", "gsd-core/workflows/milestone-summary.md": "e0cdfddbd39a9043", - "gsd-core/workflows/mvp-phase.md": "344dd300e0cc1e74", - "gsd-core/workflows/new-milestone.md": "6227eaddad367bc5", - "gsd-core/workflows/new-project.md": "31a16f12e0b59918", - "gsd-core/workflows/new-workspace.md": "017688423110ed66", + "gsd-core/workflows/mvp-phase.md": "58a952b4715db283", + "gsd-core/workflows/new-milestone.md": "f6029bcb535bee69", + "gsd-core/workflows/new-project.md": "3ff0861ced194253", + "gsd-core/workflows/new-workspace.md": "bbeb706c7a697617", "gsd-core/workflows/next.md": "13fb800f2472d970", "gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b", "gsd-core/workflows/note.md": "5a99eb396c744619", - "gsd-core/workflows/onboard.md": "6f9e6c0b484271a9", + "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": "628d54d63365a6b2", + "gsd-core/workflows/plan-phase.md": "ef07de99f05cb223", "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/plant-seed.md": "10b92ae08a6fdede", + "gsd-core/workflows/plant-seed.md": "9596db80ab282c6f", "gsd-core/workflows/pr-branch.md": "c87db7ac8c28be1b", - "gsd-core/workflows/profile-user.md": "4fa910d15dea5695", + "gsd-core/workflows/profile-user.md": "1419f1dad1853da0", "gsd-core/workflows/progress.md": "46c83ad61b3c4a84", - "gsd-core/workflows/quick.md": "68a60c8fe332cb4e", + "gsd-core/workflows/quick.md": "68f8adba85c03fea", "gsd-core/workflows/reapply-patches.md": "39050f72601aec89", "gsd-core/workflows/remove-phase.md": "df9a45f0b1880999", - "gsd-core/workflows/remove-workspace.md": "a7ca66db6b7c132c", + "gsd-core/workflows/remove-workspace.md": "f67860c795fb4bfe", "gsd-core/workflows/resume-project.md": "f28da1200e4545f4", "gsd-core/workflows/review.md": "f1fbefbd64bd890e", "gsd-core/workflows/scan.md": "e6424af05656725a", - "gsd-core/workflows/secure-phase.md": "22ab3bb5da494ea7", + "gsd-core/workflows/secure-phase.md": "f8b9436c35372281", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "414db4dbea97ba44", - "gsd-core/workflows/settings-integrations.md": "70515c5838fb9826", - "gsd-core/workflows/settings.md": "d96ddf01fb85e61e", - "gsd-core/workflows/ship.md": "4642ebbaa38f8cc2", + "gsd-core/workflows/settings-integrations.md": "effcef778d4a855f", + "gsd-core/workflows/settings.md": "85ceb482dc713169", + "gsd-core/workflows/ship.md": "09056fccdf20e41b", "gsd-core/workflows/sketch-wrap-up.md": "2aba89ecd8f41a0d", - "gsd-core/workflows/sketch.md": "5eedd93f9a5b49d5", - "gsd-core/workflows/smart-entry.md": "449238eb94abe187", + "gsd-core/workflows/sketch.md": "2913d90416a3c0f0", + "gsd-core/workflows/smart-entry.md": "004b4060eab97cb9", "gsd-core/workflows/spec-phase.md": "fa8669b75392cf6c", "gsd-core/workflows/spike-wrap-up.md": "2b004744c52e565c", - "gsd-core/workflows/spike.md": "24a0fee1447b6f0a", + "gsd-core/workflows/spike.md": "9d189e302ce51694", "gsd-core/workflows/stats.md": "76a42cbeaf6007c2", "gsd-core/workflows/sync-skills.md": "b505e6f8331c0918", "gsd-core/workflows/thread.md": "927e7eeefd2fcf5c", "gsd-core/workflows/transition.md": "aea486bb7a0e80e7", - "gsd-core/workflows/ui-phase.md": "e4bef31fd9389c63", - "gsd-core/workflows/ui-review.md": "7acfc485526d064b", + "gsd-core/workflows/ui-phase.md": "3ebc9febb666a7c2", + "gsd-core/workflows/ui-review.md": "202c4e399cd95719", "gsd-core/workflows/ultraplan-phase.md": "0fb8291153e3937d", - "gsd-core/workflows/undo.md": "96d2775f008b3a85", - "gsd-core/workflows/update.md": "5ff1f77222977648", - "gsd-core/workflows/validate-phase.md": "ce9890f21c6e5607", + "gsd-core/workflows/undo.md": "1712417bade30b30", + "gsd-core/workflows/update.md": "94e31cb2aa350edd", + "gsd-core/workflows/validate-phase.md": "2e19caff07397728", "gsd-core/workflows/verify-phase.md": "d26a2c3269340caf", - "gsd-core/workflows/verify-work.md": "86c6f0c77b5adc72", + "gsd-core/workflows/verify-work.md": "5b92e34f1d0da848", "hooks/gsd-check-update-worker.js": "bdc9324a2f080ddd", "hooks/gsd-check-update.js": "b7669f605631e506", "hooks/gsd-config-reload.js": "96546e0e8bb47904", diff --git a/tests/fixtures/golden-install-parity/codex.json b/tests/fixtures/golden-install-parity/codex.json index cb12f061b..2371e78c2 100644 --- a/tests/fixtures/golden-install-parity/codex.json +++ b/tests/fixtures/golden-install-parity/codex.json @@ -195,6 +195,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e", "gsd-core/references/execute-phase-context-guard.md": "a483199612e216f1", "gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2", + "gsd-core/references/execute-phase-response-language.md": "c240dc476dd15df5", "gsd-core/references/execute-phase-wave-guard.md": "95e55087876a0d96", "gsd-core/references/executor-examples.md": "ba59243ed45c8ab1", "gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4", @@ -314,23 +315,23 @@ "gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335", "gsd-core/workflows/add-backlog.md": "62431b27424ff1ff", "gsd-core/workflows/add-phase.md": "d7a401b48271964f", - "gsd-core/workflows/add-tests.md": "5cdb15508c4b6075", - "gsd-core/workflows/add-todo.md": "776e554602e3d1b7", - "gsd-core/workflows/ai-integration-phase.md": "d46f7e1a0b24345a", + "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/analyze-dependencies.md": "f799abc00907377f", "gsd-core/workflows/audit-fix.md": "d511f4094ce351aa", "gsd-core/workflows/audit-milestone.md": "5f362cead97ceaca", "gsd-core/workflows/audit-uat.md": "2564078edb15b5e9", "gsd-core/workflows/autonomous.md": "92f08626d4aea668", - "gsd-core/workflows/check-todos.md": "b2b103e8638e760a", - "gsd-core/workflows/cleanup.md": "5d48d64664222a3e", + "gsd-core/workflows/check-todos.md": "7206ca486214637f", + "gsd-core/workflows/cleanup.md": "2f7d77d1b13d0410", "gsd-core/workflows/code-review-fix.md": "ae7f9c6b39a23c12", "gsd-core/workflows/code-review.md": "9b02ebf8fc9b87fa", - "gsd-core/workflows/complete-milestone.md": "017df7443bd08da5", - "gsd-core/workflows/debug.md": "e61047038f3e8b37", + "gsd-core/workflows/complete-milestone.md": "bd3d10386edf1121", + "gsd-core/workflows/debug.md": "7853f9890f8192eb", "gsd-core/workflows/diagnose-issues.md": "7b7fde068d3b4c7a", - "gsd-core/workflows/discovery-phase.md": "71a4b78ff876a854", - "gsd-core/workflows/discuss-phase-assumptions.md": "0d936ec25299917c", + "gsd-core/workflows/discovery-phase.md": "ae93d9d808c8c018", + "gsd-core/workflows/discuss-phase-assumptions.md": "f34b2920b6c6cbc5", "gsd-core/workflows/discuss-phase-power.md": "3f8b83dc6be2e9d5", "gsd-core/workflows/discuss-phase.md": "7c9df6656b81fda9", "gsd-core/workflows/discuss-phase/modes/advisor.md": "db488d74d080c653", @@ -345,88 +346,88 @@ "gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb", "gsd-core/workflows/discuss-phase/templates/context.md": "9804674fccada405", "gsd-core/workflows/discuss-phase/templates/discussion-log.md": "2b56ec2868cbddb4", - "gsd-core/workflows/do.md": "feec00355f896a3d", - "gsd-core/workflows/docs-update.md": "e255317df939e302", + "gsd-core/workflows/do.md": "b30d5b8eca60ef79", + "gsd-core/workflows/docs-update.md": "70ad463cdad599c9", "gsd-core/workflows/edit-phase.md": "e592a4d85ce5380f", - "gsd-core/workflows/eval-review.md": "63d0d0670b54c244", - "gsd-core/workflows/execute-phase.md": "4771222b9f9609d0", + "gsd-core/workflows/eval-review.md": "c89a63285ead961e", + "gsd-core/workflows/execute-phase.md": "994554be349d76bd", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "f4cacd27d37bac65", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "7b2d9a4a4013fd6a", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "7a49bc47da5411ea", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "4492431f93e1df8c", + "gsd-core/workflows/execute-plan.md": "5c4915ce921c0612", "gsd-core/workflows/explore.md": "2ef10d17c8864a04", "gsd-core/workflows/extract-learnings.md": "f716aa03fcb5f8da", "gsd-core/workflows/fast.md": "e4ed60f96a7b3ac8", "gsd-core/workflows/forensics.md": "2e8a01b5b44e65f3", - "gsd-core/workflows/graduation.md": "47f1594c88c08501", - "gsd-core/workflows/health.md": "5b835fc606fd3e9b", + "gsd-core/workflows/graduation.md": "973dcebcd17e1b10", + "gsd-core/workflows/health.md": "6fedf96650e0f1e5", "gsd-core/workflows/help.md": "08e1349950c5602a", "gsd-core/workflows/help/modes/brief.md": "da44b130d1afe556", "gsd-core/workflows/help/modes/default.md": "4bb3082d28026eea", "gsd-core/workflows/help/modes/full.md": "9a512db0dce1a315", "gsd-core/workflows/help/modes/topic.md": "b7c7e4a8800bc3ea", - "gsd-core/workflows/import.md": "f29e0a0f330f2bc0", - "gsd-core/workflows/inbox.md": "61b8b10e7a74b2e9", - "gsd-core/workflows/ingest-docs.md": "57af769d029ceb0e", + "gsd-core/workflows/import.md": "5b0076b667b15c01", + "gsd-core/workflows/inbox.md": "ddb6832b7e0ad46b", + "gsd-core/workflows/ingest-docs.md": "86a63169433cd74f", "gsd-core/workflows/insert-phase.md": "5e23bd8d55b388c7", "gsd-core/workflows/list-phase-assumptions.md": "4d245f6ea899bcb9", "gsd-core/workflows/list-seeds.md": "0a2d9fd5b06b8ded", "gsd-core/workflows/list-workspaces.md": "bb74607336897b94", - "gsd-core/workflows/manager.md": "3a5abb31ad83334f", + "gsd-core/workflows/manager.md": "5f9365147f53e3f5", "gsd-core/workflows/map-codebase.md": "d47b52761b9de231", "gsd-core/workflows/milestone-summary.md": "a53b30a84f904b50", - "gsd-core/workflows/mvp-phase.md": "100dded5c7b4cb86", - "gsd-core/workflows/new-milestone.md": "05fab4b8e193bfd2", - "gsd-core/workflows/new-project.md": "1ae7021b79d3144b", - "gsd-core/workflows/new-workspace.md": "3630b78e83b1e491", + "gsd-core/workflows/mvp-phase.md": "85fea39f30f8c698", + "gsd-core/workflows/new-milestone.md": "fa709eae51e697c7", + "gsd-core/workflows/new-project.md": "e6e9efed667d71e0", + "gsd-core/workflows/new-workspace.md": "2d9dc09dd7739921", "gsd-core/workflows/next.md": "7097a9607a981086", "gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b", "gsd-core/workflows/note.md": "664da466ab989f9d", - "gsd-core/workflows/onboard.md": "83c40ba7055b8b24", + "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": "98b926fb0bced6ef", + "gsd-core/workflows/plan-phase.md": "422cea035ea5c515", "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/plant-seed.md": "5b07de07e4593281", + "gsd-core/workflows/plant-seed.md": "25b0c824f7eff40e", "gsd-core/workflows/pr-branch.md": "d13e1cc81de40896", - "gsd-core/workflows/profile-user.md": "05828c8cc61ef384", + "gsd-core/workflows/profile-user.md": "6d23d0594082c78a", "gsd-core/workflows/progress.md": "e57d5a148df38508", - "gsd-core/workflows/quick.md": "ef0af6ee7788f64b", + "gsd-core/workflows/quick.md": "dea316acfe698107", "gsd-core/workflows/reapply-patches.md": "26297b84736e66a4", "gsd-core/workflows/remove-phase.md": "9ee0fddd11a0d9d4", - "gsd-core/workflows/remove-workspace.md": "19d7465aaa50cb62", + "gsd-core/workflows/remove-workspace.md": "d0160c5d05bcb2bb", "gsd-core/workflows/resume-project.md": "9965f87eb278f7f8", "gsd-core/workflows/review.md": "e4e61845190da702", "gsd-core/workflows/scan.md": "9d331d74a5ad47e5", - "gsd-core/workflows/secure-phase.md": "ab387a4bca381c18", + "gsd-core/workflows/secure-phase.md": "858ef74a9f247bd5", "gsd-core/workflows/session-report.md": "dd8fa011c9394075", "gsd-core/workflows/settings-advanced.md": "2431433811616f76", - "gsd-core/workflows/settings-integrations.md": "77730321d3d6d317", - "gsd-core/workflows/settings.md": "054c8c31b3905ced", - "gsd-core/workflows/ship.md": "ccd8cda30a4a4231", + "gsd-core/workflows/settings-integrations.md": "d6d222af8690d09b", + "gsd-core/workflows/settings.md": "3c8bd45b123b5db6", + "gsd-core/workflows/ship.md": "a54841f23fd14626", "gsd-core/workflows/sketch-wrap-up.md": "07724a390fbb43f6", - "gsd-core/workflows/sketch.md": "576f300dfdde1b7d", - "gsd-core/workflows/smart-entry.md": "6f686195ae531b03", + "gsd-core/workflows/sketch.md": "3f6ed885d2ee5528", + "gsd-core/workflows/smart-entry.md": "2914f9d54d365931", "gsd-core/workflows/spec-phase.md": "3dd8ae6137492d80", "gsd-core/workflows/spike-wrap-up.md": "ace265c114298376", - "gsd-core/workflows/spike.md": "f42a9983eb9c89a1", + "gsd-core/workflows/spike.md": "1f70a13fe2080da7", "gsd-core/workflows/stats.md": "6dfc500555849d74", "gsd-core/workflows/sync-skills.md": "e2b793963799f8ce", "gsd-core/workflows/thread.md": "3eef3b6baf50fbfa", "gsd-core/workflows/transition.md": "de3c63b3f62e6988", - "gsd-core/workflows/ui-phase.md": "989eefe25c06ae48", - "gsd-core/workflows/ui-review.md": "5768b7aac1429ea0", + "gsd-core/workflows/ui-phase.md": "9bd8969f78f6a9d8", + "gsd-core/workflows/ui-review.md": "99455710aacf3da3", "gsd-core/workflows/ultraplan-phase.md": "0bafc2af27be4591", - "gsd-core/workflows/undo.md": "5ff7d63b0a2f46d5", - "gsd-core/workflows/update.md": "5c35c0ec0f462ea6", - "gsd-core/workflows/validate-phase.md": "6d6d10fe53f6b1d0", + "gsd-core/workflows/undo.md": "bd29a3a4fbc3fdc2", + "gsd-core/workflows/update.md": "d5323ffe252f8ed2", + "gsd-core/workflows/validate-phase.md": "e616c9ed40e7c6f6", "gsd-core/workflows/verify-phase.md": "ce508f9c2242b91f", - "gsd-core/workflows/verify-work.md": "c2357af11b257433", + "gsd-core/workflows/verify-work.md": "ea3ea7cdd7202de0", "hooks/gsd-check-update.js": "ef48957eb6ac6a10", "hooks/gsd-context-monitor.js": "ec76b23f45d29b02", "scripts/changeset/README.md": "86ff89331dfd94b2", diff --git a/tests/fixtures/golden-install-parity/copilot.json b/tests/fixtures/golden-install-parity/copilot.json index d93a2599a..bc4eee629 100644 --- a/tests/fixtures/golden-install-parity/copilot.json +++ b/tests/fixtures/golden-install-parity/copilot.json @@ -90,6 +90,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e", "gsd-core/references/execute-phase-context-guard.md": "a5a1058d35806a8e", "gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2", + "gsd-core/references/execute-phase-response-language.md": "c240dc476dd15df5", "gsd-core/references/execute-phase-wave-guard.md": "1eb1e1e552ebd17b", "gsd-core/references/executor-examples.md": "ba59243ed45c8ab1", "gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4", @@ -209,23 +210,23 @@ "gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335", "gsd-core/workflows/add-backlog.md": "98f2dbb7c7cc93c2", "gsd-core/workflows/add-phase.md": "f4fbfad54be5d46f", - "gsd-core/workflows/add-tests.md": "7f5da4d2a9fa8a1a", - "gsd-core/workflows/add-todo.md": "f86f4efa25a5d0d6", - "gsd-core/workflows/ai-integration-phase.md": "9dd7f80180f9c8e9", + "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/analyze-dependencies.md": "77aff48f97fa6f1c", "gsd-core/workflows/audit-fix.md": "1baff2494a1c093e", "gsd-core/workflows/audit-milestone.md": "258e4dfd259ab13f", "gsd-core/workflows/audit-uat.md": "5ea0e30548ed0933", "gsd-core/workflows/autonomous.md": "dd972ddde9663295", - "gsd-core/workflows/check-todos.md": "be9b50b5f28d7504", - "gsd-core/workflows/cleanup.md": "8233b05ebf011bec", + "gsd-core/workflows/check-todos.md": "c8b8fed995a00c26", + "gsd-core/workflows/cleanup.md": "90d4119b70f32fce", "gsd-core/workflows/code-review-fix.md": "fda53892ae4b17fc", "gsd-core/workflows/code-review.md": "e36479e4d924c9a6", - "gsd-core/workflows/complete-milestone.md": "470cf39261400ee2", - "gsd-core/workflows/debug.md": "4fa78215bcd5b156", + "gsd-core/workflows/complete-milestone.md": "c3d961cc123a7492", + "gsd-core/workflows/debug.md": "b08d2b098bcad8ca", "gsd-core/workflows/diagnose-issues.md": "1ddcee0f5aa0a968", - "gsd-core/workflows/discovery-phase.md": "8e99da61fb2b7074", - "gsd-core/workflows/discuss-phase-assumptions.md": "ab0c432b84038681", + "gsd-core/workflows/discovery-phase.md": "c97943b1f3d3db96", + "gsd-core/workflows/discuss-phase-assumptions.md": "c50c6745dfdabdc0", "gsd-core/workflows/discuss-phase-power.md": "5c0d1ca6abda0383", "gsd-core/workflows/discuss-phase.md": "31a79ea11c1cdd5f", "gsd-core/workflows/discuss-phase/modes/advisor.md": "654cdaf1138d5e27", @@ -240,88 +241,88 @@ "gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb", "gsd-core/workflows/discuss-phase/templates/context.md": "9804674fccada405", "gsd-core/workflows/discuss-phase/templates/discussion-log.md": "2b56ec2868cbddb4", - "gsd-core/workflows/do.md": "9b46119803df09a6", - "gsd-core/workflows/docs-update.md": "9292cfa3c52c434e", + "gsd-core/workflows/do.md": "ba9dd204343ab48b", + "gsd-core/workflows/docs-update.md": "fddba4a71268a33f", "gsd-core/workflows/edit-phase.md": "8667c28b22b1599f", - "gsd-core/workflows/eval-review.md": "81c8e72ba3862856", - "gsd-core/workflows/execute-phase.md": "9ecbabf9c4e62e80", + "gsd-core/workflows/eval-review.md": "1ae2d3d3fbf72893", + "gsd-core/workflows/execute-phase.md": "0afe5c2ba3b22f15", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "63b712920f21a40f", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "25bebed74e645109", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "dc0b96d285327b18", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "388f3cd58a3adac5", + "gsd-core/workflows/execute-plan.md": "6408ea31974478ff", "gsd-core/workflows/explore.md": "5fd91a8510e1114b", "gsd-core/workflows/extract-learnings.md": "f34d0b1927545b18", "gsd-core/workflows/fast.md": "66821090b6b8ed3b", "gsd-core/workflows/forensics.md": "459644dce26ee2ef", - "gsd-core/workflows/graduation.md": "f013efc29096faf0", - "gsd-core/workflows/health.md": "f343fd32a0e398e4", + "gsd-core/workflows/graduation.md": "343e287b8bfac6b2", + "gsd-core/workflows/health.md": "53f350663df5f7b2", "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3", "gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0", "gsd-core/workflows/help/modes/full.md": "fb46abb57e525863", "gsd-core/workflows/help/modes/topic.md": "0bf9ab39d7044d69", - "gsd-core/workflows/import.md": "7d65189539122d3b", - "gsd-core/workflows/inbox.md": "a448220c548f27bc", - "gsd-core/workflows/ingest-docs.md": "f9aeae8fe219ad31", + "gsd-core/workflows/import.md": "ae33f4683e7b69e9", + "gsd-core/workflows/inbox.md": "2f4edb2681b84d9c", + "gsd-core/workflows/ingest-docs.md": "974d963c31f9f0d2", "gsd-core/workflows/insert-phase.md": "60a52a63a8b288f6", "gsd-core/workflows/list-phase-assumptions.md": "e7b5e35c9452e3b3", "gsd-core/workflows/list-seeds.md": "71dc6f748b1d1c0e", "gsd-core/workflows/list-workspaces.md": "3c9f76af08ced623", - "gsd-core/workflows/manager.md": "97f57c099a668f83", + "gsd-core/workflows/manager.md": "5acdd15485a04ab0", "gsd-core/workflows/map-codebase.md": "4d86b6d024f5a8d5", "gsd-core/workflows/milestone-summary.md": "8a53906253984a62", - "gsd-core/workflows/mvp-phase.md": "93304b26c92e4418", - "gsd-core/workflows/new-milestone.md": "339496291115d1fc", - "gsd-core/workflows/new-project.md": "2d50bec2e25c66f4", - "gsd-core/workflows/new-workspace.md": "403796bdf6318515", + "gsd-core/workflows/mvp-phase.md": "3c00d29043864af2", + "gsd-core/workflows/new-milestone.md": "6cc12552aae97cb1", + "gsd-core/workflows/new-project.md": "0fd56b2cfe818102", + "gsd-core/workflows/new-workspace.md": "a609b382e83c2f10", "gsd-core/workflows/next.md": "81c08abb34b2da88", "gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b", "gsd-core/workflows/note.md": "4a5ee74cf2fc1f54", - "gsd-core/workflows/onboard.md": "a62602c6f3fd538a", + "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": "a0d7aa722c4db2dc", + "gsd-core/workflows/plan-phase.md": "27ea81d0be74a2ee", "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/plant-seed.md": "21e461cd39e5181b", + "gsd-core/workflows/plant-seed.md": "aac7ffbbec7e7a22", "gsd-core/workflows/pr-branch.md": "2833905f119b5722", - "gsd-core/workflows/profile-user.md": "5cc032206c99ef71", + "gsd-core/workflows/profile-user.md": "e2135bdd20e17620", "gsd-core/workflows/progress.md": "97f4971366c381ee", - "gsd-core/workflows/quick.md": "dff6d086ef16a14f", + "gsd-core/workflows/quick.md": "5e6982ad469df9cc", "gsd-core/workflows/reapply-patches.md": "8fd59e24b486f180", "gsd-core/workflows/remove-phase.md": "e262654e319d1bc4", - "gsd-core/workflows/remove-workspace.md": "ceddfeef5f2d6754", + "gsd-core/workflows/remove-workspace.md": "e7e5b5b1e0cc9d81", "gsd-core/workflows/resume-project.md": "40db7f350f5866d8", "gsd-core/workflows/review.md": "a9f422db38ab8bb9", "gsd-core/workflows/scan.md": "b8615653ffa85e12", - "gsd-core/workflows/secure-phase.md": "9bec6635ee1cbaed", + "gsd-core/workflows/secure-phase.md": "3afa175ee48491af", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "230a658de9c017a6", - "gsd-core/workflows/settings-integrations.md": "a1d146d6bfd14db5", - "gsd-core/workflows/settings.md": "f611f14f2f447f1e", - "gsd-core/workflows/ship.md": "9a260c559e783769", + "gsd-core/workflows/settings-integrations.md": "58acee11162b4a4e", + "gsd-core/workflows/settings.md": "876e954acd64cb18", + "gsd-core/workflows/ship.md": "24fd52a74258aaad", "gsd-core/workflows/sketch-wrap-up.md": "f2590cb6ddbfad94", - "gsd-core/workflows/sketch.md": "e2063966439af8c1", - "gsd-core/workflows/smart-entry.md": "6c707b959a41900b", + "gsd-core/workflows/sketch.md": "9cbf5860b6a005e5", + "gsd-core/workflows/smart-entry.md": "93f90cd7a12dbbc7", "gsd-core/workflows/spec-phase.md": "44bd9c50b42e73fb", "gsd-core/workflows/spike-wrap-up.md": "a34d1e9ec15ae904", - "gsd-core/workflows/spike.md": "89f299c07ac0edd2", + "gsd-core/workflows/spike.md": "bf51085ab23117d1", "gsd-core/workflows/stats.md": "1db01bd96aa570fe", "gsd-core/workflows/sync-skills.md": "eca50ffe8320dba8", "gsd-core/workflows/thread.md": "c5cbd66223906998", "gsd-core/workflows/transition.md": "9219cd7c61e3323f", - "gsd-core/workflows/ui-phase.md": "646b99f22a6e4762", - "gsd-core/workflows/ui-review.md": "2851b3576894ee75", + "gsd-core/workflows/ui-phase.md": "778609094491575c", + "gsd-core/workflows/ui-review.md": "f700e68d765ef15f", "gsd-core/workflows/ultraplan-phase.md": "7217c34dc9eaf7bb", - "gsd-core/workflows/undo.md": "ba1ef7aa80bef6bd", - "gsd-core/workflows/update.md": "f444a7cfcd246cfb", - "gsd-core/workflows/validate-phase.md": "e7aa423ebdd6a230", + "gsd-core/workflows/undo.md": "e168c2eb8f7e105c", + "gsd-core/workflows/update.md": "c0cf121daaaa75a7", + "gsd-core/workflows/validate-phase.md": "affb923d150f07e5", "gsd-core/workflows/verify-phase.md": "3fcc54a0c46e5e2f", - "gsd-core/workflows/verify-work.md": "5a0983da1e822293", + "gsd-core/workflows/verify-work.md": "3a3c0cef66f63de5", "hooks/gsd-session.json": "3382597f61e3a559", "scripts/changeset/README.md": "86ff89331dfd94b2", "scripts/changeset/cli.cjs": "68f92a344b199271", diff --git a/tests/fixtures/golden-install-parity/cursor.json b/tests/fixtures/golden-install-parity/cursor.json index de47f3489..da136ca51 100644 --- a/tests/fixtures/golden-install-parity/cursor.json +++ b/tests/fixtures/golden-install-parity/cursor.json @@ -160,6 +160,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md": "44e31bdae72ed5d5", "gsd-core/references/execute-phase-context-guard.md": "a5a1058d35806a8e", "gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2", + "gsd-core/references/execute-phase-response-language.md": "c240dc476dd15df5", "gsd-core/references/execute-phase-wave-guard.md": "b0e27ed2d8405974", "gsd-core/references/executor-examples.md": "ba59243ed45c8ab1", "gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4", @@ -279,23 +280,23 @@ "gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335", "gsd-core/workflows/add-backlog.md": "2926457ed07b4500", "gsd-core/workflows/add-phase.md": "b2c06b7ed648658c", - "gsd-core/workflows/add-tests.md": "37f031c4b3236a32", - "gsd-core/workflows/add-todo.md": "1ee0525664fb062f", - "gsd-core/workflows/ai-integration-phase.md": "a349e94b18839873", + "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/analyze-dependencies.md": "77aff48f97fa6f1c", "gsd-core/workflows/audit-fix.md": "d511f4094ce351aa", "gsd-core/workflows/audit-milestone.md": "9f8ec364e58d5710", "gsd-core/workflows/audit-uat.md": "e11db0d74c2a7405", "gsd-core/workflows/autonomous.md": "4b20eda9a0b587ce", - "gsd-core/workflows/check-todos.md": "1a67337d1630848f", - "gsd-core/workflows/cleanup.md": "db47963f103c2748", + "gsd-core/workflows/check-todos.md": "f52f3ba034c0b9f1", + "gsd-core/workflows/cleanup.md": "c0c243aa070b993b", "gsd-core/workflows/code-review-fix.md": "c57af378033b1b58", "gsd-core/workflows/code-review.md": "9860df7228426ae5", - "gsd-core/workflows/complete-milestone.md": "1400a4856f592f3e", - "gsd-core/workflows/debug.md": "100ed7fce99f3ec2", + "gsd-core/workflows/complete-milestone.md": "2281ee0a53264ca5", + "gsd-core/workflows/debug.md": "42ea025c334a9cbb", "gsd-core/workflows/diagnose-issues.md": "1e8e965609250776", - "gsd-core/workflows/discovery-phase.md": "7dcf150998559c11", - "gsd-core/workflows/discuss-phase-assumptions.md": "c25c6a6c633d71b6", + "gsd-core/workflows/discovery-phase.md": "13393233272db9b6", + "gsd-core/workflows/discuss-phase-assumptions.md": "89cabd7a5e3a1a5e", "gsd-core/workflows/discuss-phase-power.md": "290c0d83d783f9f6", "gsd-core/workflows/discuss-phase.md": "14688ff19ce2184c", "gsd-core/workflows/discuss-phase/modes/advisor.md": "30612a2de153cb5b", @@ -310,88 +311,88 @@ "gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb", "gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f", "gsd-core/workflows/discuss-phase/templates/discussion-log.md": "cd5d01c9ef84ab73", - "gsd-core/workflows/do.md": "9da6a73980ef2a71", - "gsd-core/workflows/docs-update.md": "e86d7d7e2e3dac6d", + "gsd-core/workflows/do.md": "53839c6429ae1234", + "gsd-core/workflows/docs-update.md": "817776e1a5f87b39", "gsd-core/workflows/edit-phase.md": "8323bfe10faa0c0a", - "gsd-core/workflows/eval-review.md": "a86279dd98dd5c03", - "gsd-core/workflows/execute-phase.md": "0b9c81c3085926e6", + "gsd-core/workflows/eval-review.md": "9389c58f7384972d", + "gsd-core/workflows/execute-phase.md": "6dbd3d9281ba270d", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "facb0e816d87a0c7", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "7b2d9a4a4013fd6a", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "7a49bc47da5411ea", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "13e9664263d3844d", + "gsd-core/workflows/execute-plan.md": "a2f18afa588bbde3", "gsd-core/workflows/explore.md": "b9eea1bac358c9ce", "gsd-core/workflows/extract-learnings.md": "d8177b0c13b7e5ee", "gsd-core/workflows/fast.md": "77b49793e26b3323", "gsd-core/workflows/forensics.md": "a65f817d4a515291", - "gsd-core/workflows/graduation.md": "53a4a6fa3b4e6613", - "gsd-core/workflows/health.md": "e4d770484b5e7496", + "gsd-core/workflows/graduation.md": "0c0f4e6258ae482f", + "gsd-core/workflows/health.md": "3da94d58e1d40ed1", "gsd-core/workflows/help.md": "08e1349950c5602a", "gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3", "gsd-core/workflows/help/modes/default.md": "b88ff431fffe40ae", "gsd-core/workflows/help/modes/full.md": "9ae8b1e8908c7ead", "gsd-core/workflows/help/modes/topic.md": "cee80e0adfa3b06c", - "gsd-core/workflows/import.md": "f336d2ce3ffb5687", - "gsd-core/workflows/inbox.md": "797c287852eb8957", - "gsd-core/workflows/ingest-docs.md": "762b25021d6a775c", + "gsd-core/workflows/import.md": "5d6b58c9b6048e03", + "gsd-core/workflows/inbox.md": "07404a616a95fe6c", + "gsd-core/workflows/ingest-docs.md": "210982f5826d6ff8", "gsd-core/workflows/insert-phase.md": "964ca91863a8749a", "gsd-core/workflows/list-phase-assumptions.md": "eb986c301d59f620", "gsd-core/workflows/list-seeds.md": "831ddc27b684e30b", "gsd-core/workflows/list-workspaces.md": "418570fbc8b938da", - "gsd-core/workflows/manager.md": "7efd6874ff9768d6", + "gsd-core/workflows/manager.md": "c6c3dc3eaa815c51", "gsd-core/workflows/map-codebase.md": "d2830c7316a2e6a3", "gsd-core/workflows/milestone-summary.md": "6c76386b500cc5d3", - "gsd-core/workflows/mvp-phase.md": "50b189c5f4503369", - "gsd-core/workflows/new-milestone.md": "2def2ce95ea12681", - "gsd-core/workflows/new-project.md": "356828ab4d29c7e6", - "gsd-core/workflows/new-workspace.md": "9e76e96253d54a57", + "gsd-core/workflows/mvp-phase.md": "f0f7d7d6c2e5435f", + "gsd-core/workflows/new-milestone.md": "14f833622d0da949", + "gsd-core/workflows/new-project.md": "0e977e5cbca1cc97", + "gsd-core/workflows/new-workspace.md": "4da5355de8f19485", "gsd-core/workflows/next.md": "174356dcfd7c6c32", "gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b", "gsd-core/workflows/note.md": "1c1e466c764e3deb", - "gsd-core/workflows/onboard.md": "20c28136423d40ac", + "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": "dd78f3cdd1c7f3f1", + "gsd-core/workflows/plan-phase.md": "74dd1ac212c945da", "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/plant-seed.md": "7bccd151ce7b69f2", + "gsd-core/workflows/plant-seed.md": "3c36a48064aa98d1", "gsd-core/workflows/pr-branch.md": "c67d90c65da47168", - "gsd-core/workflows/profile-user.md": "8c943983241260b5", + "gsd-core/workflows/profile-user.md": "e1a6ec04051931f7", "gsd-core/workflows/progress.md": "2dbc495deed1a36d", - "gsd-core/workflows/quick.md": "ad40466dd04e4147", + "gsd-core/workflows/quick.md": "24bd4b32e4b8e673", "gsd-core/workflows/reapply-patches.md": "ba9406b60f2c4041", "gsd-core/workflows/remove-phase.md": "ada8a0546c686483", - "gsd-core/workflows/remove-workspace.md": "433affcd1a200826", + "gsd-core/workflows/remove-workspace.md": "0572a83d71650937", "gsd-core/workflows/resume-project.md": "7f8dc986f0f35d96", "gsd-core/workflows/review.md": "ea18faf9ff633667", "gsd-core/workflows/scan.md": "1890c846b98690bb", - "gsd-core/workflows/secure-phase.md": "3063b0b6f7b56d46", + "gsd-core/workflows/secure-phase.md": "383a94ac2b089cc0", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "bf8ea69c8f7ae019", - "gsd-core/workflows/settings-integrations.md": "166ca51b1f33c2a3", - "gsd-core/workflows/settings.md": "0623c673eaf04799", - "gsd-core/workflows/ship.md": "1515bb4909387b1d", + "gsd-core/workflows/settings-integrations.md": "37d4212d83664224", + "gsd-core/workflows/settings.md": "f90f106a9490c7c9", + "gsd-core/workflows/ship.md": "4be3c89ccda1d856", "gsd-core/workflows/sketch-wrap-up.md": "5be73b7bdf96b539", - "gsd-core/workflows/sketch.md": "373bc0d83368a411", - "gsd-core/workflows/smart-entry.md": "c8fc316358cdcd7b", + "gsd-core/workflows/sketch.md": "64543e59b00637d4", + "gsd-core/workflows/smart-entry.md": "fdc5113754223df8", "gsd-core/workflows/spec-phase.md": "239b6e6cbddaf8c2", "gsd-core/workflows/spike-wrap-up.md": "4a3bf1058691e55d", - "gsd-core/workflows/spike.md": "f741bead24d5669a", + "gsd-core/workflows/spike.md": "4cb55efeeacc9661", "gsd-core/workflows/stats.md": "e7852c5d8f2b05a9", "gsd-core/workflows/sync-skills.md": "b505e6f8331c0918", "gsd-core/workflows/thread.md": "bf9a944978dad763", "gsd-core/workflows/transition.md": "fb35a3de7feaa056", - "gsd-core/workflows/ui-phase.md": "d1ae54a7ba413d69", - "gsd-core/workflows/ui-review.md": "4bc0fd55fc037998", + "gsd-core/workflows/ui-phase.md": "10400dde4b67974a", + "gsd-core/workflows/ui-review.md": "24feca716c57a845", "gsd-core/workflows/ultraplan-phase.md": "466e01d65c350ef6", - "gsd-core/workflows/undo.md": "18dec684fb1076f9", - "gsd-core/workflows/update.md": "23e294ba707c3580", - "gsd-core/workflows/validate-phase.md": "d03a94b7b807be12", + "gsd-core/workflows/undo.md": "052c99f02bb5eb0a", + "gsd-core/workflows/update.md": "9e38bc073162bb65", + "gsd-core/workflows/validate-phase.md": "e45dcfcad992ef99", "gsd-core/workflows/verify-phase.md": "b8cca6ef3be502b9", - "gsd-core/workflows/verify-work.md": "2e30a7b779b82a85", + "gsd-core/workflows/verify-work.md": "3511ac4792752912", "hooks/gsd-cursor-post-tool.js": "019d503aee8b4a3f", "hooks/gsd-cursor-pre-tool.js": "fe274720781fcbb5", "hooks/gsd-cursor-session-start.js": "c6e04ed597ea7020", diff --git a/tests/fixtures/golden-install-parity/hermes.json b/tests/fixtures/golden-install-parity/hermes.json index 6e7dc71ec..7821946d2 100644 --- a/tests/fixtures/golden-install-parity/hermes.json +++ b/tests/fixtures/golden-install-parity/hermes.json @@ -89,6 +89,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md": "4d6ea8e85e88b1fe", "gsd-core/references/execute-phase-context-guard.md": "a5a1058d35806a8e", "gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2", + "gsd-core/references/execute-phase-response-language.md": "c240dc476dd15df5", "gsd-core/references/execute-phase-wave-guard.md": "b13d8860a76b7a41", "gsd-core/references/executor-examples.md": "ba59243ed45c8ab1", "gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4", @@ -208,23 +209,23 @@ "gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335", "gsd-core/workflows/add-backlog.md": "79a453a2270483fb", "gsd-core/workflows/add-phase.md": "2a6452fc51339b9c", - "gsd-core/workflows/add-tests.md": "02f9e11ad2371c00", - "gsd-core/workflows/add-todo.md": "8ba173153be63a40", - "gsd-core/workflows/ai-integration-phase.md": "753a41301e4d2a4c", + "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/analyze-dependencies.md": "77aff48f97fa6f1c", "gsd-core/workflows/audit-fix.md": "a7f94d5c43583aeb", "gsd-core/workflows/audit-milestone.md": "b96a78c6bd2e7690", "gsd-core/workflows/audit-uat.md": "86d9131fccabf2ad", "gsd-core/workflows/autonomous.md": "853dd93846332743", - "gsd-core/workflows/check-todos.md": "ea9a303c48a5d752", - "gsd-core/workflows/cleanup.md": "6c488059fc152a49", + "gsd-core/workflows/check-todos.md": "494a60cebcd65059", + "gsd-core/workflows/cleanup.md": "c811970042bc4ff1", "gsd-core/workflows/code-review-fix.md": "5e396494a79c3f19", "gsd-core/workflows/code-review.md": "b73d0784b9abd2f4", - "gsd-core/workflows/complete-milestone.md": "f1866541148dc291", - "gsd-core/workflows/debug.md": "84b70e75cfe601a7", + "gsd-core/workflows/complete-milestone.md": "e87bf463430945d6", + "gsd-core/workflows/debug.md": "5684db0b73309af3", "gsd-core/workflows/diagnose-issues.md": "24dd9382e2ff010a", - "gsd-core/workflows/discovery-phase.md": "6161c60d752d0058", - "gsd-core/workflows/discuss-phase-assumptions.md": "71b86e3cf85d8697", + "gsd-core/workflows/discovery-phase.md": "56d07842d140f388", + "gsd-core/workflows/discuss-phase-assumptions.md": "9754acc053ccfc26", "gsd-core/workflows/discuss-phase-power.md": "290c0d83d783f9f6", "gsd-core/workflows/discuss-phase.md": "0aa052ae4ee70bf6", "gsd-core/workflows/discuss-phase/modes/advisor.md": "624db27cd84c4626", @@ -239,88 +240,88 @@ "gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb", "gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f", "gsd-core/workflows/discuss-phase/templates/discussion-log.md": "1bbd7703f11128e1", - "gsd-core/workflows/do.md": "e37540cc874fb782", - "gsd-core/workflows/docs-update.md": "ba4cf926fc463cbe", + "gsd-core/workflows/do.md": "b30d1efcb0297580", + "gsd-core/workflows/docs-update.md": "de614d940b6f64ff", "gsd-core/workflows/edit-phase.md": "7f27003f20e88fb8", - "gsd-core/workflows/eval-review.md": "f510e5762212dc6f", - "gsd-core/workflows/execute-phase.md": "df3020f022405a84", + "gsd-core/workflows/eval-review.md": "e7cd5dfcf18e2458", + "gsd-core/workflows/execute-phase.md": "1b9e1284cf788e43", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "14a27cc0828f59d3", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "26ee34c543926402", "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "362123fdf99e9980", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "a691e3afe88031b8", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "ed1528fcbfb792a8", + "gsd-core/workflows/execute-plan.md": "b294869742d456c1", "gsd-core/workflows/explore.md": "d931b4d85a74c795", "gsd-core/workflows/extract-learnings.md": "e9e167c718949c0b", "gsd-core/workflows/fast.md": "c801145115755524", "gsd-core/workflows/forensics.md": "91961b811917c5c4", - "gsd-core/workflows/graduation.md": "d1fd52bbe41dcf34", - "gsd-core/workflows/health.md": "c622a5ad0d347d30", + "gsd-core/workflows/graduation.md": "938c71f1e7650da0", + "gsd-core/workflows/health.md": "6ea6ceba2568909b", "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3", "gsd-core/workflows/help/modes/default.md": "8874dac94eb68ae6", "gsd-core/workflows/help/modes/full.md": "a9351cf72f580a87", "gsd-core/workflows/help/modes/topic.md": "6e42db16f1568be9", - "gsd-core/workflows/import.md": "22483de9c9b6acda", - "gsd-core/workflows/inbox.md": "91aac6360e1a8672", - "gsd-core/workflows/ingest-docs.md": "af0f93dd5ac9587d", + "gsd-core/workflows/import.md": "c1c19d52b9637113", + "gsd-core/workflows/inbox.md": "20159d4f9a1fca7f", + "gsd-core/workflows/ingest-docs.md": "ae6685e9171b3204", "gsd-core/workflows/insert-phase.md": "a0537c09191121f6", "gsd-core/workflows/list-phase-assumptions.md": "2a6b6a5acfb7742c", "gsd-core/workflows/list-seeds.md": "ad1d81683e48c4e1", "gsd-core/workflows/list-workspaces.md": "1fe28ba52cee1394", - "gsd-core/workflows/manager.md": "68e6e70c4ebe0986", + "gsd-core/workflows/manager.md": "f0eb25349617495b", "gsd-core/workflows/map-codebase.md": "c653fdd03ce61189", "gsd-core/workflows/milestone-summary.md": "353fffb60749d892", - "gsd-core/workflows/mvp-phase.md": "4d102523b5d81f95", - "gsd-core/workflows/new-milestone.md": "ee2c8c9984c8036a", - "gsd-core/workflows/new-project.md": "6b157fbe70203cd8", - "gsd-core/workflows/new-workspace.md": "5c78c58ad84e886b", + "gsd-core/workflows/mvp-phase.md": "593faf3ec49b26d0", + "gsd-core/workflows/new-milestone.md": "318fa26f8dbe3876", + "gsd-core/workflows/new-project.md": "346ab3abec6a320c", + "gsd-core/workflows/new-workspace.md": "5e4ace6da343b8a8", "gsd-core/workflows/next.md": "8e1fa29751d96564", "gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b", "gsd-core/workflows/note.md": "42b66686b2c102cb", - "gsd-core/workflows/onboard.md": "3c50ed1f1fd07619", + "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": "0cb80f9cb7a47d52", + "gsd-core/workflows/plan-phase.md": "6bafababd9a71291", "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/plant-seed.md": "f862f77fca983749", + "gsd-core/workflows/plant-seed.md": "4643bc78faaf9005", "gsd-core/workflows/pr-branch.md": "ecabd55e4eabf229", - "gsd-core/workflows/profile-user.md": "de5030437226cf2c", + "gsd-core/workflows/profile-user.md": "877c2c9b3ab8742c", "gsd-core/workflows/progress.md": "589f60eb809c0bb9", - "gsd-core/workflows/quick.md": "fab58ce8581251fa", + "gsd-core/workflows/quick.md": "58735fa1f486b74f", "gsd-core/workflows/reapply-patches.md": "158083a310859594", "gsd-core/workflows/remove-phase.md": "fce799aae3ab2715", - "gsd-core/workflows/remove-workspace.md": "8facde381657dd71", + "gsd-core/workflows/remove-workspace.md": "42029a7559f1d8fb", "gsd-core/workflows/resume-project.md": "a0443839f1f83c2d", "gsd-core/workflows/review.md": "cde982eb704261ef", "gsd-core/workflows/scan.md": "6c340b901b5d5d18", - "gsd-core/workflows/secure-phase.md": "5284cfc143ad0e2c", + "gsd-core/workflows/secure-phase.md": "07415614146d8601", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "49be159144d7f426", - "gsd-core/workflows/settings-integrations.md": "1dce76db0aca08a5", - "gsd-core/workflows/settings.md": "9ced580679ed0255", - "gsd-core/workflows/ship.md": "b2f16c18a7e1e19b", + "gsd-core/workflows/settings-integrations.md": "75405795c8462a8a", + "gsd-core/workflows/settings.md": "41c0f737bfd311fd", + "gsd-core/workflows/ship.md": "7f27ba3add159c13", "gsd-core/workflows/sketch-wrap-up.md": "f1ece50ac65ea281", - "gsd-core/workflows/sketch.md": "d5887983e62b574a", - "gsd-core/workflows/smart-entry.md": "47f5c5e8608e5f7a", + "gsd-core/workflows/sketch.md": "592283400d70317b", + "gsd-core/workflows/smart-entry.md": "4dc50d4af659c651", "gsd-core/workflows/spec-phase.md": "6ace28390408475f", "gsd-core/workflows/spike-wrap-up.md": "367325e6d567b904", - "gsd-core/workflows/spike.md": "cdacb2887a321e11", + "gsd-core/workflows/spike.md": "176cf0ecfc038581", "gsd-core/workflows/stats.md": "49a991d0d3905a56", "gsd-core/workflows/sync-skills.md": "b505e6f8331c0918", "gsd-core/workflows/thread.md": "5a6759e01763c2a6", "gsd-core/workflows/transition.md": "bcfaad44668d07fd", - "gsd-core/workflows/ui-phase.md": "64a49ae4ec7e11a9", - "gsd-core/workflows/ui-review.md": "2f669a3f62913703", + "gsd-core/workflows/ui-phase.md": "0d346ebaea14d06e", + "gsd-core/workflows/ui-review.md": "58e6ce18f29e06de", "gsd-core/workflows/ultraplan-phase.md": "0d103bf2622436f7", - "gsd-core/workflows/undo.md": "791e0bf96d9a057f", - "gsd-core/workflows/update.md": "7499bb4cb2a3ce6f", - "gsd-core/workflows/validate-phase.md": "24be83176c7db9f9", + "gsd-core/workflows/undo.md": "0a03405c0345fcf7", + "gsd-core/workflows/update.md": "06e3a9996f1e6d32", + "gsd-core/workflows/validate-phase.md": "cbd764b47c1bc8ce", "gsd-core/workflows/verify-phase.md": "42f0fba74d069537", - "gsd-core/workflows/verify-work.md": "472b875c446004cd", + "gsd-core/workflows/verify-work.md": "67bbb452a240dfb8", "hooks/gsd-check-update-worker.js": "7989cc2bedd1138d", "hooks/gsd-check-update.js": "25f5ad726f76fc11", "hooks/gsd-config-reload.js": "880b696458e85e9b", diff --git a/tests/fixtures/golden-install-parity/kilo.json b/tests/fixtures/golden-install-parity/kilo.json index 93199cd73..f39925c70 100644 --- a/tests/fixtures/golden-install-parity/kilo.json +++ b/tests/fixtures/golden-install-parity/kilo.json @@ -160,6 +160,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e", "gsd-core/references/execute-phase-context-guard.md": "a5a1058d35806a8e", "gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2", + "gsd-core/references/execute-phase-response-language.md": "c240dc476dd15df5", "gsd-core/references/execute-phase-wave-guard.md": "de9ac22cead4cfd8", "gsd-core/references/executor-examples.md": "ba59243ed45c8ab1", "gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4", @@ -279,23 +280,23 @@ "gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335", "gsd-core/workflows/add-backlog.md": "485c4b6673ddf832", "gsd-core/workflows/add-phase.md": "b2c06b7ed648658c", - "gsd-core/workflows/add-tests.md": "6e54f3d71a202671", - "gsd-core/workflows/add-todo.md": "31bc520d77b14139", - "gsd-core/workflows/ai-integration-phase.md": "d4400169618e6925", + "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/analyze-dependencies.md": "77aff48f97fa6f1c", "gsd-core/workflows/audit-fix.md": "d511f4094ce351aa", "gsd-core/workflows/audit-milestone.md": "9f8ec364e58d5710", "gsd-core/workflows/audit-uat.md": "e11db0d74c2a7405", "gsd-core/workflows/autonomous.md": "73f429f7472c9949", - "gsd-core/workflows/check-todos.md": "ed4b4eb12be222d7", - "gsd-core/workflows/cleanup.md": "c5f1bf186395d67d", + "gsd-core/workflows/check-todos.md": "50b49013062c8552", + "gsd-core/workflows/cleanup.md": "1c669fc358db3e19", "gsd-core/workflows/code-review-fix.md": "722416b71b31c5fc", "gsd-core/workflows/code-review.md": "3fd49c93357fe4f7", - "gsd-core/workflows/complete-milestone.md": "59753bf44d4300da", - "gsd-core/workflows/debug.md": "a603f52749acde62", + "gsd-core/workflows/complete-milestone.md": "e507b10f26188186", + "gsd-core/workflows/debug.md": "a4ef40303a5da552", "gsd-core/workflows/diagnose-issues.md": "5eebc4764b19c4f6", - "gsd-core/workflows/discovery-phase.md": "ca7b2be46e59e862", - "gsd-core/workflows/discuss-phase-assumptions.md": "3ef1df313e715387", + "gsd-core/workflows/discovery-phase.md": "af5ec483093bcede", + "gsd-core/workflows/discuss-phase-assumptions.md": "f7f2237c8fced5b6", "gsd-core/workflows/discuss-phase-power.md": "5c0d1ca6abda0383", "gsd-core/workflows/discuss-phase.md": "bd4b26ba168bb51f", "gsd-core/workflows/discuss-phase/modes/advisor.md": "f8ae26ba4e07672b", @@ -310,88 +311,88 @@ "gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb", "gsd-core/workflows/discuss-phase/templates/context.md": "9804674fccada405", "gsd-core/workflows/discuss-phase/templates/discussion-log.md": "04e4feee14772275", - "gsd-core/workflows/do.md": "d9a889717e390f8d", - "gsd-core/workflows/docs-update.md": "79afaaf19fd527cc", + "gsd-core/workflows/do.md": "ea068f5a797f2178", + "gsd-core/workflows/docs-update.md": "6bca7d8fda0d1d54", "gsd-core/workflows/edit-phase.md": "8323bfe10faa0c0a", - "gsd-core/workflows/eval-review.md": "926eda8bbee28b23", - "gsd-core/workflows/execute-phase.md": "ae91076f29981cc2", + "gsd-core/workflows/eval-review.md": "35be91cd22a9bc11", + "gsd-core/workflows/execute-phase.md": "49e2f1740bf7c6b1", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "facb0e816d87a0c7", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "7b2d9a4a4013fd6a", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "7a49bc47da5411ea", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "0e40eda4ae70fcab", + "gsd-core/workflows/execute-plan.md": "c921c4e80a2f6314", "gsd-core/workflows/explore.md": "14242d36d4822df6", "gsd-core/workflows/extract-learnings.md": "d8177b0c13b7e5ee", "gsd-core/workflows/fast.md": "41a6568b873aef99", "gsd-core/workflows/forensics.md": "c01da0178fb97b21", - "gsd-core/workflows/graduation.md": "5cc8638dabcbfd40", - "gsd-core/workflows/health.md": "064b3668d5d9569a", + "gsd-core/workflows/graduation.md": "636df3c43e9b3bca", + "gsd-core/workflows/health.md": "2be3dcec0d4865df", "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3", "gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0", "gsd-core/workflows/help/modes/full.md": "08101a965254f10e", "gsd-core/workflows/help/modes/topic.md": "0bf9ab39d7044d69", - "gsd-core/workflows/import.md": "8038d1e702e4894b", - "gsd-core/workflows/inbox.md": "a073396097c89c01", - "gsd-core/workflows/ingest-docs.md": "ae86b5460794c835", + "gsd-core/workflows/import.md": "9e9e83e5549eaf0f", + "gsd-core/workflows/inbox.md": "f2b38be09a2dee08", + "gsd-core/workflows/ingest-docs.md": "753f8d4fb37d9227", "gsd-core/workflows/insert-phase.md": "964ca91863a8749a", "gsd-core/workflows/list-phase-assumptions.md": "e7b5e35c9452e3b3", "gsd-core/workflows/list-seeds.md": "5a46337f55ae8453", "gsd-core/workflows/list-workspaces.md": "418570fbc8b938da", - "gsd-core/workflows/manager.md": "f3d17d2ae11ec7b5", + "gsd-core/workflows/manager.md": "2fadda5e3ebd3c4e", "gsd-core/workflows/map-codebase.md": "ec7fd85d7bbc5a29", "gsd-core/workflows/milestone-summary.md": "25775eeb4e2747be", - "gsd-core/workflows/mvp-phase.md": "a97708464f103300", - "gsd-core/workflows/new-milestone.md": "2cf08b4be93028c1", - "gsd-core/workflows/new-project.md": "0737b8140906a9cc", - "gsd-core/workflows/new-workspace.md": "f58d6a8c0c7796a1", + "gsd-core/workflows/mvp-phase.md": "b2f6ba5de4c96180", + "gsd-core/workflows/new-milestone.md": "189272989a4a9a5f", + "gsd-core/workflows/new-project.md": "e9c1edc83893c17e", + "gsd-core/workflows/new-workspace.md": "00162d8c32428d55", "gsd-core/workflows/next.md": "888297a0b21888ea", "gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b", "gsd-core/workflows/note.md": "f8c2842a2217f776", - "gsd-core/workflows/onboard.md": "78b288089305dc46", + "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": "11e490f7ed5a6947", + "gsd-core/workflows/plan-phase.md": "d16b1c70ec0022a1", "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/plant-seed.md": "ffa5774304243649", + "gsd-core/workflows/plant-seed.md": "107bfe8f5b2a7843", "gsd-core/workflows/pr-branch.md": "ab157cd8e49621dd", - "gsd-core/workflows/profile-user.md": "203ebe3f8f3876a8", + "gsd-core/workflows/profile-user.md": "645f81d80c4775c4", "gsd-core/workflows/progress.md": "172e4168e326ca61", - "gsd-core/workflows/quick.md": "4ef7da71a596604a", + "gsd-core/workflows/quick.md": "4c659f61d01e2118", "gsd-core/workflows/reapply-patches.md": "becf9728cdb124c4", "gsd-core/workflows/remove-phase.md": "ada8a0546c686483", - "gsd-core/workflows/remove-workspace.md": "fc83f362a2d0a1b7", + "gsd-core/workflows/remove-workspace.md": "f5dc82bb63e2efa4", "gsd-core/workflows/resume-project.md": "7f8dc986f0f35d96", "gsd-core/workflows/review.md": "6033fab6d070c993", "gsd-core/workflows/scan.md": "1890c846b98690bb", - "gsd-core/workflows/secure-phase.md": "4977cf9e0462745b", + "gsd-core/workflows/secure-phase.md": "7e1613050966ae28", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "edd858cd6cfddaf1", - "gsd-core/workflows/settings-integrations.md": "3ea8095d5fad891b", - "gsd-core/workflows/settings.md": "1925ecc2225c2216", - "gsd-core/workflows/ship.md": "cb5f2f25ca80bd3b", + "gsd-core/workflows/settings-integrations.md": "3ec4f77c421b87b4", + "gsd-core/workflows/settings.md": "0e3cf91e952b48a2", + "gsd-core/workflows/ship.md": "aab2ad926f4613c6", "gsd-core/workflows/sketch-wrap-up.md": "888c0548e63197b3", - "gsd-core/workflows/sketch.md": "34a0c10fa56af7ea", - "gsd-core/workflows/smart-entry.md": "7ffe4fdb93935400", + "gsd-core/workflows/sketch.md": "75ffbd233fd9a762", + "gsd-core/workflows/smart-entry.md": "2ad5b63a9deea0ce", "gsd-core/workflows/spec-phase.md": "a5f3de15eeb7ce72", "gsd-core/workflows/spike-wrap-up.md": "458230d4d7c44b09", - "gsd-core/workflows/spike.md": "8e63427fc146b45c", + "gsd-core/workflows/spike.md": "30d080d99b2555ca", "gsd-core/workflows/stats.md": "e7852c5d8f2b05a9", "gsd-core/workflows/sync-skills.md": "dc7b8b015afa4b3b", "gsd-core/workflows/thread.md": "3b2c560d7189576d", "gsd-core/workflows/transition.md": "590128488fe2ad66", - "gsd-core/workflows/ui-phase.md": "47ae6541bbfdf2b6", - "gsd-core/workflows/ui-review.md": "0fb289914252d53e", + "gsd-core/workflows/ui-phase.md": "41d0be8d22f5c263", + "gsd-core/workflows/ui-review.md": "d496e6999f62b8b7", "gsd-core/workflows/ultraplan-phase.md": "29245758b8497fa0", - "gsd-core/workflows/undo.md": "7cd2153f8b15e30d", - "gsd-core/workflows/update.md": "07dc2fba78ad1865", - "gsd-core/workflows/validate-phase.md": "52b9fa8a9533b444", + "gsd-core/workflows/undo.md": "774615a01c20e4a3", + "gsd-core/workflows/update.md": "af593557256e1f84", + "gsd-core/workflows/validate-phase.md": "041ac495974cddd4", "gsd-core/workflows/verify-phase.md": "b8cca6ef3be502b9", - "gsd-core/workflows/verify-work.md": "9b4bda9a8ff3fa7d", + "gsd-core/workflows/verify-work.md": "431b447d58529cfd", "hooks/gsd-check-update-worker.js": "c992bbad91d0e994", "hooks/gsd-check-update.js": "fdd77abe7ef26a2d", "hooks/gsd-config-reload.js": "96546e0e8bb47904", diff --git a/tests/fixtures/golden-install-parity/kimi.json b/tests/fixtures/golden-install-parity/kimi.json index bbe9a69e2..9dc1c859b 100644 --- a/tests/fixtures/golden-install-parity/kimi.json +++ b/tests/fixtures/golden-install-parity/kimi.json @@ -153,6 +153,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e", "gsd-core/references/execute-phase-context-guard.md": "982006c1f3364242", "gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2", + "gsd-core/references/execute-phase-response-language.md": "c240dc476dd15df5", "gsd-core/references/execute-phase-wave-guard.md": "de9ac22cead4cfd8", "gsd-core/references/executor-examples.md": "ba59243ed45c8ab1", "gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4", @@ -272,23 +273,23 @@ "gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335", "gsd-core/workflows/add-backlog.md": "1bc7377b105194fc", "gsd-core/workflows/add-phase.md": "ac43883e2d8e34d8", - "gsd-core/workflows/add-tests.md": "24b0d8157a9ccb8b", - "gsd-core/workflows/add-todo.md": "953314cdfef56bc4", - "gsd-core/workflows/ai-integration-phase.md": "45c727e49de71636", + "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/analyze-dependencies.md": "52942af10f140717", "gsd-core/workflows/audit-fix.md": "d511f4094ce351aa", "gsd-core/workflows/audit-milestone.md": "3835762c3147a927", "gsd-core/workflows/audit-uat.md": "fcfbec501620b564", "gsd-core/workflows/autonomous.md": "7e5683728ef33707", - "gsd-core/workflows/check-todos.md": "bdeaf43f9c61e0cc", - "gsd-core/workflows/cleanup.md": "0daa2f2720c111f1", + "gsd-core/workflows/check-todos.md": "f39e3251a78f6f5a", + "gsd-core/workflows/cleanup.md": "df79d1dc7b84d736", "gsd-core/workflows/code-review-fix.md": "2e113d1f4350a075", "gsd-core/workflows/code-review.md": "c877ad812b4a511e", - "gsd-core/workflows/complete-milestone.md": "c1f91b77f4ace7f2", - "gsd-core/workflows/debug.md": "79c2f7dc12815e30", + "gsd-core/workflows/complete-milestone.md": "8f98d7b05793cf4a", + "gsd-core/workflows/debug.md": "a2d04237fbbce72b", "gsd-core/workflows/diagnose-issues.md": "fe8951e98446ad79", - "gsd-core/workflows/discovery-phase.md": "3ba7cfb89fb1e761", - "gsd-core/workflows/discuss-phase-assumptions.md": "f5b765d33eba4f88", + "gsd-core/workflows/discovery-phase.md": "0aa8d8d872b53858", + "gsd-core/workflows/discuss-phase-assumptions.md": "185419d61517727b", "gsd-core/workflows/discuss-phase-power.md": "0841f7dc6e9a054a", "gsd-core/workflows/discuss-phase.md": "0c0465ba668adb33", "gsd-core/workflows/discuss-phase/modes/advisor.md": "db488d74d080c653", @@ -303,88 +304,88 @@ "gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb", "gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f", "gsd-core/workflows/discuss-phase/templates/discussion-log.md": "1bbd7703f11128e1", - "gsd-core/workflows/do.md": "7512dd1892f118a1", - "gsd-core/workflows/docs-update.md": "f35922d15b7061c9", + "gsd-core/workflows/do.md": "90df4f1fe248cdf3", + "gsd-core/workflows/docs-update.md": "b5cdf1c35043cf7b", "gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04", - "gsd-core/workflows/eval-review.md": "f898936e2cfe4130", - "gsd-core/workflows/execute-phase.md": "ae2c1d3f9518bee5", + "gsd-core/workflows/eval-review.md": "32d3d7e80ab2bfc7", + "gsd-core/workflows/execute-phase.md": "e9c9c9691bbc24e2", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "4e265392b3f2ba0e", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "7b2d9a4a4013fd6a", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "7a49bc47da5411ea", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "045ad8cb48444e57", + "gsd-core/workflows/execute-plan.md": "3399bf5491e85a7c", "gsd-core/workflows/explore.md": "6c04f2e658d93261", "gsd-core/workflows/extract-learnings.md": "b6f01ca3d8f58de4", "gsd-core/workflows/fast.md": "11f5cd10ae5cc7d3", "gsd-core/workflows/forensics.md": "0d500a3f5ab26913", - "gsd-core/workflows/graduation.md": "47f1594c88c08501", - "gsd-core/workflows/health.md": "107e3c72e76d9535", + "gsd-core/workflows/graduation.md": "973dcebcd17e1b10", + "gsd-core/workflows/health.md": "c25b5e5f62874c31", "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0", "gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50", "gsd-core/workflows/help/modes/full.md": "91e115f058b6d3cf", "gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d", - "gsd-core/workflows/import.md": "12c6cbcbdecb6392", - "gsd-core/workflows/inbox.md": "437f981ef9ae7b26", - "gsd-core/workflows/ingest-docs.md": "f7c3fa659ca77bc5", + "gsd-core/workflows/import.md": "31a0f3a33154939f", + "gsd-core/workflows/inbox.md": "a7d439981775bc29", + "gsd-core/workflows/ingest-docs.md": "e5c63b5e539f6e17", "gsd-core/workflows/insert-phase.md": "08dca838d831bb5b", "gsd-core/workflows/list-phase-assumptions.md": "53dd4b69536c1bc3", "gsd-core/workflows/list-seeds.md": "b687f2a843032d65", "gsd-core/workflows/list-workspaces.md": "7f94e18b5c549453", - "gsd-core/workflows/manager.md": "3ba7a3e8213c4b23", + "gsd-core/workflows/manager.md": "c18fab593344253d", "gsd-core/workflows/map-codebase.md": "8fb02d635a86d6b2", "gsd-core/workflows/milestone-summary.md": "e0cdfddbd39a9043", - "gsd-core/workflows/mvp-phase.md": "344dd300e0cc1e74", - "gsd-core/workflows/new-milestone.md": "6227eaddad367bc5", - "gsd-core/workflows/new-project.md": "c1d822aa1c81d390", - "gsd-core/workflows/new-workspace.md": "017688423110ed66", + "gsd-core/workflows/mvp-phase.md": "58a952b4715db283", + "gsd-core/workflows/new-milestone.md": "f6029bcb535bee69", + "gsd-core/workflows/new-project.md": "032fd380752ad3ef", + "gsd-core/workflows/new-workspace.md": "bbeb706c7a697617", "gsd-core/workflows/next.md": "13fb800f2472d970", "gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b", "gsd-core/workflows/note.md": "5a99eb396c744619", - "gsd-core/workflows/onboard.md": "6f9e6c0b484271a9", + "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": "c9aeef0741af0ac5", + "gsd-core/workflows/plan-phase.md": "a41a135a82c2f307", "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/plant-seed.md": "10b92ae08a6fdede", + "gsd-core/workflows/plant-seed.md": "9596db80ab282c6f", "gsd-core/workflows/pr-branch.md": "c87db7ac8c28be1b", - "gsd-core/workflows/profile-user.md": "5abfae83739fa978", + "gsd-core/workflows/profile-user.md": "37af07833c81a0bd", "gsd-core/workflows/progress.md": "46c83ad61b3c4a84", - "gsd-core/workflows/quick.md": "2a9476454b69b4ff", + "gsd-core/workflows/quick.md": "de56bbe44cb67d52", "gsd-core/workflows/reapply-patches.md": "39050f72601aec89", "gsd-core/workflows/remove-phase.md": "df9a45f0b1880999", - "gsd-core/workflows/remove-workspace.md": "a7ca66db6b7c132c", + "gsd-core/workflows/remove-workspace.md": "f67860c795fb4bfe", "gsd-core/workflows/resume-project.md": "f28da1200e4545f4", "gsd-core/workflows/review.md": "f1fbefbd64bd890e", "gsd-core/workflows/scan.md": "e6424af05656725a", - "gsd-core/workflows/secure-phase.md": "22ab3bb5da494ea7", + "gsd-core/workflows/secure-phase.md": "f8b9436c35372281", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "414db4dbea97ba44", - "gsd-core/workflows/settings-integrations.md": "70515c5838fb9826", - "gsd-core/workflows/settings.md": "d96ddf01fb85e61e", - "gsd-core/workflows/ship.md": "4642ebbaa38f8cc2", + "gsd-core/workflows/settings-integrations.md": "effcef778d4a855f", + "gsd-core/workflows/settings.md": "85ceb482dc713169", + "gsd-core/workflows/ship.md": "09056fccdf20e41b", "gsd-core/workflows/sketch-wrap-up.md": "b767a1d3db129a8a", - "gsd-core/workflows/sketch.md": "88cfdf4edcf222ab", - "gsd-core/workflows/smart-entry.md": "449238eb94abe187", + "gsd-core/workflows/sketch.md": "5f0a7d3640cdff54", + "gsd-core/workflows/smart-entry.md": "004b4060eab97cb9", "gsd-core/workflows/spec-phase.md": "fa8669b75392cf6c", "gsd-core/workflows/spike-wrap-up.md": "da0dcb252c54fa82", - "gsd-core/workflows/spike.md": "7813e120577282d4", + "gsd-core/workflows/spike.md": "a51eaa05bd40e3cf", "gsd-core/workflows/stats.md": "76a42cbeaf6007c2", "gsd-core/workflows/sync-skills.md": "b505e6f8331c0918", "gsd-core/workflows/thread.md": "927e7eeefd2fcf5c", "gsd-core/workflows/transition.md": "aea486bb7a0e80e7", - "gsd-core/workflows/ui-phase.md": "d02054ab9f01abb4", - "gsd-core/workflows/ui-review.md": "7acfc485526d064b", + "gsd-core/workflows/ui-phase.md": "9bcc048f577d7ea5", + "gsd-core/workflows/ui-review.md": "202c4e399cd95719", "gsd-core/workflows/ultraplan-phase.md": "0fb8291153e3937d", - "gsd-core/workflows/undo.md": "96d2775f008b3a85", - "gsd-core/workflows/update.md": "6718e0632bba26ca", - "gsd-core/workflows/validate-phase.md": "ce9890f21c6e5607", + "gsd-core/workflows/undo.md": "1712417bade30b30", + "gsd-core/workflows/update.md": "eab6ce95ff7bdee1", + "gsd-core/workflows/validate-phase.md": "2e19caff07397728", "gsd-core/workflows/verify-phase.md": "d26a2c3269340caf", - "gsd-core/workflows/verify-work.md": "86c6f0c77b5adc72", + "gsd-core/workflows/verify-work.md": "5b92e34f1d0da848", "scripts/changeset/README.md": "86ff89331dfd94b2", "scripts/changeset/cli.cjs": "68f92a344b199271", "scripts/changeset/github-release-notes.cjs": "795677f0c009b132", diff --git a/tests/fixtures/golden-install-parity/opencode.json b/tests/fixtures/golden-install-parity/opencode.json index 508f66cb6..1c60c975e 100644 --- a/tests/fixtures/golden-install-parity/opencode.json +++ b/tests/fixtures/golden-install-parity/opencode.json @@ -160,6 +160,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e", "gsd-core/references/execute-phase-context-guard.md": "a5a1058d35806a8e", "gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2", + "gsd-core/references/execute-phase-response-language.md": "c240dc476dd15df5", "gsd-core/references/execute-phase-wave-guard.md": "de9ac22cead4cfd8", "gsd-core/references/executor-examples.md": "ba59243ed45c8ab1", "gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4", @@ -279,23 +280,23 @@ "gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335", "gsd-core/workflows/add-backlog.md": "08289088a88d410f", "gsd-core/workflows/add-phase.md": "739e34f6122e1e61", - "gsd-core/workflows/add-tests.md": "b4deb88c74d491c7", - "gsd-core/workflows/add-todo.md": "36b6d7fec9631ec7", - "gsd-core/workflows/ai-integration-phase.md": "f8288f0434d17c84", + "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/analyze-dependencies.md": "77aff48f97fa6f1c", "gsd-core/workflows/audit-fix.md": "3aaafee8857dcfab", "gsd-core/workflows/audit-milestone.md": "8bd0b730de08d1a8", "gsd-core/workflows/audit-uat.md": "c800099fab1e1c1b", "gsd-core/workflows/autonomous.md": "6cb0c014f5f56965", - "gsd-core/workflows/check-todos.md": "6526b64ee88c7d2e", - "gsd-core/workflows/cleanup.md": "94d771d26f62dc86", + "gsd-core/workflows/check-todos.md": "795eb611182bf038", + "gsd-core/workflows/cleanup.md": "9d510a45aec81ba1", "gsd-core/workflows/code-review-fix.md": "adb9388bb157610c", "gsd-core/workflows/code-review.md": "016d1c9cbabf04f2", - "gsd-core/workflows/complete-milestone.md": "614299b2c08e66c3", - "gsd-core/workflows/debug.md": "63ea176f51f2eeb7", + "gsd-core/workflows/complete-milestone.md": "9482dadd0f8902d2", + "gsd-core/workflows/debug.md": "0055f60eb85d8d8f", "gsd-core/workflows/diagnose-issues.md": "1d1aa1d919bc4d03", - "gsd-core/workflows/discovery-phase.md": "724408336596c50c", - "gsd-core/workflows/discuss-phase-assumptions.md": "92e43cd12200c610", + "gsd-core/workflows/discovery-phase.md": "0ef23f38adfb0e6e", + "gsd-core/workflows/discuss-phase-assumptions.md": "f582dc980face737", "gsd-core/workflows/discuss-phase-power.md": "5c0d1ca6abda0383", "gsd-core/workflows/discuss-phase.md": "3a62a8d4c374c69f", "gsd-core/workflows/discuss-phase/modes/advisor.md": "83ca3ea4fac785af", @@ -310,88 +311,88 @@ "gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb", "gsd-core/workflows/discuss-phase/templates/context.md": "9804674fccada405", "gsd-core/workflows/discuss-phase/templates/discussion-log.md": "04e4feee14772275", - "gsd-core/workflows/do.md": "85c4c8cb7aa8af87", - "gsd-core/workflows/docs-update.md": "850366c2ef8fb780", + "gsd-core/workflows/do.md": "532afe82bbf9f775", + "gsd-core/workflows/docs-update.md": "4c7ea896438d9d45", "gsd-core/workflows/edit-phase.md": "1876c855fb0a0a39", - "gsd-core/workflows/eval-review.md": "5394694d29ad7543", - "gsd-core/workflows/execute-phase.md": "83e7df675b781f8f", + "gsd-core/workflows/eval-review.md": "1973f08d0eb34159", + "gsd-core/workflows/execute-phase.md": "6148ab536d9210cc", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "1804215577f1ad35", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "c4cba01539f0368a", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "21f4d9b3abc334ce", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "ac4a07ff7e42190d", + "gsd-core/workflows/execute-plan.md": "cf668f02001b9778", "gsd-core/workflows/explore.md": "7f5f9231cfd3089b", "gsd-core/workflows/extract-learnings.md": "92b3c0979604b7d0", "gsd-core/workflows/fast.md": "12187b242e6af970", "gsd-core/workflows/forensics.md": "9354cb830152fd28", - "gsd-core/workflows/graduation.md": "13080b5c24eec27d", - "gsd-core/workflows/health.md": "a91e0a8e5d20b2e9", + "gsd-core/workflows/graduation.md": "589b9b303cff8643", + "gsd-core/workflows/health.md": "05447688e0b332c5", "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3", "gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0", "gsd-core/workflows/help/modes/full.md": "7e68200aeb086535", "gsd-core/workflows/help/modes/topic.md": "0bf9ab39d7044d69", - "gsd-core/workflows/import.md": "03527dcd27f9f7e7", - "gsd-core/workflows/inbox.md": "a073396097c89c01", - "gsd-core/workflows/ingest-docs.md": "9066e37d34b2691e", + "gsd-core/workflows/import.md": "15d09b825badf7ed", + "gsd-core/workflows/inbox.md": "7e46f5d6b0694074", + "gsd-core/workflows/ingest-docs.md": "d6e090893e6083d9", "gsd-core/workflows/insert-phase.md": "858224afbf977c14", "gsd-core/workflows/list-phase-assumptions.md": "e7b5e35c9452e3b3", "gsd-core/workflows/list-seeds.md": "9b05425fa7d24827", "gsd-core/workflows/list-workspaces.md": "dc6d30036c6dc426", - "gsd-core/workflows/manager.md": "b652b27ca9c6451a", + "gsd-core/workflows/manager.md": "eda80c0d3d32dbf6", "gsd-core/workflows/map-codebase.md": "ab67f493aac12fa3", "gsd-core/workflows/milestone-summary.md": "321ea8a6a206f38f", - "gsd-core/workflows/mvp-phase.md": "b4d688baa4c60dfc", - "gsd-core/workflows/new-milestone.md": "11c0d446a3320ef5", - "gsd-core/workflows/new-project.md": "4a4a4f0010b3e1a0", - "gsd-core/workflows/new-workspace.md": "3d82392388ee24c7", + "gsd-core/workflows/mvp-phase.md": "94360741a1d8d7ce", + "gsd-core/workflows/new-milestone.md": "70cc7e68313ce1fd", + "gsd-core/workflows/new-project.md": "e3691650a7483f10", + "gsd-core/workflows/new-workspace.md": "53f8abf8baca9345", "gsd-core/workflows/next.md": "6719a37b8ce2ac4f", "gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b", "gsd-core/workflows/note.md": "0d1374f2a2257858", - "gsd-core/workflows/onboard.md": "102556e1715c01b9", + "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": "b133e7c08a39aad0", + "gsd-core/workflows/plan-phase.md": "9dc1b4d1e7c0878f", "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/plant-seed.md": "b8dad652e31c2318", + "gsd-core/workflows/plant-seed.md": "ac8bbe2d9d52f2c1", "gsd-core/workflows/pr-branch.md": "929b7cb0c99c7b9e", - "gsd-core/workflows/profile-user.md": "248d59a31948e0ed", + "gsd-core/workflows/profile-user.md": "9275d5895237b801", "gsd-core/workflows/progress.md": "c3d7149133d571a9", - "gsd-core/workflows/quick.md": "f2641bad95c6614e", + "gsd-core/workflows/quick.md": "2b83359cc9a39d17", "gsd-core/workflows/reapply-patches.md": "a0e9b53f90abceb2", "gsd-core/workflows/remove-phase.md": "dea4661e8f89596f", - "gsd-core/workflows/remove-workspace.md": "446847e71aa52504", + "gsd-core/workflows/remove-workspace.md": "21a8581add5f31ae", "gsd-core/workflows/resume-project.md": "ad9f06a10bab8cc0", "gsd-core/workflows/review.md": "fbe68c9f86385274", "gsd-core/workflows/scan.md": "63cf8d9067610704", - "gsd-core/workflows/secure-phase.md": "71e6e689e80288ec", + "gsd-core/workflows/secure-phase.md": "7ad9fd285facdef8", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "252b0d3edc315339", - "gsd-core/workflows/settings-integrations.md": "d1711a95f44fdbde", - "gsd-core/workflows/settings.md": "2e42ee34c791378a", - "gsd-core/workflows/ship.md": "9e773a94f4abf0e6", + "gsd-core/workflows/settings-integrations.md": "1c3997dc6953e7eb", + "gsd-core/workflows/settings.md": "a244850ce2f7b8dd", + "gsd-core/workflows/ship.md": "b3dedb0506ba3ab6", "gsd-core/workflows/sketch-wrap-up.md": "681800323681c5c6", - "gsd-core/workflows/sketch.md": "fcb7af914159ef7b", - "gsd-core/workflows/smart-entry.md": "2a253fe437496eea", + "gsd-core/workflows/sketch.md": "da82c9be7074545c", + "gsd-core/workflows/smart-entry.md": "c4c780d3aa2124f8", "gsd-core/workflows/spec-phase.md": "5c4a3001095ca722", "gsd-core/workflows/spike-wrap-up.md": "30a73aa19a1db271", - "gsd-core/workflows/spike.md": "f8b07d411473560a", + "gsd-core/workflows/spike.md": "7462ab0428468932", "gsd-core/workflows/stats.md": "846cd2808461ccdc", "gsd-core/workflows/sync-skills.md": "7e2c138cdbef4282", "gsd-core/workflows/thread.md": "82652edb1883af59", "gsd-core/workflows/transition.md": "372b6fc7c0c68a89", - "gsd-core/workflows/ui-phase.md": "4d11cc725ebfe597", - "gsd-core/workflows/ui-review.md": "149f39373eee5c92", + "gsd-core/workflows/ui-phase.md": "bef76916ad5844df", + "gsd-core/workflows/ui-review.md": "5be4a2ea3dc52222", "gsd-core/workflows/ultraplan-phase.md": "f4bad8de3fdb49fa", - "gsd-core/workflows/undo.md": "0bba5e7f6196c894", - "gsd-core/workflows/update.md": "71b6cd852f38b4bc", - "gsd-core/workflows/validate-phase.md": "434d9927c65f2bba", + "gsd-core/workflows/undo.md": "bbb91a18ee896975", + "gsd-core/workflows/update.md": "7af09036dc7b5f98", + "gsd-core/workflows/validate-phase.md": "4c3ed60b16a5e91f", "gsd-core/workflows/verify-phase.md": "73025aa5d8bf7bd5", - "gsd-core/workflows/verify-work.md": "528fa7529501ee10", + "gsd-core/workflows/verify-work.md": "c9b631068931ad15", "hooks/gsd-check-update-worker.js": "385fb7c67810baf6", "hooks/gsd-check-update.js": "4549451414ffa7d7", "hooks/gsd-config-reload.js": "96546e0e8bb47904", diff --git a/tests/fixtures/golden-install-parity/pi.json b/tests/fixtures/golden-install-parity/pi.json index 8e9a3045f..4ac2d2402 100644 --- a/tests/fixtures/golden-install-parity/pi.json +++ b/tests/fixtures/golden-install-parity/pi.json @@ -56,6 +56,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e", "gsd-core/references/execute-phase-context-guard.md": "982006c1f3364242", "gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2", + "gsd-core/references/execute-phase-response-language.md": "c240dc476dd15df5", "gsd-core/references/execute-phase-wave-guard.md": "de9ac22cead4cfd8", "gsd-core/references/executor-examples.md": "ba59243ed45c8ab1", "gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4", @@ -175,23 +176,23 @@ "gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335", "gsd-core/workflows/add-backlog.md": "1bc7377b105194fc", "gsd-core/workflows/add-phase.md": "ac43883e2d8e34d8", - "gsd-core/workflows/add-tests.md": "24b0d8157a9ccb8b", - "gsd-core/workflows/add-todo.md": "953314cdfef56bc4", - "gsd-core/workflows/ai-integration-phase.md": "45c727e49de71636", + "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/analyze-dependencies.md": "52942af10f140717", "gsd-core/workflows/audit-fix.md": "d511f4094ce351aa", "gsd-core/workflows/audit-milestone.md": "3835762c3147a927", "gsd-core/workflows/audit-uat.md": "fcfbec501620b564", "gsd-core/workflows/autonomous.md": "7e5683728ef33707", - "gsd-core/workflows/check-todos.md": "bdeaf43f9c61e0cc", - "gsd-core/workflows/cleanup.md": "0daa2f2720c111f1", + "gsd-core/workflows/check-todos.md": "f39e3251a78f6f5a", + "gsd-core/workflows/cleanup.md": "df79d1dc7b84d736", "gsd-core/workflows/code-review-fix.md": "2e113d1f4350a075", "gsd-core/workflows/code-review.md": "c877ad812b4a511e", - "gsd-core/workflows/complete-milestone.md": "c1f91b77f4ace7f2", - "gsd-core/workflows/debug.md": "79c2f7dc12815e30", + "gsd-core/workflows/complete-milestone.md": "8f98d7b05793cf4a", + "gsd-core/workflows/debug.md": "a2d04237fbbce72b", "gsd-core/workflows/diagnose-issues.md": "f6feda980d2e5f02", - "gsd-core/workflows/discovery-phase.md": "3ba7cfb89fb1e761", - "gsd-core/workflows/discuss-phase-assumptions.md": "f5b765d33eba4f88", + "gsd-core/workflows/discovery-phase.md": "0aa8d8d872b53858", + "gsd-core/workflows/discuss-phase-assumptions.md": "185419d61517727b", "gsd-core/workflows/discuss-phase-power.md": "0841f7dc6e9a054a", "gsd-core/workflows/discuss-phase.md": "acfe2baa4c8bebbe", "gsd-core/workflows/discuss-phase/modes/advisor.md": "db488d74d080c653", @@ -206,88 +207,88 @@ "gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb", "gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f", "gsd-core/workflows/discuss-phase/templates/discussion-log.md": "1bbd7703f11128e1", - "gsd-core/workflows/do.md": "7512dd1892f118a1", - "gsd-core/workflows/docs-update.md": "f35922d15b7061c9", + "gsd-core/workflows/do.md": "90df4f1fe248cdf3", + "gsd-core/workflows/docs-update.md": "b5cdf1c35043cf7b", "gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04", - "gsd-core/workflows/eval-review.md": "f898936e2cfe4130", - "gsd-core/workflows/execute-phase.md": "60d61e7d2332e889", + "gsd-core/workflows/eval-review.md": "32d3d7e80ab2bfc7", + "gsd-core/workflows/execute-phase.md": "043ed0d7fb5452dc", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "4e265392b3f2ba0e", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "7b2d9a4a4013fd6a", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "7a49bc47da5411ea", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "6412aa2edd5a4452", + "gsd-core/workflows/execute-plan.md": "9af2868516c0e118", "gsd-core/workflows/explore.md": "6c04f2e658d93261", "gsd-core/workflows/extract-learnings.md": "b6f01ca3d8f58de4", "gsd-core/workflows/fast.md": "11f5cd10ae5cc7d3", "gsd-core/workflows/forensics.md": "0d500a3f5ab26913", - "gsd-core/workflows/graduation.md": "47f1594c88c08501", - "gsd-core/workflows/health.md": "107e3c72e76d9535", + "gsd-core/workflows/graduation.md": "973dcebcd17e1b10", + "gsd-core/workflows/health.md": "c25b5e5f62874c31", "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0", "gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50", "gsd-core/workflows/help/modes/full.md": "99d5387021de656f", "gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d", - "gsd-core/workflows/import.md": "12c6cbcbdecb6392", - "gsd-core/workflows/inbox.md": "437f981ef9ae7b26", - "gsd-core/workflows/ingest-docs.md": "f7c3fa659ca77bc5", + "gsd-core/workflows/import.md": "31a0f3a33154939f", + "gsd-core/workflows/inbox.md": "a7d439981775bc29", + "gsd-core/workflows/ingest-docs.md": "e5c63b5e539f6e17", "gsd-core/workflows/insert-phase.md": "08dca838d831bb5b", "gsd-core/workflows/list-phase-assumptions.md": "53dd4b69536c1bc3", "gsd-core/workflows/list-seeds.md": "b687f2a843032d65", "gsd-core/workflows/list-workspaces.md": "7f94e18b5c549453", - "gsd-core/workflows/manager.md": "3ba7a3e8213c4b23", + "gsd-core/workflows/manager.md": "c18fab593344253d", "gsd-core/workflows/map-codebase.md": "8fb02d635a86d6b2", "gsd-core/workflows/milestone-summary.md": "e0cdfddbd39a9043", - "gsd-core/workflows/mvp-phase.md": "344dd300e0cc1e74", - "gsd-core/workflows/new-milestone.md": "6227eaddad367bc5", - "gsd-core/workflows/new-project.md": "52c773fc5de47b6c", - "gsd-core/workflows/new-workspace.md": "017688423110ed66", + "gsd-core/workflows/mvp-phase.md": "58a952b4715db283", + "gsd-core/workflows/new-milestone.md": "f6029bcb535bee69", + "gsd-core/workflows/new-project.md": "fb7a89c14665ae0e", + "gsd-core/workflows/new-workspace.md": "bbeb706c7a697617", "gsd-core/workflows/next.md": "13fb800f2472d970", "gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b", "gsd-core/workflows/note.md": "5a99eb396c744619", - "gsd-core/workflows/onboard.md": "6f9e6c0b484271a9", + "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": "09cc50e25bc8293a", + "gsd-core/workflows/plan-phase.md": "2b7d29129452a804", "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/plant-seed.md": "10b92ae08a6fdede", + "gsd-core/workflows/plant-seed.md": "9596db80ab282c6f", "gsd-core/workflows/pr-branch.md": "c87db7ac8c28be1b", - "gsd-core/workflows/profile-user.md": "1bac7f69142801ef", + "gsd-core/workflows/profile-user.md": "e5c0e0a0dc54dccb", "gsd-core/workflows/progress.md": "46c83ad61b3c4a84", - "gsd-core/workflows/quick.md": "c00a6574ff650a86", + "gsd-core/workflows/quick.md": "c583a8cbc0e29f2c", "gsd-core/workflows/reapply-patches.md": "39050f72601aec89", "gsd-core/workflows/remove-phase.md": "df9a45f0b1880999", - "gsd-core/workflows/remove-workspace.md": "a7ca66db6b7c132c", + "gsd-core/workflows/remove-workspace.md": "f67860c795fb4bfe", "gsd-core/workflows/resume-project.md": "f28da1200e4545f4", "gsd-core/workflows/review.md": "f1fbefbd64bd890e", "gsd-core/workflows/scan.md": "e6424af05656725a", - "gsd-core/workflows/secure-phase.md": "22ab3bb5da494ea7", + "gsd-core/workflows/secure-phase.md": "f8b9436c35372281", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "414db4dbea97ba44", - "gsd-core/workflows/settings-integrations.md": "70515c5838fb9826", - "gsd-core/workflows/settings.md": "d96ddf01fb85e61e", - "gsd-core/workflows/ship.md": "4642ebbaa38f8cc2", + "gsd-core/workflows/settings-integrations.md": "effcef778d4a855f", + "gsd-core/workflows/settings.md": "85ceb482dc713169", + "gsd-core/workflows/ship.md": "09056fccdf20e41b", "gsd-core/workflows/sketch-wrap-up.md": "838c701bd072ae73", - "gsd-core/workflows/sketch.md": "c7725562b3efd311", - "gsd-core/workflows/smart-entry.md": "449238eb94abe187", + "gsd-core/workflows/sketch.md": "70df86d9d8eeba0f", + "gsd-core/workflows/smart-entry.md": "004b4060eab97cb9", "gsd-core/workflows/spec-phase.md": "fa8669b75392cf6c", "gsd-core/workflows/spike-wrap-up.md": "0b24057c340a8a17", - "gsd-core/workflows/spike.md": "9134cdc3b75282c9", + "gsd-core/workflows/spike.md": "c6e13cbfbf28d128", "gsd-core/workflows/stats.md": "76a42cbeaf6007c2", "gsd-core/workflows/sync-skills.md": "b505e6f8331c0918", "gsd-core/workflows/thread.md": "927e7eeefd2fcf5c", "gsd-core/workflows/transition.md": "aea486bb7a0e80e7", - "gsd-core/workflows/ui-phase.md": "d77fa19403a4684b", - "gsd-core/workflows/ui-review.md": "7acfc485526d064b", + "gsd-core/workflows/ui-phase.md": "7aa19da8c4258143", + "gsd-core/workflows/ui-review.md": "202c4e399cd95719", "gsd-core/workflows/ultraplan-phase.md": "0fb8291153e3937d", - "gsd-core/workflows/undo.md": "96d2775f008b3a85", - "gsd-core/workflows/update.md": "7e69d278375a2493", - "gsd-core/workflows/validate-phase.md": "ce9890f21c6e5607", + "gsd-core/workflows/undo.md": "1712417bade30b30", + "gsd-core/workflows/update.md": "2873b4beea839838", + "gsd-core/workflows/validate-phase.md": "2e19caff07397728", "gsd-core/workflows/verify-phase.md": "d26a2c3269340caf", - "gsd-core/workflows/verify-work.md": "86c6f0c77b5adc72", + "gsd-core/workflows/verify-work.md": "5b92e34f1d0da848", "hooks/gsd-check-update-worker.js": "55376b5b9335a580", "hooks/gsd-check-update.js": "a89562537a41f83d", "hooks/gsd-config-reload.js": "96546e0e8bb47904", diff --git a/tests/fixtures/golden-install-parity/qwen.json b/tests/fixtures/golden-install-parity/qwen.json index 756d4866e..daf9e0fd5 100644 --- a/tests/fixtures/golden-install-parity/qwen.json +++ b/tests/fixtures/golden-install-parity/qwen.json @@ -89,6 +89,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md": "8c2e5a596401dd33", "gsd-core/references/execute-phase-context-guard.md": "a5a1058d35806a8e", "gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2", + "gsd-core/references/execute-phase-response-language.md": "c240dc476dd15df5", "gsd-core/references/execute-phase-wave-guard.md": "41d8123374d3838b", "gsd-core/references/executor-examples.md": "ba59243ed45c8ab1", "gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4", @@ -208,23 +209,23 @@ "gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335", "gsd-core/workflows/add-backlog.md": "cee41d5fc52d4e37", "gsd-core/workflows/add-phase.md": "395fb0f9f0385073", - "gsd-core/workflows/add-tests.md": "7cd945118e83246e", - "gsd-core/workflows/add-todo.md": "83426131a56b8e77", - "gsd-core/workflows/ai-integration-phase.md": "dd58ee9044bdf3c2", + "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/analyze-dependencies.md": "77aff48f97fa6f1c", "gsd-core/workflows/audit-fix.md": "83896ff28c48b182", "gsd-core/workflows/audit-milestone.md": "78dbc1e8c4499d7d", "gsd-core/workflows/audit-uat.md": "97d441d07e7972b3", "gsd-core/workflows/autonomous.md": "3014ff90115f0daf", - "gsd-core/workflows/check-todos.md": "ec8c22920f6b2df1", - "gsd-core/workflows/cleanup.md": "6a18b165752e3087", + "gsd-core/workflows/check-todos.md": "52d3497948db7709", + "gsd-core/workflows/cleanup.md": "48aa7291ace5d413", "gsd-core/workflows/code-review-fix.md": "f3725ae9d685bed2", "gsd-core/workflows/code-review.md": "657f309742b1a4c9", - "gsd-core/workflows/complete-milestone.md": "40085d32b15805c8", - "gsd-core/workflows/debug.md": "76b028848be60ffe", + "gsd-core/workflows/complete-milestone.md": "69925bcfd955d31e", + "gsd-core/workflows/debug.md": "50c592d07681fcb7", "gsd-core/workflows/diagnose-issues.md": "5092f9003e7a9582", - "gsd-core/workflows/discovery-phase.md": "6161c60d752d0058", - "gsd-core/workflows/discuss-phase-assumptions.md": "18712f78bb960ec8", + "gsd-core/workflows/discovery-phase.md": "6ad9da4779d7b6b0", + "gsd-core/workflows/discuss-phase-assumptions.md": "3cafc868a8bb4a73", "gsd-core/workflows/discuss-phase-power.md": "290c0d83d783f9f6", "gsd-core/workflows/discuss-phase.md": "8644b72386a51241", "gsd-core/workflows/discuss-phase/modes/advisor.md": "3102430dfad9c012", @@ -239,88 +240,88 @@ "gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb", "gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f", "gsd-core/workflows/discuss-phase/templates/discussion-log.md": "1bbd7703f11128e1", - "gsd-core/workflows/do.md": "68f2607de614157d", - "gsd-core/workflows/docs-update.md": "45d2f0d173c84e07", + "gsd-core/workflows/do.md": "2e784b2d6a02ea94", + "gsd-core/workflows/docs-update.md": "db6e70dddaf019ad", "gsd-core/workflows/edit-phase.md": "0fb5e0123cfc6f36", - "gsd-core/workflows/eval-review.md": "6dee8a1e40ececd4", - "gsd-core/workflows/execute-phase.md": "c06b2630c14ebac3", + "gsd-core/workflows/eval-review.md": "88431952699d9fa6", + "gsd-core/workflows/execute-phase.md": "782d4ca8c8439afd", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "36af8d91e4ae8b9c", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "0b04cc2dcab61107", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "9cbf100b17f4bcb1", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "25ef51fc9900f4b4", + "gsd-core/workflows/execute-plan.md": "46514264818b30c9", "gsd-core/workflows/explore.md": "e1a83a8982532e5b", "gsd-core/workflows/extract-learnings.md": "dd4fdb88605de49a", "gsd-core/workflows/fast.md": "93ed453edddd8c0c", "gsd-core/workflows/forensics.md": "82800a3138ac1da9", - "gsd-core/workflows/graduation.md": "40401655435beee3", - "gsd-core/workflows/health.md": "043de14edb6a9723", + "gsd-core/workflows/graduation.md": "5d5004de086db1c8", + "gsd-core/workflows/health.md": "c6616e2893731db4", "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3", "gsd-core/workflows/help/modes/default.md": "7ca77077085452f5", "gsd-core/workflows/help/modes/full.md": "6022991e0f56fd1d", "gsd-core/workflows/help/modes/topic.md": "6e42db16f1568be9", - "gsd-core/workflows/import.md": "9e29736463899f31", - "gsd-core/workflows/inbox.md": "91aac6360e1a8672", - "gsd-core/workflows/ingest-docs.md": "5d7946a7557d8a05", + "gsd-core/workflows/import.md": "3bcc9194fffcd259", + "gsd-core/workflows/inbox.md": "e8a5db7443c524d6", + "gsd-core/workflows/ingest-docs.md": "f1ef200aba5f1831", "gsd-core/workflows/insert-phase.md": "00a34b792c323959", "gsd-core/workflows/list-phase-assumptions.md": "2a6b6a5acfb7742c", "gsd-core/workflows/list-seeds.md": "8d6e1b5d85f64c6f", "gsd-core/workflows/list-workspaces.md": "5e434933a3db695c", - "gsd-core/workflows/manager.md": "176ca710b4be4860", + "gsd-core/workflows/manager.md": "745a2b5080767882", "gsd-core/workflows/map-codebase.md": "b88010a34b89a07f", "gsd-core/workflows/milestone-summary.md": "97ddfc40c6bce906", - "gsd-core/workflows/mvp-phase.md": "5ca64695120d250c", - "gsd-core/workflows/new-milestone.md": "be7839cd48260215", - "gsd-core/workflows/new-project.md": "ef9676c1473f2073", - "gsd-core/workflows/new-workspace.md": "0d59bb987430003e", + "gsd-core/workflows/mvp-phase.md": "9d226159c2aaae3d", + "gsd-core/workflows/new-milestone.md": "08b9b9ce005be669", + "gsd-core/workflows/new-project.md": "c07c1dce7b937308", + "gsd-core/workflows/new-workspace.md": "0b93348ced44810e", "gsd-core/workflows/next.md": "c13515a80c20d37d", "gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b", "gsd-core/workflows/note.md": "42b66686b2c102cb", - "gsd-core/workflows/onboard.md": "3c50ed1f1fd07619", + "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": "3edc831cfa8ad1cb", + "gsd-core/workflows/plan-phase.md": "9b436899cbc7bbca", "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/plant-seed.md": "0a92ba12993ac261", + "gsd-core/workflows/plant-seed.md": "6b7375b5d52be7c7", "gsd-core/workflows/pr-branch.md": "cef0f65b16d500b4", - "gsd-core/workflows/profile-user.md": "263c0693563d98da", + "gsd-core/workflows/profile-user.md": "bb02367a5fc8653c", "gsd-core/workflows/progress.md": "475eb60a2e739eed", - "gsd-core/workflows/quick.md": "f5de70665fbea4fa", + "gsd-core/workflows/quick.md": "6a3caf7b8e608711", "gsd-core/workflows/reapply-patches.md": "de0ee8acfe7245b2", "gsd-core/workflows/remove-phase.md": "e8ae4fbbfac700f0", - "gsd-core/workflows/remove-workspace.md": "4ac64de862dc650e", + "gsd-core/workflows/remove-workspace.md": "ae520235f4d1f4a5", "gsd-core/workflows/resume-project.md": "7f20769f302e5427", "gsd-core/workflows/review.md": "b3548b43dcf1fb4e", "gsd-core/workflows/scan.md": "9ebe1d469171af0d", - "gsd-core/workflows/secure-phase.md": "ef7b5ad194b687bf", + "gsd-core/workflows/secure-phase.md": "e5e8bf031e95cf1d", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "5e05212fb5cba531", - "gsd-core/workflows/settings-integrations.md": "29c5de27fbbb18e9", - "gsd-core/workflows/settings.md": "26b9b7979d3a5747", - "gsd-core/workflows/ship.md": "15420ac2a46fc203", + "gsd-core/workflows/settings-integrations.md": "c9fb71d26fd93527", + "gsd-core/workflows/settings.md": "83a13de5926ead14", + "gsd-core/workflows/ship.md": "8a4fe0b69f5c72f9", "gsd-core/workflows/sketch-wrap-up.md": "89e0eab2af946b04", - "gsd-core/workflows/sketch.md": "483387542d6fc3af", - "gsd-core/workflows/smart-entry.md": "d309710bcabd4675", + "gsd-core/workflows/sketch.md": "6e68bbff5c1e6db0", + "gsd-core/workflows/smart-entry.md": "072ac6efe8aafc38", "gsd-core/workflows/spec-phase.md": "546b3a8eb1a97013", "gsd-core/workflows/spike-wrap-up.md": "fe04cb3d30dcbc6c", - "gsd-core/workflows/spike.md": "fad28f2ecf2dac52", + "gsd-core/workflows/spike.md": "c83108b751b70307", "gsd-core/workflows/stats.md": "89a08155b92f4a2d", "gsd-core/workflows/sync-skills.md": "b505e6f8331c0918", "gsd-core/workflows/thread.md": "f24b6454c69d064a", "gsd-core/workflows/transition.md": "a30cba2ad6920641", - "gsd-core/workflows/ui-phase.md": "041cb6bcb496881d", - "gsd-core/workflows/ui-review.md": "8b989f372684851f", + "gsd-core/workflows/ui-phase.md": "f8b59f98a0647e43", + "gsd-core/workflows/ui-review.md": "2c1e1cf0177e4884", "gsd-core/workflows/ultraplan-phase.md": "49921383982474e0", - "gsd-core/workflows/undo.md": "791e0bf96d9a057f", - "gsd-core/workflows/update.md": "b34cb866152d4de3", - "gsd-core/workflows/validate-phase.md": "dfb9bd178ee1b67b", + "gsd-core/workflows/undo.md": "c433a552dab136dc", + "gsd-core/workflows/update.md": "ef757d600e333764", + "gsd-core/workflows/validate-phase.md": "2eb4bb28d6d62cb7", "gsd-core/workflows/verify-phase.md": "7d8e241350136ca0", - "gsd-core/workflows/verify-work.md": "14c856aab2e4c099", + "gsd-core/workflows/verify-work.md": "98757838ee328f5d", "hooks/gsd-check-update-worker.js": "4bb354044e0dff91", "hooks/gsd-check-update.js": "d2065cb3e725a42a", "hooks/gsd-config-reload.js": "4f52b8a0120bb1b8", diff --git a/tests/fixtures/golden-install-parity/trae.json b/tests/fixtures/golden-install-parity/trae.json index 3a073eea8..6ec94a7f2 100644 --- a/tests/fixtures/golden-install-parity/trae.json +++ b/tests/fixtures/golden-install-parity/trae.json @@ -89,6 +89,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md": "7a1aa0ad7963f809", "gsd-core/references/execute-phase-context-guard.md": "a5a1058d35806a8e", "gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2", + "gsd-core/references/execute-phase-response-language.md": "c240dc476dd15df5", "gsd-core/references/execute-phase-wave-guard.md": "973a3a6a5db7e449", "gsd-core/references/executor-examples.md": "ba59243ed45c8ab1", "gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4", @@ -208,23 +209,23 @@ "gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335", "gsd-core/workflows/add-backlog.md": "1851e97996d445d5", "gsd-core/workflows/add-phase.md": "7403cf0bc93a9699", - "gsd-core/workflows/add-tests.md": "8ad08d29415f8f43", - "gsd-core/workflows/add-todo.md": "fefa923ed596225f", - "gsd-core/workflows/ai-integration-phase.md": "197ebcc6abb0b873", + "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/analyze-dependencies.md": "77aff48f97fa6f1c", "gsd-core/workflows/audit-fix.md": "eb92f0de6ccc23a5", "gsd-core/workflows/audit-milestone.md": "ebec95af8f68f2ed", "gsd-core/workflows/audit-uat.md": "6e768b1c208a787a", "gsd-core/workflows/autonomous.md": "c482645c5d1ead46", - "gsd-core/workflows/check-todos.md": "0dda8236355e8c9c", - "gsd-core/workflows/cleanup.md": "82f65f5214ecd748", + "gsd-core/workflows/check-todos.md": "a0006366ced03b06", + "gsd-core/workflows/cleanup.md": "ad625e9596e04cda", "gsd-core/workflows/code-review-fix.md": "f2761f7f8c4a5674", "gsd-core/workflows/code-review.md": "41f0c51d8c4e7732", - "gsd-core/workflows/complete-milestone.md": "6e918b72bd885426", - "gsd-core/workflows/debug.md": "3cf5251e5ef0a372", + "gsd-core/workflows/complete-milestone.md": "98951eb5783fe72c", + "gsd-core/workflows/debug.md": "9d1c54eaa27af604", "gsd-core/workflows/diagnose-issues.md": "8e3d340b79e25616", - "gsd-core/workflows/discovery-phase.md": "b32b6197b66c9a13", - "gsd-core/workflows/discuss-phase-assumptions.md": "e376b1cf29379df4", + "gsd-core/workflows/discovery-phase.md": "7644e2d890a21212", + "gsd-core/workflows/discuss-phase-assumptions.md": "2308a4637a4a3f0a", "gsd-core/workflows/discuss-phase-power.md": "290c0d83d783f9f6", "gsd-core/workflows/discuss-phase.md": "4509657816c5566a", "gsd-core/workflows/discuss-phase/modes/advisor.md": "c9cd7db62e76ebcb", @@ -239,88 +240,88 @@ "gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb", "gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f", "gsd-core/workflows/discuss-phase/templates/discussion-log.md": "1bbd7703f11128e1", - "gsd-core/workflows/do.md": "5131e8796ba9d99b", - "gsd-core/workflows/docs-update.md": "f13571f08e083356", + "gsd-core/workflows/do.md": "6b56aa4a44ca61fc", + "gsd-core/workflows/docs-update.md": "141185e54648df02", "gsd-core/workflows/edit-phase.md": "7facd0faa33c8cad", - "gsd-core/workflows/eval-review.md": "37d545d4f0db4927", - "gsd-core/workflows/execute-phase.md": "4a8b484097cae892", + "gsd-core/workflows/eval-review.md": "90a29a4fa0cdd947", + "gsd-core/workflows/execute-phase.md": "67c7f93f3cef43f1", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "c985a30317a1aa6b", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "7d30384e9bf82664", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "90efedae3decaffe", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "1a409bc80100b6ee", + "gsd-core/workflows/execute-plan.md": "5dbc77ed09ebebe3", "gsd-core/workflows/explore.md": "8a5437aa0c239c38", "gsd-core/workflows/extract-learnings.md": "3fcc858b20d0d0e6", "gsd-core/workflows/fast.md": "0f05b1e008ac2fc2", "gsd-core/workflows/forensics.md": "665546666547875d", - "gsd-core/workflows/graduation.md": "1ca877cda258a5de", - "gsd-core/workflows/health.md": "1f9fd2deea45896f", + "gsd-core/workflows/graduation.md": "defc0dfcbfeb68d2", + "gsd-core/workflows/health.md": "d4cec6ef023e9833", "gsd-core/workflows/help.md": "08e1349950c5602a", "gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3", "gsd-core/workflows/help/modes/default.md": "ed7368e0d1b8644a", "gsd-core/workflows/help/modes/full.md": "01a34fdde96bf138", "gsd-core/workflows/help/modes/topic.md": "8a5344e56fa64ab9", - "gsd-core/workflows/import.md": "93707f52cf6f1b19", - "gsd-core/workflows/inbox.md": "e9ea37b2d46dc5b4", - "gsd-core/workflows/ingest-docs.md": "0f9f6b7080690244", + "gsd-core/workflows/import.md": "9ebddd4142200a3e", + "gsd-core/workflows/inbox.md": "1abe5a3114bbf1c3", + "gsd-core/workflows/ingest-docs.md": "4cb4166402041f37", "gsd-core/workflows/insert-phase.md": "753fa719f0d41d76", "gsd-core/workflows/list-phase-assumptions.md": "eb986c301d59f620", "gsd-core/workflows/list-seeds.md": "74ec072a74f8fdfe", "gsd-core/workflows/list-workspaces.md": "886e99378a3d19d9", - "gsd-core/workflows/manager.md": "212a50d3f65fff21", + "gsd-core/workflows/manager.md": "fd834a4236bd1b2e", "gsd-core/workflows/map-codebase.md": "a95bb77eee37a13d", "gsd-core/workflows/milestone-summary.md": "a0063cfbe08f2250", - "gsd-core/workflows/mvp-phase.md": "8ed9f4552350ede8", - "gsd-core/workflows/new-milestone.md": "528c034cb2d12244", - "gsd-core/workflows/new-project.md": "2284fc43b216f715", - "gsd-core/workflows/new-workspace.md": "6b6fbad18d30f783", + "gsd-core/workflows/mvp-phase.md": "c4e49ad83e1413ef", + "gsd-core/workflows/new-milestone.md": "a8338124bfd3f529", + "gsd-core/workflows/new-project.md": "cf4b47721efffcff", + "gsd-core/workflows/new-workspace.md": "89e5df89d54a2f47", "gsd-core/workflows/next.md": "2163195861877de5", "gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b", "gsd-core/workflows/note.md": "acc9130fb1e94f0b", - "gsd-core/workflows/onboard.md": "61f111302af0f404", + "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": "2cecda2750562a11", + "gsd-core/workflows/plan-phase.md": "5209ca67d77d19e3", "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/plant-seed.md": "856ad565b2eb0c47", + "gsd-core/workflows/plant-seed.md": "622f246ea8e163fa", "gsd-core/workflows/pr-branch.md": "79fd55b88ea2db9c", - "gsd-core/workflows/profile-user.md": "672821e6b1266645", + "gsd-core/workflows/profile-user.md": "aa0737531d487f10", "gsd-core/workflows/progress.md": "1fe098b4d559ba55", - "gsd-core/workflows/quick.md": "95ad5630aca7f1e2", + "gsd-core/workflows/quick.md": "27c49529f7d0ea16", "gsd-core/workflows/reapply-patches.md": "21b38c374f19fd78", "gsd-core/workflows/remove-phase.md": "a46c2fe853bf4e86", - "gsd-core/workflows/remove-workspace.md": "ae0e1c6d4438d663", + "gsd-core/workflows/remove-workspace.md": "8ddc5f04f7c48d6c", "gsd-core/workflows/resume-project.md": "f242e4c8aba18ea2", "gsd-core/workflows/review.md": "35d023ff48e3827f", "gsd-core/workflows/scan.md": "a3ce29ceb62b8192", - "gsd-core/workflows/secure-phase.md": "4a647aec1e4d2dfe", + "gsd-core/workflows/secure-phase.md": "85112be3547bced4", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "39e66386f6c48025", - "gsd-core/workflows/settings-integrations.md": "f8f756709ec02363", - "gsd-core/workflows/settings.md": "44b10c59215633b8", - "gsd-core/workflows/ship.md": "58d9fd3ee13ce1c2", + "gsd-core/workflows/settings-integrations.md": "8bb1c2bdebbc56e6", + "gsd-core/workflows/settings.md": "db6121276c6f63a4", + "gsd-core/workflows/ship.md": "6c97dde34a8edcd7", "gsd-core/workflows/sketch-wrap-up.md": "dbec602d104cb951", - "gsd-core/workflows/sketch.md": "44ff275150b6d045", - "gsd-core/workflows/smart-entry.md": "d8018578571f08d5", + "gsd-core/workflows/sketch.md": "6a6e543f2b667278", + "gsd-core/workflows/smart-entry.md": "5631e2e70b02abba", "gsd-core/workflows/spec-phase.md": "7b8873b0cd3eb9d7", "gsd-core/workflows/spike-wrap-up.md": "6fe876cb87603bc3", - "gsd-core/workflows/spike.md": "c042a437baaf10ad", + "gsd-core/workflows/spike.md": "0644cd621b35bedb", "gsd-core/workflows/stats.md": "e4f84542fb5721ef", "gsd-core/workflows/sync-skills.md": "b505e6f8331c0918", "gsd-core/workflows/thread.md": "0582c6be8a78bbd8", "gsd-core/workflows/transition.md": "45dc17cc631dc485", - "gsd-core/workflows/ui-phase.md": "0c4c1a26a4297ac3", - "gsd-core/workflows/ui-review.md": "4e70afbfd5601853", + "gsd-core/workflows/ui-phase.md": "7af7af6e7019fd10", + "gsd-core/workflows/ui-review.md": "c68b0f33d377ad45", "gsd-core/workflows/ultraplan-phase.md": "77b58ef8af5209bd", - "gsd-core/workflows/undo.md": "59b8baa54efc4110", - "gsd-core/workflows/update.md": "1f935251fca1f276", - "gsd-core/workflows/validate-phase.md": "58fd1a0a679d7115", + "gsd-core/workflows/undo.md": "0222476f90d97de3", + "gsd-core/workflows/update.md": "a633cf9f44595c58", + "gsd-core/workflows/validate-phase.md": "d20bdb66ebe213fd", "gsd-core/workflows/verify-phase.md": "101bf5a6e15f0b04", - "gsd-core/workflows/verify-work.md": "0b9e6ea0ad0f8c9c", + "gsd-core/workflows/verify-work.md": "0d527b54ed7f82e6", "scripts/changeset/README.md": "86ff89331dfd94b2", "scripts/changeset/cli.cjs": "68f92a344b199271", "scripts/changeset/github-release-notes.cjs": "795677f0c009b132", diff --git a/tests/fixtures/golden-install-parity/windsurf.json b/tests/fixtures/golden-install-parity/windsurf.json index 16e45ac47..c5754f353 100644 --- a/tests/fixtures/golden-install-parity/windsurf.json +++ b/tests/fixtures/golden-install-parity/windsurf.json @@ -89,6 +89,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md": "1587345770b19c7f", "gsd-core/references/execute-phase-context-guard.md": "a5a1058d35806a8e", "gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2", + "gsd-core/references/execute-phase-response-language.md": "c240dc476dd15df5", "gsd-core/references/execute-phase-wave-guard.md": "96485eccd4606e54", "gsd-core/references/executor-examples.md": "ba59243ed45c8ab1", "gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4", @@ -208,23 +209,23 @@ "gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335", "gsd-core/workflows/add-backlog.md": "61169973a10b1321", "gsd-core/workflows/add-phase.md": "78cca7f86793f7f8", - "gsd-core/workflows/add-tests.md": "d51e69bb433535a4", - "gsd-core/workflows/add-todo.md": "50d17053c6cfbc31", - "gsd-core/workflows/ai-integration-phase.md": "e556fe979752c52b", + "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/analyze-dependencies.md": "77aff48f97fa6f1c", "gsd-core/workflows/audit-fix.md": "f12182fa57f92cb5", "gsd-core/workflows/audit-milestone.md": "868db5a8f5d55040", "gsd-core/workflows/audit-uat.md": "d496e39402e160de", "gsd-core/workflows/autonomous.md": "fe7bb7c978f305a2", - "gsd-core/workflows/check-todos.md": "afc840fceb07bf99", - "gsd-core/workflows/cleanup.md": "93c14107979a4428", + "gsd-core/workflows/check-todos.md": "32364179c84869a3", + "gsd-core/workflows/cleanup.md": "da44b987853e1a74", "gsd-core/workflows/code-review-fix.md": "b99b1f20bb27c291", "gsd-core/workflows/code-review.md": "a89512ce6c30693c", - "gsd-core/workflows/complete-milestone.md": "f463bf4e86ac26f6", - "gsd-core/workflows/debug.md": "381eb8a8e610d82a", + "gsd-core/workflows/complete-milestone.md": "3324ec6da5856f21", + "gsd-core/workflows/debug.md": "8faee21b508c4577", "gsd-core/workflows/diagnose-issues.md": "dbe0fdc2fc23097c", - "gsd-core/workflows/discovery-phase.md": "7dcf150998559c11", - "gsd-core/workflows/discuss-phase-assumptions.md": "b091b3d3e580dd29", + "gsd-core/workflows/discovery-phase.md": "313c3a5213449309", + "gsd-core/workflows/discuss-phase-assumptions.md": "f28f53d11104c818", "gsd-core/workflows/discuss-phase-power.md": "290c0d83d783f9f6", "gsd-core/workflows/discuss-phase.md": "ce4e6abce9cb2d4e", "gsd-core/workflows/discuss-phase/modes/advisor.md": "cb49f485c4a1f09e", @@ -239,88 +240,88 @@ "gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb", "gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f", "gsd-core/workflows/discuss-phase/templates/discussion-log.md": "cd5d01c9ef84ab73", - "gsd-core/workflows/do.md": "e2b848547e43c7a5", - "gsd-core/workflows/docs-update.md": "70f73cc8c27e0ca0", + "gsd-core/workflows/do.md": "c2ee0bb845bc1cf1", + "gsd-core/workflows/docs-update.md": "a7b78ce2f5404160", "gsd-core/workflows/edit-phase.md": "c0ae7d0063f3e789", - "gsd-core/workflows/eval-review.md": "b28be79ef29f16fd", - "gsd-core/workflows/execute-phase.md": "3989e6302807b826", + "gsd-core/workflows/eval-review.md": "713de00ea5326988", + "gsd-core/workflows/execute-phase.md": "a0b5283f992532a2", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "47ae5482f8e64100", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "fb4497767cdf73a3", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "c54d55fad3ab5263", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "864931070aedf894", + "gsd-core/workflows/execute-plan.md": "885ed41edf53e94b", "gsd-core/workflows/explore.md": "04e461ff8159a24e", "gsd-core/workflows/extract-learnings.md": "af793bdf4ffd1c8a", "gsd-core/workflows/fast.md": "b03b9f595892479a", "gsd-core/workflows/forensics.md": "3d1ce16b5f605592", - "gsd-core/workflows/graduation.md": "a766039ff6ca653f", - "gsd-core/workflows/health.md": "7b19d6e2c0357c3e", + "gsd-core/workflows/graduation.md": "0783b074a1c7013b", + "gsd-core/workflows/health.md": "b629995ffabf5386", "gsd-core/workflows/help.md": "08e1349950c5602a", "gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3", "gsd-core/workflows/help/modes/default.md": "6a253f1756f74e95", "gsd-core/workflows/help/modes/full.md": "670392a80cbcbd7d", "gsd-core/workflows/help/modes/topic.md": "cee80e0adfa3b06c", - "gsd-core/workflows/import.md": "757e310c6a5cefad", - "gsd-core/workflows/inbox.md": "797c287852eb8957", - "gsd-core/workflows/ingest-docs.md": "657708e6aa00d107", + "gsd-core/workflows/import.md": "3df83dccd78ae0a6", + "gsd-core/workflows/inbox.md": "556b5a10c580ebad", + "gsd-core/workflows/ingest-docs.md": "d73700225c86fdf0", "gsd-core/workflows/insert-phase.md": "9aac75665c3a0ee8", "gsd-core/workflows/list-phase-assumptions.md": "eb986c301d59f620", "gsd-core/workflows/list-seeds.md": "39162bbefe932b3d", "gsd-core/workflows/list-workspaces.md": "6950fb740a1e96ab", - "gsd-core/workflows/manager.md": "fc1e8daaf8d40bf0", + "gsd-core/workflows/manager.md": "10e895f5b83168fc", "gsd-core/workflows/map-codebase.md": "ba6f267cb754ed31", "gsd-core/workflows/milestone-summary.md": "1fdbae19ad06a0a3", - "gsd-core/workflows/mvp-phase.md": "e3c4cade4fe69408", - "gsd-core/workflows/new-milestone.md": "a07bf1c998a99a33", - "gsd-core/workflows/new-project.md": "f4ff85b9a6fc52aa", - "gsd-core/workflows/new-workspace.md": "8c2b60fbbf241e03", + "gsd-core/workflows/mvp-phase.md": "0b22d99b2f3aee0b", + "gsd-core/workflows/new-milestone.md": "5c18f0a011875574", + "gsd-core/workflows/new-project.md": "e8aa253804ec15dc", + "gsd-core/workflows/new-workspace.md": "b503e947ab08ab96", "gsd-core/workflows/next.md": "d48cea140a5153cb", "gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b", "gsd-core/workflows/note.md": "1c1e466c764e3deb", - "gsd-core/workflows/onboard.md": "20c28136423d40ac", + "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": "4a8e4d1886efd959", + "gsd-core/workflows/plan-phase.md": "870aff8ccfe7b1a4", "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/plant-seed.md": "6cf61f540cdbd8b9", + "gsd-core/workflows/plant-seed.md": "caa8fef75821b24c", "gsd-core/workflows/pr-branch.md": "acd59f915d018ad4", - "gsd-core/workflows/profile-user.md": "c4313672b81b5bcd", + "gsd-core/workflows/profile-user.md": "33b150468a6789db", "gsd-core/workflows/progress.md": "3e4ac518362ba665", - "gsd-core/workflows/quick.md": "baff92603ade7489", + "gsd-core/workflows/quick.md": "8c485cc76a42d8fc", "gsd-core/workflows/reapply-patches.md": "d449a23d3acf6379", "gsd-core/workflows/remove-phase.md": "e7a6af429b36e77b", - "gsd-core/workflows/remove-workspace.md": "b5e60fbb33b3e33a", + "gsd-core/workflows/remove-workspace.md": "30ca05fe4a3efc25", "gsd-core/workflows/resume-project.md": "82cfe1b8cb17c085", "gsd-core/workflows/review.md": "805bea46bed56bd8", "gsd-core/workflows/scan.md": "389025e963d0e502", - "gsd-core/workflows/secure-phase.md": "185a15d389951e6e", + "gsd-core/workflows/secure-phase.md": "666828983e5dd51f", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "2f86ec7b998f9485", - "gsd-core/workflows/settings-integrations.md": "b082fc518b484c07", - "gsd-core/workflows/settings.md": "002eb0ce3c10c741", - "gsd-core/workflows/ship.md": "63ea5e85cbd33058", + "gsd-core/workflows/settings-integrations.md": "159d0ae32b511129", + "gsd-core/workflows/settings.md": "26fff45b86d827aa", + "gsd-core/workflows/ship.md": "7682321e294a2574", "gsd-core/workflows/sketch-wrap-up.md": "10063f56c2c7f141", - "gsd-core/workflows/sketch.md": "25c1f8f7acfb1da9", - "gsd-core/workflows/smart-entry.md": "bd81482cb6a7ac53", + "gsd-core/workflows/sketch.md": "c15716376df41c97", + "gsd-core/workflows/smart-entry.md": "3fed94530109124b", "gsd-core/workflows/spec-phase.md": "744faedd273da0f7", "gsd-core/workflows/spike-wrap-up.md": "8029ca4effb5b716", - "gsd-core/workflows/spike.md": "a94af5171bb9d2ce", + "gsd-core/workflows/spike.md": "d3190af9c3f57260", "gsd-core/workflows/stats.md": "d58325fc3fb8d1b6", "gsd-core/workflows/sync-skills.md": "b505e6f8331c0918", "gsd-core/workflows/thread.md": "d83a0d0bd0f94c4c", "gsd-core/workflows/transition.md": "5e2c96544e9981ed", - "gsd-core/workflows/ui-phase.md": "829285b180dd7b9e", - "gsd-core/workflows/ui-review.md": "dca8100a43161ea7", + "gsd-core/workflows/ui-phase.md": "e6494e1f4a886fa9", + "gsd-core/workflows/ui-review.md": "5414d822f6c00826", "gsd-core/workflows/ultraplan-phase.md": "53b77a8edf60acd0", - "gsd-core/workflows/undo.md": "18dec684fb1076f9", - "gsd-core/workflows/update.md": "79aaf4b8f1f83045", - "gsd-core/workflows/validate-phase.md": "bf16fd7ff71286b2", + "gsd-core/workflows/undo.md": "733189fb34cc026b", + "gsd-core/workflows/update.md": "0c02d18be2ccd04d", + "gsd-core/workflows/validate-phase.md": "c2613db454f975b6", "gsd-core/workflows/verify-phase.md": "382490481d794ed5", - "gsd-core/workflows/verify-work.md": "5044f0a73bc6a136", + "gsd-core/workflows/verify-work.md": "6258bc3ec21906c4", "hooks/gsd-windsurf-pre-command.js": "7467a8a63e354aad", "hooks/gsd-windsurf-pre-write.js": "1c8a776d7ae2dcce", "scripts/changeset/README.md": "86ff89331dfd94b2", diff --git a/tests/fixtures/golden-install-parity/zcode.json b/tests/fixtures/golden-install-parity/zcode.json index 292e518ab..f14ef2a8c 100644 --- a/tests/fixtures/golden-install-parity/zcode.json +++ b/tests/fixtures/golden-install-parity/zcode.json @@ -160,6 +160,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e", "gsd-core/references/execute-phase-context-guard.md": "982006c1f3364242", "gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2", + "gsd-core/references/execute-phase-response-language.md": "c240dc476dd15df5", "gsd-core/references/execute-phase-wave-guard.md": "de9ac22cead4cfd8", "gsd-core/references/executor-examples.md": "ba59243ed45c8ab1", "gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4", @@ -279,23 +280,23 @@ "gsd-core/workflows/_runtime-launcher.snippet.sh": "bf2dd5d1debd5335", "gsd-core/workflows/add-backlog.md": "1bc7377b105194fc", "gsd-core/workflows/add-phase.md": "ac43883e2d8e34d8", - "gsd-core/workflows/add-tests.md": "24b0d8157a9ccb8b", - "gsd-core/workflows/add-todo.md": "953314cdfef56bc4", - "gsd-core/workflows/ai-integration-phase.md": "45c727e49de71636", + "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/analyze-dependencies.md": "52942af10f140717", "gsd-core/workflows/audit-fix.md": "d511f4094ce351aa", "gsd-core/workflows/audit-milestone.md": "3835762c3147a927", "gsd-core/workflows/audit-uat.md": "fcfbec501620b564", "gsd-core/workflows/autonomous.md": "7e5683728ef33707", - "gsd-core/workflows/check-todos.md": "bdeaf43f9c61e0cc", - "gsd-core/workflows/cleanup.md": "0daa2f2720c111f1", + "gsd-core/workflows/check-todos.md": "f39e3251a78f6f5a", + "gsd-core/workflows/cleanup.md": "df79d1dc7b84d736", "gsd-core/workflows/code-review-fix.md": "2e113d1f4350a075", "gsd-core/workflows/code-review.md": "c877ad812b4a511e", - "gsd-core/workflows/complete-milestone.md": "c1f91b77f4ace7f2", - "gsd-core/workflows/debug.md": "79c2f7dc12815e30", + "gsd-core/workflows/complete-milestone.md": "8f98d7b05793cf4a", + "gsd-core/workflows/debug.md": "a2d04237fbbce72b", "gsd-core/workflows/diagnose-issues.md": "804ad766100d93ea", - "gsd-core/workflows/discovery-phase.md": "3ba7cfb89fb1e761", - "gsd-core/workflows/discuss-phase-assumptions.md": "f5b765d33eba4f88", + "gsd-core/workflows/discovery-phase.md": "0aa8d8d872b53858", + "gsd-core/workflows/discuss-phase-assumptions.md": "185419d61517727b", "gsd-core/workflows/discuss-phase-power.md": "0841f7dc6e9a054a", "gsd-core/workflows/discuss-phase.md": "d0a67b6f77b4d339", "gsd-core/workflows/discuss-phase/modes/advisor.md": "db488d74d080c653", @@ -310,88 +311,88 @@ "gsd-core/workflows/discuss-phase/templates/checkpoint.json": "e3bc3dca49db59eb", "gsd-core/workflows/discuss-phase/templates/context.md": "6cd929e989fe2b0f", "gsd-core/workflows/discuss-phase/templates/discussion-log.md": "1bbd7703f11128e1", - "gsd-core/workflows/do.md": "7512dd1892f118a1", - "gsd-core/workflows/docs-update.md": "f35922d15b7061c9", + "gsd-core/workflows/do.md": "90df4f1fe248cdf3", + "gsd-core/workflows/docs-update.md": "b5cdf1c35043cf7b", "gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04", - "gsd-core/workflows/eval-review.md": "f898936e2cfe4130", - "gsd-core/workflows/execute-phase.md": "e0f1d13f102364a8", + "gsd-core/workflows/eval-review.md": "32d3d7e80ab2bfc7", + "gsd-core/workflows/execute-phase.md": "3054948793be8131", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "4e265392b3f2ba0e", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "7b2d9a4a4013fd6a", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "7a49bc47da5411ea", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "ee300f9c6f7626c8", + "gsd-core/workflows/execute-plan.md": "8b66e46ab4512511", "gsd-core/workflows/explore.md": "6c04f2e658d93261", "gsd-core/workflows/extract-learnings.md": "b6f01ca3d8f58de4", "gsd-core/workflows/fast.md": "11f5cd10ae5cc7d3", "gsd-core/workflows/forensics.md": "0d500a3f5ab26913", - "gsd-core/workflows/graduation.md": "47f1594c88c08501", - "gsd-core/workflows/health.md": "107e3c72e76d9535", + "gsd-core/workflows/graduation.md": "973dcebcd17e1b10", + "gsd-core/workflows/health.md": "c25b5e5f62874c31", "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0", "gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50", "gsd-core/workflows/help/modes/full.md": "dda8f6d101b0870d", "gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d", - "gsd-core/workflows/import.md": "12c6cbcbdecb6392", - "gsd-core/workflows/inbox.md": "437f981ef9ae7b26", - "gsd-core/workflows/ingest-docs.md": "f7c3fa659ca77bc5", + "gsd-core/workflows/import.md": "31a0f3a33154939f", + "gsd-core/workflows/inbox.md": "a7d439981775bc29", + "gsd-core/workflows/ingest-docs.md": "e5c63b5e539f6e17", "gsd-core/workflows/insert-phase.md": "08dca838d831bb5b", "gsd-core/workflows/list-phase-assumptions.md": "53dd4b69536c1bc3", "gsd-core/workflows/list-seeds.md": "b687f2a843032d65", "gsd-core/workflows/list-workspaces.md": "7f94e18b5c549453", - "gsd-core/workflows/manager.md": "3ba7a3e8213c4b23", + "gsd-core/workflows/manager.md": "c18fab593344253d", "gsd-core/workflows/map-codebase.md": "8fb02d635a86d6b2", "gsd-core/workflows/milestone-summary.md": "e0cdfddbd39a9043", - "gsd-core/workflows/mvp-phase.md": "344dd300e0cc1e74", - "gsd-core/workflows/new-milestone.md": "6227eaddad367bc5", - "gsd-core/workflows/new-project.md": "2e00175f2297f8fb", - "gsd-core/workflows/new-workspace.md": "017688423110ed66", + "gsd-core/workflows/mvp-phase.md": "58a952b4715db283", + "gsd-core/workflows/new-milestone.md": "f6029bcb535bee69", + "gsd-core/workflows/new-project.md": "2a0fab3a433a0bd9", + "gsd-core/workflows/new-workspace.md": "bbeb706c7a697617", "gsd-core/workflows/next.md": "13fb800f2472d970", "gsd-core/workflows/node-repair.md": "07a1628e5a1ff96b", "gsd-core/workflows/note.md": "5a99eb396c744619", - "gsd-core/workflows/onboard.md": "6f9e6c0b484271a9", + "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": "8fdc4b795e10670b", + "gsd-core/workflows/plan-phase.md": "f05af110cc6b0eb5", "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/plant-seed.md": "10b92ae08a6fdede", + "gsd-core/workflows/plant-seed.md": "9596db80ab282c6f", "gsd-core/workflows/pr-branch.md": "c87db7ac8c28be1b", - "gsd-core/workflows/profile-user.md": "e23bea0a69c0bb4b", + "gsd-core/workflows/profile-user.md": "74005f062c870393", "gsd-core/workflows/progress.md": "46c83ad61b3c4a84", - "gsd-core/workflows/quick.md": "5331f238c75a821f", + "gsd-core/workflows/quick.md": "4176fac7f9291aac", "gsd-core/workflows/reapply-patches.md": "39050f72601aec89", "gsd-core/workflows/remove-phase.md": "df9a45f0b1880999", - "gsd-core/workflows/remove-workspace.md": "a7ca66db6b7c132c", + "gsd-core/workflows/remove-workspace.md": "f67860c795fb4bfe", "gsd-core/workflows/resume-project.md": "f28da1200e4545f4", "gsd-core/workflows/review.md": "f1fbefbd64bd890e", "gsd-core/workflows/scan.md": "e6424af05656725a", - "gsd-core/workflows/secure-phase.md": "22ab3bb5da494ea7", + "gsd-core/workflows/secure-phase.md": "f8b9436c35372281", "gsd-core/workflows/session-report.md": "2e5b1205324ddefa", "gsd-core/workflows/settings-advanced.md": "414db4dbea97ba44", - "gsd-core/workflows/settings-integrations.md": "70515c5838fb9826", - "gsd-core/workflows/settings.md": "d96ddf01fb85e61e", - "gsd-core/workflows/ship.md": "4642ebbaa38f8cc2", + "gsd-core/workflows/settings-integrations.md": "effcef778d4a855f", + "gsd-core/workflows/settings.md": "85ceb482dc713169", + "gsd-core/workflows/ship.md": "09056fccdf20e41b", "gsd-core/workflows/sketch-wrap-up.md": "86db87b16548117e", - "gsd-core/workflows/sketch.md": "e96f1866d3e60cab", - "gsd-core/workflows/smart-entry.md": "449238eb94abe187", + "gsd-core/workflows/sketch.md": "fcd52f8d9076e183", + "gsd-core/workflows/smart-entry.md": "004b4060eab97cb9", "gsd-core/workflows/spec-phase.md": "fa8669b75392cf6c", "gsd-core/workflows/spike-wrap-up.md": "d643447e16e95753", - "gsd-core/workflows/spike.md": "265e5c5a13ea0deb", + "gsd-core/workflows/spike.md": "242c6ba2176bac83", "gsd-core/workflows/stats.md": "76a42cbeaf6007c2", "gsd-core/workflows/sync-skills.md": "b505e6f8331c0918", "gsd-core/workflows/thread.md": "927e7eeefd2fcf5c", "gsd-core/workflows/transition.md": "aea486bb7a0e80e7", - "gsd-core/workflows/ui-phase.md": "98d044ed4d7163d7", - "gsd-core/workflows/ui-review.md": "7acfc485526d064b", + "gsd-core/workflows/ui-phase.md": "592e332fc8c4b30a", + "gsd-core/workflows/ui-review.md": "202c4e399cd95719", "gsd-core/workflows/ultraplan-phase.md": "0fb8291153e3937d", - "gsd-core/workflows/undo.md": "96d2775f008b3a85", - "gsd-core/workflows/update.md": "dc580dee13f881a6", - "gsd-core/workflows/validate-phase.md": "ce9890f21c6e5607", + "gsd-core/workflows/undo.md": "1712417bade30b30", + "gsd-core/workflows/update.md": "3573b340820d7d4d", + "gsd-core/workflows/validate-phase.md": "2e19caff07397728", "gsd-core/workflows/verify-phase.md": "d26a2c3269340caf", - "gsd-core/workflows/verify-work.md": "86c6f0c77b5adc72", + "gsd-core/workflows/verify-work.md": "5b92e34f1d0da848", "scripts/changeset/README.md": "86ff89331dfd94b2", "scripts/changeset/cli.cjs": "68f92a344b199271", "scripts/changeset/github-release-notes.cjs": "795677f0c009b132", diff --git a/tests/fixtures/install-tree/antigravity.json b/tests/fixtures/install-tree/antigravity.json index 18cf446a0..8d348ba88 100644 --- a/tests/fixtures/install-tree/antigravity.json +++ b/tests/fixtures/install-tree/antigravity.json @@ -89,6 +89,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md", "gsd-core/references/execute-phase-context-guard.md", "gsd-core/references/execute-phase-requirement-revert.md", + "gsd-core/references/execute-phase-response-language.md", "gsd-core/references/execute-phase-wave-guard.md", "gsd-core/references/executor-examples.md", "gsd-core/references/few-shot-examples/plan-checker.md", diff --git a/tests/fixtures/install-tree/augment.json b/tests/fixtures/install-tree/augment.json index de408512c..70c7816a7 100644 --- a/tests/fixtures/install-tree/augment.json +++ b/tests/fixtures/install-tree/augment.json @@ -160,6 +160,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md", "gsd-core/references/execute-phase-context-guard.md", "gsd-core/references/execute-phase-requirement-revert.md", + "gsd-core/references/execute-phase-response-language.md", "gsd-core/references/execute-phase-wave-guard.md", "gsd-core/references/executor-examples.md", "gsd-core/references/few-shot-examples/plan-checker.md", diff --git a/tests/fixtures/install-tree/claude-local.json b/tests/fixtures/install-tree/claude-local.json index abd55e82d..8e8863071 100644 --- a/tests/fixtures/install-tree/claude-local.json +++ b/tests/fixtures/install-tree/claude-local.json @@ -159,6 +159,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md", "gsd-core/references/execute-phase-context-guard.md", "gsd-core/references/execute-phase-requirement-revert.md", + "gsd-core/references/execute-phase-response-language.md", "gsd-core/references/execute-phase-wave-guard.md", "gsd-core/references/executor-examples.md", "gsd-core/references/few-shot-examples/plan-checker.md", diff --git a/tests/fixtures/install-tree/claude.json b/tests/fixtures/install-tree/claude.json index 39b9c7780..0908d0b40 100644 --- a/tests/fixtures/install-tree/claude.json +++ b/tests/fixtures/install-tree/claude.json @@ -88,6 +88,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md", "gsd-core/references/execute-phase-context-guard.md", "gsd-core/references/execute-phase-requirement-revert.md", + "gsd-core/references/execute-phase-response-language.md", "gsd-core/references/execute-phase-wave-guard.md", "gsd-core/references/executor-examples.md", "gsd-core/references/few-shot-examples/plan-checker.md", diff --git a/tests/fixtures/install-tree/cline.json b/tests/fixtures/install-tree/cline.json index 36a075671..9deced98e 100644 --- a/tests/fixtures/install-tree/cline.json +++ b/tests/fixtures/install-tree/cline.json @@ -92,6 +92,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md", "gsd-core/references/execute-phase-context-guard.md", "gsd-core/references/execute-phase-requirement-revert.md", + "gsd-core/references/execute-phase-response-language.md", "gsd-core/references/execute-phase-wave-guard.md", "gsd-core/references/executor-examples.md", "gsd-core/references/few-shot-examples/plan-checker.md", diff --git a/tests/fixtures/install-tree/codebuddy.json b/tests/fixtures/install-tree/codebuddy.json index d4f673042..e4edd73fb 100644 --- a/tests/fixtures/install-tree/codebuddy.json +++ b/tests/fixtures/install-tree/codebuddy.json @@ -160,6 +160,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md", "gsd-core/references/execute-phase-context-guard.md", "gsd-core/references/execute-phase-requirement-revert.md", + "gsd-core/references/execute-phase-response-language.md", "gsd-core/references/execute-phase-wave-guard.md", "gsd-core/references/executor-examples.md", "gsd-core/references/few-shot-examples/plan-checker.md", diff --git a/tests/fixtures/install-tree/codex.json b/tests/fixtures/install-tree/codex.json index cc170128b..7d83520ca 100644 --- a/tests/fixtures/install-tree/codex.json +++ b/tests/fixtures/install-tree/codex.json @@ -195,6 +195,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md", "gsd-core/references/execute-phase-context-guard.md", "gsd-core/references/execute-phase-requirement-revert.md", + "gsd-core/references/execute-phase-response-language.md", "gsd-core/references/execute-phase-wave-guard.md", "gsd-core/references/executor-examples.md", "gsd-core/references/few-shot-examples/plan-checker.md", diff --git a/tests/fixtures/install-tree/copilot.json b/tests/fixtures/install-tree/copilot.json index 6b5df9763..ffaeacd68 100644 --- a/tests/fixtures/install-tree/copilot.json +++ b/tests/fixtures/install-tree/copilot.json @@ -90,6 +90,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md", "gsd-core/references/execute-phase-context-guard.md", "gsd-core/references/execute-phase-requirement-revert.md", + "gsd-core/references/execute-phase-response-language.md", "gsd-core/references/execute-phase-wave-guard.md", "gsd-core/references/executor-examples.md", "gsd-core/references/few-shot-examples/plan-checker.md", diff --git a/tests/fixtures/install-tree/cursor.json b/tests/fixtures/install-tree/cursor.json index a30363bca..6c043ee73 100644 --- a/tests/fixtures/install-tree/cursor.json +++ b/tests/fixtures/install-tree/cursor.json @@ -160,6 +160,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md", "gsd-core/references/execute-phase-context-guard.md", "gsd-core/references/execute-phase-requirement-revert.md", + "gsd-core/references/execute-phase-response-language.md", "gsd-core/references/execute-phase-wave-guard.md", "gsd-core/references/executor-examples.md", "gsd-core/references/few-shot-examples/plan-checker.md", diff --git a/tests/fixtures/install-tree/hermes.json b/tests/fixtures/install-tree/hermes.json index 925431378..3efad48ef 100644 --- a/tests/fixtures/install-tree/hermes.json +++ b/tests/fixtures/install-tree/hermes.json @@ -89,6 +89,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md", "gsd-core/references/execute-phase-context-guard.md", "gsd-core/references/execute-phase-requirement-revert.md", + "gsd-core/references/execute-phase-response-language.md", "gsd-core/references/execute-phase-wave-guard.md", "gsd-core/references/executor-examples.md", "gsd-core/references/few-shot-examples/plan-checker.md", diff --git a/tests/fixtures/install-tree/kilo.json b/tests/fixtures/install-tree/kilo.json index 4521e6168..c3f5b25bc 100644 --- a/tests/fixtures/install-tree/kilo.json +++ b/tests/fixtures/install-tree/kilo.json @@ -160,6 +160,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md", "gsd-core/references/execute-phase-context-guard.md", "gsd-core/references/execute-phase-requirement-revert.md", + "gsd-core/references/execute-phase-response-language.md", "gsd-core/references/execute-phase-wave-guard.md", "gsd-core/references/executor-examples.md", "gsd-core/references/few-shot-examples/plan-checker.md", diff --git a/tests/fixtures/install-tree/kimi.json b/tests/fixtures/install-tree/kimi.json index 9f2615ec9..b3b75587c 100644 --- a/tests/fixtures/install-tree/kimi.json +++ b/tests/fixtures/install-tree/kimi.json @@ -153,6 +153,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md", "gsd-core/references/execute-phase-context-guard.md", "gsd-core/references/execute-phase-requirement-revert.md", + "gsd-core/references/execute-phase-response-language.md", "gsd-core/references/execute-phase-wave-guard.md", "gsd-core/references/executor-examples.md", "gsd-core/references/few-shot-examples/plan-checker.md", diff --git a/tests/fixtures/install-tree/opencode.json b/tests/fixtures/install-tree/opencode.json index 330121e16..d2579a897 100644 --- a/tests/fixtures/install-tree/opencode.json +++ b/tests/fixtures/install-tree/opencode.json @@ -160,6 +160,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md", "gsd-core/references/execute-phase-context-guard.md", "gsd-core/references/execute-phase-requirement-revert.md", + "gsd-core/references/execute-phase-response-language.md", "gsd-core/references/execute-phase-wave-guard.md", "gsd-core/references/executor-examples.md", "gsd-core/references/few-shot-examples/plan-checker.md", diff --git a/tests/fixtures/install-tree/pi.json b/tests/fixtures/install-tree/pi.json index 4baae4984..88a08ac6f 100644 --- a/tests/fixtures/install-tree/pi.json +++ b/tests/fixtures/install-tree/pi.json @@ -56,6 +56,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md", "gsd-core/references/execute-phase-context-guard.md", "gsd-core/references/execute-phase-requirement-revert.md", + "gsd-core/references/execute-phase-response-language.md", "gsd-core/references/execute-phase-wave-guard.md", "gsd-core/references/executor-examples.md", "gsd-core/references/few-shot-examples/plan-checker.md", diff --git a/tests/fixtures/install-tree/qwen.json b/tests/fixtures/install-tree/qwen.json index 041cd1410..3f3f4c39d 100644 --- a/tests/fixtures/install-tree/qwen.json +++ b/tests/fixtures/install-tree/qwen.json @@ -89,6 +89,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md", "gsd-core/references/execute-phase-context-guard.md", "gsd-core/references/execute-phase-requirement-revert.md", + "gsd-core/references/execute-phase-response-language.md", "gsd-core/references/execute-phase-wave-guard.md", "gsd-core/references/executor-examples.md", "gsd-core/references/few-shot-examples/plan-checker.md", diff --git a/tests/fixtures/install-tree/trae.json b/tests/fixtures/install-tree/trae.json index b48ca07e4..bff4e3421 100644 --- a/tests/fixtures/install-tree/trae.json +++ b/tests/fixtures/install-tree/trae.json @@ -89,6 +89,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md", "gsd-core/references/execute-phase-context-guard.md", "gsd-core/references/execute-phase-requirement-revert.md", + "gsd-core/references/execute-phase-response-language.md", "gsd-core/references/execute-phase-wave-guard.md", "gsd-core/references/executor-examples.md", "gsd-core/references/few-shot-examples/plan-checker.md", diff --git a/tests/fixtures/install-tree/windsurf.json b/tests/fixtures/install-tree/windsurf.json index 0054b2e3c..58c449def 100644 --- a/tests/fixtures/install-tree/windsurf.json +++ b/tests/fixtures/install-tree/windsurf.json @@ -89,6 +89,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md", "gsd-core/references/execute-phase-context-guard.md", "gsd-core/references/execute-phase-requirement-revert.md", + "gsd-core/references/execute-phase-response-language.md", "gsd-core/references/execute-phase-wave-guard.md", "gsd-core/references/executor-examples.md", "gsd-core/references/few-shot-examples/plan-checker.md", diff --git a/tests/fixtures/install-tree/zcode.json b/tests/fixtures/install-tree/zcode.json index fa6044c57..60946a81b 100644 --- a/tests/fixtures/install-tree/zcode.json +++ b/tests/fixtures/install-tree/zcode.json @@ -160,6 +160,7 @@ "gsd-core/references/execute-phase-between-wave-reset.md", "gsd-core/references/execute-phase-context-guard.md", "gsd-core/references/execute-phase-requirement-revert.md", + "gsd-core/references/execute-phase-response-language.md", "gsd-core/references/execute-phase-wave-guard.md", "gsd-core/references/executor-examples.md", "gsd-core/references/few-shot-examples/plan-checker.md", diff --git a/tests/uat.test.cjs b/tests/uat.test.cjs index 79c3b4f30..65a55b8b4 100644 --- a/tests/uat.test.cjs +++ b/tests/uat.test.cjs @@ -9,6 +9,7 @@ const assert = require('node:assert/strict'); const fs = require('fs'); const path = require('path'); const { runGsdTools, createTempProject, cleanup } = require('./helpers.cjs'); +const { buildCheckpoint } = require('../gsd-core/bin/lib/uat.cjs'); describe('audit-uat command', () => { let tmpDir; @@ -833,6 +834,99 @@ describe('uat render-checkpoint', () => { cleanup(tmpDir); }); + test('buildCheckpoint: unset/unrecognized language falls back to English default (#2402)', () => { + const currentTest = { number: 1, name: 'Sample', expected: 'Something happens.' }; + const defaultOutput = buildCheckpoint(currentTest); + const explicitEnglish = buildCheckpoint(currentTest, 'English'); + const unrecognized = buildCheckpoint(currentTest, 'Klingon'); + + assert.strictEqual(defaultOutput, explicitEnglish, 'unset language should equal the English frame'); + assert.strictEqual(defaultOutput, unrecognized, 'unrecognized language should fall back to the English frame'); + assert.ok(defaultOutput.includes('CHECKPOINT: Verification Required')); + }); + + test('buildCheckpoint: recognized language swaps only the two frame strings (#2402)', () => { + const currentTest = { number: 1, name: 'Sample', expected: 'Something happens.' }; + const english = buildCheckpoint(currentTest); + const japanese = buildCheckpoint(currentTest, 'Japanese'); + + assert.ok(japanese.includes('チェックポイント')); + assert.ok(japanese.includes('`pass`')); + // Structural lines (borders, separators, Test N heading, expected content) are untouched. + assert.ok(japanese.includes('╔══════════════════════════════════════════════════════════════╗')); + assert.ok(japanese.includes('╚══════════════════════════════════════════════════════════════╝')); + assert.ok(japanese.includes('──────────────────────────────────────────────────────────────')); + assert.ok(japanese.includes('**Test 1: Sample**')); + assert.ok(japanese.includes('Something happens.')); + assert.notStrictEqual(japanese, english); + }); + + // Regression: #2402 review medium finding — checkpointBoxLine() padded using + // JS string `.length` (UTF-16 code units), not display width. Japanese/ + // Chinese/Korean use full-width characters that render at 2 terminal + // columns each, so the padded line was JS-length-correct (64) but visually + // 8-15 columns too wide, misaligning the right `║` border relative to the + // box's single-width border lines. Independently recomputes display width + // (East Asian Width W/F ranges) rather than reading source, so this test + // fails if the fix regresses even if the banner copy itself later changes. + describe('CJK checkpoint banner padding uses display width, not UTF-16 length (#2402)', () => { + function isWideCodePoint(codePoint) { + return ( + (codePoint >= 0x1100 && codePoint <= 0x115f) || + codePoint === 0x2329 || codePoint === 0x232a || + (codePoint >= 0x2e80 && codePoint <= 0x303e) || + (codePoint >= 0x3041 && codePoint <= 0x33ff) || + (codePoint >= 0x3400 && codePoint <= 0x4dbf) || + (codePoint >= 0x4e00 && codePoint <= 0x9fff) || + (codePoint >= 0xa000 && codePoint <= 0xa4cf) || + (codePoint >= 0xac00 && codePoint <= 0xd7a3) || + (codePoint >= 0xf900 && codePoint <= 0xfaff) || + (codePoint >= 0xfe30 && codePoint <= 0xfe4f) || + (codePoint >= 0xff00 && codePoint <= 0xff60) || + (codePoint >= 0xffe0 && codePoint <= 0xffe6) || + (codePoint >= 0x20000 && codePoint <= 0x3fffd) + ); + } + function displayWidth(text) { + let width = 0; + for (const ch of text) width += isWideCodePoint(ch.codePointAt(0)) ? 2 : 1; + return width; + } + + for (const lang of ['Japanese', 'Chinese', 'Korean']) { + test(`${lang} checkpoint banner line renders at display-width 64, aligning the right border`, () => { + const currentTest = { number: 1, name: 'Sample', expected: 'Something happens.' }; + const output = buildCheckpoint(currentTest, lang); + const lines = output.split('\n'); + const topBorder = lines[0]; + const bannerLine = lines[1]; + const bottomBorder = lines[2]; + + assert.strictEqual(displayWidth(topBorder), 64, 'top border is the 64-column reference width'); + assert.strictEqual(displayWidth(bottomBorder), 64, 'bottom border is the 64-column reference width'); + assert.strictEqual(displayWidth(bannerLine), 64, + `${lang} banner line must render at the same 64-column display width as the borders — ` + + 'padding by UTF-16 .length under-pads full-width characters and overflows the box'); + }); + } + + test('exact rendered banner lines for Japanese/Chinese/Korean (regression pin)', () => { + const currentTest = { number: 1, name: 'Sample', expected: 'Something happens.' }; + assert.strictEqual( + buildCheckpoint(currentTest, 'Japanese').split('\n')[1], + '║ チェックポイント: 検証が必要です ║', + ); + assert.strictEqual( + buildCheckpoint(currentTest, 'Chinese').split('\n')[1], + '║ 检查点:需要验证 ║', + ); + assert.strictEqual( + buildCheckpoint(currentTest, 'Korean').split('\n')[1], + '║ 체크포인트: 검증 필요 ║', + ); + }); + }); + test('renders the current checkpoint as raw output', () => { fs.writeFileSync(uatPath, `--- status: testing @@ -1034,4 +1128,85 @@ phase: 01-test-phase assert.strictEqual(result.success, false, 'Should fail when no current test exists'); assert.ok(result.error.includes('already complete')); }); + + // #2402: response_language must reach the checkpoint frame itself — verify-work.md + // requires the model to reprint the checkpoint byte-for-byte, so translation can't + // happen after the fact. The renderer has to already emit localized frame strings. + test('localizes the checkpoint frame when response_language is configured (#2402)', () => { + fs.writeFileSync( + path.join(tmpDir, '.planning', 'config.json'), + JSON.stringify({ response_language: 'Spanish' }) + ); + fs.writeFileSync(uatPath, `--- +status: testing +phase: 01-test-phase +--- + +## Current Test + +number: 2 +name: Submit form validation +expected: | + Empty submit keeps controls visible. + Validation error copy is shown. +awaiting: user response +`); + + const result = runGsdTools(['uat', 'render-checkpoint', '--file', '.planning/phases/01-test-phase/01-UAT.md', '--raw'], tmpDir); + assert.strictEqual(result.success, true, `render-checkpoint failed: ${result.error}`); + + // Frame strings must be localized, not English. + assert.ok(!result.output.includes('CHECKPOINT: Verification Required'), + 'banner should be localized, not the English default'); + assert.ok(!result.output.includes("Type `pass` or describe what's wrong."), + 'instruction line should be localized, not the English default'); + assert.ok(result.output.includes('Verificación requerida'), 'banner should be in Spanish'); + assert.ok(result.output.includes('Escribe `pass`'), 'instruction line should be in Spanish'); + + // Structure/IDs stay untranslated: box borders, the Test N: name line, and the + // expected content are preserved verbatim. + assert.ok(result.output.includes('╔══════════════════════════════════════════════════════════════╗')); + assert.ok(result.output.includes('╚══════════════════════════════════════════════════════════════╝')); + assert.ok(result.output.includes('──────────────────────────────────────────────────────────────')); + assert.ok(result.output.includes('**Test 2: Submit form validation**')); + assert.ok(result.output.includes('Empty submit keeps controls visible.')); + assert.ok(result.output.includes('Validation error copy is shown.')); + }); + + // Regression guard for the "unset ⇒ byte-identical English" acceptance criterion. + test('renders byte-identical English checkpoint when response_language is unset (#2402)', () => { + fs.writeFileSync(uatPath, `--- +status: testing +phase: 01-test-phase +--- + +## Current Test + +number: 2 +name: Submit form validation +expected: | + Empty submit keeps controls visible. + Validation error copy is shown. +awaiting: user response +`); + + const result = runGsdTools(['uat', 'render-checkpoint', '--file', '.planning/phases/01-test-phase/01-UAT.md', '--raw'], tmpDir); + assert.strictEqual(result.success, true, `render-checkpoint failed: ${result.error}`); + + const expected = [ + '╔══════════════════════════════════════════════════════════════╗', + '║ CHECKPOINT: Verification Required ║', + '╚══════════════════════════════════════════════════════════════╝', + '', + '**Test 2: Submit form validation**', + '', + 'Empty submit keeps controls visible.\nValidation error copy is shown.', + '', + '──────────────────────────────────────────────────────────────', + 'Type `pass` or describe what\'s wrong.', + '──────────────────────────────────────────────────────────────', + ].join('\n'); + + assert.strictEqual(result.output, expected); + }); }); diff --git a/tests/workflow-size-baseline.json b/tests/workflow-size-baseline.json index b135e87da..52dffc296 100644 --- a/tests/workflow-size-baseline.json +++ b/tests/workflow-size-baseline.json @@ -1,93 +1,93 @@ { "add-backlog.md": 7176, "add-phase.md": 7578, - "add-tests.md": 16961, - "add-todo.md": 10734, - "ai-integration-phase.md": 15134, + "add-tests.md": 17247, + "add-todo.md": 11020, + "ai-integration-phase.md": 15420, "analyze-dependencies.md": 3887, "audit-fix.md": 11743, "audit-milestone.md": 18448, "audit-uat.md": 7469, "autonomous.md": 42474, - "check-todos.md": 9475, - "cleanup.md": 9941, + "check-todos.md": 9761, + "cleanup.md": 10319, "code-review-fix.md": 24320, "code-review.md": 32524, - "complete-milestone.md": 31071, - "debug.md": 19370, + "complete-milestone.md": 31436, + "debug.md": 19667, "diagnose-issues.md": 12858, - "discovery-phase.md": 8651, - "discuss-phase-assumptions.md": 27302, + "discovery-phase.md": 13543, + "discuss-phase-assumptions.md": 27667, "discuss-phase-power.md": 11273, "discuss-phase.md": 31986, - "do.md": 10353, - "docs-update.md": 55706, + "do.md": 10731, + "docs-update.md": 55908, "edit-phase.md": 12927, - "eval-review.md": 9967, - "execute-phase.md": 93390, - "execute-plan.md": 34262, + "eval-review.md": 10332, + "execute-phase.md": 93292, + "execute-plan.md": 34548, "explore.md": 10541, "extract-learnings.md": 12893, "fast.md": 7613, "forensics.md": 12531, - "graduation.md": 11622, - "health.md": 11868, + "graduation.md": 11987, + "health.md": 12246, "help.md": 1722, - "import.md": 14636, - "inbox.md": 14407, - "ingest-docs.md": 18870, + "import.md": 15014, + "inbox.md": 19299, + "ingest-docs.md": 19235, "insert-phase.md": 8987, "list-phase-assumptions.md": 4305, "list-seeds.md": 6987, "list-workspaces.md": 5699, - "manager.md": 27302, + "manager.md": 27751, "map-codebase.md": 20817, "milestone-summary.md": 11842, - "mvp-phase.md": 13626, - "new-milestone.md": 37624, - "new-project.md": 66184, - "new-workspace.md": 11298, + "mvp-phase.md": 13991, + "new-milestone.md": 38081, + "new-project.md": 66470, + "new-workspace.md": 11584, "next.md": 20138, "node-repair.md": 4173, "note.md": 6563, - "onboard.md": 8590, + "onboard.md": 8877, "pause-work.md": 14441, "plan-milestone-gaps.md": 11809, - "plan-phase.md": 94391, + "plan-phase.md": 94470, "plan-review-convergence.md": 26285, - "plant-seed.md": 11785, + "plant-seed.md": 12150, "pr-branch.md": 15963, - "profile-user.md": 21246, + "profile-user.md": 21624, "progress.md": 32632, - "quick.md": 50993, + "quick.md": 51392, "reapply-patches.md": 20312, "remove-phase.md": 8513, - "remove-workspace.md": 7551, + "remove-workspace.md": 7916, "resume-project.md": 17270, "review.md": 50497, "scan.md": 7728, - "secure-phase.md": 13622, + "secure-phase.md": 13987, "session-report.md": 4044, "settings-advanced.md": 40019, - "settings-integrations.md": 15892, - "settings.md": 33467, - "ship.md": 27945, + "settings-integrations.md": 16257, + "settings.md": 33832, + "ship.md": 28310, "sketch-wrap-up.md": 14267, - "sketch.md": 20004, - "smart-entry.md": 11124, + "sketch.md": 20369, + "smart-entry.md": 11489, "spec-phase.md": 31987, "spike-wrap-up.md": 15136, - "spike.md": 24561, + "spike.md": 24939, "stats.md": 6762, "sync-skills.md": 6125, "thread.md": 12508, "transition.md": 22070, - "ui-phase.md": 26054, - "ui-review.md": 11216, + "ui-phase.md": 26340, + "ui-review.md": 11581, "ultraplan-phase.md": 10512, - "undo.md": 10431, - "update.md": 20914, - "validate-phase.md": 10849, + "undo.md": 15323, + "update.md": 21178, + "validate-phase.md": 11214, "verify-phase.md": 40949, - "verify-work.md": 40265 + "verify-work.md": 40733 } diff --git a/tests/workspace.test.cjs b/tests/workspace.test.cjs index 1e1a57af9..044ffa4b8 100644 --- a/tests/workspace.test.cjs +++ b/tests/workspace.test.cjs @@ -214,6 +214,51 @@ describe('init remove-workspace', () => { assert.strictEqual(data.strategy, 'clone'); assert.strictEqual(data.has_dirty_repos, false); }); + + // #2402: cmdInitRemoveWorkspace didn't route through withProjectRoot, so + // remove-workspace.md never received response_language (nor project_root/ + // agents_installed). Mirrors the established `init manager` response_language + // coverage pattern (tests/init-manager.test.cjs). + describe('response_language wiring (#2402)', () => { + function writeWorkspace(base, name) { + const ws = path.join(base, 'gsd-workspaces', name); + fs.mkdirSync(ws, { recursive: true }); + fs.writeFileSync(path.join(ws, 'WORKSPACE.md'), [ + `# Workspace: ${name}`, + '', + 'Created: 2026-03-20', + 'Strategy: clone', + '', + '## Member Repos', + '', + '| Repo | Source | Branch | Strategy |', + '|------|--------|--------|----------|', + ].join('\n')); + } + + test('output includes response_language when configured', () => { + writeWorkspace(tmpDir, 'test-ws'); + fs.mkdirSync(path.join(tmpDir, '.planning'), { recursive: true }); + fs.writeFileSync( + path.join(tmpDir, '.planning', 'config.json'), + JSON.stringify({ response_language: 'Japanese' }) + ); + + const result = runGsdTools('init remove-workspace test-ws', tmpDir, { HOME: tmpDir }); + assert.ok(result.success, `init failed: ${result.error}`); + const data = JSON.parse(result.output); + assert.strictEqual(data.response_language, 'Japanese'); + }); + + test('output omits response_language when not configured', () => { + writeWorkspace(tmpDir, 'test-ws'); + + const result = runGsdTools('init remove-workspace test-ws', tmpDir, { HOME: tmpDir }); + assert.ok(result.success, `init failed: ${result.error}`); + const data = JSON.parse(result.output); + assert.strictEqual(data.response_language, undefined); + }); + }); }); // ─── Integration: worktree creation and removal ─────────────────────────────