* fix(workflows): agent-skills query keys must match subagent_type Eight workflow files called `gsd-sdk query agent-skills <KEY>` with a key that did not match any `subagent_type` Task() spawns in the same workflow (or any existing `agents/<KEY>.md`): - research-phase.md:45 — gsd-researcher → gsd-phase-researcher - plan-phase.md:36 — gsd-researcher → gsd-phase-researcher - plan-phase.md:38 — gsd-checker → gsd-plan-checker - quick.md:145 — gsd-checker → gsd-plan-checker - verify-work.md:36 — gsd-checker → gsd-plan-checker - new-milestone.md:207 — gsd-synthesizer → gsd-research-synthesizer - new-project.md:63 — gsd-synthesizer → gsd-research-synthesizer - ui-review.md:21 — gsd-ui-reviewer → gsd-ui-auditor - discuss-phase.md:114 — gsd-advisor → gsd-advisor-researcher Effect before this fix: users configuring `agent_skills.<correct-type>` in .planning/config.json got no injection on these paths because the workflow asked the SDK for a different (non-existent) key. The SDK correctly returned "" for the unknown key, which then interpolated as an empty string into the Task() prompt. Silent no-op. The discuss-phase advisor case is a subtle variant — the spawn site uses `subagent_type="general-purpose"` and loads the agent role via `Read(~/.claude/agents/gsd-advisor-researcher.md)`. The injection key must follow the agent identity (gsd-advisor-researcher), not the technical spawn type. This is a follow-up to #2555 — the SDK-side fix in that PR (#2587) only becomes fully effective once the call sites use the right keys. Adds `sdk/src/workflow-agent-skills-consistency.test.ts` as a contract test: every `agent-skills <slug>` invocation in `get-shit-done/workflows/**/*.md` must reference an existing `agents/<slug>.md`. Fails loudly on future key typos. Closes #2615 * test: harden workflow agent-skills regex per review feedback Review (#2616): CodeRabbit flagged the `agent-skills <slug>` pattern as too permissive (can match prose mentions of the string) and the per-line scan as brittle (misses commands wrapped across lines). - Require full `gsd-sdk query agent-skills` prefix before capture + `\b` around the pattern so prose references no longer match. - Scan each file's full content (not line-by-line) so `\s+` can span newlines; resolve 1-based line number from match index. - Add JSDoc on helpers and on QUERY_KEY_PATTERN. Verified: RED against base (`f30da83`) produces the same 9 violations as before; GREEN on fixed tree. --------- Co-authored-by: forfrossen <forfrossensvart@gmail.com>
83 lines
2.1 KiB
Markdown
83 lines
2.1 KiB
Markdown
<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 2>/dev/null)
|
|
```
|
|
|
|
## 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}"
|
|
)
|
|
```
|
|
|
|
## 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>
|