Merge pull request #272 from open-gsd/fix/195-claude-workflows-remove-gsd-sdk

docs(#195): migrate workflow markdown from gsd-sdk query to gsd-tools
This commit is contained in:
Tom Boucher
2026-05-25 12:04:33 -04:00
committed by GitHub
74 changed files with 201 additions and 337 deletions

View File

@@ -0,0 +1,6 @@
---
type: Changed
pr: 195
---
Replaced workflow markdown `gsd-sdk` query references with `gsd-tools.cjs query` command usage and removed global `gsd-sdk` fallback in workflow runtime command resolution blocks.
<!-- docs-exempt: workflow markdown migration under get-shit-done/workflows; no additional docs/ narrative needed -->

View File

@@ -19,14 +19,12 @@ cat .planning/ROADMAP.md
## Step 2: Find next backlog number ## Step 2: Find next backlog number
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -29,14 +29,12 @@ Exit.
Load phase operation context: Load phase operation context:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi
@@ -53,7 +51,7 @@ Exit.
</step> </step>
<step name="add_phase"> <step name="add_phase">
**Delegate the phase addition to `gsd-sdk query phase.add`:** **Delegate the phase addition to `gsd-tools.cjs query phase.add`:**
```bash ```bash
RESULT=$($GSD_SDK query phase.add "${description}") RESULT=$($GSD_SDK query phase.add "${description}")
@@ -115,7 +113,7 @@ Roadmap updated: .planning/ROADMAP.md
</process> </process>
<success_criteria> <success_criteria>
- [ ] `gsd-sdk query phase.add` executed successfully - [ ] `gsd-tools.cjs query phase.add` executed successfully
- [ ] Phase directory created - [ ] Phase directory created
- [ ] Roadmap updated with new phase entry - [ ] Roadmap updated with new phase entry
- [ ] STATE.md updated with roadmap evolution note - [ ] STATE.md updated with roadmap evolution note

View File

@@ -33,14 +33,12 @@ Exit.
Load phase operation context: Load phase operation context:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -12,14 +12,12 @@ Read all files referenced by the invoking prompt's execution_context before star
Load todo context: Load todo context:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -20,14 +20,12 @@ This prevents the two most common AI development failures: choosing the wrong fr
## 1. Initialize ## 1. Initialize
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -32,14 +32,12 @@ Invoke the source audit command and capture output.
For `audit-uat` source: For `audit-uat` source:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -16,14 +16,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
## 0. Initialize Milestone Context ## 0. Initialize Milestone Context
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -8,14 +8,12 @@ Cross-phase audit of all UAT and verification files. Finds every outstanding ite
Run the CLI audit: Run the CLI audit:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -48,14 +48,12 @@ When `--interactive` is set, discuss runs inline with questions (not auto-answer
Bootstrap via milestone-level init: Bootstrap via milestone-level init:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -12,14 +12,12 @@ Read all files referenced by the invoking prompt's execution_context before star
Load todo context: Load todo context:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -124,14 +124,12 @@ Repeat for all milestones in the cleanup set.
Commit the changes: Commit the changes:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -18,14 +18,12 @@ Parse arguments and load project state:
```bash ```bash
PHASE_ARG="${1}" PHASE_ARG="${1}"
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -18,14 +18,12 @@ Parse arguments and load project state:
```bash ```bash
PHASE_ARG="${1}" PHASE_ARG="${1}"
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi
@@ -101,7 +99,7 @@ Default is true — only skip on explicit false. This check runs AFTER phase val
Determine review depth with priority order: Determine review depth with priority order:
1. DEPTH_OVERRIDE from --depth flag (highest priority) 1. DEPTH_OVERRIDE from --depth flag (highest priority)
2. Config value: `gsd-sdk query config-get workflow.code_review_depth 2>/dev/null` 2. Config value: `gsd-tools.cjs query config-get workflow.code_review_depth 2>/dev/null`
3. Default: "standard" 3. Default: "standard"
```bash ```bash

View File

@@ -41,14 +41,12 @@ When a milestone completes:
Before proceeding with milestone close, run the comprehensive open artifact audit. Before proceeding with milestone close, run the comprehensive open artifact audit.
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi
@@ -68,7 +66,7 @@ These items are open. Choose an action:
``` ```
If user chooses [A] (Acknowledge): If user chooses [A] (Acknowledge):
1. Re-run `gsd-sdk query audit-open --json` to get structured data 1. Re-run `gsd-tools.cjs query audit-open --json` to get structured data
2. Write acknowledged items to STATE.md under `## Deferred Items` section: 2. Write acknowledged items to STATE.md under `## Deferred Items` section:
```markdown ```markdown
## Deferred Items ## Deferred Items
@@ -229,7 +227,7 @@ Key accomplishments for this milestone:
<step name="create_milestone_entry"> <step name="create_milestone_entry">
**Note:** MILESTONES.md entry is now created automatically by `gsd-sdk query milestone.complete` in the archive_milestone step. The entry includes version, date, phase/plan/task counts, and accomplishments extracted from SUMMARY.md files. **Note:** MILESTONES.md entry is now created automatically by `gsd-tools.cjs query milestone.complete` in the archive_milestone step. The entry includes version, date, phase/plan/task counts, and accomplishments extracted from SUMMARY.md files.
If additional details are needed (e.g., user-provided "Delivered" summary, git range, LOC stats), add them manually after the CLI creates the base entry. If additional details are needed (e.g., user-provided "Delivered" summary, git range, LOC stats), add them manually after the CLI creates the base entry.
@@ -420,7 +418,7 @@ Update `.planning/ROADMAP.md` — group completed milestone phases:
<step name="archive_milestone"> <step name="archive_milestone">
**Delegate archival to `gsd-sdk query milestone.complete`:** **Delegate archival to `gsd-tools.cjs query milestone.complete`:**
```bash ```bash
ARCHIVE=$($GSD_SDK query milestone.complete "v[X.Y]" --name "[Milestone Name]") ARCHIVE=$($GSD_SDK query milestone.complete "v[X.Y]" --name "[Milestone Name]")
@@ -736,7 +734,7 @@ fi
<step name="git_tag"> <step name="git_tag">
<config-check> <config-check>
Read `git.create_tag` via `gsd-sdk query config-get git.create_tag 2>/dev/null || echo "true"`. Read `git.create_tag` via `gsd-tools.cjs query config-get git.create_tag 2>/dev/null || echo "true"`.
If the result is `false` → skip this step entirely and proceed to `git_commit_milestone`. If the result is `false` → skip this step entirely and proceed to `git_commit_milestone`.
</config-check> </config-check>

View File

@@ -16,14 +16,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
## 0. Initialize Context ## 0. Initialize Context
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -58,14 +58,12 @@ gaps = [
**Read worktree config:** **Read worktree config:**
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -64,14 +64,12 @@ plain-text numbered list and ask the user to type their choice number.
Phase number from argument (required). Phase number from argument (required).
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -109,7 +109,7 @@ Phase: "API documentation" → Structure/navigation, Code examples depth,
Phase number from argument (required). Phase number from argument (required).
```bash ```bash
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"; [ -f "$GSD_TOOLS" ] && GSD_SDK="node $GSD_TOOLS" || { command -v gsd-sdk >/dev/null 2>&1 && GSD_SDK=gsd-sdk || { echo "ERROR: gsd-sdk not found. Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2; exit 1; }; } GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"; [ -f "$GSD_TOOLS" ] && GSD_SDK="node $GSD_TOOLS" || { echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2; exit 1; }
INIT=$($GSD_SDK query init.phase-op "${PHASE}"); [[ "$INIT" == @file:* ]] && INIT=$(cat "${INIT#@file:}") INIT=$($GSD_SDK query init.phase-op "${PHASE}"); [[ "$INIT" == @file:* ]] && INIT=$(cat "${INIT#@file:}")
AGENT_SKILLS_ADVISOR=$($GSD_SDK query agent-skills gsd-advisor-researcher) AGENT_SKILLS_ADVISOR=$($GSD_SDK query agent-skills gsd-advisor-researcher)
``` ```

View File

@@ -18,7 +18,7 @@ Claude App cannot forward TUI menu selections back to the host.
- Per-session: pass `--text` flag to any command (e.g., - Per-session: pass `--text` flag to any command (e.g.,
`/gsd:discuss-phase --text`) `/gsd:discuss-phase --text`)
- Per-project: `gsd-sdk query config-set workflow.text_mode true` - Per-project: `gsd-tools.cjs query config-set workflow.text_mode true`
Text mode applies to ALL workflows in the session, not just discuss-phase. Text mode applies to ALL workflows in the session, not just discuss-phase.

View File

@@ -26,15 +26,13 @@ Wait for response before continuing.
**Check if project exists.** **Check if project exists.**
```bash ```bash
# SDK resolution: prefer local node shim, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local node shim, fail if local gsd-tools.cjs is missing (#3668)
_GSD_SHIM_NAME="gsd-tools.cjs" _GSD_SHIM_NAME="gsd-tools.cjs"
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/${_GSD_SHIM_NAME}" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/${_GSD_SHIM_NAME}"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -14,14 +14,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
Load docs-update context: Load docs-update context:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -34,14 +34,12 @@ Exit.
Load phase operation context: Load phase operation context:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -13,14 +13,12 @@ Use after /gsd:execute-phase to verify that the evaluation strategy from AI-SPEC
## 0. Initialize ## 0. Initialize
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -66,14 +66,12 @@ If `--wave` is absent, preserve the current behavior of executing all incomplete
Load all context in one call: Load all context in one call:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi
@@ -376,7 +374,7 @@ CROSS_AI_TIMEOUT=$($GSD_SDK query config-get workflow.cross_ai_timeout 2>/dev/nu
**If no plans are marked for cross-AI:** Skip to execute_waves. **If no plans are marked for cross-AI:** Skip to execute_waves.
**If plans are marked but `cross_ai_command` is empty:** Error — tell user to set **If plans are marked but `cross_ai_command` is empty:** Error — tell user to set
`workflow.cross_ai_command` via `gsd-sdk query config-set workflow.cross_ai_command "<command>"`. `workflow.cross_ai_command` via `gsd-tools.cjs query config-set workflow.cross_ai_command "<command>"`.
**For each cross-AI plan (sequentially):** **For each cross-AI plan (sequentially):**
@@ -951,7 +949,7 @@ increases monotonically across waves. `{status}` is `complete` (success),
Report failed plan and ask Continue/Stop; continuing may cascade into dependent plan failures. Report failed plan and ask Continue/Stop; continuing may cascade into dependent plan failures.
7b. **Pre-wave dependency check (waves 2+ only):** 7b. **Pre-wave dependency check (waves 2+ only):**
Before wave N+1, run `gsd-sdk query verify.key-links {phase_dir}/{plan}-PLAN.md` for each upcoming plan. Before wave N+1, run `gsd-tools.cjs query verify.key-links {phase_dir}/{plan}-PLAN.md` for each upcoming plan.
If any PRIOR-wave artifact link fails, present: If any PRIOR-wave artifact link fails, present:
- `## Cross-Plan Wiring Gap` with plan/link/from/pattern rows - `## Cross-Plan Wiring Gap` with plan/link/from/pattern rows
- Options: investigate+fix before continue, or continue with cascade risk - Options: investigate+fix before continue, or continue with cascade risk
@@ -1702,7 +1700,7 @@ For 1M+ context models, consider:
</context_efficiency> </context_efficiency>
<failure_handling> <failure_handling>
- **Quota / rate-limit (any runtime — #3095):** Agent return body contains a sentinel like `usage limit`, `rate limit`, `429`, `too many requests`, `RESOURCE_EXHAUSTED`, `usage_limit_reached`. Route via `gsd-sdk query agent.classify-failure` → `class: "quota-exceeded"`. Do not offer retry-now; the right action is wait-for-reset and resume. - **Quota / rate-limit (any runtime — #3095):** Agent return body contains a sentinel like `usage limit`, `rate limit`, `429`, `too many requests`, `RESOURCE_EXHAUSTED`, `usage_limit_reached`. Route via `gsd-tools.cjs query agent.classify-failure` → `class: "quota-exceeded"`. Do not offer retry-now; the right action is wait-for-reset and resume.
- **classifyHandoffIfNeeded false failure:** Agent reports "failed" but error is `classifyHandoffIfNeeded is not defined` → Claude Code bug, not GSD. Spot-check (SUMMARY exists, commits present) → if pass, treat as success - **classifyHandoffIfNeeded false failure:** Agent reports "failed" but error is `classifyHandoffIfNeeded is not defined` → Claude Code bug, not GSD. Spot-check (SUMMARY exists, commits present) → if pass, treat as success
- **Agent fails mid-plan:** Missing SUMMARY.md → report, ask user how to proceed - **Agent fails mid-plan:** Missing SUMMARY.md → report, ask user how to proceed
- **Dependency chain breaks:** Wave 1 fails → Wave 2 dependents likely fail → user chooses attempt or skip - **Dependency chain breaks:** Wave 1 fails → Wave 2 dependents likely fail → user chooses attempt or skip

View File

@@ -30,14 +30,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
Load execution context (paths only to minimize orchestrator context): Load execution context (paths only to minimize orchestrator context):
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi
@@ -61,7 +59,7 @@ Find first PLAN without matching SUMMARY. Decimal phases supported (`01.1-hotfix
```bash ```bash
PHASE=$(echo "$PLAN_PATH" | grep -oE '[0-9]+(\.[0-9]+)?-[0-9]+') PHASE=$(echo "$PLAN_PATH" | grep -oE '[0-9]+(\.[0-9]+)?-[0-9]+')
# config settings can be fetched via gsd-sdk query config-get if needed # config settings can be fetched via gsd-tools.cjs query config-get if needed
``` ```
<if mode="yolo"> <if mode="yolo">
@@ -386,7 +384,7 @@ Next: more plans → "Ready for {next-plan}" | last → "Phase complete, ready f
handles STATE.md/ROADMAP.md updates centrally after merging worktrees to avoid handles STATE.md/ROADMAP.md updates centrally after merging worktrees to avoid
merge conflicts). merge conflicts).
Update STATE.md using gsd-sdk query (or legacy gsd-tools) state mutations: Update STATE.md using gsd-tools.cjs query (or legacy gsd-tools) state mutations:
```bash ```bash
# Auto-detect parallel mode: .git is a file in worktrees, a directory in main repo # Auto-detect parallel mode: .git is a file in worktrees, a directory in main repo
@@ -423,7 +421,7 @@ $GSD_SDK query state.add-blocker --text-file "${BLOCKER_TEXT_FILE}"
</step> </step>
<step name="update_session_continuity"> <step name="update_session_continuity">
Update session info using gsd-sdk query (or legacy gsd-tools): Update session info using gsd-tools.cjs query (or legacy gsd-tools):
```bash ```bash
$GSD_SDK query state.record-session \ $GSD_SDK query state.record-session \

View File

@@ -115,14 +115,12 @@ For each selected output, write the file:
Commit if `commit_docs` is enabled: Commit if `commit_docs` is enabled:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -16,14 +16,12 @@ Analyze completed phase artifacts (PLAN.md, SUMMARY.md, VERIFICATION.md, UAT.md,
Parse arguments and load project state: Parse arguments and load project state:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -272,14 +272,12 @@ gh issue create \
## Step 8: Update STATE.md ## Step 8: Update STATE.md
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -21,14 +21,12 @@ Read from project config (`config.json`):
## Step 1: Guard Checks ## Step 1: Guard Checks
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -49,14 +49,12 @@ available — replace the prompt with a plain-text two-question sequence
plain text from the user's response. plain text from the user's response.
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -176,14 +176,12 @@ Apply GSD naming convention for the output filename:
Determine the target directory by querying `init.phase-op` for the phase number extracted in `plan_read_input`. This ensures the `project_code` prefix from `.planning/config.json` is applied: Determine the target directory by querying `init.phase-op` for the phase number extracted in `plan_read_input`. This ensures the `project_code` prefix from `.planning/config.json` is applied:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -34,14 +34,12 @@ Validate first argument is an integer.
Load phase operation context: Load phase operation context:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi
@@ -57,7 +55,7 @@ Exit.
</step> </step>
<step name="insert_phase"> <step name="insert_phase">
**Delegate the phase insertion to `gsd-sdk query phase.insert`:** **Delegate the phase insertion to `gsd-tools.cjs query phase.insert`:**
```bash ```bash
RESULT=$($GSD_SDK query phase.insert "${after_phase}" "${description}") RESULT=$($GSD_SDK query phase.insert "${after_phase}" "${description}")
@@ -153,10 +151,10 @@ Project state updated: .planning/STATE.md
<success_criteria> <success_criteria>
Phase insertion is complete when: Phase insertion is complete when:
- [ ] `gsd-sdk query phase.insert` executed successfully - [ ] `gsd-tools.cjs query phase.insert` executed successfully
- [ ] Phase directory created - [ ] Phase directory created
- [ ] Roadmap updated with new phase entry (includes "(INSERTED)" marker) - [ ] Roadmap updated with new phase entry (includes "(INSERTED)" marker)
- [ ] `gsd-sdk query state.add-roadmap-evolution ...` returned `{ added: true }` or `{ added: false, reason: "duplicate" }` - [ ] `gsd-tools.cjs query state.add-roadmap-evolution ...` returned `{ added: true }` or `{ added: false, reason: "duplicate" }`
- [ ] `gsd-sdk query state.patch` returned matched next-phase pointer field(s) - [ ] `gsd-tools.cjs query state.patch` returned matched next-phase pointer field(s)
- [ ] User informed of next steps and dependency implications - [ ] User informed of next steps and dependency implications
</success_criteria> </success_criteria>

View File

@@ -11,14 +11,12 @@ Read all files referenced by the invoking prompt's execution_context before star
## 1. Setup ## 1. Setup
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -19,14 +19,12 @@ Read all files referenced by the invoking prompt's execution_context before star
Bootstrap via manager init: Bootstrap via manager init:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi
@@ -41,7 +39,7 @@ Parse JSON for: `milestone_version`, `milestone_name`, `phase_count`, `completed
- `manager_flags.plan` — appended to plan agent init command - `manager_flags.plan` — appended to plan agent init command
- `manager_flags.execute` — appended to execute agent init command - `manager_flags.execute` — appended to execute agent init command
These are empty strings by default. Set via: `gsd-sdk query config-set manager.flags.discuss "--auto --analyze"` These are empty strings by default. Set via: `gsd-tools.cjs query config-set manager.flags.discuss "--auto --analyze"`
**If error:** Display the error message and exit. **If error:** Display the error message and exit.

View File

@@ -69,14 +69,12 @@ documents refreshed.
Load codebase mapping context: Load codebase mapping context:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -53,14 +53,12 @@ Read all files that exist. Missing files are fine — the summary adapts to what
Find all phase directories: Find all phase directories:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -34,14 +34,12 @@ Normalize per `@~/.claude/get-shit-done/references/phase-argument-parsing.md` (z
## 2. Validate phase exists and check status ## 2. Validate phase exists and check status
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -181,14 +181,12 @@ blockers, todos) is preserved across the switch — symmetric with
`milestone.complete`. `milestone.complete`.
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -57,14 +57,12 @@ The document should describe what you want to build.
**MANDATORY FIRST STEP — Execute these checks before ANY user interaction:** **MANDATORY FIRST STEP — Execute these checks before ANY user interaction:**
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -13,14 +13,12 @@ Read all files referenced by the invoking prompt's execution_context before star
**MANDATORY FIRST STEP — Execute init command:** **MANDATORY FIRST STEP — Execute init command:**
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -14,14 +14,12 @@ Read project state to determine current position:
```bash ```bash
# Get state snapshot # Get state snapshot
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi
@@ -94,7 +92,7 @@ Use `--force` to bypass this check.
Exit. Exit.
**Prior-phase completeness scan:** **Prior-phase completeness scan:**
After passing all three hard-stop gates, scan all phases that precede the current phase in ROADMAP.md order for incomplete work. For each prior phase number `N`, use `gsd-sdk query find-phase <N>` JSON (plans, summaries, incomplete_plans, etc.) to inspect that phase. After passing all three hard-stop gates, scan all phases that precede the current phase in ROADMAP.md order for incomplete work. For each prior phase number `N`, use `gsd-tools.cjs query find-phase <N>` JSON (plans, summaries, incomplete_plans, etc.) to inspect that phase.
Detect three categories of incomplete work: Detect three categories of incomplete work:
1. **Plans without summaries** — a PLAN.md exists in a prior phase directory but no matching SUMMARY.md exists (execution started but not completed). 1. **Plans without summaries** — a PLAN.md exists in a prior phase directory but no matching SUMMARY.md exists (execution started but not completed).

View File

@@ -66,14 +66,12 @@ Report any summaries with placeholder content as incomplete items.
**Write structured handoff to `.planning/HANDOFF.json`:** **Write structured handoff to `.planning/HANDOFF.json`:**
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -65,14 +65,12 @@ Gap: Flow "View dashboard" broken at data fetch
Find highest existing phase: Find highest existing phase:
```bash ```bash
# Get sorted phase list, extract last one # Get sorted phase list, extract last one
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -31,14 +31,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
Load all context in one call (paths only to minimize orchestrator context): Load all context in one call (paths only to minimize orchestrator context):
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi
@@ -329,7 +327,7 @@ $GSD_SDK query commit "docs(${padded_phase}): generate context from PRD" --files
3. Status gate: reject `superseded`/`rejected`/`deprecated`; warn on `proposed`; missing status defaults to `accepted`. 3. Status gate: reject `superseded`/`rejected`/`deprecated`; warn on `proposed`; missing status defaults to `accepted`.
4. Empty-decisions fallback: if all parsed ADRs have zero `decisions[]`, emit `ADR ingest produced no locked decisions; fall back to discuss-phase for this phase.` and exit with `/gsd:discuss-phase {N}` guidance. 4. Empty-decisions fallback: if all parsed ADRs have zero `decisions[]`, emit `ADR ingest produced no locked decisions; fall back to discuss-phase for this phase.` and exit with `/gsd:discuss-phase {N}` guidance.
5. Generate CONTEXT.md using `<domain>`, `<decisions>`, `<canonical_refs>`, `<specifics>`, `<deferred>`, `<scope_fence>`, map `consequences_positive[]` to Success Criteria and `consequences_negative[]` to Risk Summary, and include `**Source:** ADR Ingest Express Path ({INGEST_PATH})`. 5. Generate CONTEXT.md using `<domain>`, `<decisions>`, `<canonical_refs>`, `<specifics>`, `<deferred>`, `<scope_fence>`, map `consequences_positive[]` to Success Criteria and `consequences_negative[]` to Risk Summary, and include `**Source:** ADR Ingest Express Path ({INGEST_PATH})`.
6. Commit with `gsd-sdk query commit "docs(${padded_phase}): generate context from ADR ingest" --files "${phase_dir}/${padded_phase}-CONTEXT.md"` and set `context_content`; continue to step 5. 6. Commit with `gsd-tools.cjs query commit "docs(${padded_phase}): generate context from ADR ingest" --files "${phase_dir}/${padded_phase}-CONTEXT.md"` and set `context_content`; continue to step 5.
**Effect:** This bypasses step 4 (Load CONTEXT.md) since CONTEXT.md was synthesized from ADR input. **Effect:** This bypasses step 4 (Load CONTEXT.md) since CONTEXT.md was synthesized from ADR input.
@@ -801,7 +799,7 @@ VALIDATION_EXISTS=$(ls "${PHASE_DIR}"/*-VALIDATION.md 2>/dev/null | head -1)
If missing and Nyquist is still enabled/applicable — ask user: If missing and Nyquist is still enabled/applicable — ask user:
1. Re-run: `/gsd:plan-phase {PHASE} --research ${GSD_WS}` 1. Re-run: `/gsd:plan-phase {PHASE} --research ${GSD_WS}`
2. Disable Nyquist with the exact command: 2. Disable Nyquist with the exact command:
`gsd-sdk query config-set workflow.nyquist_validation false` `gsd-tools.cjs query config-set workflow.nyquist_validation false`
3. Continue anyway (plans fail Dimension 8) 3. Continue anyway (plans fail Dimension 8)
Proceed to Step 7.8 (or Step 8 if pattern mapper is disabled) only if user selects 2 or 3. Proceed to Step 7.8 (or Step 8 if pattern mapper is disabled) only if user selects 2 or 3.

View File

@@ -43,14 +43,12 @@ echo "$ARGUMENTS" | grep -qE '\-\-ws\s+\S+' && GSD_WS=$(echo "$ARGUMENTS" | grep
## 1.5. Config Gate (feature disabled by default) ## 1.5. Config Gate (feature disabled by default)
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -135,14 +135,12 @@ Store relevant file paths as `$BREADCRUMBS`.
<step name="commit-seed"> <step name="commit-seed">
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -1,7 +1,7 @@
<purpose> <purpose>
Orchestrate the full developer profiling flow: consent, session analysis (or questionnaire fallback), profile generation, result display, and artifact creation. Orchestrate the full developer profiling flow: consent, session analysis (or questionnaire fallback), profile generation, result display, and artifact creation.
This workflow wires Phase 1 (session pipeline) and Phase 2 (profiling engine) into a cohesive user-facing experience. All heavy lifting is done by existing `gsd-sdk query` handlers (with legacy `gsd-tools.cjs` parity where needed) and the gsd-user-profiler agent -- this workflow orchestrates the sequence, handles branching, and provides the UX. This workflow wires Phase 1 (session pipeline) and Phase 2 (profiling engine) into a cohesive user-facing experience. All heavy lifting is done by existing `gsd-tools.cjs query` handlers (with legacy `gsd-tools.cjs` parity where needed) and the gsd-user-profiler agent -- this workflow orchestrates the sequence, handles branching, and provides the UX.
</purpose> </purpose>
<required_reading> <required_reading>
@@ -130,14 +130,12 @@ Display: "◆ Scanning sessions..."
Run session scan: Run session scan:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi
@@ -382,7 +380,7 @@ $GSD_SDK query generate-claude-profile --analysis "$ANALYSIS_PATH" --global --js
Display: "✓ Added profile section to $HOME/.claude/CLAUDE.md" Display: "✓ Added profile section to $HOME/.claude/CLAUDE.md"
**Error handling:** If any `gsd-sdk query` or gsd-tools.cjs call fails, display the error message and use AskUserQuestion to offer "Retry" or "Skip this artifact". On retry, re-run the command. On skip, continue to next artifact. **Error handling:** If any `gsd-tools.cjs query` or gsd-tools.cjs call fails, display the error message and use AskUserQuestion to offer "Retry" or "Skip this artifact". On retry, re-run the command. On skip, continue to next artifact.
--- ---
@@ -457,7 +455,7 @@ rm -f "$ANALYSIS_PATH" 2>/dev/null
- [ ] Profile written to USER-PROFILE.md via write-profile subcommand - [ ] Profile written to USER-PROFILE.md via write-profile subcommand
- [ ] Result display shows report card table and highlight reel with evidence - [ ] Result display shows report card table and highlight reel with evidence
- [ ] Artifact selection uses multiSelect with all options pre-selected - [ ] Artifact selection uses multiSelect with all options pre-selected
- [ ] Artifacts generated sequentially via gsd-sdk query (or gsd-tools.cjs) subcommands - [ ] Artifacts generated sequentially via gsd-tools.cjs query (or gsd-tools.cjs) subcommands
- [ ] Refresh diff shows changed dimensions when --refresh was used - [ ] Refresh diff shows changed dimensions when --refresh was used
- [ ] Temp files cleaned up on completion - [ ] Temp files cleaned up on completion
</success_criteria> </success_criteria>

View File

@@ -12,14 +12,12 @@ Read all files referenced by the invoking prompt's execution_context before star
**Load progress context (paths only):** **Load progress context (paths only):**
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi
@@ -53,11 +51,11 @@ If missing both ROADMAP.md and PROJECT.md: suggest `/gsd:new-project`.
</step> </step>
<step name="load"> <step name="load">
**Use structured extraction from `gsd-sdk query` (or legacy gsd-tools.cjs):** **Use structured extraction from `gsd-tools.cjs query` (or legacy gsd-tools.cjs):**
Instead of reading full files, use targeted tools to get only the data needed for the report: Instead of reading full files, use targeted tools to get only the data needed for the report:
- `ROADMAP=$(gsd-sdk query roadmap.analyze)` - `ROADMAP=$(gsd-tools.cjs query roadmap.analyze)`
- `STATE=$(gsd-sdk query state-snapshot)` - `STATE=$(gsd-tools.cjs query state-snapshot)`
This minimizes orchestrator context usage. This minimizes orchestrator context usage.
</step> </step>
@@ -105,7 +103,7 @@ Use this instead of manually reading/parsing ROADMAP.md.
> blocks are a secondary config aid that may be significantly stale — do NOT use the > blocks are a secondary config aid that may be significantly stale — do NOT use the
> CLAUDE.md project description as a source for any progress report field. > CLAUDE.md project description as a source for any progress report field.
**Generate progress bar from `gsd-sdk query progress` / `progress.json`, then present rich status report:** **Generate progress bar from `gsd-tools.cjs query progress` / `progress.json`, then present rich status report:**
```bash ```bash
# Get formatted progress bar # Get formatted progress bar

View File

@@ -125,14 +125,12 @@ If `$VALIDATE_MODE` only:
**Step 2: Initialize** **Step 2: Initialize**
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi
@@ -961,7 +959,7 @@ Use Edit tool to make these changes atomically
**Step 8: Final commit and completion** **Step 8: Final commit and completion**
Stage and commit quick task artifacts. This step MUST always run — even if the executor already committed some files (e.g. when running without worktree isolation). The `gsd-sdk query commit` command (or legacy `gsd-tools.cjs` commit) handles already-committed files gracefully. Stage and commit quick task artifacts. This step MUST always run — even if the executor already committed some files (e.g. when running without worktree isolation). The `gsd-tools.cjs query commit` command (or legacy `gsd-tools.cjs` commit) handles already-committed files gracefully.
Build file list: Build file list:
- `${QUICK_DIR}/${quick_id}-PLAN.md` - `${QUICK_DIR}/${quick_id}-PLAN.md`

View File

@@ -29,14 +29,12 @@ Exit.
Load phase operation context: Load phase operation context:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi
@@ -88,7 +86,7 @@ Wait for confirmation.
</step> </step>
<step name="execute_removal"> <step name="execute_removal">
**Delegate the entire removal operation to `gsd-sdk query phase.remove`:** **Delegate the entire removal operation to `gsd-tools.cjs query phase.remove`:**
```bash ```bash
RESULT=$($GSD_SDK query phase.remove "${target}") RESULT=$($GSD_SDK query phase.remove "${target}")
@@ -151,7 +149,7 @@ Would you like to:
- Don't remove completed phases (have SUMMARY.md files) without --force - Don't remove completed phases (have SUMMARY.md files) without --force
- Don't remove current or past phases - Don't remove current or past phases
- Don't manually renumber — use `gsd-sdk query phase.remove` which handles all renumbering - Don't manually renumber — use `gsd-tools.cjs query phase.remove` which handles all renumbering
- Don't add "removed phase" notes to STATE.md — git commit is the record - Don't add "removed phase" notes to STATE.md — git commit is the record
- Don't modify completed phase directories - Don't modify completed phase directories
</anti_patterns> </anti_patterns>
@@ -160,7 +158,7 @@ Would you like to:
Phase removal is complete when: Phase removal is complete when:
- [ ] Target phase validated as future/unstarted - [ ] Target phase validated as future/unstarted
- [ ] `gsd-sdk query phase.remove` executed successfully - [ ] `gsd-tools.cjs query phase.remove` executed successfully
- [ ] Changes committed with descriptive message - [ ] Changes committed with descriptive message
- [ ] User informed of changes - [ ] User informed of changes
</success_criteria> </success_criteria>

View File

@@ -13,14 +13,12 @@ Read all files referenced by the invoking prompt's execution_context before star
Extract workspace name from $ARGUMENTS. Extract workspace name from $ARGUMENTS.
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -20,14 +20,12 @@ Instantly restore full project context so "Where were we?" has an immediate, com
Load all context in one call: Load all context in one call:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -24,14 +24,12 @@ command -v qwen >/dev/null 2>&1 && echo "qwen:available" || echo "qwen:missing"
command -v cursor >/dev/null 2>&1 && echo "cursor:available" || echo "cursor:missing" command -v cursor >/dev/null 2>&1 && echo "cursor:available" || echo "cursor:missing"
# Check local model servers (OpenAI-compatible HTTP API — no CLI binary required) # Check local model servers (OpenAI-compatible HTTP API — no CLI binary required)
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi
@@ -223,7 +221,7 @@ Note: The variable names above (`INSTRUCTIONS_BLOCK_FILE`, `ROADMAP_SECTION_FILE
Read model preferences from planning config. Null/missing values fall back to CLI defaults. Read model preferences from planning config. Null/missing values fall back to CLI defaults.
```bash ```bash
# JSON scalars from gsd-sdk query; use jq -r to strip JSON string quotes (install jq if missing) # JSON scalars from gsd-tools.cjs query; use jq -r to strip JSON string quotes (install jq if missing)
GEMINI_MODEL=$($GSD_SDK query config-get review.models.gemini 2>/dev/null | jq -r '.' 2>/dev/null || true) GEMINI_MODEL=$($GSD_SDK query config-get review.models.gemini 2>/dev/null | jq -r '.' 2>/dev/null || true)
CLAUDE_MODEL=$($GSD_SDK query config-get review.models.claude 2>/dev/null | jq -r '.' 2>/dev/null || true) CLAUDE_MODEL=$($GSD_SDK query config-get review.models.claude 2>/dev/null | jq -r '.' 2>/dev/null || true)
CODEX_MODEL=$($GSD_SDK query config-get review.models.codex 2>/dev/null | jq -r '.' 2>/dev/null || true) CODEX_MODEL=$($GSD_SDK query config-get review.models.codex 2>/dev/null | jq -r '.' 2>/dev/null || true)

View File

@@ -39,14 +39,12 @@ Exit.
## Step 2: Check for existing documents ## Step 2: Check for existing documents
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -16,14 +16,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
## 0. Initialize ## 0. Initialize
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -20,14 +20,12 @@ Read all files referenced by the invoking prompt's execution_context before star
Ensure config exists and resolve the workstream-aware config path (mirrors `settings.md`): Ensure config exists and resolve the workstream-aware config path (mirrors `settings.md`):
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi
@@ -432,7 +430,7 @@ AskUserQuestion([
If "Other (Group B or custom)" is selected, prompt the user to enter the runtime name as a free-text string. If "Other (Group B or custom)" is selected, prompt the user to enter the runtime name as a free-text string.
If the selected runtime differs from the stored `runtime` key, update `runtime` via If the selected runtime differs from the stored `runtime` key, update `runtime` via
`gsd-sdk query config-set runtime <value>` before proceeding to Step C. `gsd-tools.cjs query config-set runtime <value>` before proceeding to Step C.
**Step C — Configure tier overrides for the selected runtime:** **Step C — Configure tier overrides for the selected runtime:**
@@ -492,7 +490,7 @@ change.
Merge the new settings into the existing config at `$GSD_CONFIG_PATH`. This merge is the Merge the new settings into the existing config at `$GSD_CONFIG_PATH`. This merge is the
core correctness invariant: **preserve every unrelated key** — do not clobber siblings. core correctness invariant: **preserve every unrelated key** — do not clobber siblings.
Apply each selected value via `gsd-sdk query config-set <key> <value>` so the central Apply each selected value via `gsd-tools.cjs query config-set <key> <value>` so the central
validator (`isValidConfigKey`) accepts the write and the deep-merge preserves unrelated validator (`isValidConfigKey`) accepts the write and the deep-merge preserves unrelated
keys and sibling sub-objects. keys and sibling sub-objects.
@@ -557,7 +555,7 @@ anything not listed in Sections 1–7 MUST survive the update):
``` ```
Never emit a full overwrite of the file that omits keys the user did not touch. Always Never emit a full overwrite of the file that omits keys the user did not touch. Always
route each write through `gsd-sdk query config-set` so sibling preservation is handled by route each write through `gsd-tools.cjs query config-set` so sibling preservation is handled by
the central setter. the central setter.
</step> </step>
@@ -612,7 +610,7 @@ UI/AI phase gates), use /gsd:settings.
- [ ] Numeric inputs validated — non-numeric rejected and re-prompted - [ ] Numeric inputs validated — non-numeric rejected and re-prompted
- [ ] Branch-template inputs validated — non-default must contain a placeholder - [ ] Branch-template inputs validated — non-default must contain a placeholder
- [ ] Null-allowed fields accept an empty input as a clear - [ ] Null-allowed fields accept an empty input as a clear
- [ ] Writes routed through `gsd-sdk query config-set` so unrelated keys are preserved - [ ] Writes routed through `gsd-tools.cjs query config-set` so unrelated keys are preserved
- [ ] Section 7 shows current runtime and built-in tier table - [ ] Section 7 shows current runtime and built-in tier table
- [ ] Group B runtimes display "(no built-in default — your runtime handles model selection)" - [ ] Group B runtimes display "(no built-in default — your runtime handles model selection)"
- [ ] Override set/clear/keep paths all work correctly for each tier - [ ] Override set/clear/keep paths all work correctly for each tier

View File

@@ -2,7 +2,7 @@
Interactive configuration of third-party integrations for GSD — search API keys Interactive configuration of third-party integrations for GSD — search API keys
(Brave / Firecrawl / Exa), code-review CLI routing (`review.models.<cli>`), and (Brave / Firecrawl / Exa), code-review CLI routing (`review.models.<cli>`), and
agent-skill injection (`agent_skills.<agent-type>`). Writes to agent-skill injection (`agent_skills.<agent-type>`). Writes to
`.planning/config.json` via `gsd-sdk`/`gsd-tools` so unrelated keys are `.planning/config.json` via `gsd-tools` so unrelated keys are
preserved, never clobbered. preserved, never clobbered.
This command is deliberately separate from `/gsd:settings` (workflow toggles) This command is deliberately separate from `/gsd:settings` (workflow toggles)
@@ -42,14 +42,12 @@ Read all files referenced by the invoking prompt's execution_context before star
Ensure config exists and resolve the active config path (flat vs workstream, #2282): Ensure config exists and resolve the active config path (flat vs workstream, #2282):
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -12,14 +12,12 @@ Read all files referenced by the invoking prompt's execution_context before star
Ensure config exists and load current state: Ensure config exists and load current state:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi
@@ -424,7 +422,7 @@ Merge new settings into existing config.json:
} }
``` ```
**Safe merge:** Apply each chosen value via `gsd-sdk query config-set <key.path> <value>` so unrelated keys are never clobbered. `code_review_depth` is written only if the code_review question was answered `on`; otherwise leave the existing value in place. `model_profile` is written on Q1 "Adaptive (Recommended)" (→ adaptive) or Q1 "Inherit" (→ inherit) immediately; for Q1 "Standard tier…", `model_profile` is written from Q2's answer. If Q1 = "Standard tier…" but Q2 is cancelled, leave the existing `model_profile` value unchanged — do not write any new value. **Safe merge:** Apply each chosen value via `gsd-tools.cjs query config-set <key.path> <value>` so unrelated keys are never clobbered. `code_review_depth` is written only if the code_review question was answered `on`; otherwise leave the existing value in place. `model_profile` is written on Q1 "Adaptive (Recommended)" (→ adaptive) or Q1 "Inherit" (→ inherit) immediately; for Q1 "Standard tier…", `model_profile` is written from Q2's answer. If Q1 = "Standard tier…" but Q2 is cancelled, leave the existing `model_profile` value unchanged — do not write any new value.
Write updated config to `$GSD_CONFIG_PATH` (the workstream-aware path resolved in `ensure_and_load_config`). Never hardcode `.planning/config.json` — workstream installs route to `.planning/workstreams/<slug>/config.json`. Write updated config to `$GSD_CONFIG_PATH` (the workstream-aware path resolved in `ensure_and_load_config`). Never hardcode `.planning/config.json` — workstream installs route to `.planning/workstreams/<slug>/config.json`.
</step> </step>

View File

@@ -12,14 +12,12 @@ Read all files referenced by the invoking prompt's execution_context before star
Parse arguments and load project state: Parse arguments and load project state:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -37,14 +37,12 @@ Exit.
Check `commit_docs` config: Check `commit_docs` config:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -99,14 +99,12 @@ ls -d .planning/sketches/[0-9][0-9][0-9]-* 2>/dev/null | sort | tail -1
Check `commit_docs` config: Check `commit_docs` config:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -37,14 +37,12 @@ Exit.
Check `commit_docs` config: Check `commit_docs` config:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -96,14 +96,12 @@ ls -d .planning/spikes/[0-9][0-9][0-9]-* 2>/dev/null | sort | tail -1
Check `commit_docs` config: Check `commit_docs` config:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -12,14 +12,12 @@ Read all files referenced by the invoking prompt's execution_context before star
Gather project statistics: Gather project statistics:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi
@@ -63,7 +61,7 @@ If no `.planning/` directory exists, inform the user to run `/gsd:new-project` f
</step> </step>
<step name="mvp_summary"> <step name="mvp_summary">
**MVP phase summary.** Read all phases via `gsd-sdk query roadmap.analyze` (Phase 1's `cmdRoadmapAnalyze` surfaces a `mode` field per phase). Count phases by mode: **MVP phase summary.** Read all phases via `gsd-tools.cjs query roadmap.analyze` (Phase 1's `cmdRoadmapAnalyze` surfaces a `mode` field per phase). Count phases by mode:
```bash ```bash
ANALYZE=$($GSD_SDK query roadmap.analyze) ANALYZE=$($GSD_SDK query roadmap.analyze)

View File

@@ -28,14 +28,12 @@ ls .planning/threads/*.md 2>/dev/null
For each thread file found: For each thread file found:
- Read frontmatter `status` field via: - Read frontmatter `status` field via:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi
@@ -227,6 +225,6 @@ updated: {today ISO date}
- Slugs from $ARGUMENTS are sanitized before use in file paths: only [a-z0-9-] allowed, max 60 chars, reject ".." and "/" - Slugs from $ARGUMENTS are sanitized before use in file paths: only [a-z0-9-] allowed, max 60 chars, reject ".." and "/"
- File names from readdir/ls are sanitized before display: strip non-printable chars and ANSI sequences - File names from readdir/ls are sanitized before display: strip non-printable chars and ANSI sequences
- Artifact content (thread titles, goal sections, next steps) rendered as plain text only — never executed or passed to agent prompts without DATA_START/DATA_END boundaries - Artifact content (thread titles, goal sections, next steps) rendered as plain text only — never executed or passed to agent prompts without DATA_START/DATA_END boundaries
- Status fields read via gsd-sdk query frontmatter.get — never eval'd or shell-expanded - Status fields read via gsd-tools.cjs query frontmatter.get — never eval'd or shell-expanded
- The generate-slug call for new threads runs through gsd-sdk query (or gsd-tools) which sanitizes input — keep that pattern - The generate-slug call for new threads runs through gsd-tools.cjs query (or gsd-tools) which sanitizes input — keep that pattern
</security_notes> </security_notes>

View File

@@ -160,17 +160,15 @@ If found, delete them — phase is complete, handoffs are stale.
<step name="update_roadmap_and_state"> <step name="update_roadmap_and_state">
**Delegate ROADMAP.md and STATE.md updates to `gsd-sdk query phase.complete`:** **Delegate ROADMAP.md and STATE.md updates to `gsd-tools.cjs query phase.complete`:**
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi
@@ -306,7 +304,7 @@ This step is fully delegated to `graduation.md`. It handles guard checks (featur
<step name="update_current_position_after_transition"> <step name="update_current_position_after_transition">
**Note:** Basic position updates (Current Phase, Status, Current Plan, Last Activity) were already handled by `gsd-sdk query phase.complete` in the update_roadmap_and_state step. **Note:** Basic position updates (Current Phase, Status, Current Plan, Last Activity) were already handled by `gsd-tools.cjs query phase.complete` in the update_roadmap_and_state step.
Verify the updates are correct by reading STATE.md. If the progress bar needs updating, use: Verify the updates are correct by reading STATE.md. If the progress bar needs updating, use:
@@ -410,7 +408,7 @@ Resume file: None
**MANDATORY: Verify milestone status before presenting next steps.** **MANDATORY: Verify milestone status before presenting next steps.**
**Use the transition result from `gsd-sdk query phase.complete`:** **Use the transition result from `gsd-tools.cjs query phase.complete`:**
The `is_last_phase` field from the phase complete result tells you directly: The `is_last_phase` field from the phase complete result tells you directly:
- `is_last_phase: false` → More phases remain → Go to **Route A** - `is_last_phase: false` → More phases remain → Go to **Route A**

View File

@@ -19,14 +19,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
## 1. Initialize ## 1. Initialize
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -16,14 +16,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
## 0. Initialize ## 0. Initialize
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -66,14 +66,12 @@ unplanned phase from the roadmap (same logic as /gsd:plan-phase).
Load GSD phase context: Load GSD phase context:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -457,9 +457,9 @@ installer does not know about and will delete during the wipe.
**Do not use bash path-stripping (`${filepath#$RUNTIME_DIR/}`) or `node -e require()` **Do not use bash path-stripping (`${filepath#$RUNTIME_DIR/}`) or `node -e require()`
inline** — those patterns fail when `$RUNTIME_DIR` is unset and the stripped inline** — those patterns fail when `$RUNTIME_DIR` is unset and the stripped
relative path may not match manifest key format, which causes CUSTOM_COUNT=0 relative path may not match manifest key format, which causes CUSTOM_COUNT=0
even when custom files exist (bug #1997). Use `gsd-sdk query detect-custom-files` even when custom files exist (bug #1997). Use `gsd-tools.cjs query detect-custom-files`
when `gsd-sdk` is on `PATH`, or the bundled `gsd-tools.cjs detect-custom-files` or the bundled `gsd-tools.cjs detect-custom-files` path — both resolve paths
otherwise — both resolve paths reliably with Node.js `path.relative()`. reliably with Node.js `path.relative()`.
First, resolve the config directory (`RUNTIME_DIR`) from the install scope First, resolve the config directory (`RUNTIME_DIR`) from the install scope
detected in `get_installed_version`: detected in `get_installed_version`:
@@ -480,15 +480,13 @@ fi
If `RUNTIME_DIR` is empty or does not exist, skip this step (no config dir to If `RUNTIME_DIR` is empty or does not exist, skip this step (no config dir to
inspect). inspect).
Otherwise run `detect-custom-files` (prefer SDK when available): Otherwise run `detect-custom-files`:
```bash ```bash
GSD_TOOLS="$RUNTIME_DIR/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="$RUNTIME_DIR/get-shit-done/bin/gsd-tools.cjs"
CUSTOM_JSON='' CUSTOM_JSON=''
if [ -f "$GSD_TOOLS" ] && [ -n "$RUNTIME_DIR" ]; then if [ -f "$GSD_TOOLS" ] && [ -n "$RUNTIME_DIR" ]; then
CUSTOM_JSON=$(node "$GSD_TOOLS" detect-custom-files --config-dir "$RUNTIME_DIR" 2>/dev/null) CUSTOM_JSON=$(node "$GSD_TOOLS" detect-custom-files --config-dir "$RUNTIME_DIR" 2>/dev/null)
elif [ -n "$RUNTIME_DIR" ] && command -v gsd-sdk >/dev/null 2>&1; then
CUSTOM_JSON=$(gsd-sdk query detect-custom-files --config-dir "$RUNTIME_DIR" 2>/dev/null)
fi fi
if [ -z "$CUSTOM_JSON" ]; then if [ -z "$CUSTOM_JSON" ]; then
CUSTOM_JSON='{"custom_files":[],"custom_count":0}' CUSTOM_JSON='{"custom_files":[],"custom_count":0}'

View File

@@ -16,14 +16,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
## 0. Initialize ## 0. Initialize
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi

View File

@@ -29,14 +29,12 @@ Then verify each level against the actual codebase.
Load phase operation context: Load phase operation context:
```bash ```bash
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi
@@ -64,7 +62,7 @@ Extract **phase goal** from ROADMAP.md (the outcome to verify, not tasks), **req
<step name="establish_must_haves"> <step name="establish_must_haves">
**Option A: Must-haves in PLAN frontmatter** **Option A: Must-haves in PLAN frontmatter**
Use `gsd-sdk query` verify handlers (or legacy gsd-tools) to extract must_haves from each PLAN: Use `gsd-tools.cjs query` verify handlers (or legacy gsd-tools) to extract must_haves from each PLAN:
```bash ```bash
for plan in "$PHASE_DIR"/*-PLAN.md; do for plan in "$PHASE_DIR"/*-PLAN.md; do
@@ -114,7 +112,7 @@ For each truth: identify supporting artifacts → check artifact status → chec
</step> </step>
<step name="verify_artifacts"> <step name="verify_artifacts">
Use `gsd-sdk query verify.artifacts` (or legacy gsd-tools) for artifact verification against must_haves in each PLAN: Use `gsd-tools.cjs query verify.artifacts` (or legacy gsd-tools) for artifact verification against must_haves in each PLAN:
```bash ```bash
for plan in "$PHASE_DIR"/*-PLAN.md; do for plan in "$PHASE_DIR"/*-PLAN.md; do
@@ -157,7 +155,7 @@ wiring or leftover code from plan revisions.
</step> </step>
<step name="verify_wiring"> <step name="verify_wiring">
Use `gsd-sdk query verify.key-links` (or legacy gsd-tools) for key link verification against must_haves in each PLAN: Use `gsd-tools.cjs query verify.key-links` (or legacy gsd-tools) for key link verification against must_haves in each PLAN:
```bash ```bash
for plan in "$PHASE_DIR"/*-PLAN.md; do for plan in "$PHASE_DIR"/*-PLAN.md; do

View File

@@ -34,14 +34,12 @@ GSD_WS=""
echo "$ARGUMENTS" | grep -qE -- '--ws[[:space:]]+[^[:space:]]+' && GSD_WS=$(echo "$ARGUMENTS" | grep -oE -- '--ws[[:space:]]+[^[:space:]]+') echo "$ARGUMENTS" | grep -qE -- '--ws[[:space:]]+[^[:space:]]+' && GSD_WS=$(echo "$ARGUMENTS" | grep -oE -- '--ws[[:space:]]+[^[:space:]]+')
PHASE_ARG=$(echo "$ARGUMENTS" | sed -E 's/--ws[[:space:]]+[^[:space:]]+//g' | xargs) PHASE_ARG=$(echo "$ARGUMENTS" | sed -E 's/--ws[[:space:]]+[^[:space:]]+//g' | xargs)
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668) # SDK resolution: prefer local gsd-tools.cjs, fail if local gsd-tools.cjs is missing (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs" GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then if [ -f "$GSD_TOOLS" ]; then
GSD_SDK="node $GSD_TOOLS" GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
GSD_SDK="gsd-sdk"
else else
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2 echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS." >&2
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2 echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
exit 1 exit 1
fi fi
@@ -506,7 +504,7 @@ All tests passed. Phase {phase} marked complete.
<step name="scan_phase_artifacts"> <step name="scan_phase_artifacts">
Run phase artifact scan to surface any open items before marking phase verified: Run phase artifact scan to surface any open items before marking phase verified:
`audit-open` is CJS-only until registered on `gsd-sdk query`: `audit-open` is CJS-only until registered on `gsd-tools.cjs query`:
```bash ```bash
$GSD_SDK query audit-open --json $GSD_SDK query audit-open --json