feat: Phase 2 caller migration — gsd-sdk query in workflows, agents, commands (#2179)

* feat: Phase 2 caller migration — gsd-sdk query in workflows (#2122)

Cherry-picked orchestration rewrites from feat/sdk-foundation (#2008, 4018fee) onto current main, resolving conflicts to keep upstream worktree guards and post-merge test gate. SDK stub registry omitted (out of Phase 2 scope per #2122).

Refs: #2122 #2008
Made-with: Cursor

* docs: add gsd-sdk query migration blurb

Made-with: Cursor

* docs(workflows): extend Phase 2 gsd-sdk query caller migration

- Swap node gsd-tools.cjs for gsd-sdk query in review, plan-phase, execute-plan,
  ship, extract_learnings, ai-integration-phase, eval-review, next, thread
- Document graphify CJS-only in gsd-planner; dual-path in CLI-TOOLS and ARCHITECTURE
- Update tests: workstreams gsd-sdk path, thread frontmatter.get, workspace init.*,
  CRLF-safe autonomous frontmatter parse
- CHANGELOG: Phase 2 caller migration scope

Made-with: Cursor

* docs(phase2): USER-GUIDE + remaining gsd-sdk query call sites

- USER-GUIDE: dual-path CLI section; state validate/sync use full CJS path
- Commands: debug (config-get+tdd), quick (security note), intel Task prompt
- Agent: gsd-debug-session-manager resolve-model via jq
- Workflows: milestone-summary, forensics, next, complete-milestone/verify-work
  (audit-open CJS notes), discuss-phase, progress, verify-phase, add/insert/remove
  phase, transition, manager, quick workflow; remove-phase commit without --files
- Test: quick-session-management accepts frontmatter.get
- CHANGELOG: Phase 2 follow-up bullet

Made-with: Cursor

* docs(phase2): align gsd-sdk query examples in commands and agents

- init.* query names; frontmatter.get uses positional field name
- state.* handlers use positional args; commit uses positional paths
- CJS-only notes for from-gsd2 and graphify; learnings.query wording
- CHANGELOG: Phase 2 orchestration doc pass

Made-with: Cursor

* docs(phase2): normalize gsd-sdk query commit to positional file paths

- Strip --files from commit examples in workflows, references, commands
- Keep commit-to-subrepo ... --files (separate handler)
- git-planning-commit.md: document positional args
- Tests: new-project commit line, state.record-session, gates CRLF, roadmap.analyze
- CHANGELOG [Unreleased]

Made-with: Cursor

* feat(sdk): gsd-sdk query parity with gsd-tools and PR 2179 registry fixes

- Route query via longest-prefix match and dotted single-token expansion; fall back
  to runGsdToolsQuery (same argv as node gsd-tools.cjs) for full CLI coverage.
- Parse gsd-sdk query permissively so gsd-tools flags (--json, --verify, etc.) are
  not rejected by strict parseArgs.
- resolveGsdToolsPath: honor GSD_TOOLS_PATH; prefer bundled get-shit-done copy
  over project .claude installs; export runGsdToolsQuery from the SDK.
- Fix gsd-tools audit-open (core.output; pass object for --json JSON).
- Register summary-extract as alias of summary.extract; fix audit-fix workflow to
  call audit-uat instead of invalid init.audit-uat (PR review).

Updates QUERY-HANDLERS.md and CHANGELOG [Unreleased].

Made-with: Cursor

* fix(sdk): Phase 2 scope — Trek-e review (#2179, #2122)

- Remove gsd-sdk query passthrough to gsd-tools.cjs; drop GSD_TOOLS_PATH
- Consolidate argv routing in resolveQueryArgv(); update USAGE and QUERY-HANDLERS
- Surface @file: read failures in GSDTools.parseOutput
- execute-plan: defer Task Commit Protocol to gsd-executor
- stale-colon-refs: skip .planning/ and root CLAUDE.md (gitignored overlays)
- CHANGELOG [Unreleased]: maintainer review and routing notes

Made-with: Cursor
This commit is contained in:
Rezolv
2026-04-15 22:46:31 -04:00
committed by GitHub
parent 762b8ed25b
commit d3a79917fa
120 changed files with 845 additions and 586 deletions

View File

@@ -194,7 +194,7 @@ The **Fix:** section may contain:
If a finding references multiple files (in Fix section or Issue section):
- Collect ALL file paths into `files` array
- Apply fix to each file
- Commit all modified files atomically (single commit, multiple files in `--files` list)
- Commit all modified files atomically (single commit, list every file path after the message — `commit` uses positional paths, not `--files`)
**Parsing Rules:**
@@ -308,20 +308,21 @@ For each finding in sorted order:
**If verification passed:**
Use gsd-tools commit command with conventional format:
Use `gsd-sdk query commit` with conventional format (message first, then every staged file path):
```bash
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit \
gsd-sdk query commit \
"fix({padded_phase}): {finding_id} {short_description}" \
--files {all_modified_files}
{all_modified_files}
```
Examples:
- `fix(02): CR-01 fix SQL injection in auth.py`
- `fix(03): WR-05 add null check before array access`
**Multiple files:** List ALL modified files in `--files` (space-separated):
**Multiple files:** List ALL modified files after the message (space-separated):
```bash
--files src/api/auth.ts src/types/user.ts tests/auth.test.ts
gsd-sdk query commit "fix(02): CR-01 ..." \
src/api/auth.ts src/types/user.ts tests/auth.test.ts
```
**Extract commit hash:**
@@ -442,7 +443,7 @@ _Iteration: {N}_
**DO record which files will be touched** before every fix attempt — this is your rollback list. Rollback is `git checkout -- {file}`, not content capture.
**DO commit each fix atomically** — one commit per finding, listing ALL modified files in `--files` argument.
**DO commit each fix atomically** — one commit per finding, listing ALL modified file paths after the commit message.
**DO use Edit tool (preferred)** over Write tool for targeted changes. Edit provides better diff visibility.
@@ -504,7 +505,7 @@ Fixes are committed **per-finding**. This has operational implications:
- [ ] All in-scope findings attempted (either fixed or skipped with reason)
- [ ] Each fix committed atomically with `fix({padded_phase}): {id} {description}` format
- [ ] All modified files listed in each commit's `--files` argument (multi-file fix support)
- [ ] All modified files listed after each commit message (multi-file fix support)
- [ ] REVIEW-FIX.md created with accurate counts, status, and iteration number
- [ ] No source files left in broken state (failed fixes rolled back via git checkout)
- [ ] No partial or uncommitted changes remain after execution

View File

@@ -93,7 +93,7 @@ Task(
Resolve the debugger model before spawning:
```bash
debugger_model=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" resolve-model gsd-debugger --raw)
debugger_model=$(gsd-sdk query resolve-model gsd-debugger 2>/dev/null | jq -r '.model' 2>/dev/null || true)
```
## Step 3: Handle Agent Return

View File

@@ -1227,7 +1227,7 @@ mv .planning/debug/{slug}.md .planning/debug/resolved/
**Check planning config using state load (commit_docs is available from the output):**
```bash
INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state load)
INIT=$(gsd-sdk query state.load)
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
# commit_docs is in the JSON output
```
@@ -1245,7 +1245,7 @@ Root cause: {root_cause}"
Then commit planning docs via CLI (respects `commit_docs` config automatically):
```bash
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs: resolve debug {slug}" --files .planning/debug/resolved/{slug}.md
gsd-sdk query commit "docs: resolve debug {slug}" .planning/debug/resolved/{slug}.md
```
**Append to knowledge base:**
@@ -1276,7 +1276,7 @@ Then append the entry:
Commit the knowledge base update alongside the resolved session:
```bash
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs: update debug knowledge base with {slug}" --files .planning/debug/knowledge-base.md
gsd-sdk query commit "docs: update debug knowledge base with {slug}" .planning/debug/knowledge-base.md
```
Report completion and offer next steps.

View File

@@ -72,7 +72,7 @@ This ensures project-specific patterns, conventions, and best practices are appl
Load execution context:
```bash
INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init execute-phase "${PHASE}")
INIT=$(gsd-sdk query init.execute-phase "${PHASE}")
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
```
@@ -248,8 +248,8 @@ Do NOT continue reading. Analysis without action is a stuck signal.
Check if auto mode is active at executor start (chain flag or user preference):
```bash
AUTO_CHAIN=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" config-get workflow._auto_chain_active 2>/dev/null || echo "false")
AUTO_CFG=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" config-get workflow.auto_advance 2>/dev/null || echo "false")
AUTO_CHAIN=$(gsd-sdk query config-get workflow._auto_chain_active 2>/dev/null || echo "false")
AUTO_CFG=$(gsd-sdk query config-get workflow.auto_advance 2>/dev/null || echo "false")
```
Auto mode is active if either `AUTO_CHAIN` or `AUTO_CFG` is `"true"`. Store the result for checkpoint handling below.
@@ -388,7 +388,7 @@ git add src/types/user.ts
**If `sub_repos` is configured (non-empty array from init context):** Use `commit-to-subrepo` to route files to their correct sub-repo:
```bash
node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit-to-subrepo "{type}({phase}-{plan}): {concise task description}" --files file1 file2 ...
gsd-sdk query commit-to-subrepo "{type}({phase}-{plan}): {concise task description}" --files file1 file2 ...
```
Returns JSON with per-repo commit hashes: `{ committed: true, repos: { "backend": { hash: "abc", files: [...] }, ... } }`. Record all hashes for SUMMARY.
@@ -515,38 +515,36 @@ Do NOT skip. Do NOT proceed to state updates if self-check fails.
</self_check>
<state_updates>
After SUMMARY.md, update STATE.md using gsd-tools:
After SUMMARY.md, update STATE.md using `gsd-sdk query` state handlers (positional args; see `sdk/src/query/QUERY-HANDLERS.md`):
```bash
# Advance plan counter (handles edge cases automatically)
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state advance-plan
gsd-sdk query state.advance-plan
# Recalculate progress bar from disk state
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state update-progress
gsd-sdk query state.update-progress
# Record execution metrics
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state record-metric \
--phase "${PHASE}" --plan "${PLAN}" --duration "${DURATION}" \
--tasks "${TASK_COUNT}" --files "${FILE_COUNT}"
# Record execution metrics (phase, plan, duration, tasks, files)
gsd-sdk query state.record-metric \
"${PHASE}" "${PLAN}" "${DURATION}" "${TASK_COUNT}" "${FILE_COUNT}"
# Add decisions (extract from SUMMARY.md key-decisions)
for decision in "${DECISIONS[@]}"; do
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state add-decision \
--phase "${PHASE}" --summary "${decision}"
gsd-sdk query state.add-decision "${decision}"
done
# Update session info
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state record-session \
--stopped-at "Completed ${PHASE}-${PLAN}-PLAN.md"
# Update session info (timestamp, stopped-at, resume-file)
gsd-sdk query state.record-session \
"" "Completed ${PHASE}-${PLAN}-PLAN.md" "None"
```
```bash
# Update ROADMAP.md progress for this phase (plan counts, status)
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap update-plan-progress "${PHASE_NUMBER}"
gsd-sdk query roadmap.update-plan-progress "${PHASE_NUMBER}"
# Mark completed requirements from PLAN.md frontmatter
# Extract the `requirements` array from the plan's frontmatter, then mark each complete
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" requirements mark-complete ${REQ_IDS}
gsd-sdk query requirements.mark-complete ${REQ_IDS}
```
**Requirement IDs:** Extract from the PLAN.md frontmatter `requirements:` field (e.g., `requirements: [AUTH-01, AUTH-02]`). Pass all IDs to `requirements mark-complete`. If the plan has no requirements field, skip this step.
@@ -564,13 +562,14 @@ node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" requirements mark-complete
**For blockers found during execution:**
```bash
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state add-blocker "Blocker description"
gsd-sdk query state.add-blocker "Blocker description"
```
</state_updates>
<final_commit>
```bash
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs({phase}-{plan}): complete [plan-name] plan" --files .planning/phases/XX-name/{phase}-{plan}-SUMMARY.md .planning/STATE.md .planning/ROADMAP.md .planning/REQUIREMENTS.md
gsd-sdk query commit "docs({phase}-{plan}): complete [plan-name] plan" \
.planning/phases/XX-name/{phase}-{plan}-SUMMARY.md .planning/STATE.md .planning/ROADMAP.md .planning/REQUIREMENTS.md
```
Separate from per-task commits — captures execution results only.

View File

@@ -37,7 +37,7 @@ Write machine-parseable, evidence-based intelligence. Every claim references act
- **Always include file paths.** Every claim must reference the actual code location.
- **Write current state only.** No temporal language ("recently added", "will be changed").
- **Evidence-based.** Read the actual files. Do not guess from file names or directory structures.
- **Cross-platform.** Use Glob, Read, and Grep tools -- not Bash `ls`, `find`, or `cat`. Bash file commands fail on Windows. Only use Bash for `node $HOME/.claude/get-shit-done/bin/gsd-tools.cjs intel` CLI calls.
- **Cross-platform.** Use Glob, Read, and Grep tools -- not Bash `ls`, `find`, or `cat`. Bash file commands fail on Windows. Only use Bash for `gsd-sdk query intel` CLI calls.
- **ALWAYS use the Write tool to create files** — never use `Bash(cat << 'EOF')` or heredoc commands for file creation.
</role>
@@ -106,7 +106,7 @@ All JSON files include a `_meta` object with `updated_at` (ISO timestamp) and `v
}
```
**exports constraint:** Array of ACTUAL exported symbol names extracted from `module.exports` or `export` statements. MUST be real identifiers (e.g., `"configLoad"`, `"stateUpdate"`), NOT descriptions (e.g., `"config operations"`). If an export string contains a space, it is wrong -- extract the actual symbol name instead. Use `node $HOME/.claude/get-shit-done/bin/gsd-tools.cjs intel extract-exports <file>` to get accurate exports.
**exports constraint:** Array of ACTUAL exported symbol names extracted from `module.exports` or `export` statements. MUST be real identifiers (e.g., `"configLoad"`, `"stateUpdate"`), NOT descriptions (e.g., `"config operations"`). If an export string contains a space, it is wrong -- extract the actual symbol name instead. Use `gsd-sdk query intel.extract-exports <file>` to get accurate exports.
Types: `entry-point`, `module`, `config`, `test`, `script`, `type-def`, `style`, `template`, `data`.
@@ -202,7 +202,7 @@ Glob for project structure indicators:
Read package.json, configs, and build files. Write `stack.json`. Then patch its timestamp:
```bash
node $HOME/.claude/get-shit-done/bin/gsd-tools.cjs intel patch-meta .planning/intel/stack.json --cwd <project_root>
gsd-sdk query intel.patch-meta .planning/intel/stack.json --cwd <project_root>
```
### Step 3: File Graph
@@ -211,7 +211,7 @@ Glob source files (`**/*.ts`, `**/*.js`, `**/*.py`, etc., excluding node_modules
Read key files (entry points, configs, core modules) for imports/exports.
Write `files.json`. Then patch its timestamp:
```bash
node $HOME/.claude/get-shit-done/bin/gsd-tools.cjs intel patch-meta .planning/intel/files.json --cwd <project_root>
gsd-sdk query intel.patch-meta .planning/intel/files.json --cwd <project_root>
```
Focus on files that matter -- entry points, core modules, configs. Skip test files and generated code unless they reveal architecture.
@@ -222,7 +222,7 @@ Grep for route definitions, endpoint declarations, CLI command registrations.
Patterns to search: `app.get(`, `router.post(`, `@GetMapping`, `def route`, express route patterns.
Write `apis.json`. If no API endpoints found, write an empty entries object. Then patch its timestamp:
```bash
node $HOME/.claude/get-shit-done/bin/gsd-tools.cjs intel patch-meta .planning/intel/apis.json --cwd <project_root>
gsd-sdk query intel.patch-meta .planning/intel/apis.json --cwd <project_root>
```
### Step 5: Dependencies
@@ -231,7 +231,7 @@ Read package.json (dependencies, devDependencies), requirements.txt, go.mod, Car
Cross-reference with actual imports to populate `used_by`.
Write `deps.json`. Then patch its timestamp:
```bash
node $HOME/.claude/get-shit-done/bin/gsd-tools.cjs intel patch-meta .planning/intel/deps.json --cwd <project_root>
gsd-sdk query intel.patch-meta .planning/intel/deps.json --cwd <project_root>
```
### Step 6: Architecture
@@ -241,7 +241,7 @@ Write `arch.md`.
### Step 6.5: Self-Check
Run: `node $HOME/.claude/get-shit-done/bin/gsd-tools.cjs intel validate --cwd <project_root>`
Run: `gsd-sdk query intel.validate --cwd <project_root>`
Review the output:
@@ -253,7 +253,7 @@ This step is MANDATORY -- do not skip it.
### Step 7: Snapshot
Run: `node $HOME/.claude/get-shit-done/bin/gsd-tools.cjs intel snapshot --cwd <project_root>`
Run: `gsd-sdk query intel.snapshot --cwd <project_root>`
This writes `.last-refresh.json` with accurate timestamps and hashes. Do NOT write `.last-refresh.json` manually.
</execution_flow>

View File

@@ -158,7 +158,7 @@ When researching "best library for X": find what the ecosystem actually uses, do
Check `brave_search` from init context. If `true`, use Brave Search for higher quality results:
```bash
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" websearch "your query" --limit 10
gsd-sdk query websearch "your query" --limit 10
```
**Options:**
@@ -514,7 +514,7 @@ Orchestrator provides: phase number/name, description/goal, requirements, constr
Load phase context using init command:
```bash
INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init phase-op "${PHASE}")
INIT=$(gsd-sdk query init.phase-op "${PHASE}")
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
```
@@ -761,7 +761,7 @@ Write to: `$PHASE_DIR/$PADDED_PHASE-RESEARCH.md`
## Step 7: Commit Research (optional)
```bash
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs($PHASE): research phase domain" --files "$PHASE_DIR/$PADDED_PHASE-RESEARCH.md"
gsd-sdk query commit "docs($PHASE): research phase domain" "$PHASE_DIR/$PADDED_PHASE-RESEARCH.md"
```
## Step 8: Return Structured Result

View File

@@ -630,7 +630,7 @@ issue:
Load phase operation context:
```bash
INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init phase-op "${PHASE_ARG}")
INIT=$(gsd-sdk query init.phase-op "${PHASE_ARG}")
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
```
@@ -642,7 +642,7 @@ Orchestrator provides CONTEXT.md content in the verification prompt. If provided
ls "$phase_dir"/*-PLAN.md 2>/dev/null
# Read research for Nyquist validation data
cat "$phase_dir"/*-RESEARCH.md 2>/dev/null
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "$phase_number"
gsd-sdk query roadmap.get-phase "$phase_number"
ls "$phase_dir"/*-BRIEF.md 2>/dev/null
```
@@ -650,12 +650,12 @@ ls "$phase_dir"/*-BRIEF.md 2>/dev/null
## Step 2: Load All Plans
Use gsd-tools to validate plan structure:
Use `gsd-sdk query` to validate plan structure:
```bash
for plan in "$PHASE_DIR"/*-PLAN.md; do
echo "=== $plan ==="
PLAN_STRUCTURE=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" verify plan-structure "$plan")
PLAN_STRUCTURE=$(gsd-sdk query verify.plan-structure "$plan")
echo "$PLAN_STRUCTURE"
done
```
@@ -670,10 +670,10 @@ Map errors/warnings to verification dimensions:
## Step 3: Parse must_haves
Extract must_haves from each plan using gsd-tools:
Extract must_haves from each plan using `gsd-sdk query`:
```bash
MUST_HAVES=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" frontmatter get "$PLAN_PATH" --field must_haves)
MUST_HAVES=$(gsd-sdk query frontmatter.get "$PLAN_PATH" must_haves)
```
Returns JSON: `{ truths: [...], artifacts: [...], key_links: [...] }`
@@ -715,10 +715,10 @@ For each requirement: find covering task(s), verify action is specific, flag gap
## Step 5: Validate Task Structure
Use gsd-tools plan-structure verification (already run in Step 2):
Use `verify.plan-structure` (already run in Step 2):
```bash
PLAN_STRUCTURE=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" verify plan-structure "$PLAN_PATH")
PLAN_STRUCTURE=$(gsd-sdk query verify.plan-structure "$PLAN_PATH")
```
The `tasks` array in the result shows each task's completeness:
@@ -729,7 +729,7 @@ The `tasks` array in the result shows each task's completeness:
**Check:** valid task type (auto, checkpoint:*, tdd), auto tasks have files/action/verify/done, action is specific, verify is runnable, done is measurable.
**For manual validation of specificity** (gsd-tools checks structure, not content quality):
**For manual validation of specificity** (`verify.plan-structure` checks structure, not content quality):
```bash
grep -B5 "</task>" "$PHASE_DIR"/*-PLAN.md | grep -v "<verify>"
```

View File

@@ -828,7 +828,7 @@ start of execution when `--reviews` flag is present or reviews mode is active.
Load planning context:
```bash
INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init plan-phase "${PHASE}")
INIT=$(gsd-sdk query init.plan-phase "${PHASE}")
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
```
@@ -896,6 +896,8 @@ Query the graph for phase-relevant dependency context (single query per D-06):
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" graphify query "<phase-goal-keyword>" --budget 2000
```
(graphify is not exposed on `gsd-sdk query` yet; use `gsd-tools.cjs` for graphify only.)
Use the keyword that best captures the phase goal. Examples:
- Phase "User Authentication" -> query term "auth"
- Phase "Payment Integration" -> query term "payment"
@@ -931,7 +933,7 @@ Apply discovery level protocol (see discovery_levels section).
**Step 1 — Generate digest index:**
```bash
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" history-digest
gsd-sdk query history-digest
```
**Step 2 — Select relevant phases (typically 2-4):**
@@ -976,7 +978,7 @@ Read the most recent milestone retrospective and cross-milestone trends. Extract
</step>
<step name="inject_global_learnings">
If `features.global_learnings` is `true`: run `gsd-tools learnings query --tag <phase_tags> --limit 5`, prefix matches with `[Prior learning from <project>]` as weak priors. Project-local decisions take precedence. Skip silently if disabled or no matches. For tags, use PLAN.md frontmatter `tags` field or keywords from the phase objective, comma-separated (e.g. `--tag auth,database,api`).
If `features.global_learnings` is `true`: run `gsd-sdk query learnings.query --tag <tag> --limit 5` once per tag from PLAN.md frontmatter `tags` (or use the single most specific keyword). The handler matches one `--tag` at a time. Prefix matches with `[Prior learning from <project>]` as weak priors. Project-local decisions take precedence. Skip silently if disabled or no matches.
</step>
<step name="gather_phase_context">
@@ -1090,7 +1092,7 @@ The filename MUST follow the exact pattern: `{padded_phase}-{NN}-PLAN.md`
- Phase 3, Plan 2 → `03-02-PLAN.md`
- Phase 2.1, Plan 1 → `02.1-01-PLAN.md`
**Incorrect (will break gsd-tools detection):**
**Incorrect (will break GSD plan filename conventions / tooling detection):**
- ❌ `PLAN-01-auth.md`
- ❌ `01-PLAN-01.md`
- ❌ `plan-01.md`
@@ -1102,10 +1104,10 @@ Include all frontmatter fields.
</step>
<step name="validate_plan">
Validate each created PLAN.md using gsd-tools:
Validate each created PLAN.md using `gsd-sdk query`:
```bash
VALID=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" frontmatter validate "$PLAN_PATH" --schema plan)
VALID=$(gsd-sdk query frontmatter.validate "$PLAN_PATH" --schema plan)
```
Returns JSON: `{ valid, missing, present, schema }`
@@ -1118,7 +1120,7 @@ Required plan frontmatter fields:
Also validate plan structure:
```bash
STRUCTURE=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" verify plan-structure "$PLAN_PATH")
STRUCTURE=$(gsd-sdk query verify.plan-structure "$PLAN_PATH")
```
Returns JSON: `{ valid, errors, warnings, task_count, tasks }`
@@ -1155,7 +1157,8 @@ Plans:
<step name="git_commit">
```bash
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs($PHASE): create phase plan" --files .planning/phases/$PHASE-*/$PHASE-*-PLAN.md .planning/ROADMAP.md
gsd-sdk query commit "docs($PHASE): create phase plan" \
.planning/phases/$PHASE-*/$PHASE-*-PLAN.md .planning/ROADMAP.md
```
</step>

View File

@@ -128,7 +128,7 @@ Always include current year. Use multiple query variations. Mark WebSearch-only
Check `brave_search` from orchestrator context. If `true`, use Brave Search for higher quality results:
```bash
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" websearch "your query" --limit 10
gsd-sdk query websearch "your query" --limit 10
```
**Options:**

View File

@@ -58,7 +58,7 @@ cat .planning/research/FEATURES.md
cat .planning/research/ARCHITECTURE.md
cat .planning/research/PITFALLS.md
# Planning config loaded via gsd-tools.cjs in commit step
# Planning config loaded via gsd-sdk query (or gsd-tools.cjs) in commit step
```
Parse each file to extract:
@@ -139,7 +139,7 @@ Write to `.planning/research/SUMMARY.md`
The 4 parallel researcher agents write files but do NOT commit. You commit everything together.
```bash
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs: complete project research" --files .planning/research/
gsd-sdk query commit "docs: complete project research" .planning/research/
```
## Step 8: Return Summary

View File

@@ -292,7 +292,7 @@ Fill all sections. Write to `$PHASE_DIR/$PADDED_PHASE-UI-SPEC.md`.
## Step 6: Commit (optional)
```bash
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs($PHASE): UI design contract" --files "$PHASE_DIR/$PADDED_PHASE-UI-SPEC.md"
gsd-sdk query commit "docs($PHASE): UI design contract" "$PHASE_DIR/$PADDED_PHASE-UI-SPEC.md"
```
## Step 7: Return Structured Result

View File

@@ -91,7 +91,7 @@ Set `is_re_verification = false`, proceed with Step 1.
```bash
ls "$PHASE_DIR"/*-PLAN.md 2>/dev/null
ls "$PHASE_DIR"/*-SUMMARY.md 2>/dev/null
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "$PHASE_NUM"
gsd-sdk query roadmap.get-phase "$PHASE_NUM"
grep -E "^| $PHASE_NUM" .planning/REQUIREMENTS.md 2>/dev/null
```
@@ -104,7 +104,7 @@ In re-verification mode, must-haves come from Step 0.
**Step 2a: Always load ROADMAP Success Criteria**
```bash
PHASE_DATA=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "$PHASE_NUM" --raw)
PHASE_DATA=$(gsd-sdk query roadmap.get-phase "$PHASE_NUM" --raw)
```
Parse the `success_criteria` array from the JSON output. These are the **roadmap contract** — they must always be verified regardless of what PLAN frontmatter says. Store them as `roadmap_truths`.
@@ -206,10 +206,10 @@ overrides:
## Step 4: Verify Artifacts (Three Levels)
Use gsd-tools for artifact verification against must_haves in PLAN frontmatter:
Use `gsd-sdk query` for artifact verification against must_haves in PLAN frontmatter:
```bash
ARTIFACT_RESULT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" verify artifacts "$PLAN_PATH")
ARTIFACT_RESULT=$(gsd-sdk query verify.artifacts "$PLAN_PATH")
```
Parse JSON result: `{ all_passed, passed, total, artifacts: [{path, exists, issues, passed}] }`
@@ -312,10 +312,10 @@ grep -r -A 3 "<${COMPONENT_NAME}" "${search_path:-src/}" --include="*.tsx" 2>/de
Key links are critical connections. If broken, the goal fails even with all artifacts present.
Use gsd-tools for key link verification against must_haves in PLAN frontmatter:
Use `gsd-sdk query` for key link verification against must_haves in PLAN frontmatter:
```bash
LINKS_RESULT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" verify key-links "$PLAN_PATH")
LINKS_RESULT=$(gsd-sdk query verify.key-links "$PLAN_PATH")
```
Parse JSON result: `{ all_verified, verified, total, links: [{from, to, via, verified, detail}] }`
@@ -397,12 +397,12 @@ Identify files modified in this phase from SUMMARY.md key-files section, or extr
```bash
# Option 1: Extract from SUMMARY frontmatter
SUMMARY_FILES=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" summary-extract "$PHASE_DIR"/*-SUMMARY.md --fields key-files)
SUMMARY_FILES=$(gsd-sdk query summary-extract "$PHASE_DIR"/*-SUMMARY.md --fields key-files)
# Option 2: Verify commits exist (if commit hashes documented)
COMMIT_HASHES=$(grep -oE "[a-f0-9]{7,40}" "$PHASE_DIR"/*-SUMMARY.md | head -10)
if [ -n "$COMMIT_HASHES" ]; then
COMMITS_VALID=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" verify commits $COMMIT_HASHES)
COMMITS_VALID=$(gsd-sdk query verify.commits $COMMIT_HASHES)
fi
# Fallback: grep for files
@@ -516,7 +516,7 @@ Before reporting gaps, check if any identified gaps are explicitly addressed in
**Load the full milestone roadmap:**
```bash
ROADMAP_DATA=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap analyze --raw)
ROADMAP_DATA=$(gsd-sdk query roadmap.analyze --raw)
```
Parse the JSON to extract all phases. Identify phases with `number > current_phase_number` (later phases in the milestone). For each later phase, extract its `goal` and `success_criteria`.