Install
npm i @opengsd/gsd-core@1.20.1
# or
npm i @opengsd/gsd-core@latestWhat's Changed
Fixed
- The fork-probe cache stays inside the project and out of git — the cache no longer writes through a symlinked .gsd that points outside the project, and a fresh project no longer shows .gsd/ as untracked or sweeps it into git add -A. (#5757) (#5908)
- Installs into a nested or unusually named config directory keep correct paths on every runtime — the installer rewrote
~/.claudereferences in several passes, and the converters that run afterwards (agents, thegsd-core/spec tree, OpenCode and Kilo commands and skills, command bodies, the Codex agent TOML) scanned the emitted prefix again, so a--config-dirsuch as~/.claude/profiles/work,~/.claude.dor~/.copilot/workwas rewritten inside its own output, and$&in a config dir was expanded into the text around it. A Kilo install wrote paths like.../profiles/work/profiles/work/gsd-core, an OpenCode install wrote paths like.claude/~/.config/opencode/x, and a Codex agent TOML got~/.codexin place of$&. Each reference is now rewritten once and the emitted prefix is shielded from every later converter, for Kilo, OpenCode, Codex, Cline, CodeBuddy, Hermes, Qwen, Windsurf, Kimi, Trae agents and spec tree, Augment commands, and the Copilot and Antigravity@includes for a config dir under their own default home. Intentional changes to default-install output: (1) Windsurf global installs turned~/.devin/skills/xand$HOME/.devin/skills/xinto~/$HOME/.codeium/windsurf/skills/xand$HOME/$HOME/...; they now give$HOME/.codeium/windsurf/skills/x. (2) Claude Code's own files such as~/.claude.json,$HOME/.claude.json,~/.claude-pluginand./.claude-pluginwere rewritten into nonexistent names like$HOME/.cline.json; they now stay unchanged. (3) A Trae local install wrote$HOME/.trae/...and~/.traepaths, including@$HOME/.trae/gsd-core/...includes, into its skills, which point at the global directory; they now point at the project's.trae/. A comparison of real default installs of all 18 installable runtimes, global and local, against the previous build found no other difference in the installed files. (#5715) (#5906) effort sync --applyno longer makes the next install back up synced agents as local patches — the sync rewrote agent files without updating gsd-file-manifest.json, so the next install treated every synced agent as a local modification; the manifest now records the synced files. (#5683) (#5899)- Two orchestrators in one checkout no longer deny each other's sequential dispatches — when parallel workstreams ran execute-phase in the same checkout, each recorded isolation decision overwrote the other's, so a plan resolved to run without a worktree was refused by the isolation guard; each dispatch's decision is now kept for its own phase and plan. (#5682) (#5891)
drift-guard phase-statusand workstream progress read milestone-prefixed phases correctly — underphase_id_convention: milestone-prefixedeveryM-NNphase named in ROADMAP Progress rows or STATE.md read as the bare milestone, so phase-status compared STATE against the milestone's first phase and reported a false drift, and workstream progress collapsed the milestone's phases into one. (#5675) (#5887)phase insertnames the milestone when the phase belongs to another one — inserting after a phase that lives in a different milestone than the current one reportedPhase N not found in ROADMAP.md, the same text as a phase missing from the file; the error now names the milestone that holds it and the current one. (#5679) (#5893)- new-project and new-milestone point to the right next step — the closing hand-off said /gsd-plan-phase starts execution; it now recommends /gsd-discuss-phase, with /gsd-plan-phase to plan directly and /gsd-execute-phase to execute. (#5723) (#5905)
phase complete,state syncand init progress read milestone-prefixed phase ids correctly — underphase_id_convention: milestone-prefixed, re-completing a phase such as3-01while STATE.md was at3-02rewound STATE to the completed phase, a first-time completion advanced STATE to phase3named "02: beta", and roadmap checklist rows, phase headings and phase directories such as03-02-betawere not recognised by init progress, init manager (its checked-phase fallback),find-phase(which reported phase03named "02-beta") and the planning snapshot. (#5676) (#5896)
Full Changelog: v1.20.0...v1.20.1