docs/RELEASE-v1.41.0.md
Stable release. Published to npm under the latest tag.
npx get-shit-done-cc@latest
1.41.0 is a quality and infrastructure release. The headline additions are per-phase-type model selection and dynamic routing — two new config blocks that give you granular cost control without learning the agent taxonomy. The release also ships the MVP mode SDK resolution layer (three canonical query verbs replacing per-workflow bash duplication), the optional update banner for non-statusline users, and the issue-driven orchestration guide. Underneath that, 25+ correctness fixes cover Homebrew node path stability, planner directive fidelity, secure-phase retroactive audit, cross-runtime installs, and statusline parsing.
Per-phase-type model selection (models block) — express "Opus for planning,
Sonnet for the rest" in two config lines without learning the agent taxonomy. Six
named slots (planning / discuss / research / execution / verification /
completion) accept tier aliases (opus / sonnet / haiku / inherit). Fully
backward compatible.
(#3023)
Dynamic routing with failure-tier escalation (dynamic_routing block) — start
cheap, escalate only when the orchestrator detects a soft failure (inconclusive
verification, plan-check FLAG). Disabled by default; composes with model_overrides
and models.<phase_type> via the same precedence chain.
(#3024)
Optional update banner for non-GSD statusline users — when the installer detects
no GSD statusline, it offers an opt-in SessionStart hook that surfaces update
availability via the existing ~/.cache/gsd/gsd-update-check.json cache. Silent when
up-to-date; removed cleanly by --uninstall.
(#2795)
Issue-driven orchestration guide — new
docs/issue-driven-orchestration.md recipe that maps
tracker issues (GitHub / Linear / Jira) onto existing GSD primitives: workspace →
discuss → plan → execute → verify → review → ship.
(#2840)
MVP mode SDK resolution layer — three canonical query verbs — three new verbs
centralize the MVP-mode predicates previously duplicated across workflows:
gsd-sdk query phase.mvp-mode <N> (precedence resolver), task.is-behavior-adding
(Behavior-Adding Task predicate), and user-story.validate (User Story regex). All
consuming workflows now call the verb instead of inlining 4–8 bash lines each. Also
fixes a silent SDK bug where roadmap.get-phase --pick mode returned null for
phases with **Mode:** mvp set.
(#3178)
/gsd-graphify status surfaces commit-based staleness — reads built_at_commit
from graphify v0.7+ graphs, compares against git HEAD, and adds four new fields
(built_at_commit, current_commit, commits_behind, commit_stale). Pre-v0.7
graphs return commit_stale: null and fall back to the existing mtime-based signal.
(#3170)
MVP concept index and domain glossary — seven MVP-related terms added to
CONTEXT.md; new references/mvp-concepts.md indexes the six MVP reference files.
No behavior change.
(#3176)
Stable node path on Homebrew — resolveNodeRunner() now maps versioned Cellar
paths to the stable Homebrew symlinks. Prevents dyld: Library not loaded errors
after brew upgrade node.
(#3181)
Milestone-archive layout support — validate consistency, validate health, and
find-phase now scan .planning/milestones/v*-phases/ in addition to the flat
.planning/phases/ layout, eliminating spurious W006 warnings.
(#3164)
/gsd-graphify build runs inline instead of spawning a sub-agent — the
post-extraction clustering phase was SIGTERM'd when the sub-agent exited, leaving no
graph.json / graph.html / GRAPH_REPORT.md artifacts.
(#3166)
Planner directive language restored — 10 CRITICAL/MANDATORY/MUST emphasis
markers were silently removed from gsd-planner.md in v1.38.4, weakening planner
adherence to user decisions and requirement coverage. All restored.
(#3138)
secure-phase retroactive-STRIDE mode for legacy phases — phases with no
<threat_model> blocks no longer rubber-stamp a clean SECURITY.md; the auditor
now builds a register from implementation files before verifying mitigations.
(#3142)
Global skills resolution now uses the correct runtime home directory —
buildAgentSkillsBlock() hardcoded ~/.claude/skills for all runtimes. The new
runtime-homes.cjs module maps all 15 supported runtimes to their canonical skills
directory.
(#3126)
state.begin-phase is now idempotent — wave-resume calls no longer overwrite
Current Plan, stopped_at, or Last Activity Description with stale values from
the last plan-phase run.
(#3127)
gsd-validate-commit.sh hook catches all git commit forms — the previous bash
regex missed git -C /path commit, GIT_AUTHOR_NAME=x git commit, and
/usr/bin/git commit. New hooks/lib/git-cmd.js token-walk classifier handles all
forms correctly.
(#3141)
/gsd-plan-phase no longer auto-dispatches to a subagent on OpenCode — the
agent: gsd-planner frontmatter directive caused OpenCode to run the orchestrator in
a context where the Agent tool is unavailable. Directive removed.
(#3156)
/gsd-quick worktree-merge resurrection guard — the inverted PRE_MERGE_FILES
grep that deleted freshly-created files (including SUMMARY.md) is replaced with the
git-history check used by execute-phase.md.
(#3195)
gsd-health no longer raises W019 for RETROSPECTIVE.md — registered in
CANONICAL_EXACT in artifacts.cjs to match its established status as a milestone
completion artifact.
(#3200)
--sdk flag now wired into SDK deployment — hasSdk was parsed but never
passed to installSdkIfNeeded, so --sdk silently skipped deployment.
(#3033)
Installer shell-path probe for SDK shim — no longer prints "✓ GSD SDK ready"
when the shim is unreachable from the user's interactive shells; probes
$SHELL -lc 'printf %s "$PATH"' instead of the installer subprocess PATH.
(#3028)
Windows update-check no longer silently fails — passes shell: true on Windows
so npm.cmd resolves via PATHEXT; without this the statusline "⬆ /gsd-update"
indicator never rendered on Windows.
(#3102)
Community .sh hooks use #!/usr/bin/env bash — the previous #!/bin/bash
shebang fails on NixOS, minimal Alpine images, and some container runtimes.
(#3194)
Gemini local install no longer duplicates /gsd:* commands — when GSD is
already installed at user scope, a subsequent --gemini --local install skips the
workspace scope. Previously both scopes received all 65 command files and Gemini's
conflict detector renamed everything.
(#3037)
Workstream resolution in init.milestone-op and roadmap.analyze — both
handlers now respect --ws, GSD_WORKSTREAM, and .planning/active-workstream.
Workstream-scoped repos no longer exit with "Nothing left to do" from reading the
root .planning/ directory.
(#3196,
#3207)
gsd-tools config-set workflow._auto_chain_active no longer rejected — the key
was added to the SDK schema but not mirrored to config-schema.cjs; users routed
through gsd-tools saw "Unknown config key."
(#3197)
Statusline state rendering is type-robust and YAML-list compatible — milestone
completion renders for numeric and string percent values; next_phases parses both
flow-array and block-list YAML.
(#3153)
Codex SessionStart hook uses absolute Node binary path — bare node in
config.toml failed with exit 127 under GUI/minimal-PATH runtimes.
(#3022)
config-set resolve_model_ids and workflow._auto_chain_active accepted — both
keys were documented or written by internal workflows but missing from the allowlists.
(#3162)
RELEASE-v1.40.0-rc.1.md — skill-surface consolidation
(86 → 59, #2790), six
namespace meta-skills (#2792),
/gsd-health --context utilization guard, phase-lifecycle status-line read-side
(#2833), and Gemini
colon-form slash-command conversion.
# npm (global)
npm install -g get-shit-done-cc@latest
# npx (one-shot)
npx get-shit-done-cc@latest
# Pin to this exact version
npm install -g [email protected]
The installer is idempotent — re-running on an existing install updates in-place,
preserving your .planning/ directory and local patches.