feat(plan-phase): --research-phase flag + scrub stale slash-command refs (#3042, #3044) (#3045)

* feat(plan-phase): --research-phase flag absorbs deleted /gsd-research-phase + scrub stale refs (#3042, #3044)

#3042 (orphaned research-phase): /gsd-research-phase had a workflow file
but no slash-command stub. Rather than restore the orphan, the research-
only capability is now a flag on /gsd-plan-phase:

  /gsd-plan-phase --research-phase <N>

When set, the workflow scopes to phase N, runs the research step (Section
5 of the existing plan-phase workflow), then early-exits before the
planner/plan-checker/verifier chain.

Per RCA against the deleted standalone, the flag adds two modifiers to
fully cover the original surface (Option B from the RCA discussion):

- --view : print existing RESEARCH.md to stdout, no spawn. Cheapest mode
  for the correction-without-replanning loop the issue reporter
  explicitly called out. Errors with a clear hint if RESEARCH.md is
  missing.
- --research : reuse the existing "force re-research" semantics. In
  research-only mode this skips the existing-RESEARCH.md prompt and
  re-spawns unconditionally.
- Neither flag, RESEARCH.md exists : prompt update/view/skip. Mirrors
  the deleted standalone's existing-artifact menu (#3042 RCA).

#3044 (stale slash-command refs): scrubbed five deleted commands from
all user-facing surfaces, including English docs, 4 localized doc sets
(ja-JP, ko-KR, zh-CN, pt-BR), workflows, templates, and references.

  /gsd-check-todos          → /gsd-capture --list
  /gsd-new-workspace        → /gsd-workspace --new
  /gsd-status               → /gsd-progress
  /gsd-plan-milestone-gaps  → table rows / orphan sections removed
                              (PR #3038 only scrubbed workflows/agent;
                              missed the docs surfaces this PR covers)
  /gsd-research-phase       → /gsd-plan-phase --research-phase

Includes a fix to docs/issue-driven-orchestration.md (PR #3036)
which itself referenced /gsd-new-workspace 4 times — self-correction.

Removed:
- get-shit-done/workflows/research-phase.md (orphan, capability
  absorbed into --research-phase flag)

Tests:
- tests/bug-3042-3044-research-flag-and-stale-refs.test.cjs — 46
  structural-IR tests across both bugs:
  - argument-hint advertises --research-phase + --view
  - workflow parses --research-phase, sets RESEARCH_ONLY,
    early-exits before planner
  - --view prints RESEARCH.md without spawning
  - --research forces refresh in research-only mode
  - existing-RESEARCH.md prompt path with update/view/skip
  - workflows/research-phase.md is removed
  - 5 deleted slash-commands absent from 17 English user-facing
    surfaces + 16 localized doc surfaces (4 locales × 4 docs each)
  - replacement command tokens present where deleted ones lived

6950/6950 full suite pass. Lints clean.

Closes #3042
Closes #3044

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix: address all 8 CR findings on PR #3045

Major (3):
- get-shit-done/workflows/plan-phase.md:344 — added explicit early-exit
  guard at Section 5.1: "Skip if RESEARCH_ONLY=true". Without it, an LLM
  could fall through "use existing, skip to step 6" → planner spawn,
  violating the research-only contract. The guard makes the early-exit
  unreachable from any non-research-only branch.
- get-shit-done/references/continuation-format.md (3 examples) +
  zh-CN/.../continuation-format.md (3 examples) — pointed to
  `/gsd-plan-phase --research-phase` but docs/COMMANDS.md didn't
  document the flag. Added a full --research-phase + --view + --research
  modifier section to the /gsd-plan-phase flag table in COMMANDS.md so
  the canonical reference matches the continuation examples.

Minor (5):
- docs/FEATURES.md:1632 — `/gsd-plan-phase --research-phase` →
  `/gsd-plan-phase --research-phase <N>` (include required arg).
- get-shit-done/templates/README.md:46 — NN-VALIDATION.md producer
  reverted from `/gsd-plan-phase --research-phase` (Nyquist) to plain
  `/gsd-plan-phase` (Nyquist). VALIDATION.md is created during normal
  Nyquist flow, not research-only mode — the bulk replacement was
  wrong for that line.
- get-shit-done/workflows/help.md:89 — signature line was missing
  `--research`; added it alongside `--research-phase` and `--view`.
- tests/bug-3042-3044-...:197 — promptHasView/promptHasSkip were
  tautological (matched anywhere in 1700-line workflow). Tightened
  to a proximity check anchored on "RESEARCH.md already exists" prompt
  header within a 600-char window. Updated workflow to emit that
  literal phrase.
- tests/feat-2840-...:95 — workspace assertion used `/gsd-workspace`
  but the documented replacement is `/gsd-workspace --new`. Tightened
  to require both tokens (in 3 places: requiredCommands list, regex
  in conceptPairs, error message).

6950/6950 full suite pass. Lint clean.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Tom Boucher
2026-05-02 23:12:50 -04:00
committed by GitHub
parent dca12242b5
commit 1e6737cd8e
39 changed files with 502 additions and 203 deletions

View File

@@ -0,0 +1,5 @@
---
type: Changed
pr: 3042
---
**`/gsd-research-phase` consolidated into `/gsd-plan-phase --research-phase <N>`** — the standalone research command's slash-command stub was never registered (#3042). Rather than restore the orphan, the research-only capability now lives as a flag on `/gsd-plan-phase`. New modifiers: `--view` prints existing `RESEARCH.md` to stdout without spawning, `--research` forces refresh, otherwise prompts `update / view / skip` when `RESEARCH.md` already exists. Also scrubs four other stale slash-command references (`/gsd-check-todos`, `/gsd-new-workspace`, `/gsd-status`, residual `/gsd-plan-milestone-gaps`) across English + 4 localized doc sets (#3044). Closes #3042 and #3044.

View File

@@ -651,7 +651,7 @@ You're never locked in. The system adapts.
| Command | What it does |
|---------|--------------|
| `/gsd-new-workspace` | Create isolated workspace with repo copies (worktrees or clones) |
| `/gsd-workspace --new` | Create isolated workspace with repo copies (worktrees or clones) |
| `/gsd-list-workspaces` | Show all GSD workspaces and their status |
| `/gsd-remove-workspace` | Remove workspace and clean up worktrees |
@@ -698,7 +698,6 @@ You're never locked in. The system adapts.
| `/gsd-edit-phase [N] [--force]` | Modify any field of an existing phase in place — number and position unchanged |
| `/gsd-remove-phase [N]` | Remove future phase, renumber |
| `/gsd-list-phase-assumptions [N]` | See Claude's intended approach before planning |
| `/gsd-plan-milestone-gaps` | Create phases to close gaps from audit |
### Session
@@ -740,7 +739,7 @@ You're never locked in. The system adapts.
| `/gsd-settings` | Configure model profile and workflow agents |
| `/gsd-set-profile <profile>` | Switch model profile (quality/balanced/budget/inherit) |
| `/gsd-add-todo [desc]` | Capture idea for later |
| `/gsd-check-todos` | List pending todos |
| `/gsd-capture --list` | List pending todos |
| `/gsd-debug [desc]` | Systematic debugging with persistent state |
| `/gsd-do <text>` | Route freeform text to the right GSD command automatically |
| `/gsd-note <text>` | Zero-friction idea capture — append, list, or promote notes to todos |

View File

@@ -1,7 +1,7 @@
---
name: gsd:plan-phase
description: Create detailed phase plan (PLAN.md) with verification loop
argument-hint: "[phase] [--auto] [--research] [--skip-research] [--gaps] [--skip-verify] [--prd <file>] [--reviews] [--text] [--tdd] [--mvp]"
argument-hint: "[phase] [--auto] [--research] [--skip-research] [--research-phase <N>] [--view] [--gaps] [--skip-verify] [--prd <file>] [--reviews] [--text] [--tdd] [--mvp]"
agent: gsd-planner
allowed-tools:
- Read
@@ -19,6 +19,13 @@ Create executable phase prompts (PLAN.md files) for a roadmap phase with integra
**Default flow:** Research (if needed) → Plan → Verify → Done
**Research-only mode (`--research-phase <N>`):** Spawn `gsd-phase-researcher` for phase `N`, write `RESEARCH.md`, then exit before the planner runs. Useful for cross-phase research, doc review before committing to a planning approach, and correction-without-replanning loops where iterating on research alone is dramatically cheaper than re-spawning the planner. Replaces the deleted `/gsd-research-phase` command (#3042).
**Research-only modifiers:**
- **No flag** — when `RESEARCH.md` already exists, prompt the user to choose `update / view / skip`.
- **`--research`** — force-refresh: re-spawn the researcher unconditionally, no prompt. Skips the existing-RESEARCH.md menu.
- **`--view`** — view-only: print existing `RESEARCH.md` to stdout. Does not spawn the researcher. Cheapest mode for the correction-without-replanning loop. If no `RESEARCH.md` exists yet, errors with a hint to drop `--view`.
**Orchestrator role:** Parse arguments, validate phase, research domain (unless skipped), spawn gsd-planner, verify with gsd-plan-checker, iterate until pass or max iterations, present results.
</objective>

View File

@@ -123,6 +123,8 @@ Research, plan, and verify a phase.
| `--auto` | Skip interactive confirmations |
| `--research` | Force re-research even if RESEARCH.md exists |
| `--skip-research` | Skip domain research step |
| `--research-phase <N>` | Research-only mode: spawn researcher for phase `<N>`, write RESEARCH.md, exit before planner. Replaces the deleted `gsd-research-phase` standalone command (#3042). |
| `--view` | Research-only modifier: when used with `--research-phase`, print existing RESEARCH.md to stdout and exit (no spawn). |
| `--gaps` | Gap closure mode (reads VERIFICATION.md, skips research) |
| `--skip-verify` | Skip plan checker verification loop |
| `--prd <file>` | Use a PRD file instead of discuss-phase for context |
@@ -134,12 +136,20 @@ Research, plan, and verify a phase.
**Prerequisites:** `.planning/ROADMAP.md` exists
**Produces:** `{phase}-RESEARCH.md`, `{phase}-{N}-PLAN.md`, `{phase}-VALIDATION.md`
**Research-only mode (`--research-phase <N>`):**
- No modifier: prompts `update / view / skip` if RESEARCH.md already exists.
- With `--research`: force-refresh — re-spawn researcher unconditionally, no prompt.
- With `--view`: print existing RESEARCH.md to stdout, no spawn. Errors if RESEARCH.md missing.
```bash
/gsd-plan-phase 1 # Research + plan + verify phase 1
/gsd-plan-phase 3 --skip-research # Plan without research (familiar domain)
/gsd-plan-phase --auto # Non-interactive planning
/gsd-plan-phase 2 --validate # Validate state before planning
/gsd-plan-phase 1 --bounce # Plan + external bounce validation
/gsd-plan-phase 1 # Research + plan + verify phase 1
/gsd-plan-phase 3 --skip-research # Plan without research (familiar domain)
/gsd-plan-phase --auto # Non-interactive planning
/gsd-plan-phase 2 --validate # Validate state before planning
/gsd-plan-phase 1 --bounce # Plan + external bounce validation
/gsd-plan-phase --research-phase 4 # Research only on phase 4 (prompts if RESEARCH.md exists)
/gsd-plan-phase --research-phase 4 --view # Print existing RESEARCH.md, no spawn
/gsd-plan-phase --research-phase 4 --research # Force-refresh research, no prompt
```
---

View File

@@ -449,7 +449,6 @@
- REQ-MILE-08: New milestone MUST follow same flow as new-project (questions → research → requirements → roadmap)
- REQ-MILE-09: New milestone MUST NOT reset existing workflow configuration
**Gap Closure:** `/gsd-plan-milestone-gaps` creates phases to close gaps identified by audit.
---
@@ -865,7 +864,7 @@ continues. Drift detection cannot fail verification.
### 29. Todo Management
**Commands:** `/gsd-add-todo [desc]`, `/gsd-check-todos`
**Commands:** `/gsd-add-todo [desc]`, `/gsd-capture --list`
**Purpose:** Capture ideas and tasks during sessions for later work.
@@ -1630,7 +1629,7 @@ Test suite that scans all agent, workflow, and command files for embedded inject
### 65. Claim Provenance Tagging
**Part of:** `/gsd-research-phase`
**Part of:** `/gsd-plan-phase --research-phase <N>`
**Purpose:** Ensure research claims are tagged with source evidence and assumptions are logged separately.

View File

@@ -1,5 +1,5 @@
{
"generated": "2026-05-02",
"generated": "2026-05-03",
"families": {
"agents": [
"gsd-advisor-researcher",
@@ -163,7 +163,6 @@
"reapply-patches.md",
"remove-phase.md",
"remove-workspace.md",
"research-phase.md",
"resume-project.md",
"review.md",
"scan.md",

View File

@@ -162,7 +162,7 @@ These six routers are descriptor-only entries that the model picks first; the bo
---
## Workflows (85 shipped)
## Workflows (84 shipped)
Full roster at `get-shit-done/workflows/*.md`. Workflows are thin orchestrators that commands reference internally; most are not read directly by end users. Rows below map each workflow file to its role (derived from the `<purpose>` block) and, where applicable, to the command that invokes it.
@@ -211,12 +211,11 @@ Full roster at `get-shit-done/workflows/*.md`. Workflows are thin orchestrators
| `milestone-summary.md` | Milestone summary synthesis — onboarding and review artifact from milestone artifacts. | `/gsd-milestone-summary` |
| `new-milestone.md` | Start a new milestone cycle — load project context, gather goals, update PROJECT.md/STATE.md. | `/gsd-new-milestone` |
| `new-project.md` | Unified new-project flow — questioning, research (optional), requirements, roadmap. | `/gsd-new-project` |
| `new-workspace.md` | Create an isolated workspace with repo worktrees/clones and an independent `.planning/`. | `/gsd-new-workspace` |
| `new-workspace.md` | Create an isolated workspace with repo worktrees/clones and an independent `.planning/`. | `/gsd-workspace --new` |
| `next.md` | Detect current project state and automatically advance to the next logical step. | `/gsd-progress --next` |
| `node-repair.md` | Autonomous repair operator for failed task verification; invoked by `execute-plan`. | `execute-plan.md` (recovery) |
| `note.md` | Zero-friction idea capture — one Write call, one confirmation line. | `/gsd-capture --note` |
| `pause-work.md` | Create structured `.planning/HANDOFF.json` and `.continue-here.md` handoff files. | `/gsd-pause-work` |
| `plan-milestone-gaps.md` | Create all phases necessary to close gaps identified by `/gsd-audit-milestone`. | `/gsd-plan-milestone-gaps` |
| `plan-phase.md` | Create executable PLAN.md files with integrated research and verification loop. | `/gsd-plan-phase`, `/gsd-quick` |
| `plan-review-convergence.md` | Cross-AI plan convergence loop — replan with review feedback until no HIGH concerns remain. | `/gsd-plan-review-convergence` |
| `plant-seed.md` | Capture a forward-looking idea as a structured seed file with trigger conditions. | `/gsd-capture --seed` |
@@ -227,7 +226,6 @@ Full roster at `get-shit-done/workflows/*.md`. Workflows are thin orchestrators
| `reapply-patches.md` | Reapply local modifications after a GSD update. | `/gsd-update --reapply` |
| `remove-phase.md` | Remove a future phase from the roadmap and renumber subsequent phases. | `/gsd-remove-phase` |
| `remove-workspace.md` | Remove a GSD workspace and clean up worktrees. | `/gsd-remove-workspace` |
| `research-phase.md` | Standalone phase research workflow (usually invoked via `plan-phase`). | `/gsd-research-phase` |
| `resume-project.md` | Resume work — restore full context from STATE.md, HANDOFF.json, and artifacts. | `/gsd-resume-work` |
| `review.md` | Cross-AI plan review via external CLIs; produces REVIEWS.md. | `/gsd-review` |
| `scan.md` | Rapid single-focus codebase scan — lightweight alternative to map-codebase. | `/gsd-scan` |

View File

@@ -669,7 +669,7 @@ Workstreams let you work on multiple milestone areas concurrently without state
Each workstream maintains its own `.planning/` directory subtree. When you switch workstreams, GSD swaps the active planning context so that `/gsd-progress`, `/gsd-discuss-phase`, `/gsd-plan-phase`, and other commands operate on that workstream's state. Active context is session-scoped when the runtime exposes a stable session identifier, which prevents one terminal or AI instance from repointing another instance's `STATE.md`.
This is lighter weight than `/gsd-new-workspace` (which creates separate repo worktrees). Workstreams share the same codebase and git history but isolate planning artifacts.
This is lighter weight than `/gsd-workspace --new` (which creates separate repo worktrees). Workstreams share the same codebase and git history but isolate planning artifacts.
---
@@ -900,7 +900,6 @@ The gate is non-blocking: any internal failure logs and the phase continues.
```bash
/gsd-audit-milestone # Check requirements coverage, detect stubs
/gsd-plan-milestone-gaps # If audit found gaps, create phases to close them
/gsd-complete-milestone # Archive, tag, done
```
@@ -932,10 +931,10 @@ Work on multiple repos or features in parallel with isolated GSD state.
```bash
# Create a workspace with repos from your monorepo
/gsd-new-workspace --name feature-b --repos hr-ui,ZeymoAPI
/gsd-workspace --new --name feature-b --repos hr-ui,ZeymoAPI
# Feature branch isolation — worktree of current repo with its own .planning/
/gsd-new-workspace --name feature-b --repos .
/gsd-workspace --new --name feature-b --repos .
# Then cd into the workspace and initialize GSD
cd ~/gsd-workspaces/feature-b
@@ -1359,7 +1358,6 @@ If the installer crashes with `EPERM: operation not permitted, scandir` on Windo
| Lost context / new session | `/gsd-resume-work` or `/gsd-progress` |
| Phase went wrong | `git revert` the phase commits, then re-plan |
| Need to change scope | `/gsd-add-phase`, `/gsd-insert-phase`, or `/gsd-remove-phase` |
| Milestone audit found gaps | `/gsd-plan-milestone-gaps` |
| Something broke | `/gsd-debug "description"` (add `--diagnose` for analysis without fixes) |
| STATE.md out of sync | `state validate` then `state sync` |
| Workflow state seems corrupted | `/gsd-forensics` |

View File

@@ -23,7 +23,7 @@ gates.
## Why this exists
GSD has the building blocks for issue-driven AI development —
`/gsd-new-workspace`, `/gsd-manager`, `/gsd-autonomous`, `/gsd-verify-work`,
`/gsd-workspace --new`, `/gsd-manager`, `/gsd-autonomous`, `/gsd-verify-work`,
`/gsd-review`, `/gsd-ship`, plus `STATE.md` and the phase artifact suite
— but no guide that walks through how to drive them from a single tracker
issue without writing custom orchestration scripts. Without that guide
@@ -47,7 +47,7 @@ Symphony docs, blog posts, or third-party orchestration write-ups.
| Symphony concept | GSD primitive |
|---|---|
| `WORKFLOW.md` (top-level intent) | `ROADMAP.md` (project intent), `STATE.md` (live status), phase `CONTEXT.md` (per-phase scope), phase `PLAN.md` (executable steps) |
| One isolated agent workspace per task | `/gsd-new-workspace --strategy worktree` |
| One isolated agent workspace per task | `/gsd-workspace --new --strategy worktree` |
| Agent dispatch and concurrency | `/gsd-manager` (interactive dashboard), `/gsd-autonomous` (unattended) |
| Per-phase plan and discuss steps | `/gsd-discuss-phase` → `/gsd-plan-phase` → `/gsd-execute-phase` |
| Proof-of-work / test evidence | `/gsd-verify-work` (UAT.md persisted across `/clear`) |
@@ -76,7 +76,7 @@ tracker issue end-to-end. Replace bracketed placeholders before running.
`/gsd-insert-phase`. Capture the tracker issue URL in the phase's
`CONTEXT.md` so traceability survives compaction.
3. **Create an isolated workspace.** Run
`/gsd-new-workspace --strategy worktree <slug>` to spin up a git
`/gsd-workspace --new --strategy worktree <slug>` to spin up a git
worktree with an independent `.planning/` directory. The worktree is
the safety boundary: any exploration, partial commits, or aborted
plans stay outside `main`.
@@ -110,7 +110,7 @@ When the PR merges, the loop closes. Auto-close keywords in the PR body
The loop is safe because four invariants hold by construction:
- **Isolated worktrees.** Every issue runs in a `/gsd-new-workspace`
- **Isolated worktrees.** Every issue runs in a `/gsd-workspace --new`
worktree, so partial work, aborted plans, and exploratory commits
never touch `main`. `gsd-local-patches/` is the recovery surface if a
worktree's hand-edits need to come back across an update.

View File

@@ -32,7 +32,7 @@
---
### `/gsd-new-workspace`
### `/gsd-workspace --new`
リポジトリのコピーと独立した `.planning/` ディレクトリを持つ分離されたワークスペースを作成します。
@@ -52,9 +52,9 @@
**生成物:** `WORKSPACE.md`、`.planning/`、リポジトリコピー(worktreeまたはclone)
```bash
/gsd-new-workspace --name feature-b --repos hr-ui,ZeymoAPI
/gsd-new-workspace --name feature-b --repos . --strategy worktree # 同一リポジトリの分離
/gsd-new-workspace --name spike --repos api,web --strategy clone # フルクローン
/gsd-workspace --new --name feature-b --repos hr-ui,ZeymoAPI
/gsd-workspace --new --name feature-b --repos . --strategy worktree # 同一リポジトリの分離
/gsd-workspace --new --name spike --repos api,web --strategy clone # フルクローン
```
---
@@ -412,15 +412,8 @@
/gsd-list-phase-assumptions 2 # フェーズ2の前提を確認
```
### `/gsd-plan-milestone-gaps`
マイルストーン監査のギャップを解消するフェーズを作成します。
```bash
/gsd-plan-milestone-gaps # 各監査ギャップに対してフェーズを作成
```
### `/gsd-research-phase`
### `/gsd-plan-phase --research-phase`
詳細なエコシステム調査のみを実行します(単体機能 — 通常は `/gsd-plan-phase` を使用してください)。
@@ -429,7 +422,7 @@
| `N` | いいえ | フェーズ番号 |
```bash
/gsd-research-phase 4 # フェーズ4のドメインを調査
/gsd-plan-phase --research-phase 4 # フェーズ4のドメインを調査
```
### `/gsd-validate-phase`
@@ -610,12 +603,12 @@ GSDの保証付きでアドホックタスクを実行します。
/gsd-add-todo "Consider adding dark mode support"
```
### `/gsd-check-todos`
### `/gsd-capture --list`
保留中のTodoを一覧表示し、取り組むものを選択します。
```bash
/gsd-check-todos
/gsd-capture --list
```
### `/gsd-add-tests`

View File

@@ -386,7 +386,6 @@
- REQ-MILE-08: 新しいマイルストーンは new-project と同じフロー(質問 → リサーチ → 要件 → ロードマップ)に従わなければならない
- REQ-MILE-09: 新しいマイルストーンは既存のワークフロー設定をリセットしてはならない
**ギャップクローズ:** `/gsd-plan-milestone-gaps` は監査で特定されたギャップを埋めるためのフェーズを作成します。
---
@@ -763,7 +762,7 @@
### 29. Todo 管理
**コマンド:** `/gsd-add-todo [desc]`、`/gsd-check-todos`
**コマンド:** `/gsd-add-todo [desc]`、`/gsd-capture --list`
**目的:** セッション中にアイデアやタスクをキャプチャし、後で作業できるようにします。
@@ -1516,7 +1515,7 @@ Claude が GSD ワークフローコンテキスト外でファイル編集を
### 65. クレーム出所タグ付け
**対象:** `/gsd-research-phase`
**対象:** `/gsd-plan-phase --research-phase`
**目的:** リサーチのクレームにソースエビデンスのタグを付け、仮定を別途記録します。

View File

@@ -313,7 +313,7 @@ React/Next.js/Vite プロジェクトの場合、UI リサーチャーは `compo
各ワークストリームは独自の `.planning/` ディレクトリサブツリーを維持します。ワークストリームを切り替えると、GSD はアクティブなプランニングコンテキストを入れ替え、`/gsd-progress`、`/gsd-discuss-phase`、`/gsd-plan-phase` などのコマンドがそのワークストリームの状態に対して動作するようにします。
これは `/gsd-new-workspace`(別のリポジトリワークツリーを作成)より軽量です。ワークストリームは同じコードベースと git 履歴を共有しつつ、プランニングアーティファクトを分離します。
これは `/gsd-workspace --new`(別のリポジトリワークツリーを作成)より軽量です。ワークストリームは同じコードベースと git 履歴を共有しつつ、プランニングアーティファクトを分離します。
---
@@ -417,8 +417,7 @@ GSD はマークダウンファイルを生成し、それが LLM のシステ
| `/gsd-insert-phase [N]` | 緊急作業を挿入(小数番号) | マイルストーン中の緊急修正 |
| `/gsd-remove-phase [N]` | 将来のフェーズを削除して番号を振り直す | 機能のスコープ縮小 |
| `/gsd-list-phase-assumptions [N]` | Claude の意図するアプローチをプレビュー | プランニング前に方向性を確認 |
| `/gsd-plan-milestone-gaps` | 監査ギャップに対するフェーズを作成 | 監査で不足項目が見つかった後 |
| `/gsd-research-phase [N]` | エコシステムの深いリサーチのみ | 複雑または不慣れなドメイン |
| `/gsd-plan-phase --research-phase [N]` | エコシステムの深いリサーチのみ | 複雑または不慣れなドメイン |
### ブラウンフィールドとユーティリティ
@@ -429,7 +428,7 @@ GSD はマークダウンファイルを生成し、それが LLM のシステ
| `/gsd-debug [desc]` | 永続状態を持つ体系的デバッグ | 何かが壊れた時 |
| `/gsd-forensics` | ワークフロー障害の診断レポート | 状態、アーティファクト、git 履歴が破損していると思われる場合 |
| `/gsd-add-todo [desc]` | 後でやるアイデアを記録 | セッション中にアイデアが浮かんだ時 |
| `/gsd-check-todos` | 保留中の TODO を一覧表示 | 記録したアイデアのレビュー |
| `/gsd-capture --list` | 保留中の TODO を一覧表示 | 記録したアイデアのレビュー |
| `/gsd-settings` | ワークフロートグルとモデルプロファイルを設定 | モデル変更、エージェントのトグル |
| `/gsd-set-profile <profile>` | クイックプロファイル切り替え | コスト/品質トレードオフの変更 |
| `/gsd-update --reapply` | アップデート後にローカル変更を復元 | ローカル編集がある場合の `/gsd-update` 後 |
@@ -642,7 +641,6 @@ claude --dangerously-skip-permissions
```bash
/gsd-audit-milestone # 要件カバレッジを確認、スタブを検出
/gsd-plan-milestone-gaps # 監査でギャップが見つかった場合、フェーズを作成して埋める
/gsd-complete-milestone # アーカイブ、タグ付け、完了
```
@@ -672,10 +670,10 @@ claude --dangerously-skip-permissions
```bash
# モノレポからリポジトリを含むワークスペースを作成
/gsd-new-workspace --name feature-b --repos hr-ui,ZeymoAPI
/gsd-workspace --new --name feature-b --repos hr-ui,ZeymoAPI
# フィーチャーブランチの分離 — 独自の .planning/ を持つ現在のリポジトリのワークツリー
/gsd-new-workspace --name feature-b --repos .
/gsd-workspace --new --name feature-b --repos .
# ワークスペースに移動して GSD を初期化
cd ~/gsd-workspaces/feature-b
@@ -795,7 +793,6 @@ Windows でインストーラーが `EPERM: operation not permitted, scandir`
| コンテキストの喪失 / 新セッション | `/gsd-resume-work` または `/gsd-progress` |
| フェーズが失敗した | フェーズのコミットを `git revert` して再プランニング |
| スコープ変更が必要 | `/gsd-add-phase`、`/gsd-insert-phase`、または `/gsd-remove-phase` |
| マイルストーン監査でギャップを発見 | `/gsd-plan-milestone-gaps` |
| 何かが壊れた | `/gsd-debug "description"` |
| ワークフロー状態が破損している可能性 | `/gsd-forensics` |
| ターゲットを絞った修正 | `/gsd-quick` |

View File

@@ -32,7 +32,7 @@
---
### `/gsd-new-workspace`
### `/gsd-workspace --new`
격리된 워크스페이스를 생성합니다. 저장소 복사본과 독립적인 `.planning/` 디렉터리가 포함됩니다.
@@ -52,9 +52,9 @@
**생성 파일:** `WORKSPACE.md`, `.planning/`, 저장소 복사본 (worktree 또는 clone)
```bash
/gsd-new-workspace --name feature-b --repos hr-ui,ZeymoAPI
/gsd-new-workspace --name feature-b --repos . --strategy worktree # 동일 저장소 격리
/gsd-new-workspace --name spike --repos api,web --strategy clone # 전체 클론
/gsd-workspace --new --name feature-b --repos hr-ui,ZeymoAPI
/gsd-workspace --new --name feature-b --repos . --strategy worktree # 동일 저장소 격리
/gsd-workspace --new --name spike --repos api,web --strategy clone # 전체 클론
```
---
@@ -412,15 +412,8 @@
/gsd-list-phase-assumptions 2 # 페이즈 2 가정 사항 확인
```
### `/gsd-plan-milestone-gaps`
마일스톤 감사에서 발견된 갭을 보완하는 페이즈를 생성합니다.
```bash
/gsd-plan-milestone-gaps # 각 감사 갭에 대한 페이즈 생성
```
### `/gsd-research-phase`
### `/gsd-plan-phase --research-phase`
심층 에코시스템 조사만 수행합니다 (독립 실행 — 일반적으로 `/gsd-plan-phase`를 사용하세요).
@@ -429,7 +422,7 @@
| `N` | 아니오 | 페이즈 번호 |
```bash
/gsd-research-phase 4 # 페이즈 4 도메인 조사
/gsd-plan-phase --research-phase 4 # 페이즈 4 도메인 조사
```
### `/gsd-validate-phase`
@@ -610,12 +603,12 @@ GSD 보증을 갖춘 임시 작업을 실행합니다.
/gsd-add-todo "Consider adding dark mode support"
```
### `/gsd-check-todos`
### `/gsd-capture --list`
보류 중인 할 일 목록을 표시하고 작업할 항목을 선택합니다.
```bash
/gsd-check-todos
/gsd-capture --list
```
### `/gsd-add-tests`

View File

@@ -386,7 +386,6 @@
- REQ-MILE-08: 새 마일스톤은 new-project와 동일한 흐름을 따라야 합니다(질문 → 연구 → 요구사항 → 로드맵).
- REQ-MILE-09: 새 마일스톤은 기존 워크플로우 구성을 초기화해서는 안 됩니다.
**갭 해소.** `/gsd-plan-milestone-gaps`는 감사에서 식별된 갭을 해소하는 페이즈를 생성합니다.
---
@@ -763,7 +762,7 @@
### 29. Todo Management
**명령어:** `/gsd-add-todo [desc]`, `/gsd-check-todos`
**명령어:** `/gsd-add-todo [desc]`, `/gsd-capture --list`
**목적:** 세션 중 나중에 처리할 아이디어와 작업을 캡처합니다.
@@ -1516,7 +1515,7 @@ Claude가 GSD 워크플로우 컨텍스트 밖에서 파일 편집을 시도하
### 65. 주장 출처 태깅
**대상:** `/gsd-research-phase`
**대상:** `/gsd-plan-phase --research-phase`
**목적:** 연구 주장에 출처 증거를 태깅하고 가정을 별도로 기록합니다.

View File

@@ -313,7 +313,7 @@ React/Next.js/Vite 프로젝트에서 `components.json`이 없으면 UI 조사
각 워크스트림은 자체 `.planning/` 디렉터리 하위 트리를 유지합니다. 워크스트림을 전환하면 GSD가 활성 계획 컨텍스트를 교체하여 `/gsd-progress`, `/gsd-discuss-phase`, `/gsd-plan-phase` 및 기타 명령어가 해당 워크스트림의 상태로 동작합니다.
이는 `/gsd-new-workspace`(별도 저장소 worktree를 생성)보다 가볍습니다. 워크스트림은 동일한 코드베이스와 git 히스토리를 공유하지만 계획 아티팩트를 격리합니다.
이는 `/gsd-workspace --new`(별도 저장소 worktree를 생성)보다 가볍습니다. 워크스트림은 동일한 코드베이스와 git 히스토리를 공유하지만 계획 아티팩트를 격리합니다.
---
@@ -417,8 +417,7 @@ GSD는 LLM 시스템 프롬프트가 되는 마크다운 파일을 생성합니
| `/gsd-insert-phase [N]` | 긴급 작업 삽입 (소수점 번호 체계) | 마일스톤 중간의 긴급 수정 시 |
| `/gsd-remove-phase [N]` | 미래 페이즈 제거 및 재번호 | 기능 범위 축소 시 |
| `/gsd-list-phase-assumptions [N]` | Claude의 예상 접근 방식 미리 확인 | 계획 전 방향 검증 시 |
| `/gsd-plan-milestone-gaps` | 감사 갭을 위한 페이즈 생성 | 감사에서 누락 항목이 발견된 후 |
| `/gsd-research-phase [N]` | 심층 에코시스템 조사만 수행 | 복잡하거나 익숙하지 않은 도메인 |
| `/gsd-plan-phase --research-phase [N]` | 심층 에코시스템 조사만 수행 | 복잡하거나 익숙하지 않은 도메인 |
### 브라운필드 및 유틸리티
@@ -429,7 +428,7 @@ GSD는 LLM 시스템 프롬프트가 되는 마크다운 파일을 생성합니
| `/gsd-debug [desc]` | 지속적인 상태를 유지하는 체계적인 디버깅 | 문제가 발생했을 때 |
| `/gsd-forensics` | 워크플로우 실패에 대한 진단 보고서 | 상태, 아티팩트, git 히스토리가 손상된 것 같을 때 |
| `/gsd-add-todo [desc]` | 나중을 위한 아이디어 캡처 | 세션 중에 생각이 날 때 |
| `/gsd-check-todos` | 보류 중인 할 일 목록 | 캡처된 아이디어 검토 시 |
| `/gsd-capture --list` | 보류 중인 할 일 목록 | 캡처된 아이디어 검토 시 |
| `/gsd-settings` | 워크플로우 토글 및 모델 프로필 설정 | 모델 변경, 에이전트 토글 시 |
| `/gsd-set-profile <profile>` | 빠른 프로필 전환 | 비용/품질 트레이드오프 변경 시 |
| `/gsd-update --reapply` | 업데이트 후 로컬 수정사항 복원 | 로컬 편집이 있는 상태에서 `/gsd-update` 이후 |
@@ -642,7 +641,6 @@ claude --dangerously-skip-permissions
```bash
/gsd-audit-milestone # Check requirements coverage, detect stubs
/gsd-plan-milestone-gaps # If audit found gaps, create phases to close them
/gsd-complete-milestone # Archive, tag, done
```
@@ -672,10 +670,10 @@ claude --dangerously-skip-permissions
```bash
# Create a workspace with repos from your monorepo
/gsd-new-workspace --name feature-b --repos hr-ui,ZeymoAPI
/gsd-workspace --new --name feature-b --repos hr-ui,ZeymoAPI
# Feature branch isolation — worktree of current repo with its own .planning/
/gsd-new-workspace --name feature-b --repos .
/gsd-workspace --new --name feature-b --repos .
# Then cd into the workspace and initialize GSD
cd ~/gsd-workspaces/feature-b
@@ -795,7 +793,6 @@ Windows에서 설치 프로그램이 `EPERM: operation not permitted, scandir`
| 컨텍스트 손실 / 새 세션 | `/gsd-resume-work` 또는 `/gsd-progress` |
| 페이즈가 잘못됨 | 페이즈 커밋에 `git revert` 후 재계획 |
| 범위 변경 필요 | `/gsd-add-phase`, `/gsd-insert-phase`, 또는 `/gsd-remove-phase` |
| 마일스톤 감사에서 갭 발견 | `/gsd-plan-milestone-gaps` |
| 무언가 고장남 | `/gsd-debug "description"` |
| 워크플로우 상태 손상 의심 | `/gsd-forensics` |
| 빠른 목표 수정 | `/gsd-quick` |

View File

@@ -39,7 +39,6 @@ Para detalhes completos de flags avançadas e mudanças recentes, consulte tamb
| `/gsd-insert-phase [N]` | Insere trabalho urgente entre fases |
| `/gsd-remove-phase [N]` | Remove fase futura e reenumera |
| `/gsd-list-phase-assumptions [N]` | Mostra abordagem assumida pelo Claude |
| `/gsd-plan-milestone-gaps` | Cria fases para fechar lacunas de auditoria |
## Brownfield e Utilidades

View File

@@ -251,7 +251,6 @@ claude --dangerously-skip-permissions
```bash
/gsd-audit-milestone
/gsd-plan-milestone-gaps
/gsd-complete-milestone
```

View File

@@ -515,7 +515,6 @@ lmn012o feat(08-02): 创建注册端点
| `/gsd-insert-phase [N]` | 在阶段之间插入紧急工作 |
| `/gsd-remove-phase [N]` | 删除未来阶段,重新编号 |
| `/gsd-list-phase-assumptions [N]` | 规划前查看 Claude 的预期方法 |
| `/gsd-plan-milestone-gaps` | 创建阶段以填补审计发现的差距 |
| `/gsd-autonomous [--from N] [--to N] [--only N]` | 自主执行所有剩余阶段(`--to N` 执行到阶段 N 停止,`--only N` 只执行单个阶段) |
| `/gsd-analyze-dependencies` | 检测阶段间依赖关系并建议 ROADMAP.md 的 `Depends on` 条目 |
@@ -533,7 +532,7 @@ lmn012o feat(08-02): 创建注册端点
| `/gsd-settings` | 配置模型配置文件和工作流代理 |
| `/gsd-set-profile <profile>` | 切换模型配置文件(quality/balanced/budget) |
| `/gsd-add-todo [desc]` | 捕获想法留待后用 |
| `/gsd-check-todos` | 列出待处理事项 |
| `/gsd-capture --list` | 列出待处理事项 |
| `/gsd-debug [desc] [--diagnose]` | 带持久状态的系统化调试(`--diagnose` 仅诊断不修复) |
| `/gsd-quick [--full] [--discuss] [--research]` | 用 GSD 保证执行临时任务(`--full` 启用全部阶段,`--discuss` 先收集上下文,`--research` 规划前调查方法) |
| `/gsd-health [--repair]` | 验证 `.planning/` 目录完整性,用 `--repair` 自动修复 |

View File

@@ -209,8 +209,7 @@
| `/gsd-insert-phase [N]` | 插入紧急工作(小数编号) | 里程碑中途紧急修复 |
| `/gsd-remove-phase [N]` | 删除未来阶段并重新编号 | 移除某个功能 |
| `/gsd-list-phase-assumptions [N]` | 预览 Claude 的预期方法 | 规划前,验证方向 |
| `/gsd-plan-milestone-gaps` | 为审计缺口创建阶段 | 审计发现缺失项后 |
| `/gsd-research-phase [N]` | 仅深度生态研究 | 复杂或不熟悉的领域 |
| `/gsd-plan-phase --research-phase [N]` | 仅深度生态研究 | 复杂或不熟悉的领域 |
| `/gsd-autonomous [--from N] [--to N] [--only N]` | 自主执行剩余阶段(`--to N` 到阶段 N 停止) | 批量自动处理 |
| `/gsd-analyze-dependencies` | 检测阶段间依赖关系 | `/gsd-manager` 前分析 |
@@ -231,7 +230,7 @@
| `/gsd-quick` | 带 GSD 保证的临时任务 | Bug 修复、小功能、配置更改 |
| `/gsd-debug [desc] [--diagnose]` | 带持久状态的系统化调试(`--diagnose` 仅诊断) | 出问题时 |
| `/gsd-add-todo [desc]` | 捕获想法留待后用 | 会话期间想到什么 |
| `/gsd-check-todos` | 列出待处理事项 | 查看捕获的想法 |
| `/gsd-capture --list` | 列出待处理事项 | 查看捕获的想法 |
| `/gsd-settings` | 配置工作流开关和模型配置 | 更改模型、切换代理 |
| `/gsd-set-profile <profile>` | 快速切换配置 | 更改成本/质量权衡 |
| `/gsd-update --reapply` | 更新后恢复本地修改 | 如果你有本地编辑,在 `/gsd-update` 后 |
@@ -390,7 +389,6 @@ claude --dangerously-skip-permissions
```bash
/gsd-audit-milestone # 检查需求覆盖率,检测存根
/gsd-plan-milestone-gaps # 如果审计发现缺口,创建阶段来填补
/gsd-complete-milestone # 归档,标记,完成
```
@@ -481,7 +479,6 @@ node gsd-tools.cjs state sync # 从磁盘重建 STATE.md
| 丢失上下文 / 新会话 | `/gsd-resume-work` 或 `/gsd-progress` |
| 阶段出错 | `git revert` 阶段提交,然后重新规划 |
| 需要更改范围 | `/gsd-add-phase`、`/gsd-insert-phase` 或 `/gsd-remove-phase` |
| 里程碑审计发现缺口 | `/gsd-plan-milestone-gaps` |
| 出问题了 | `/gsd-debug "描述"` |
| STATE.md 不同步 | `state validate` 然后 `state sync` |
| 快速针对性修复 | `/gsd-quick` |

View File

@@ -99,7 +99,7 @@
**也可选:**
- `/gsd-discuss-phase 2` — 先收集上下文
- `/gsd-research-phase 2` — 调查未知项
- `/gsd-plan-phase --research-phase 2` — 调查未知项
- 审查路线图
---
@@ -128,7 +128,7 @@
**也可选:**
- `/gsd-discuss-phase 3` — 先收集上下文
- `/gsd-research-phase 3` — 调查未知项
- `/gsd-plan-phase --research-phase 3` — 调查未知项
- 回顾阶段 2 构建的内容
---
@@ -149,7 +149,7 @@
**先讨论上下文:** `/gsd-discuss-phase 3`
**研究未知项:** `/gsd-research-phase 3`
**研究未知项:** `/gsd-plan-phase --research-phase 3`
<sub>`/clear` 优先 → 全新上下文窗口</sub>

View File

@@ -103,7 +103,7 @@ Add note that this is the last plan and what comes after:
**Also available:**
- `/gsd-discuss-phase 2` — gather context first
- `/gsd-research-phase 2` — investigate unknowns
- `/gsd-plan-phase --research-phase 2` — investigate unknowns
- Review roadmap
---
@@ -132,7 +132,7 @@ Show completion status before next action:
**Also available:**
- `/gsd-discuss-phase 3` — gather context first
- `/gsd-research-phase 3` — investigate unknowns
- `/gsd-plan-phase --research-phase 3` — investigate unknowns
- Review what Phase 2 built
---
@@ -155,7 +155,7 @@ When there's no clear primary action:
**To discuss context first:** `/gsd-discuss-phase 3`
**To research unknowns:** `/gsd-research-phase 3`
**To research unknowns:** `/gsd-plan-phase --research-phase 3`
---
```

View File

@@ -42,8 +42,8 @@ These files live inside a phase directory. They are NOT checked by W019 (which o
| `NN-MM-PLAN.md` | `phase-prompt.md` | `/gsd-plan-phase` | Executable implementation plan |
| `NN-MM-SUMMARY.md` | `summary.md` | `/gsd-execute-phase` | Post-execution summary with learnings |
| `NN-CONTEXT.md` | `context.md` | `/gsd-discuss-phase` | Scoped discussion decisions for the phase |
| `NN-RESEARCH.md` | `research.md` | `/gsd-research-phase`, `/gsd-plan-phase` | Technical research for the phase |
| `NN-VALIDATION.md` | `VALIDATION.md` | `/gsd-research-phase` (Nyquist) | Validation architecture (Nyquist method) |
| `NN-RESEARCH.md` | `research.md` | `/gsd-plan-phase`, `/gsd-plan-phase --research-phase <N>` | Technical research for the phase |
| `NN-VALIDATION.md` | `VALIDATION.md` | `/gsd-plan-phase` (Nyquist) | Validation architecture (Nyquist method) |
| `NN-UAT.md` | `UAT.md` | `/gsd-validate-phase` | User acceptance test results |
| `NN-PATTERNS.md` | *(inline)* | `/gsd-plan-phase` (pattern mapper) | Analog file mapping for the phase |
| `NN-UI-SPEC.md` | `UI-SPEC.md` | `/gsd-ui-phase` | UI design contract |

View File

@@ -4,7 +4,7 @@ Template for `.planning/phases/XX-name/DISCOVERY.md` - shallow research for libr
**Purpose:** Answer "which library/option should we use" questions during mandatory discovery in plan-phase.
For deep ecosystem research ("how do experts build this"), use `/gsd-research-phase` which produces RESEARCH.md.
For deep ecosystem research ("how do experts build this"), use `/gsd-plan-phase --research-phase` which produces RESEARCH.md.
---
@@ -142,5 +142,5 @@ Create `.planning/phases/XX-name/DISCOVERY.md`:
- Niche/complex domains (3D, games, audio, shaders)
- Need ecosystem knowledge, not just library choice
- "How do experts build this" questions
- Use `/gsd-research-phase` for these
- Use `/gsd-plan-phase --research-phase` for these
</guidelines>

View File

@@ -156,7 +156,7 @@ Updated after each plan completion.
**Pending Todos:** Ideas captured via /gsd-add-todo
- Count of pending todos
- Reference to .planning/todos/pending/
- Brief list if few, count if many (e.g., "5 pending todos — see /gsd-check-todos")
- Brief list if few, count if many (e.g., "5 pending todos — see /gsd-capture --list")
**Blockers/Concerns:** From "Next Phase Readiness" sections
- Issues that affect future work

View File

@@ -143,7 +143,7 @@ Would you like to:
1. Continue with current work
2. Add another todo
3. View all todos (/gsd-check-todos)
3. View all todos (/gsd-capture --list)
```
</step>

View File

@@ -37,8 +37,8 @@ Exit.
<step name="parse_filter">
Check for area filter in arguments:
- `/gsd-check-todos` → show all
- `/gsd-check-todos api` → filter to area:api only
- `/gsd-capture --list` → show all
- `/gsd-capture --list api` → filter to area:api only
</step>
<step name="list_todos">
@@ -56,7 +56,7 @@ Pending Todos:
---
Reply with a number to view details, or:
- `/gsd-check-todos [area]` to filter by area
- `/gsd-capture --list [area]` to filter by area
- `q` to exit
```

View File

@@ -36,7 +36,7 @@ fi
**Phase validation (before config gate):**
If `phase_found` is false, report error and exit:
```
Error: Phase ${PHASE_ARG} not found. Run /gsd-status to see available phases.
Error: Phase ${PHASE_ARG} not found. Run /gsd-progress to see available phases.
```
This runs BEFORE config gate check so user errors are surfaced immediately regardless of config state.

View File

@@ -35,7 +35,7 @@ fi
**Phase validation (before config gate):**
If `phase_found` is false, report error and exit:
```
Error: Phase ${PHASE_ARG} not found. Run /gsd-status to see available phases.
Error: Phase ${PHASE_ARG} not found. Run /gsd-progress to see available phases.
```
This runs BEFORE config gate check so user errors are surfaced immediately regardless of config state.

View File

@@ -4,7 +4,7 @@ Produces DISCOVERY.md (for Level 2-3) that informs PLAN.md creation.
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-research-phase instead, which produces RESEARCH.md.
NOTE: For comprehensive ecosystem research ("how do experts build this"), use /gsd-plan-phase --research-phase instead, which produces RESEARCH.md.
</purpose>
<depth_levels>

View File

@@ -80,10 +80,12 @@ Usage: `/gsd-discuss-phase 2`
Usage: `/gsd-discuss-phase 2 --batch`
Usage: `/gsd-discuss-phase 2 --batch=3`
**`/gsd-plan-phase <number> [--skip-research] [--gaps] [--skip-verify] [--tdd] [--mvp]`**
**`/gsd-plan-phase <number> [--research] [--skip-research] [--research-phase <N>] [--view] [--gaps] [--skip-verify] [--tdd] [--mvp]`**
Create detailed execution plan for a specific phase.
- `--skip-research` — bypass the research subagent
- `--research-phase <N>` — research-only mode. Spawns the research agent for phase `<N>`, writes `RESEARCH.md`, then exits before the planner runs. Useful for cross-phase research, doc review before committing to a planning approach, and correction-without-replanning loops. Replaces the deleted `gsd-research-phase` standalone command (#3042).
- Modifiers: `--research` forces refresh (re-spawn researcher, no prompt). `--view` prints existing `RESEARCH.md` to stdout without spawning. With neither, prompts `update / view / skip` if `RESEARCH.md` already exists.
- `--gaps` — focus only on closing gaps from a prior plan-check
- `--skip-verify` — skip the post-plan verifier loop
- `--tdd` — plan in test-driven order (tests before code)
@@ -95,6 +97,9 @@ Create detailed execution plan for a specific phase.
- Multiple plans per phase supported (XX-01, XX-02, etc.)
Usage: `/gsd-plan-phase 1`
Usage: `/gsd-plan-phase --research-phase 2` — research only on phase 2 (prompts if `RESEARCH.md` exists)
Usage: `/gsd-plan-phase --research-phase 2 --view` — print existing `RESEARCH.md`, no spawn
Usage: `/gsd-plan-phase --research-phase 2 --research` — force-refresh, no prompt
Result: Creates `.planning/phases/01-foundation/01-01-PLAN.md`
**PRD Express Path:** Pass `--prd path/to/requirements.md` to skip discuss-phase entirely. Your PRD becomes locked decisions in CONTEXT.md. Useful when you already have clear acceptance criteria.

View File

@@ -25,7 +25,7 @@ Parse JSON for: `workspace_base`, `workspaces`, `workspace_count`.
No workspaces found in ~/gsd-workspaces/
Create one with:
/gsd-new-workspace --name my-workspace --repos repo1,repo2
/gsd-workspace --new --name my-workspace --repos repo1,repo2
```
Done.

View File

@@ -73,7 +73,7 @@ Error:
No git repos found in the current directory and this is not a git repo.
Run this command from a directory containing git repos, or specify repos explicitly:
/gsd-new-workspace --name my-workspace --repos /path/to/repo1,/path/to/repo2
/gsd-workspace --new --name my-workspace --repos /path/to/repo1,/path/to/repo2
```
Exit.
@@ -84,7 +84,7 @@ Error:
Error: --auto requires --repos to specify which repos to include.
Usage:
/gsd-new-workspace --name my-workspace --repos repo1,repo2 --auto
/gsd-workspace --new --name my-workspace --repos repo1,repo2 --auto
```
Exit.

View File

@@ -54,7 +54,26 @@ Parse JSON for: `researcher_model`, `planner_model`, `checker_model`, `research_
## 2. Parse and Normalize Arguments
Extract from $ARGUMENTS: phase number (integer or decimal like `2.1`), flags (`--research`, `--skip-research`, `--gaps`, `--skip-verify`, `--skip-ui`, `--prd <filepath>`, `--reviews`, `--text`, `--bounce`, `--skip-bounce`, `--chunked`).
Extract from $ARGUMENTS: phase number (integer or decimal like `2.1`), flags (`--research`, `--skip-research`, `--research-phase <N>`, `--gaps`, `--skip-verify`, `--skip-ui`, `--prd <filepath>`, `--reviews`, `--text`, `--bounce`, `--skip-bounce`, `--chunked`).
**`--research-phase <N>` — research-only mode (#3042 + #3044).** When this flag is present, parse `<N>` as the phase number (overrides any positional phase argument), set `RESEARCH_ONLY=true`, and treat the rest of this workflow as a research-dispatch only — the planner spawn (step 8), plan-checker, verification, gaps, bounce, and post-planning-gaps blocks all skip on `RESEARCH_ONLY`. Use this for cross-phase research, doc review before committing to a planning approach, and correction-without-replanning loops. Replaces the deleted `/gsd-research-phase` command.
In research-only mode, two modifiers control behavior when `RESEARCH.md` already exists:
- **`--research`** — force-refresh re-research without prompting. Re-spawns the researcher unconditionally and overwrites the existing RESEARCH.md. (This is the existing `--research` flag's standard "force re-research" semantics, reused here.)
- **`--view`** — view-only: print existing `RESEARCH.md` to stdout, do **not** spawn the researcher. Sets `VIEW_ONLY=true`. Cheapest mode for the correction-without-replanning loop. If `RESEARCH.md` does not exist, error with a hint to drop `--view`.
```bash
RESEARCH_ONLY=false
VIEW_ONLY=false
if [[ "$ARGUMENTS" =~ --research-phase[[:space:]]+([0-9]+(\.[0-9]+)?) ]]; then
RESEARCH_ONLY=true
PHASE="${BASH_REMATCH[1]}"
fi
if $RESEARCH_ONLY && [[ "$ARGUMENTS" =~ (^|[[:space:]])--view([[:space:]]|$) ]]; then
VIEW_ONLY=true
fi
```
Set `TEXT_MODE=true` if `--text` is present in $ARGUMENTS OR `text_mode` from init JSON is `true`. When `TEXT_MODE` is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for Claude Code remote sessions (`/rc` mode) where TUI menus don't work through the Claude App.
@@ -302,6 +321,27 @@ Pass `ai_spec_path` and `framework_line` to planner in step 7 so it can referenc
**Skip if:** `--gaps` flag or `--skip-research` flag or `--reviews` flag.
### 5.0. Research-Only Modifiers (`--view`, `--research`, prompt)
**Skip if:** `RESEARCH_ONLY` is `false`.
Three branches in research-only mode (`--research-phase <N>`):
1. **`--view`** (or user picks "View" in the prompt below): print `RESEARCH.md` to stdout, no spawn, exit. If `RESEARCH.md` is missing, error with: `--view requires an existing RESEARCH.md; drop --view to spawn the researcher.`
2. **`--research`** (force-refresh): re-spawn researcher unconditionally — fall through to "Spawn gsd-phase-researcher" below.
3. **Neither flag AND `has_research=true`:** emit `RESEARCH.md already exists for Phase ${PHASE}.` and prompt the user with three choices: `1. Update — re-spawn researcher and refresh RESEARCH.md`, `2. View — print existing RESEARCH.md and exit (no spawn)`, `3. Skip — exit without spawning or printing`. Map "Update" → fall through to spawn, "View" → set `VIEW_ONLY=true` and emit RESEARCH.md as in (1), "Skip" → exit cleanly. Mirrors the deleted `/gsd-research-phase` standalone's existing-artifact menu (#3042 parity).
```bash
if [[ "$VIEW_ONLY" == "true" ]]; then
[[ -f "$research_path" ]] || { echo "Error: --view requires an existing RESEARCH.md (Phase ${PHASE}). Drop --view to spawn the researcher."; exit 1; }
cat "$research_path"; exit 0
fi
```
### 5.1. Standard Research Decision
**Skip if** `RESEARCH_ONLY=true` (the research-only mode in 5.0 already determined the path: spawn or exit). Without this guard, an LLM following the workflow could fall through into "use existing, skip to step 6" → planner spawn, violating the research-only contract. **CR #3045 finding: this gate makes the early-exit unreachable from any non-research-only branch.**
**If `has_research` is true (from init) AND no `--research` flag:** Use existing, skip to step 6.
**If RESEARCH.md missing OR `--research` flag:**
@@ -398,6 +438,24 @@ Task(
- **`## RESEARCH COMPLETE`:** Display confirmation, continue to step 6
- **`## RESEARCH BLOCKED`:** Display blocker, offer: 1) Provide context, 2) Skip research, 3) Abort
### Research-Only Early Exit (`--research-phase`)
**Skip if:** `RESEARCH_ONLY` is `false` (the default).
**If `RESEARCH_ONLY=true`:** the user invoked `/gsd-plan-phase --research-phase <N>` for research-only mode. Do **not** continue to Section 5.5+ (validation strategy, planner, plan-checker, verification, gaps, bounce, post-planning-gaps). Print the research-complete summary and exit cleanly:
```text
✓ Research-only mode complete (#3042)
Phase: ${PHASE}
RESEARCH.md: ${research_path}
Re-run /gsd-plan-phase ${PHASE} to plan the phase using this research,
or /gsd-plan-phase ${PHASE} --research to refresh research and plan.
```
This exits the workflow. The planner / plan-checker / verifier blocks below are skipped.
## 5.5. Create Validation Strategy
Skip if `nyquist_validation_enabled` is false OR `research_enabled` is false.

View File

@@ -128,7 +128,7 @@ CONTEXT: [✓ if has_context | - if not]
- [e.g. jq -r '.blockers[].text' from state-snapshot]
## Pending Todos
- [count] pending — /gsd-check-todos to review
- [count] pending — /gsd-capture --list to review
## Active Debug Sessions
- [count] active — /gsd-debug to continue

View File

@@ -1,84 +0,0 @@
<purpose>
Research how to implement a phase. Spawns gsd-phase-researcher with phase context.
Standalone research command. For most workflows, use `/gsd-plan-phase` which integrates research automatically.
</purpose>
<available_agent_types>
Valid GSD subagent types (use exact names — do not fall back to 'general-purpose'):
- gsd-phase-researcher — Researches technical approaches for a phase
</available_agent_types>
<process>
## Step 0: Resolve Model Profile
@~/.claude/get-shit-done/references/model-profile-resolution.md
Resolve model for:
- `gsd-phase-researcher`
## Step 1: Normalize and Validate Phase
@~/.claude/get-shit-done/references/phase-argument-parsing.md
```bash
PHASE_INFO=$(gsd-sdk query roadmap.get-phase "${PHASE}")
```
If `found` is false: Error and exit.
## Step 2: Check Existing Research
```bash
ls .planning/phases/${PHASE}-*/RESEARCH.md 2>/dev/null || true
```
If exists: Offer update/view/skip options.
## Step 3: Gather Phase Context
```bash
INIT=$(gsd-sdk query init.phase-op "${PHASE}")
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
# Extract: phase_dir, padded_phase, phase_number, state_path, requirements_path, context_path
AGENT_SKILLS_RESEARCHER=$(gsd-sdk query agent-skills gsd-phase-researcher)
```
## Step 4: Spawn Researcher
```
Task(
prompt="<objective>
Research implementation approach for Phase {phase}: {name}
</objective>
<files_to_read>
- {context_path} (USER DECISIONS from /gsd-discuss-phase)
- {requirements_path} (Project requirements)
- {state_path} (Project decisions and history)
</files_to_read>
${AGENT_SKILLS_RESEARCHER}
<additional_context>
Phase description: {description}
</additional_context>
<output>
Write to: .planning/phases/${PHASE}-{slug}/${PHASE}-RESEARCH.md
</output>",
subagent_type="gsd-phase-researcher",
model="{researcher_model}"
)
```
> **ORCHESTRATOR RULE — CODEX RUNTIME**: After calling Task() above, stop working on this task immediately. Do not read more files, edit code, or run tests related to this task while the subagent is active. Wait for the subagent to return its result. This prevents duplicate work, conflicting edits, and wasted context. Only resume when the subagent result is available.
## Step 5: Handle Return
- `## RESEARCH COMPLETE` — Display summary, offer: Plan/Dig deeper/Review/Done
- `## CHECKPOINT REACHED` — Present to user, spawn continuation
- `## RESEARCH INCONCLUSIVE` — Show attempts, offer: Add context/Try different mode/Manual
</process>

View File

@@ -140,7 +140,7 @@ Present complete project status to user:
Resume with: Task tool (resume parameter with agent ID)
[If pending todos exist:]
📋 [N] pending todos — /gsd-check-todos to review
📋 [N] pending todos — /gsd-capture --list to review
[If blockers exist:]
⚠️ Carried concerns:
@@ -257,7 +257,7 @@ Based on user selection, route to appropriate workflow:
**Also available:**
- `/gsd-discuss-phase [N] ${GSD_WS}` — gather context first
- `/gsd-research-phase [N] ${GSD_WS}` — investigate unknowns
- `/gsd-plan-phase --research-phase [N] ${GSD_WS}` — investigate unknowns
---
```

View File

@@ -505,7 +505,7 @@ Exit skill and invoke SlashCommand("/gsd-discuss-phase [X+1] --auto ${GSD_WS}")
**Also available:**
- `/gsd-plan-phase [X+1] ${GSD_WS}` — skip discussion, plan directly
- `/gsd-research-phase [X+1] ${GSD_WS}` — investigate unknowns
- `/gsd-plan-phase --research-phase [X+1] ${GSD_WS}` — investigate unknowns
---
```
@@ -530,7 +530,7 @@ Exit skill and invoke SlashCommand("/gsd-discuss-phase [X+1] --auto ${GSD_WS}")
**Also available:**
- `/gsd-discuss-phase [X+1] ${GSD_WS}` — revisit context
- `/gsd-research-phase [X+1] ${GSD_WS}` — investigate unknowns
- `/gsd-plan-phase --research-phase [X+1] ${GSD_WS}` — investigate unknowns
---
```

View File

@@ -0,0 +1,333 @@
// allow-test-rule: prose-driven workflow files. The .includes() / regex
// hits below build a typed record of (a) presence of slash-command tokens
// in the parsed argument-hint frontmatter, (b) the literal flag tokens
// the workflow's bash parsing block consults, and (c) absence of deleted
// slash-command tokens across user-facing surfaces. These workflow files
// ARE the implementation — there is no "real" code seam to assert against.
// The IR-build hits are not the assertion surface; assertions run on the
// resulting boolean / Set membership.
/**
* Bug #3042 + #3044: research-only flag for /gsd-plan-phase + scrub of
* 4 stale slash-command references across user-facing surfaces.
*
* #3042 (orphaned research-phase): the slash command /gsd-research-phase
* never had a stub registered. Per the maintainer decision, the
* capability moves to a flag on /gsd-plan-phase rather than restoring
* a separate command. Invocation:
*
* /gsd-plan-phase --research-phase <N>
*
* When --research-phase is present, plan-phase scopes to phase N,
* runs only the research step, and exits before spawning the planner /
* plan-checker / verifier chain.
*
* #3044 (stale slash-command refs in user-facing docs): four commands
* appear in workflow / template / doc surfaces without being
* registered:
*
* /gsd-check-todos → /gsd-capture --list
* /gsd-new-workspace → /gsd-workspace --new
* /gsd-plan-milestone-gaps → inline gap planning (#3038 partial scrub)
* /gsd-status → /gsd-progress
* /gsd-research-phase → /gsd-plan-phase --research-phase
*
* Tests assert (a) the flag is wired, (b) every deleted/never-registered
* slash-command token is absent from user-facing surfaces, (c) the
* orphaned workflows/research-phase.md is removed.
*/
'use strict';
const { test, describe } = require('node:test');
const assert = require('node:assert/strict');
const fs = require('node:fs');
const path = require('node:path');
const ROOT = path.join(__dirname, '..');
function read(rel) {
return fs.readFileSync(path.join(ROOT, rel), 'utf-8');
}
function exists(rel) {
return fs.existsSync(path.join(ROOT, rel));
}
// ─── Slash-command token extractor (typed-IR helper) ────────────────────────
/**
* Returns the Set<string> of `/gsd-*` slash-command tokens emitted by a
* markdown surface. Strips trailing arg tokens so the identity is the
* command name only.
*/
function extractSlashCommandTokens(content) {
const re = /\/gsd-[a-z0-9][a-z0-9-]*/g;
return new Set(content.match(re) || []);
}
// ─── #3042: --research-phase flag wired into /gsd-plan-phase ────────────────
describe('bug #3042: /gsd-plan-phase --research-phase flag absorbs the standalone research command', () => {
test('commands/gsd/plan-phase.md argument-hint advertises --research-phase', () => {
const content = read('commands/gsd/plan-phase.md');
// Frontmatter argument-hint is the structural place users discover
// the flag. Parse the line that starts with "argument-hint:" and
// assert the flag token is present.
const m = content.match(/^argument-hint:\s*"([^"]+)"/m);
assert.ok(m, 'plan-phase.md must declare an argument-hint frontmatter field');
assert.ok(
m[1].includes('--research-phase'),
`argument-hint must include "--research-phase"; got: ${m[1]}`
);
});
test('plan-phase.md frontmatter description still advertises plan capability (no semantics drift)', () => {
const content = read('commands/gsd/plan-phase.md');
const m = content.match(/^description:\s*(.+)$/m);
assert.ok(m, 'plan-phase.md must have a description field');
// The description should still describe planning — the flag is
// additive, not a renamed command.
assert.ok(
/plan/i.test(m[1]),
`description should still mention planning; got: ${m[1]}`
);
});
test('workflows/plan-phase.md parses --research-phase and sets a research-only mode', () => {
const content = read('get-shit-done/workflows/plan-phase.md');
// The arg-parsing section of the workflow must mention the new flag
// by name. This is the structural seam the LLM follows.
assert.ok(
content.includes('--research-phase'),
'plan-phase.md workflow must reference the --research-phase flag in its argument-parsing section'
);
});
test('workflows/plan-phase.md skips planner/verifier when in research-only mode', () => {
const content = read('get-shit-done/workflows/plan-phase.md');
// Look for explicit early-exit prose so the LLM knows to stop after
// research. We accept any of: "research-only", "research only mode",
// "skip if --research-phase", "RESEARCH_ONLY", "exit after research".
const patterns = [
/research[ -]only/i,
/RESEARCH_ONLY/,
/skip if[^\n]*--research-phase/i,
/exit (?:after|when)[^\n]*research/i,
];
const hits = patterns.filter((re) => re.test(content));
assert.ok(
hits.length > 0,
`plan-phase workflow must contain explicit early-exit prose for --research-phase mode; ` +
`none of [research-only, RESEARCH_ONLY, "skip if --research-phase", "exit after research"] matched`
);
});
test('orphaned workflows/research-phase.md is removed', () => {
assert.equal(
exists('get-shit-done/workflows/research-phase.md'),
false,
'workflows/research-phase.md must be removed; the capability now lives on /gsd-plan-phase --research-phase'
);
});
test('argument-hint advertises --view as a research-only modifier', () => {
const content = read('commands/gsd/plan-phase.md');
const m = content.match(/^argument-hint:\s*"([^"]+)"/m);
assert.ok(m, 'plan-phase.md must declare an argument-hint frontmatter field');
assert.ok(
m[1].includes('--view'),
`argument-hint must include --view (research-only view-only mode); got: ${m[1]}`
);
});
test('workflow handles --view by printing existing RESEARCH.md without spawning', () => {
const content = read('get-shit-done/workflows/plan-phase.md');
// The workflow must reference the --view flag as a no-spawn mode
// for research-only invocations. We accept any of: "view-only",
// "VIEW_ONLY", "skip if --view", "no spawn" alongside --view.
assert.ok(
/--view/.test(content),
'plan-phase workflow must reference the --view flag'
);
const viewModePatterns = [
/view[ -]only/i,
/VIEW_ONLY/,
/no[ -]spawn/i,
/print[^\n]*RESEARCH\.md/i,
/display[^\n]*RESEARCH\.md/i,
];
const hits = viewModePatterns.filter((re) => re.test(content));
assert.ok(
hits.length > 0,
`plan-phase workflow must explain that --view prints existing RESEARCH.md without spawning; ` +
`expected one of [view-only, VIEW_ONLY, no-spawn, "print/display RESEARCH.md"]`
);
});
test('workflow uses --research as the force-refresh signal in research-only mode', () => {
const content = read('get-shit-done/workflows/plan-phase.md');
// The plan-phase workflow already had a --research flag with
// "force re-research" semantics. In research-only mode, that flag
// must short-circuit the "RESEARCH.md exists, what do you want to
// do?" prompt and unconditionally re-spawn. Assert the workflow
// documents the combined semantics.
const forceRefreshPatterns = [
/--research[^\n]*force[^\n]*refresh/i,
/--research[^\n]*re[ -]?research/i,
/force[ -]?refresh[^\n]*--research/i,
];
const hits = forceRefreshPatterns.filter((re) => re.test(content));
assert.ok(
hits.length > 0,
`plan-phase workflow must document that --research forces re-research (skip the "exists" prompt) when used with --research-phase`
);
});
test('workflow has an existing-RESEARCH.md prompt path (update/view/skip) within proximity', () => {
const content = read('get-shit-done/workflows/plan-phase.md');
// CR #3045 finding: the previous version of this test asserted
// `update`, `view`, `skip` appeared anywhere in the file, which was
// tautological — those words occur all over the workflow for
// unrelated reasons (--skip-research, --view flag declarations,
// etc.). Tighten to a proximity check: all three choice tokens
// must occur in a window of ~400 chars surrounding "RESEARCH.md
// already exists" / "Update — re-spawn" / equivalent prompt prose,
// proving the prompt section is genuinely present.
const idx = content.indexOf('RESEARCH.md already exists');
assert.ok(
idx >= 0,
'plan-phase workflow must contain the literal "RESEARCH.md already exists" prompt header in the research-only existing-artifact section'
);
const window = content.slice(idx, idx + 600);
const hasUpdate = /\b(?:update|refresh|re-spawn)\b/i.test(window);
const hasView = /\bview\b/i.test(window);
const hasSkip = /\bskip\b/i.test(window);
assert.ok(
hasUpdate && hasView && hasSkip,
`prompt section near "RESEARCH.md already exists" must mention all three choices (update/refresh/re-spawn, view, skip); ` +
`got update=${hasUpdate} view=${hasView} skip=${hasSkip}`
);
});
});
// ─── #3044: every deleted slash-command absent from user-facing surfaces ────
const DELETED_COMMANDS = [
'/gsd-check-todos', // → /gsd-capture --list
'/gsd-new-workspace', // → /gsd-workspace --new
'/gsd-status', // → /gsd-progress
'/gsd-plan-milestone-gaps', // → inline gap planning
'/gsd-research-phase', // → /gsd-plan-phase --research-phase
];
// Surfaces a user reads, browses, or follows routing prose from. Each
// must not emit any of the deleted slash-command tokens. Localized doc
// sets are included so the rename actually reaches every reader.
const USER_FACING_SURFACES = [
// Top-level repo
'README.md',
// Primary docs
'docs/USER-GUIDE.md',
'docs/FEATURES.md',
'docs/INVENTORY.md',
'docs/COMMANDS.md',
'docs/issue-driven-orchestration.md',
// Workflow surfaces that emit user-typed slash commands
'get-shit-done/workflows/check-todos.md',
'get-shit-done/workflows/add-todo.md',
'get-shit-done/workflows/resume-project.md',
'get-shit-done/workflows/progress.md',
'get-shit-done/workflows/code-review.md',
'get-shit-done/workflows/new-workspace.md',
'get-shit-done/workflows/list-workspaces.md',
'get-shit-done/workflows/transition.md',
'get-shit-done/workflows/discovery-phase.md',
// Reference + template surfaces
'get-shit-done/references/continuation-format.md',
'get-shit-done/templates/state.md',
'get-shit-done/templates/discovery.md',
'get-shit-done/templates/README.md',
];
describe('bug #3044: deleted slash-commands scrubbed from user-facing surfaces', () => {
for (const rel of USER_FACING_SURFACES) {
test(`${rel}: parsed slash-command token set excludes every deleted command`, () => {
if (!exists(rel)) {
// Some surfaces may not exist in every repo state (e.g. when the
// workflow file is itself removed in this PR). Skip with a
// structural note rather than a hard failure — the deletion is
// verified by extractSlashCommandTokens against the surfaces
// that DO exist.
return;
}
const tokens = extractSlashCommandTokens(read(rel));
for (const cmd of DELETED_COMMANDS) {
assert.equal(
tokens.has(cmd),
false,
`${rel}: parsed slash-command token set still contains deleted "${cmd}"`
);
}
});
}
});
// ─── Localized doc sets must also be scrubbed ───────────────────────────────
const LOCALES = ['ja-JP', 'ko-KR', 'zh-CN', 'pt-BR'];
const LOCALIZED_DOCS = [
'README.md',
'USER-GUIDE.md',
'FEATURES.md',
'COMMANDS.md',
];
describe('bug #3044: localized doc sets also scrubbed', () => {
for (const locale of LOCALES) {
for (const doc of LOCALIZED_DOCS) {
const rel = path.posix.join('docs', locale, doc);
test(`${rel}: parsed slash-command token set excludes every deleted command`, () => {
if (!exists(rel)) return; // some locales may not have every doc
const tokens = extractSlashCommandTokens(read(rel));
for (const cmd of DELETED_COMMANDS) {
assert.equal(
tokens.has(cmd),
false,
`${rel}: parsed slash-command token set still contains deleted "${cmd}"`
);
}
});
}
}
});
// ─── Replacement commands are documented ────────────────────────────────────
describe('replacement commands appear where the deleted ones used to live', () => {
test('docs/issue-driven-orchestration.md uses /gsd-workspace --new (not /gsd-new-workspace)', () => {
const content = read('docs/issue-driven-orchestration.md');
const tokens = extractSlashCommandTokens(content);
assert.equal(
tokens.has('/gsd-workspace'),
true,
'issue-driven-orchestration.md must reference /gsd-workspace as the workspace command'
);
// The "--new" flag must appear within 60 chars of /gsd-workspace —
// proves the flag belongs to that command rather than appearing
// somewhere unrelated.
const proximityRe = /\/gsd-workspace[^\n]{0,60}--new/;
assert.ok(
proximityRe.test(content),
'issue-driven-orchestration.md must document the "/gsd-workspace … --new" form'
);
});
test('workflows/code-review.md error path points at /gsd-progress (not /gsd-status)', () => {
const content = read('get-shit-done/workflows/code-review.md');
const tokens = extractSlashCommandTokens(content);
assert.equal(
tokens.has('/gsd-progress'),
true,
'code-review.md error path must route the user at /gsd-progress'
);
});
});

View File

@@ -91,7 +91,7 @@ function parseGuide() {
// Track which referenced commands appear at least once anywhere in the
// guide. This prevents drift if /gsd-* command names are renamed.
const requiredCommands = [
'/gsd-new-workspace',
'/gsd-workspace --new',
'/gsd-manager',
'/gsd-autonomous',
'/gsd-discuss-phase',
@@ -114,7 +114,7 @@ function parseGuide() {
statemd: /STATE\.md/.test(conceptMappingSection),
contextmd: /CONTEXT\.md/.test(conceptMappingSection),
planmd: /PLAN\.md/.test(conceptMappingSection),
workspaceCommand: /\/gsd-new-workspace/.test(conceptMappingSection),
workspaceCommand: /\/gsd-workspace\s+--new/.test(conceptMappingSection),
executionCommand:
/\/gsd-manager/.test(conceptMappingSection) ||
/\/gsd-autonomous/.test(conceptMappingSection),
@@ -202,7 +202,7 @@ describe('issue-driven-orchestration guide (#2840)', () => {
statemd: 'STATE.md must appear in the concept mapping',
contextmd: 'CONTEXT.md must appear in the concept mapping',
planmd: 'PLAN.md must appear in the concept mapping',
workspaceCommand: '/gsd-new-workspace must appear in the concept mapping',
workspaceCommand: '/gsd-workspace --new must appear in the concept mapping',
executionCommand:
'/gsd-manager or /gsd-autonomous must appear in the concept mapping',
verifyCommand: '/gsd-verify-work must appear in the concept mapping',