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:
6
.changeset/195-workflow-gsd-tools-query.md
Normal file
6
.changeset/195-workflow-gsd-tools-query.md
Normal 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 -->
|
||||
@@ -19,14 +19,12 @@ cat .planning/ROADMAP.md
|
||||
## Step 2: Find next backlog number
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -29,14 +29,12 @@ Exit.
|
||||
Load phase operation context:
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
@@ -53,7 +51,7 @@ Exit.
|
||||
</step>
|
||||
|
||||
<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
|
||||
RESULT=$($GSD_SDK query phase.add "${description}")
|
||||
@@ -115,7 +113,7 @@ Roadmap updated: .planning/ROADMAP.md
|
||||
</process>
|
||||
|
||||
<success_criteria>
|
||||
- [ ] `gsd-sdk query phase.add` executed successfully
|
||||
- [ ] `gsd-tools.cjs query phase.add` executed successfully
|
||||
- [ ] Phase directory created
|
||||
- [ ] Roadmap updated with new phase entry
|
||||
- [ ] STATE.md updated with roadmap evolution note
|
||||
|
||||
@@ -33,14 +33,12 @@ Exit.
|
||||
Load phase operation context:
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -12,14 +12,12 @@ Read all files referenced by the invoking prompt's execution_context before star
|
||||
Load todo context:
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -20,14 +20,12 @@ This prevents the two most common AI development failures: choosing the wrong fr
|
||||
## 1. Initialize
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -32,14 +32,12 @@ Invoke the source audit command and capture output.
|
||||
|
||||
For `audit-uat` source:
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -16,14 +16,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
|
||||
## 0. Initialize Milestone Context
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -8,14 +8,12 @@ Cross-phase audit of all UAT and verification files. Finds every outstanding ite
|
||||
Run the CLI audit:
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -48,14 +48,12 @@ When `--interactive` is set, discuss runs inline with questions (not auto-answer
|
||||
Bootstrap via milestone-level init:
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -12,14 +12,12 @@ Read all files referenced by the invoking prompt's execution_context before star
|
||||
Load todo context:
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -124,14 +124,12 @@ Repeat for all milestones in the cleanup set.
|
||||
Commit the changes:
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -18,14 +18,12 @@ Parse arguments and load project state:
|
||||
|
||||
```bash
|
||||
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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -18,14 +18,12 @@ Parse arguments and load project state:
|
||||
|
||||
```bash
|
||||
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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
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:
|
||||
|
||||
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"
|
||||
|
||||
```bash
|
||||
|
||||
@@ -41,14 +41,12 @@ When a milestone completes:
|
||||
Before proceeding with milestone close, run the comprehensive open artifact audit.
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
@@ -68,7 +66,7 @@ These items are open. Choose an action:
|
||||
```
|
||||
|
||||
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:
|
||||
```markdown
|
||||
## Deferred Items
|
||||
@@ -229,7 +227,7 @@ Key accomplishments for this milestone:
|
||||
|
||||
<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.
|
||||
|
||||
@@ -420,7 +418,7 @@ Update `.planning/ROADMAP.md` — group completed milestone phases:
|
||||
|
||||
<step name="archive_milestone">
|
||||
|
||||
**Delegate archival to `gsd-sdk query milestone.complete`:**
|
||||
**Delegate archival to `gsd-tools.cjs query milestone.complete`:**
|
||||
|
||||
```bash
|
||||
ARCHIVE=$($GSD_SDK query milestone.complete "v[X.Y]" --name "[Milestone Name]")
|
||||
@@ -736,7 +734,7 @@ fi
|
||||
<step name="git_tag">
|
||||
|
||||
<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`.
|
||||
</config-check>
|
||||
|
||||
|
||||
@@ -16,14 +16,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
|
||||
## 0. Initialize Context
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -58,14 +58,12 @@ gaps = [
|
||||
**Read worktree config:**
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -64,14 +64,12 @@ plain-text numbered list and ask the user to type their choice number.
|
||||
Phase number from argument (required).
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -109,7 +109,7 @@ Phase: "API documentation" → Structure/navigation, Code examples depth,
|
||||
Phase number from argument (required).
|
||||
|
||||
```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:}")
|
||||
AGENT_SKILLS_ADVISOR=$($GSD_SDK query agent-skills gsd-advisor-researcher)
|
||||
```
|
||||
|
||||
@@ -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.,
|
||||
`/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.
|
||||
|
||||
|
||||
@@ -26,15 +26,13 @@ Wait for response before continuing.
|
||||
**Check if project exists.**
|
||||
|
||||
```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_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/${_GSD_SHIM_NAME}"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -14,14 +14,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
|
||||
Load docs-update context:
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -34,14 +34,12 @@ Exit.
|
||||
Load phase operation context:
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -13,14 +13,12 @@ Use after /gsd:execute-phase to verify that the evaluation strategy from AI-SPEC
|
||||
## 0. Initialize
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -66,14 +66,12 @@ If `--wave` is absent, preserve the current behavior of executing all incomplete
|
||||
Load all context in one call:
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
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 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):**
|
||||
|
||||
@@ -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.
|
||||
|
||||
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:
|
||||
- `## Cross-Plan Wiring Gap` with plan/link/from/pattern rows
|
||||
- Options: investigate+fix before continue, or continue with cascade risk
|
||||
@@ -1702,7 +1700,7 @@ For 1M+ context models, consider:
|
||||
</context_efficiency>
|
||||
|
||||
<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
|
||||
- **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
|
||||
|
||||
@@ -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):
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
@@ -61,7 +59,7 @@ Find first PLAN without matching SUMMARY. Decimal phases supported (`01.1-hotfix
|
||||
|
||||
```bash
|
||||
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">
|
||||
@@ -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
|
||||
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
|
||||
# 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 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
|
||||
$GSD_SDK query state.record-session \
|
||||
|
||||
@@ -115,14 +115,12 @@ For each selected output, write the file:
|
||||
|
||||
Commit if `commit_docs` is enabled:
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -16,14 +16,12 @@ Analyze completed phase artifacts (PLAN.md, SUMMARY.md, VERIFICATION.md, UAT.md,
|
||||
Parse arguments and load project state:
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -272,14 +272,12 @@ gh issue create \
|
||||
## Step 8: Update STATE.md
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -21,14 +21,12 @@ Read from project config (`config.json`):
|
||||
## Step 1: Guard Checks
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -49,14 +49,12 @@ available — replace the prompt with a plain-text two-question sequence
|
||||
plain text from the user's response.
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -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:
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -34,14 +34,12 @@ Validate first argument is an integer.
|
||||
Load phase operation context:
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
@@ -57,7 +55,7 @@ Exit.
|
||||
</step>
|
||||
|
||||
<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
|
||||
RESULT=$($GSD_SDK query phase.insert "${after_phase}" "${description}")
|
||||
@@ -153,10 +151,10 @@ Project state updated: .planning/STATE.md
|
||||
<success_criteria>
|
||||
Phase insertion is complete when:
|
||||
|
||||
- [ ] `gsd-sdk query phase.insert` executed successfully
|
||||
- [ ] `gsd-tools.cjs query phase.insert` executed successfully
|
||||
- [ ] Phase directory created
|
||||
- [ ] 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-sdk query state.patch` returned matched next-phase pointer field(s)
|
||||
- [ ] `gsd-tools.cjs query state.add-roadmap-evolution ...` returned `{ added: true }` or `{ added: false, reason: "duplicate" }`
|
||||
- [ ] `gsd-tools.cjs query state.patch` returned matched next-phase pointer field(s)
|
||||
- [ ] User informed of next steps and dependency implications
|
||||
</success_criteria>
|
||||
|
||||
@@ -11,14 +11,12 @@ Read all files referenced by the invoking prompt's execution_context before star
|
||||
## 1. Setup
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -19,14 +19,12 @@ Read all files referenced by the invoking prompt's execution_context before star
|
||||
Bootstrap via manager init:
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
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.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.
|
||||
|
||||
|
||||
@@ -69,14 +69,12 @@ documents refreshed.
|
||||
Load codebase mapping context:
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -53,14 +53,12 @@ Read all files that exist. Missing files are fine — the summary adapts to what
|
||||
Find all phase directories:
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -34,14 +34,12 @@ Normalize per `@~/.claude/get-shit-done/references/phase-argument-parsing.md` (z
|
||||
## 2. Validate phase exists and check status
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -181,14 +181,12 @@ blockers, todos) is preserved across the switch — symmetric with
|
||||
`milestone.complete`.
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -57,14 +57,12 @@ The document should describe what you want to build.
|
||||
**MANDATORY FIRST STEP — Execute these checks before ANY user interaction:**
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -13,14 +13,12 @@ Read all files referenced by the invoking prompt's execution_context before star
|
||||
**MANDATORY FIRST STEP — Execute init command:**
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -14,14 +14,12 @@ Read project state to determine current position:
|
||||
|
||||
```bash
|
||||
# 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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
@@ -94,7 +92,7 @@ Use `--force` to bypass this check.
|
||||
Exit.
|
||||
|
||||
**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:
|
||||
1. **Plans without summaries** — a PLAN.md exists in a prior phase directory but no matching SUMMARY.md exists (execution started but not completed).
|
||||
|
||||
@@ -66,14 +66,12 @@ Report any summaries with placeholder content as incomplete items.
|
||||
**Write structured handoff to `.planning/HANDOFF.json`:**
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -65,14 +65,12 @@ Gap: Flow "View dashboard" broken at data fetch
|
||||
Find highest existing phase:
|
||||
```bash
|
||||
# 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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -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):
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
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`.
|
||||
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})`.
|
||||
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.
|
||||
|
||||
@@ -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:
|
||||
1. Re-run: `/gsd:plan-phase {PHASE} --research ${GSD_WS}`
|
||||
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)
|
||||
|
||||
Proceed to Step 7.8 (or Step 8 if pattern mapper is disabled) only if user selects 2 or 3.
|
||||
|
||||
@@ -43,14 +43,12 @@ echo "$ARGUMENTS" | grep -qE '\-\-ws\s+\S+' && GSD_WS=$(echo "$ARGUMENTS" | grep
|
||||
## 1.5. Config Gate (feature disabled by default)
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -135,14 +135,12 @@ Store relevant file paths as `$BREADCRUMBS`.
|
||||
|
||||
<step name="commit-seed">
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<purpose>
|
||||
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>
|
||||
|
||||
<required_reading>
|
||||
@@ -130,14 +130,12 @@ Display: "◆ Scanning sessions..."
|
||||
|
||||
Run session scan:
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
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"
|
||||
|
||||
**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
|
||||
- [ ] Result display shows report card table and highlight reel with evidence
|
||||
- [ ] 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
|
||||
- [ ] Temp files cleaned up on completion
|
||||
</success_criteria>
|
||||
|
||||
@@ -12,14 +12,12 @@ Read all files referenced by the invoking prompt's execution_context before star
|
||||
**Load progress context (paths only):**
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
@@ -53,11 +51,11 @@ If missing both ROADMAP.md and PROJECT.md: suggest `/gsd:new-project`.
|
||||
</step>
|
||||
|
||||
<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:
|
||||
- `ROADMAP=$(gsd-sdk query roadmap.analyze)`
|
||||
- `STATE=$(gsd-sdk query state-snapshot)`
|
||||
- `ROADMAP=$(gsd-tools.cjs query roadmap.analyze)`
|
||||
- `STATE=$(gsd-tools.cjs query state-snapshot)`
|
||||
|
||||
This minimizes orchestrator context usage.
|
||||
</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
|
||||
> 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
|
||||
# Get formatted progress bar
|
||||
|
||||
@@ -125,14 +125,12 @@ If `$VALIDATE_MODE` only:
|
||||
**Step 2: Initialize**
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
@@ -961,7 +959,7 @@ Use Edit tool to make these changes atomically
|
||||
|
||||
**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:
|
||||
- `${QUICK_DIR}/${quick_id}-PLAN.md`
|
||||
|
||||
@@ -29,14 +29,12 @@ Exit.
|
||||
Load phase operation context:
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
@@ -88,7 +86,7 @@ Wait for confirmation.
|
||||
</step>
|
||||
|
||||
<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
|
||||
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 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 modify completed phase directories
|
||||
</anti_patterns>
|
||||
@@ -160,7 +158,7 @@ Would you like to:
|
||||
Phase removal is complete when:
|
||||
|
||||
- [ ] 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
|
||||
- [ ] User informed of changes
|
||||
</success_criteria>
|
||||
|
||||
@@ -13,14 +13,12 @@ Read all files referenced by the invoking prompt's execution_context before star
|
||||
Extract workspace name from $ARGUMENTS.
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -20,14 +20,12 @@ Instantly restore full project context so "Where were we?" has an immediate, com
|
||||
Load all context in one call:
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -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"
|
||||
|
||||
# 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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
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.
|
||||
|
||||
```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)
|
||||
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)
|
||||
|
||||
@@ -39,14 +39,12 @@ Exit.
|
||||
## Step 2: Check for existing documents
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -16,14 +16,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
|
||||
## 0. Initialize
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -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`):
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
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 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:**
|
||||
|
||||
@@ -492,7 +490,7 @@ change.
|
||||
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.
|
||||
|
||||
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
|
||||
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
|
||||
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.
|
||||
</step>
|
||||
|
||||
@@ -612,7 +610,7 @@ UI/AI phase gates), use /gsd:settings.
|
||||
- [ ] Numeric inputs validated — non-numeric rejected and re-prompted
|
||||
- [ ] Branch-template inputs validated — non-default must contain a placeholder
|
||||
- [ ] 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
|
||||
- [ ] Group B runtimes display "(no built-in default — your runtime handles model selection)"
|
||||
- [ ] Override set/clear/keep paths all work correctly for each tier
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Interactive configuration of third-party integrations for GSD — search API keys
|
||||
(Brave / Firecrawl / Exa), code-review CLI routing (`review.models.<cli>`), and
|
||||
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.
|
||||
|
||||
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):
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -12,14 +12,12 @@ Read all files referenced by the invoking prompt's execution_context before star
|
||||
Ensure config exists and load current state:
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
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`.
|
||||
</step>
|
||||
|
||||
@@ -12,14 +12,12 @@ Read all files referenced by the invoking prompt's execution_context before star
|
||||
Parse arguments and load project state:
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -37,14 +37,12 @@ Exit.
|
||||
|
||||
Check `commit_docs` config:
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -99,14 +99,12 @@ ls -d .planning/sketches/[0-9][0-9][0-9]-* 2>/dev/null | sort | tail -1
|
||||
|
||||
Check `commit_docs` config:
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -37,14 +37,12 @@ Exit.
|
||||
|
||||
Check `commit_docs` config:
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -96,14 +96,12 @@ ls -d .planning/spikes/[0-9][0-9][0-9]-* 2>/dev/null | sort | tail -1
|
||||
|
||||
Check `commit_docs` config:
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -12,14 +12,12 @@ Read all files referenced by the invoking prompt's execution_context before star
|
||||
Gather project statistics:
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
@@ -63,7 +61,7 @@ If no `.planning/` directory exists, inform the user to run `/gsd:new-project` f
|
||||
</step>
|
||||
|
||||
<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
|
||||
ANALYZE=$($GSD_SDK query roadmap.analyze)
|
||||
|
||||
@@ -28,14 +28,12 @@ ls .planning/threads/*.md 2>/dev/null
|
||||
For each thread file found:
|
||||
- Read frontmatter `status` field via:
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
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 "/"
|
||||
- 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
|
||||
- Status fields read via gsd-sdk 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
|
||||
- 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-tools.cjs query (or gsd-tools) which sanitizes input — keep that pattern
|
||||
</security_notes>
|
||||
|
||||
@@ -160,17 +160,15 @@ If found, delete them — phase is complete, handoffs are stale.
|
||||
|
||||
<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
|
||||
# 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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
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">
|
||||
|
||||
**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:
|
||||
|
||||
@@ -410,7 +408,7 @@ Resume file: None
|
||||
|
||||
**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:
|
||||
- `is_last_phase: false` → More phases remain → Go to **Route A**
|
||||
|
||||
@@ -19,14 +19,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
|
||||
## 1. Initialize
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -16,14 +16,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
|
||||
## 0. Initialize
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -66,14 +66,12 @@ unplanned phase from the roadmap (same logic as /gsd:plan-phase).
|
||||
Load GSD phase context:
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -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()`
|
||||
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
|
||||
even when custom files exist (bug #1997). Use `gsd-sdk query detect-custom-files`
|
||||
when `gsd-sdk` is on `PATH`, or the bundled `gsd-tools.cjs detect-custom-files`
|
||||
otherwise — both resolve paths reliably with Node.js `path.relative()`.
|
||||
even when custom files exist (bug #1997). Use `gsd-tools.cjs query detect-custom-files`
|
||||
or the bundled `gsd-tools.cjs detect-custom-files` path — both resolve paths
|
||||
reliably with Node.js `path.relative()`.
|
||||
|
||||
First, resolve the config directory (`RUNTIME_DIR`) from the install scope
|
||||
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
|
||||
inspect).
|
||||
|
||||
Otherwise run `detect-custom-files` (prefer SDK when available):
|
||||
Otherwise run `detect-custom-files`:
|
||||
|
||||
```bash
|
||||
GSD_TOOLS="$RUNTIME_DIR/get-shit-done/bin/gsd-tools.cjs"
|
||||
CUSTOM_JSON=''
|
||||
if [ -f "$GSD_TOOLS" ] && [ -n "$RUNTIME_DIR" ]; then
|
||||
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
|
||||
if [ -z "$CUSTOM_JSON" ]; then
|
||||
CUSTOM_JSON='{"custom_files":[],"custom_count":0}'
|
||||
|
||||
@@ -16,14 +16,12 @@ Valid GSD subagent types (use exact names — do not fall back to 'general-purpo
|
||||
## 0. Initialize
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -29,14 +29,12 @@ Then verify each level against the actual codebase.
|
||||
Load phase operation context:
|
||||
|
||||
```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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
@@ -64,7 +62,7 @@ Extract **phase goal** from ROADMAP.md (the outcome to verify, not tasks), **req
|
||||
<step name="establish_must_haves">
|
||||
**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
|
||||
for plan in "$PHASE_DIR"/*-PLAN.md; do
|
||||
@@ -114,7 +112,7 @@ For each truth: identify supporting artifacts → check artifact status → chec
|
||||
</step>
|
||||
|
||||
<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
|
||||
for plan in "$PHASE_DIR"/*-PLAN.md; do
|
||||
@@ -157,7 +155,7 @@ wiring or leftover code from plan revisions.
|
||||
</step>
|
||||
|
||||
<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
|
||||
for plan in "$PHASE_DIR"/*-PLAN.md; do
|
||||
|
||||
@@ -34,14 +34,12 @@ GSD_WS=""
|
||||
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)
|
||||
|
||||
# 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"
|
||||
if [ -f "$GSD_TOOLS" ]; then
|
||||
GSD_SDK="node $GSD_TOOLS"
|
||||
elif command -v gsd-sdk >/dev/null 2>&1; then
|
||||
GSD_SDK="gsd-sdk"
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
@@ -506,7 +504,7 @@ All tests passed. Phase {phase} marked complete.
|
||||
<step name="scan_phase_artifacts">
|
||||
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
|
||||
$GSD_SDK query audit-open --json
|
||||
|
||||
Reference in New Issue
Block a user