* fix(#170): update workflow fallback install hint package * chore(#170): add changeset for workflow fallback hint migration * fix(#170): mark workflow-hint test as structural text contract
This commit is contained in:
5
.changeset/170-workflow-fallback-package-hint.md
Normal file
5
.changeset/170-workflow-fallback-package-hint.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
type: Fixed
|
||||
pr: 170
|
||||
---
|
||||
**Workflow fallback install hint migration** — workflow error-path guidance for missing `gsd-sdk` now points to `npx -y @opengsd/get-shit-done-redux@latest --claude --local` instead of the abandoned `get-shit-done-cc` package. Added a regression test to prevent legacy fallback hints from reappearing in workflow markdown.
|
||||
@@ -27,7 +27,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
NEXT=$($GSD_SDK query phase.next-decimal 999 --raw)
|
||||
|
||||
@@ -37,7 +37,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.phase-op "0")
|
||||
|
||||
@@ -41,7 +41,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.phase-op "${PHASE_ARG}")
|
||||
|
||||
@@ -20,7 +20,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.todos)
|
||||
|
||||
@@ -28,7 +28,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.plan-phase "$PHASE")
|
||||
|
||||
@@ -40,7 +40,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query audit-uat 2>/dev/null || echo "{}")
|
||||
|
||||
@@ -24,7 +24,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.milestone-op)
|
||||
|
||||
@@ -16,7 +16,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
AUDIT=$($GSD_SDK query audit-uat --raw)
|
||||
|
||||
@@ -56,7 +56,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.milestone-op)
|
||||
|
||||
@@ -20,7 +20,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.todos)
|
||||
|
||||
@@ -132,7 +132,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
$GSD_SDK query commit "chore: archive phase directories from completed milestones" --files .planning/milestones/ .planning/phases/
|
||||
|
||||
@@ -26,7 +26,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.phase-op "${PHASE_ARG}")
|
||||
|
||||
@@ -26,7 +26,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.phase-op "${PHASE_ARG}")
|
||||
|
||||
@@ -49,7 +49,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
$GSD_SDK query audit-open
|
||||
|
||||
@@ -24,7 +24,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query state.load)
|
||||
|
||||
@@ -66,7 +66,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
USE_WORKTREES=$($GSD_SDK query config-get workflow.use_worktrees 2>/dev/null || echo "true")
|
||||
|
||||
@@ -72,7 +72,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.phase-op "${PHASE}")
|
||||
|
||||
@@ -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 get-shit-done-cc@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" || { 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; }; }
|
||||
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)
|
||||
```
|
||||
|
||||
@@ -35,7 +35,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query state.load 2>/dev/null)
|
||||
|
||||
@@ -22,7 +22,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query docs-init)
|
||||
|
||||
@@ -42,7 +42,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.phase-op "${target}")
|
||||
|
||||
@@ -21,7 +21,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.phase-op "${PHASE_ARG}")
|
||||
|
||||
@@ -74,7 +74,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.execute-phase "${PHASE_ARG}")
|
||||
|
||||
@@ -38,7 +38,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.execute-phase "${PHASE}")
|
||||
|
||||
@@ -123,7 +123,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
$GSD_SDK query commit "docs: capture exploration — {topic_slug}" --files {file_list}
|
||||
|
||||
@@ -24,7 +24,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.phase-op "${PHASE_ARG}")
|
||||
|
||||
@@ -280,7 +280,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
$GSD_SDK query state.record-session "" \
|
||||
|
||||
@@ -29,7 +29,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
GRADUATION_ENABLED=$($GSD_SDK query config-get features.graduation 2>/dev/null || echo "true")
|
||||
|
||||
@@ -57,7 +57,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
$GSD_SDK query validate.context \
|
||||
|
||||
@@ -184,7 +184,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.phase-op "{NN}")
|
||||
|
||||
@@ -42,7 +42,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.phase-op "${after_phase}")
|
||||
|
||||
@@ -19,7 +19,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.list-workspaces)
|
||||
|
||||
@@ -27,7 +27,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.manager)
|
||||
|
||||
@@ -77,7 +77,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.map-codebase)
|
||||
|
||||
@@ -61,7 +61,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
$GSD_SDK query init.progress
|
||||
|
||||
@@ -42,7 +42,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
PHASE_INFO=$($GSD_SDK query roadmap.get-phase "${PHASE}")
|
||||
|
||||
@@ -189,7 +189,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
$GSD_SDK query state.milestone-switch --milestone "v[X.Y]" --name "[Name]"
|
||||
|
||||
@@ -65,7 +65,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.new-project)
|
||||
|
||||
@@ -21,7 +21,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.new-workspace)
|
||||
|
||||
@@ -22,7 +22,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
$GSD_SDK query state.json 2>/dev/null || echo "{}"
|
||||
|
||||
@@ -74,7 +74,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
timestamp=$($GSD_SDK query current-timestamp full --raw)
|
||||
|
||||
@@ -73,7 +73,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
HIGHEST=$($GSD_SDK query phases.list --pick directories[-1])
|
||||
|
||||
@@ -39,7 +39,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.plan-phase "$PHASE")
|
||||
|
||||
@@ -51,7 +51,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
CONVERGENCE_ENABLED=$($GSD_SDK query config-get workflow.plan_review_convergence 2>/dev/null || echo "false")
|
||||
|
||||
@@ -143,7 +143,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
$GSD_SDK query commit "docs: plant seed — {$IDEA}" --files .planning/seeds/SEED-{PADDED}-{slug}.md
|
||||
|
||||
@@ -138,7 +138,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
SCAN_RESULT=$($GSD_SDK query scan-sessions --json 2>/dev/null)
|
||||
|
||||
@@ -20,7 +20,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.progress)
|
||||
|
||||
@@ -37,7 +37,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.phase-op "${target}")
|
||||
|
||||
@@ -21,7 +21,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.remove-workspace "$WORKSPACE_NAME")
|
||||
|
||||
@@ -28,7 +28,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.resume)
|
||||
|
||||
@@ -32,7 +32,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
OLLAMA_HOST=$($GSD_SDK query config-get review.ollama_host 2>/dev/null | jq -r '.' 2>/dev/null || echo "")
|
||||
|
||||
@@ -47,7 +47,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.map-codebase 2>/dev/null || echo "{}")
|
||||
|
||||
@@ -24,7 +24,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.phase-op "${PHASE_ARG}")
|
||||
|
||||
@@ -28,7 +28,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
$GSD_SDK query config-ensure-section
|
||||
|
||||
@@ -50,7 +50,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
$GSD_SDK query config-ensure-section
|
||||
|
||||
@@ -20,7 +20,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
$GSD_SDK query config-ensure-section
|
||||
|
||||
@@ -20,7 +20,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.phase-op "${PHASE_ARG}")
|
||||
|
||||
@@ -45,7 +45,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
COMMIT_DOCS=$($GSD_SDK query config-get commit_docs 2>/dev/null || echo "true")
|
||||
|
||||
@@ -107,7 +107,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
COMMIT_DOCS=$($GSD_SDK query config-get commit_docs 2>/dev/null || echo "true")
|
||||
|
||||
@@ -45,7 +45,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
COMMIT_DOCS=$($GSD_SDK query config-get commit_docs 2>/dev/null || echo "true")
|
||||
|
||||
@@ -104,7 +104,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
COMMIT_DOCS=$($GSD_SDK query config-get commit_docs 2>/dev/null || echo "true")
|
||||
|
||||
@@ -20,7 +20,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
STATS=$($GSD_SDK query stats.json)
|
||||
|
||||
@@ -36,7 +36,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
$GSD_SDK query frontmatter.get .planning/threads/{file} status
|
||||
|
||||
@@ -171,7 +171,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
TRANSITION=$($GSD_SDK query phase.complete "${current_phase}")
|
||||
|
||||
@@ -27,7 +27,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.plan-phase "$PHASE")
|
||||
|
||||
@@ -24,7 +24,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.phase-op "${PHASE_ARG}")
|
||||
|
||||
@@ -74,7 +74,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.plan-phase "$PHASE")
|
||||
|
||||
@@ -24,7 +24,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.phase-op "${PHASE_ARG}")
|
||||
|
||||
@@ -37,7 +37,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.phase-op "${PHASE_ARG}")
|
||||
|
||||
@@ -42,7 +42,7 @@ 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 "Run: npx get-shit-done-cc@latest --claude --local" >&2
|
||||
echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||
exit 1
|
||||
fi
|
||||
INIT=$($GSD_SDK query init.verify-work "${PHASE_ARG}" ${GSD_WS})
|
||||
|
||||
43
tests/bug-170-workflow-fallback-install-hint.test.cjs
Normal file
43
tests/bug-170-workflow-fallback-install-hint.test.cjs
Normal file
@@ -0,0 +1,43 @@
|
||||
'use strict';
|
||||
// allow-test-rule: workflow markdown is shipped product text; this test validates fallback hint literals across all workflow files
|
||||
|
||||
const { test } = require('node:test');
|
||||
const assert = require('node:assert/strict');
|
||||
const fs = require('node:fs');
|
||||
const path = require('node:path');
|
||||
|
||||
const WORKFLOWS_DIR = path.join(__dirname, '..', 'get-shit-done', 'workflows');
|
||||
const LEGACY_HINT = 'npx get-shit-done-cc@latest --claude --local';
|
||||
const CURRENT_HINT = 'npx -y @opengsd/get-shit-done-redux@latest --claude --local';
|
||||
|
||||
function findMarkdownFiles(dir) {
|
||||
const out = [];
|
||||
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
||||
const full = path.join(dir, entry.name);
|
||||
if (entry.isDirectory()) out.push(...findMarkdownFiles(full));
|
||||
else if (entry.isFile() && full.endsWith('.md')) out.push(full);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
test('bug #170: workflow fallback hints do not reference get-shit-done-cc', () => {
|
||||
const files = findMarkdownFiles(WORKFLOWS_DIR);
|
||||
let legacyCount = 0;
|
||||
let currentCount = 0;
|
||||
|
||||
for (const file of files) {
|
||||
const src = fs.readFileSync(file, 'utf8');
|
||||
if (src.includes(LEGACY_HINT)) legacyCount += 1;
|
||||
if (src.includes(CURRENT_HINT)) currentCount += 1;
|
||||
}
|
||||
|
||||
assert.equal(
|
||||
legacyCount,
|
||||
0,
|
||||
`workflow fallback hints must not reference legacy package (${LEGACY_HINT})`
|
||||
);
|
||||
assert.ok(
|
||||
currentCount > 0,
|
||||
`expected at least one workflow fallback hint to use current package (${CURRENT_HINT})`
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user