Files
msd-core/docs/RELEASE-v1.41.0.md
Tom Boucher 334a64168e chore(npm): rebrand packages to @opengsd scope (#127)
* chore(npm): rebrand packages to @opengsd scope

Rename:
- get-shit-done-redux → @opengsd/get-shit-done-redux
- @gsd-redux/sdk → @opengsd/gsd-sdk

Add publishConfig.access=public for first-time scoped publish.
CLI binary names (get-shit-done-redux, gsd-sdk, gsd-tools) unchanged.

Sweeps install commands, npx invocations, CI publish/version-check
workflows, tests, docs, READMEs (all translations), and the
PACKAGE_NAME constant in check-latest-version.

Bumps qs 6.15.1 → 6.15.2 to clear a moderate advisory surfaced by
the audit-clean test (GHSA-q8mj-m7cp-5q26).

Closes #126

* chore: pin 2.0.0 release + remove canary workflow

- Bump both packages 1.50.0-canary.0 → 2.0.0 for first @opengsd publish
- Remove .github/workflows/canary.yml and canary dist-tag handling in
  release.yml / release-sdk.yml
- Drop canary section from VERSIONING.md

Refs #126

* chore: address review findings + harden tarball-smoke timeout

- .changeset/opengsd-org-rename.md: match project's custom
  parse.cjs frontmatter (type: Changed / pr: 127); the scoped
  @changesets/cli keys were silently rejected.
- CONTEXT.md: drop two canary-stream policy lines and a dangling
  DEFECT.CANARY-VERSION-LEAK.cross-ref now that canary.yml is gone.
- tests/release-tarball-smoke.install.test.cjs: pass
  timeout: 600_000 for npm pack + global install; the 3-minute
  runNpm default was timing out on slower Docker hosts (cartographer).

Refs #126

* fix(sdk): add missing type/runtime devDependencies for build

prepublishOnly invokes tsc which couldn't resolve @types/node,
@types/ws, or synckit. They had been hoisted from root but were
not declared in sdk/'s own package.json — first publish from a
clean SDK tree failed.

Refs #126

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): use npm pack stdout instead of glob to find tarball

`npm pack --silent` for a scoped package (@opengsd/get-shit-done-redux)
produces `opengsd-get-shit-done-redux-*.tgz`, not `get-shit-done-redux-*.tgz`.
Capture the filename from stdout instead of a hardcoded glob so the step
works regardless of package name format.

Fixes smoke (ubuntu-latest, 22, false) CI failure.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* ci: treat workflow-file changes as test-skip eligible

`.github/workflows/install-smoke.yml` (and other workflow files)
were in neither `test.yml` paths nor `test-skip.yml` paths-ignore,
so neither workflow ran on a workflow-only commit — leaving the
required test-skip check perpetually missing.

Refs #126

* chore: reset version to 1.0.0 for first @opengsd publish

Nothing has been published yet under the @opengsd scope, so the
inaugural release uses 1.0.0 rather than 2.0.0. The "major bump"
in the changeset reflects the breaking install-command change for
users migrating from the prior unscoped `get-shit-done-redux`, not
a numeric continuation from a 1.x line under the new identity.

Refs #126

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 16:22:41 -04:00

11 KiB
Raw Blame History

v1.41.0 Release Notes

Stable release. Published to npm under the latest tag.

npx @opengsd/get-shit-done-redux@latest

What's in this release

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.

Added

  • 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)

Changed

  • 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)

Fixed

  • 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)


What was in 1.40.0

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.


Installing

# npm (global)
npm install -g @opengsd/get-shit-done-redux@latest

# npx (one-shot)
npx @opengsd/get-shit-done-redux@latest

# Pin to this exact version
npm install -g @opengsd/get-shit-done-redux@1.41.0

The installer is idempotent — re-running on an existing install updates in-place, preserving your .planning/ directory and local patches.