github gsd-build/get-shit-done v1.39.0

7 hours ago

πŸ“¦ Install

Published to npm as get-shit-done-cc@1.39.0 β€” dist-tags latest + next.

npx get-shit-done-cc@1.39.0
# or pin to the latest stable:
npx get-shit-done-cc@latest

Already installed? Run /gsd-update from your project.


Highlights

  • πŸͺΆ --minimal install profile β€” ~94% cold-start token reduction for local LLMs (32K–128K context). Re-run gsd update without the flag to expand. (#2762)
  • ✏️ /gsd-edit-phase β€” modify any roadmap phase field in place without renumbering. --force skips the diff. (#2617)
  • πŸ›  Post-merge build & test gate β€” execute-phase auto-detects build/test commands across Xcode, Make, Just, Cargo, Go, Python, npm. iOS projects run xcodebuild build/test automatically. (#2720)
  • πŸ€– Per-runtime review models β€” review.models.<cli> config key + extended RUNTIME_PROFILE_MAP covering gemini, qwen, opencode, copilot. (#2612, #2748)
  • 🌿 Workstream config inheritance β€” root .planning/config.json is deep-merged into each workstream config; explicit null overrides parent values. (#2714)
  • 🐦 Manual canary release workflow β€” workflow_dispatch publishes {base}-canary.{N} builds from dev under the canary dist-tag, with the same publish-verification gate as stable releases. (#2828, #2868)

What's new

Added

  • --minimal install flag (alias --core-only) writes only the main-loop core skills (new-project, discuss-phase, plan-phase, execute-phase, help, update) and zero gsd-* subagents. Cuts cold-start system-prompt overhead from ~12k tokens to ~700, useful for local LLMs with 32K–128K context. The install manifest now records mode: "minimal" | "full". (#2762)
  • /gsd-edit-phase command β€” modify any field of an existing phase in ROADMAP.md without changing its number or position. Supports --force to skip the confirmation diff, validates depends_on references, and updates STATE.md on write. (#2617)
  • Post-merge build & test gate β€” execute-phase step 5.6 now runs in both parallel and serial mode. Auto-detects the build command from workflow.build_command, then falls back to Xcode (.xcodeproj), Makefile, Justfile, Cargo, Go, Python, or npm. (#2720)
  • Extended runtime model profiles β€” RUNTIME_PROFILE_MAP now covers gemini, qwen, opencode, and copilot runtimes with full three-tier (fast/balanced/opus) model mappings. (#2612)
  • Workstream config inheritance β€” when GSD_WORKSTREAM is set, the root .planning/config.json is loaded first and deep-merged with the workstream config (workstream wins on conflict). Explicit null in a workstream config now correctly overrides a root value. (#2714)
  • Manual canary release workflow β€” .github/workflows/canary.yml publishes {base}-canary.{N} builds of get-shit-done-cc and @gsd-build/sdk under the canary dist-tag on demand via workflow_dispatch. Includes dry_run and the same publish-verification gate as release.yml. (#2828)

Changed

  • Canary release workflow now publishes from dev branch only β€” aligns with the new branchβ†’dist-tag policy (dev β†’ @canary, main β†’ @next/@latest). workflow_dispatch runs on main complete validation but skip publish + tag. (#2868)
  • Skill descriptions trimmed to ≀ 100 chars across all commands/gsd/*.md β€” three anti-patterns eliminated: flag documentation already present in argument-hint:, Triggers: keyword-stuffing lists, and numbered enumeration patterns. Range was 45–380 chars; now 45–99. (#2789)
  • scripts/lint-descriptions.cjs added β€” CI lint gate that fails if any commands/gsd/*.md description exceeds 100 chars. Run via npm run lint:descriptions. (#2789)
  • Skill surface consolidated 86 β†’ 59 entries β€” four new grouped skills replace clusters of micro-skills: capture (todo/note/backlog/seed), phase (add/insert/remove/edit), config (settings-advanced/integrations/profile), workspace (new/list/remove). Six parents absorb sub-operations as flags: update --sync/--reapply, sketch --wrap-up, spike --wrap-up, map-codebase --fast/--query, code-review --fix, progress --do/--next. Zero functional loss. (#2790)
  • autonomous.md corrected β€” was invoking deleted gsd:code-review-fix; now calls gsd:code-review --fix. (#2790)

Removed

  • 31 micro-skills deleted β€” absorbed into consolidated parents or removed outright: add-todo, note, add-backlog, plant-seed, check-todos, add-phase, insert-phase, remove-phase, edit-phase, settings-advanced, settings-integrations, set-profile, new-workspace, list-workspaces, remove-workspace, sync-skills, reapply-patches, sketch-wrap-up, spike-wrap-up, scan, intel, code-review-fix, next, do, join-discord, research-phase, session-report, from-gsd2, analyze-dependencies, list-phase-assumptions, plan-milestone-gaps. All functionality preserved via flags on consolidated skills. (#2790)

Fixed

  • GSD slash command namespace drift cleaned up across docs, workflows, and autocomplete; remaining active /gsd:<cmd> references now use canonical /gsd-<cmd>; extract-learnings autocomplete fixed. (#2855)
  • extractCurrentMilestone no longer truncates ROADMAP.md at heading-like lines inside fenced code blocks β€” previously, any phase defined after a fenced block was invisible to roadmap analyze, roadmap get-phase, /gsd-autonomous, and all phase-number commands. (#2787)
  • Codex install no longer corrupts existing ~/.codex/config.toml β€” defensively strips legacy [agents] / [[agents]] blocks, emits hooks in user's preferred shape, migrates legacy [hooks.<Event>] to namespaced AoT, and atomically writes via temp-file + renameSync. Strict TOML validation rejects duplicate keys, repeated table headers, trailing bytes, and unsupported value types. (#2760)
  • Codex hooks migrator correctness hardening β€” four edge-cases in the [[hooks.<Event>]] β†’ [[hooks.<Event>.hooks]] migration path fixed: hyphenated/quoted keys parsed correctly; matcher-only sections no longer synthesise broken [[hooks.TYPE.hooks]] sub-tables; legacyMapSections filter uses parsed segment count; quoted-key dot regression test added. (#2809)
  • Codex [[agents]] reverted to [agents.<name>] struct format β€” sequence format from #2645 is rejected by codex-cli 0.124.0+. (#2727)
  • Codex legacy [hooks] map format auto-migrated β€” Codex 0.124.0 requires [[hooks]] array-of-tables; old GSD installs that wrote [hooks.shell] map-style now self-heal on the next gsd install --codex. (#2637)
  • Codex installer preserves trailing newline when stripping legacy hooks β€” files with no terminating newline at EOF no longer break downstream parsers. (#2866)
  • gsd-sdk PATH verification tightened β€” installer probes for an executable gsd-sdk shim on PATH, attempts to materialize one via symlink at ~/.local/bin/gsd-sdk when absent. Only prints βœ“ GSD SDK ready when the probe succeeds. (#2775, #2777)
  • gsd-sdk resolvable in local-mode installs β€” the previous isLocal short-circuit returned before the PATH probe + self-link path could run. Local installs now run the same probe-and-link flow as global installs. (#2829)
  • gsd-tools invocations use the absolute installed path β€” bare gsd-tools … calls in skill bodies no longer rely on PATH resolution that is not guaranteed in every runtime. (#2851)
  • USER-PROFILE.md no longer triggers false "locally modified" warning β€” USER_OWNED_ARTIFACTS is now a single source of truth used by both the preserve and manifest write paths. (#2771)
  • All gsd-sdk query handlers now respect --ws β€” 18+ handlers accepted _workstream but never forwarded it to planningPaths/loadConfig. Workstream now scopes path resolution correctly. (#2731)
  • resolveModel threads workstream β€” different workstreams with different model_profile settings now get their own profile instead of the root's. (#2742)
  • parseMustHavesBlock quoted strings β€” fully-quoted truths containing : no longer crash annotate-dependencies with TypeError: t.trim is not a function. (#2757, #2734)
  • gsd state complete-phase subcommand β€” was missing; unknown subcommands fell through to cmdStateLoad. Now updates Status, Last Activity, and Current Position to COMPLETE. (#2735)
  • Non-string depends_on values preserved β€” numeric YAML scalars and kv-shaped truths were silently dropped. New coerceTruthToString helper handles numbers, booleans, and object-shaped items. (#2770)
  • Worktree isolation scoped to submodule-touching plans β€” only plans that touch a submodule path skip worktree isolation now. (#2772)
  • Worktree cleanup uses inclusion filter β€” exclusion-based cleanup destroyed .git pointer in multi-workspace and cross-drive Windows setups; now targets only .claude/worktrees/agent-*. (#2774)
  • Requirements: header variants all parse correctly β€” both **Requirements:** and **Requirements**: now match. (#2769)
  • gsd-sdk query commit paths passed via --files β€” 81 invocations across 50 files updated. (#2767)
  • Phase detection in bullet/bold ROADMAP formats β€” phaseAdd now matches heading, bullet checklist, and bold entries. (#2726)
  • Plan-line overwrite when **Plans:** is empty β€” replaced \s* (newline-eating) with [ \t]* plus section-boundary lookahead. (#2728)
  • Phase-lifecycle <details>-wrapped active milestone β€” falls back to locating the last complete <details>…</details> span. (#2641)
  • Phase-lifecycle project-code-prefixed directory names β€” filesystem fallback regex now matches CK-45-foundation-style dirs.
  • roadmap.update-plan-progress regex β€” same \s* corruption vector as planCountPattern; replaced.
  • replaceInCurrentMilestone fast-path guard fixed β€” no longer falsely triggers on footer-only after content.
  • graphify CLI updated to subcommand form β€” graphify update . replaces removed graphify . --update. (#2732)
  • LM Studio model identity validated in review workflow β€” top-level .model field compared against LM_STUDIO_MODEL; same fix applied to llama.cpp. (#2721)
  • SDK globalDefaults preserved for nested config keys β€” workflow, git, hooks, agent_skills, features sections were silently dropping user values from ~/.gsd/defaults.json. (#2673)
  • MODEL_ALIAS_MAP updated to claude-opus-4-7 β€” MODEL_ALIAS_MAP and RUNTIME_PROFILE_MAP.claude.opus were pinned to claude-opus-4-6. (#2733)
  • Orchestrators wait for subagents before continuing β€” 26 GSD workflow files now include an explicit ORCHESTRATOR RULE blockquote immediately after every Task() spawn. (#2729)
  • audit-uat parser reads human_verification: from frontmatter array β€” false-positive open gaps at every /gsd-complete-milestone audit fixed. (#2788)
  • gsd-sdk binary collision with @gsd-build/sdk resolved β€” workstream-aware query registry; gsd-tools bin alias added. (#2791)
  • OpenCode generated agents embed model_profile_overrides.opencode.<tier> β€” per-tier model overrides set via /gsd-settings-advanced are now propagated. (#2794)
  • roadmap update-plan-progress accepts --phase flag form β€” SDK arg-parsing regression silently dropped flags, corrupting STATE.md. (#2796)
  • context_window added to VALID_CONFIG_KEYS allowlist β€” /gsd-settings-advanced could not set the key. (#2798)
  • gsd-tools init dispatches ingest-docs handler β€” /gsd-ingest-docs was broken in v1.38.5. (#2801)
  • config-get honors --default <value> flag β€” fallback for missing keys ported from CJS implementation. (#2803)
  • find-phase returns null for archived phases β€” prevents init.plan-phase / init.execute-phase from returning the archived prior-milestone directory. (#2805)
  • SKILL.md frontmatter name: migrated to hyphen form β€” gsd:cmd colon form no longer appears in autocomplete. (#2808)
  • OpenCode @file references use absolute paths on all platforms β€” fix #2376's Windows-only guard now applies unconditionally. (#2831)
  • gsd-sdk auto detects Codex runtime correctly β€” new runtime-gate raises a clear error for non-Claude runtimes; resolveModel() is now runtime-aware. (#2832)
  • CR-INTEGRATION tests aligned with hyphen-form skill names β€” tests parse Skill(skill="...") invocations structurally and reject the legacy colon form. (#2835)
  • audit-open quick-task scanner accepts ${quick_id}-SUMMARY.md β€” false-positive status: missing for every documented quick task fixed; UAT terminal-status enum gains resolved. (#2836)
  • quick.md / execute-phase.md SUMMARY rescue handles gitignored .planning/ β€” replaced git ls-files --exclude-standard with filesystem-level find + idempotent cp. (#2838)
  • /gsd-code-review-fix cleanup tail is transactional β€” JSON recovery sentinel; orphan worktree force-removed on next run. (#2839)

Performance

  • discuss-phase lazy file loading β€” entry-point @file directives replaced with on-demand Read() calls gated behind mode routing. Tokens loaded at skill entry drop from ~13k to near zero. (#2606)

Full PR list & new contributors

Don't miss a new get-shit-done release

NewReleases is sending notifications on new releases.