Files
msd-core/.changeset
Tom Boucher 375bf3abd6 fix(#3126): replace hardcoded globalSkillsBase with first-class runtime-aware mapping (#3140)
* fix(#3126): replace hardcoded globalSkillsBase with runtime-aware mapping

Root cause: buildAgentSkillsBlock() used path.join(os.homedir(), '.claude',
'skills') for globalSkillsBase regardless of config.runtime. Cursor users
(and every non-Claude runtime) saw their global: skill lookups fail with
a warning pointing to the wrong directory.

Fix: introduces get-shit-done/bin/lib/runtime-homes.cjs — a pure, side-
effect-free module covering all 15 GSD runtimes:

  Runtime      Config base              Skills path
  claude        ~/.claude               ~/.claude/skills/
  cursor        ~/.cursor               ~/.cursor/skills/
  gemini        ~/.gemini               ~/.gemini/skills/
  codex         ~/.codex                ~/.codex/skills/
  copilot       ~/.copilot              ~/.copilot/skills/
  antigravity   ~/.gemini/antigravity   ...antigravity/skills/
  windsurf      ~/.codeium/windsurf     ...windsurf/skills/
  augment       ~/.augment              ~/.augment/skills/
  trae          ~/.trae                 ~/.trae/skills/
  qwen          ~/.qwen                 ~/.qwen/skills/
  hermes        ~/.hermes               ~/.hermes/skills/gsd/ (nested #2841)
  codebuddy     ~/.codebuddy            ~/.codebuddy/skills/
  cline         ~/.cline                null (rules-based, no skills dir)
  opencode      ~/.config/opencode      ...opencode/skills/
  kilo          ~/.config/kilo          ...kilo/skills/

Also adds CLAUDE_CONFIG_DIR env var support (was missing).
Warning messages now show the actual runtime-specific path.
Docs: INVENTORY.md CLI Modules 41→42.

Regression test: 30 assertions across all runtimes.
Suite: 7008/7008. Closes #3126.

* fix(lint+init): allow-test-rule, fix display path duplication (skillName appended twice)
2026-05-05 15:02:11 -04:00
..

Changeset Fragments

This directory holds per-PR CHANGELOG fragments. Every PR with user-facing changes drops one (or more) <random-name>.md files here describing its CHANGELOG entry. Fragments are consolidated into the top-level CHANGELOG.md at release time.

Why

Two PRs that both edit the ### Fixed block of CHANGELOG.md always conflict on merge — git can't pick a serialization order without human input. Two PRs that each add a fresh .changeset/<unique-name>.md never conflict because they don't share lines.

See #2975 for the full rationale.

Adding a fragment

node scripts/changeset/new.cjs \
  --type Fixed \
  --pr 1234 \
  --body "fix the thing — explain the user-visible change in one sentence"

This writes .changeset/<adjective>-<noun>-<noun>.md with frontmatter and a body. Three random words → concurrent PRs don't collide.

Format

---
type: Fixed
pr: 1234
---
**`/gsd-foo` no longer drops trailing slashes** — explain the user-visible change.

Allowed type: values follow Keep a Changelog: Added, Changed, Deprecated, Removed, Fixed, Security.

Opting out

PRs that legitimately have no user-facing impact can add the no-changelog label. CI honors it. When unsure, add the fragment.

At release time

node scripts/changeset/cli.cjs render --version vX.Y.Z --date YYYY-MM-DD

Reads every fragment, groups bullets by type:, replaces ## [Unreleased] with a new ## [vX.Y.Z] - YYYY-MM-DD block, opens a fresh ## [Unreleased] above, deletes consumed fragments. Idempotent.