Phase number parsing only matched single-decimal (e.g. 03.2) but crashed
on multi-level decimals (e.g. 03.2.1). Requirement IDs with regex
metacharacters (parentheses, dots) were interpolated raw into RegExp
constructors, causing SyntaxError crashes.
- Add escapeRegex() utility for safe regex interpolation
- Update normalizePhaseName/comparePhaseNum for multi-level decimals
- Replace all .replace('.', '\\.') with escapeRegex() across modules
- Escape reqId before regex interpolation in cmdPhaseComplete
- Update all phase dir matching regexes from (?:\.\d+)? to (?:\.\d+)*
- Add regression test for phase complete 03.2.1
Closes#621
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Fix /gsd:update to pin installer to latest
* Harden /gsd:update install detection with global fallback
---------
Co-authored-by: Colin <colin@solvely.net>
Add --cwd <path> / --cwd=<path> support so sandboxed subagents running
outside the project root can target a specific directory. Invalid paths
return a clear error. Tests ported to tests/state.test.cjs (the old
monolithic test file was split into domain files on main).
Closes#622
Co-Authored-By: Colin Johnson <colin@solvely.net>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Projects with "type": "module" in package.json cause Node to treat
gsd-tools.js as ESM, crashing on require(). The .cjs extension forces
CommonJS regardless of the host project's module configuration.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add Gemini CLI to supported runtimes
- Update install examples with --gemini and --all flags
- Note native Gemini/OpenCode support in Community Ports section
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
OpenCode follows XDG Base Directory spec and expects config at
~/.config/opencode/, not ~/.opencode/. This fix:
- Add getOpencodeGlobalDir() to detect correct path via:
- OPENCODE_CONFIG_DIR env var
- OPENCODE_CONFIG env var (uses dirname)
- XDG_CONFIG_HOME/opencode
- ~/.config/opencode (default)
- Use 'command/' (singular) instead of 'commands/' (plural)
- Use flat file structure: command/gsd-help.md instead of
commands/gsd/help.md (invoked as /gsd-help)
- Write permissions to ~/.config/opencode/opencode.json
- Update content conversion to replace ~/.claude with
~/.config/opencode and /gsd: with /gsd-
Fixes OpenCode installation which was previously installing to
~/.opencode/ where OpenCode couldn't find the commands.
Rolled back the intel system due to overengineering concerns:
- 1200+ line hook with SQLite graph database
- 21MB sql.js dependency
- Entity generation spawning additional Claude calls
- Complex system with unclear value
Removed:
- /gsd:analyze-codebase command
- /gsd:query-intel command
- gsd-intel-index.js, gsd-intel-session.js, gsd-intel-prune.js hooks
- gsd-entity-generator, gsd-indexer agents
- entity.md template
- sql.js dependency
Preserved:
- Model profiles feature
- Statusline hook
- All other v1.9.x improvements
-3,065 lines removed
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>