* fix(#637): route 3 more workflows through gsd_run launcher (hardcoded $HOME sweep)
The hardcoded `node "$HOME/.claude/gsd-core/bin/gsd-tools.cjs"` invocation form
fixed in plan-phase.md (#621) survived in three more workflows. Same bug class:
on a global/shim-only install with no project-local runtime, the hardcoded path
can miss a working install, so the step reports the tool "not found" instead of
resolving it via the launcher. #3668 introduced gsd_run resolution; these sites
were missed.
- plan-review-convergence.md: convert the 3 hardcoded invocations (init,
roadmap get-phase, state planned-phase) to gsd_run. File already carried the
canonical preamble (first gsd_run is the earlier convergence-enabled check).
- ingest-docs.md, spec-phase.md: convert their hardcoded invocations to gsd_run
and inject the canonical launcher preamble via
`node scripts/sync-runtime-launcher.cjs` (these files previously had no
gsd_run and no preamble). The injected preamble is byte-equal to
_runtime-launcher.snippet.sh and precedes the first gsd_run call, per
runtime-launcher-parity invariant (B).
- Add tests/bug-637-workflow-no-hardcoded-home-tool.test.cjs: repo-wide
regression guard asserting NO workflow .md invokes gsd-tools via a hardcoded
$HOME path. Generalizes the plan-phase-only guard from #621 — the parity test
guards retired $GSD_SDK / bare /gsd-tools tokens but not this form, which is
how it survived across four files. Fails on the pre-fix files, passes after.
runtime-launcher-parity 7/7; full unit suite green (3477 pass / 0 fail).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* chore(#637): add changeset fragment for PR #642
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* test(#637): update stale bug-2801 assertion to expect gsd_run
bug-2801 pinned ingest-docs.md to the hardcoded node "$HOME/.../gsd-tools.cjs" init form, which #637 replaces with the gsd_run launcher. Flip the assertion to expect gsd_run init ingest-docs; the bare-gsd-tools rejection and CLI-handler tests are unchanged, and bug-637's repo-wide guard now owns the no-hardcoded-$HOME invariant.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Tom Boucher <trekkie@nomorestars.com>