fix(3605): scrub retired slash commands from agents/*.md

Six surviving references to /gsd-research-phase (deleted in #3042) and
/gsd-insert-phase (consolidated into /gsd:phase insert in v1.40.0)
remained in five agent contracts because every prior scrub pass (#3029,
#3044, #3131) limited its SEARCH_DIRS to workflows/, references/,
templates/, contexts/, commands/, and hooks/ — agents/ was outside scope.
agents/gsd-executor.md:195 is user-facing: the executor surfaces it
during a package-install failure recovery checkpoint, so a real user
hits "Unknown command" while trying to recover from a stalled phase.

Replacements:
- /gsd-research-phase -> /gsd:plan-phase --research-phase <N>
  (agents/gsd-executor.md:195, agents/gsd-phase-researcher.md:17,
   agents/gsd-planner.md:186, agents/gsd-planner.md:991,
   agents/gsd-research-synthesizer.md:115)
- /gsd-insert-phase -> /gsd:phase insert
  (agents/gsd-roadmapper.md:205)

Adds tests/bug-3605-stale-research-insert-phase-agent-refs.test.cjs as
the regression guard. It scans agents/*.md for any retired command name
(/gsd-research-phase, /gsd-insert-phase, /gsd-add-phase,
/gsd-remove-phase, /gsd-analyze-dependencies) with proper word-boundary
matching so a future consolidation that misses agents/ fails CI.

The guard mirrors tests/bug-2950-stale-command-refs.test.cjs which
covers the same anti-pattern for workflows/.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Tom Boucher
2026-05-15 21:54:03 -04:00
parent 38c35a608d
commit 18ffaa86cc
7 changed files with 98 additions and 6 deletions

View File

@@ -192,7 +192,7 @@ This exclusion exists because a failed install may indicate a slopsquatted or ha
`[package-name]` could not be installed. Before proceeding:
1. Verify the package exists and is legitimate: https://npmjs.com/package/[package-name]
2. Confirm the package name is spelled correctly in PLAN.md
3. If the package does not exist, return to /gsd-research-phase to find the correct package
3. If the package does not exist, re-run /gsd-plan-phase --research-phase &lt;N&gt; to find the correct package
</how-to-verify>
<resume-signal>Type "verified" with the correct package name, or "abort" to stop the phase</resume-signal>
</task>

View File

@@ -14,7 +14,7 @@ color: cyan
<role>
You are a GSD phase researcher. You answer "What do I need to know to PLAN this phase well?" and produce a single RESEARCH.md that the planner consumes.
Spawned by `/gsd:plan-phase` (integrated) or `/gsd-research-phase` (standalone).
Spawned by `/gsd:plan-phase` (integrated) or `/gsd:plan-phase --research-phase <N>` (standalone).
@~/.claude/get-shit-done/references/mandatory-initial-read.md

View File

@@ -183,7 +183,7 @@ Discovery is MANDATORY unless you can prove current context exists.
- Level 2+: New library not in package.json, external API, "choose/select/evaluate" in description
- Level 3: "architecture/design/system", multiple external services, data modeling, auth design
For niche domains (3D, games, audio, shaders, ML), suggest `/gsd-research-phase` before plan-phase.
For niche domains (3D, games, audio, shaders, ML), suggest `/gsd:plan-phase --research-phase <N>` before plan-phase.
</discovery_levels>
@@ -988,7 +988,7 @@ Use `phase_dir` from init context (already loaded in load_project_state).
```bash
cat "$phase_dir"/*-CONTEXT.md 2>/dev/null # From /gsd:discuss-phase
cat "$phase_dir"/*-RESEARCH.md 2>/dev/null # From /gsd-research-phase
cat "$phase_dir"/*-RESEARCH.md 2>/dev/null # From /gsd:plan-phase --research-phase
cat "$phase_dir"/*-DISCOVERY.md 2>/dev/null # From mandatory discovery
```

View File

@@ -112,7 +112,7 @@ This is the most important section. Based on combined research:
- Which pitfalls it must avoid
**Add research flags:**
- Which phases likely need `/gsd-research-phase` during planning?
- Which phases likely need `/gsd:plan-phase --research-phase <N>` during planning?
- Which phases have well-documented patterns (skip research)?
## Step 5: Assess Confidence

View File

@@ -202,7 +202,7 @@ Track coverage as you go.
**Integer phases (1, 2, 3):** Planned milestone work.
**Decimal phases (2.1, 2.2):** Urgent insertions after planning.
- Created via `/gsd-insert-phase`
- Created via `/gsd:phase insert`
- Execute between integers: 1 → 1.1 → 1.2 → 2
**Starting number:**