v1.41.0 Features
126. Per-Phase-Type Model Selection
Purpose: Express model tuning at the phase level (planning, research, execution, verification) without learning the full agent taxonomy. Sits between per-agent model_overrides (precise, verbose) and the global model_profile tier (coarse, uniform).
Config key: models in .planning/config.json
Phase-type slots:
| Slot | Agents assigned |
|---|---|
planning | gsd-planner, gsd-roadmapper, gsd-pattern-mapper |
discuss | (reserved for future subagent) |
research | gsd-phase-researcher, gsd-project-researcher, gsd-research-synthesizer, gsd-codebase-mapper, gsd-ui-researcher |
execution | gsd-executor, gsd-debugger, gsd-doc-writer |
verification | gsd-verifier, gsd-plan-checker, gsd-integration-checker, gsd-nyquist-auditor, gsd-ui-checker, gsd-ui-auditor, gsd-doc-verifier |
completion | (reserved for future subagent) |
Accepted values: "opus" / "sonnet" / "haiku" / "inherit"
Resolution precedence (highest → lowest):
1. model_overrides[<agent>]
2. dynamic_routing.tier_models[<tier>] (when enabled)
3. models[<phase_type>] (this feature)
4. model_profile
5. Runtime defaultRequirements:
- REQ-PHASE-MODELS-01: Six named
models.*slots accepted byconfig-schema.cjsandconfig-schema.ts;config-setrejects unknown phase-types. - REQ-PHASE-MODELS-02: Configs without a
modelsblock behave byte-for-byte identically to pre-v1.41 behavior. - REQ-PHASE-MODELS-03:
discussandcompletionare accepted by the schema for forward compatibility; setting them today is a no-op until a subagent maps to each.
Reference issue: #3023
127. Dynamic Routing with Failure-Tier Escalation
Purpose: Pay for the cheap tier by default; escalate to a more capable model automatically when the orchestrator detects a soft failure (verification inconclusive, plan-check FLAG, etc.).
Config key: dynamic_routing in .planning/config.json
Behavior:
enabled: false(default) — feature is off; all agents use the precedence chain unchanged.enabled: true— the resolver pickstier_models[default_tier]for the first spawn and escalates one tier up on orchestrator-detected soft failure, capped bymax_escalations.
Composition: model_overrides always wins; dynamic_routing.tier_models[<tier>] resolves above models.<phase_type> and model_profile.
Requirements:
- REQ-DYNROUTE-01:
dynamic_routing.enabledacts as a master switch; whenfalseor block is absent, zero behavior change. - REQ-DYNROUTE-02: New resolver
resolveModelForTier(cwd, agent, attempt)incore.cjsis the single call-site for orchestrator integration. - REQ-DYNROUTE-03:
max_escalationscaps the escalation chain to prevent runaway cost.
Reference issue: #3024
128. Update Banner Opt-In
Purpose: Surface update availability to users who have declined or bypassed the GSD statusline, without requiring the statusline.
Behavior:
- At install time, if the installer detects no GSD statusline, it offers an opt-in
SessionStarthook. - The hook reads the existing
~/.cache/gsd/gsd-update-check.jsoncache — the same cache used by the statusline — and prints a banner only when an update is available. - Silent when up-to-date.
- Failure diagnostics rate-limited to once per 24 h.
- Cleanly removed by
npx @opengsd/get-shit-done-redux --uninstall.
Requirements:
- REQ-BANNER-01: Banner does not install without explicit opt-in.
- REQ-BANNER-02: No additional network requests — reuses the existing background update-check cache.
- REQ-BANNER-03: Uninstall path removes the banner hook.
Reference issue: #2795
129. Issue-Driven Orchestration Guide
Purpose: Document a recipe for driving the full GSD workflow from a GitHub / Linear / Jira issue, mapping tracker-centric concepts onto existing GSD primitives.
Document: docs/issue-driven-orchestration.md
Covered workflow:
- Create an isolated workspace per issue (
/gsd-workspace --new) - Run the manager dashboard to get oriented (
/gsd-manager) - Execute autonomously (
/gsd-autonomous) - Verify and review (
/gsd-verify-work,/gsd-review) - Ship and close the issue (
/gsd-ship)
No new commands or daemon process — purely a documentation artifact that maps existing primitives onto a tracker-driven workflow.
Reference issue: #2840
130. Graphify Commit-Based Staleness
Purpose: Surface whether the architecture graph was built from the current commit or an older one, complementing the existing mtime-based stale signal.
Command: /gsd-graphify status
New fields returned (graphify v0.7+ graphs):
| Field | Type | Description |
|---|---|---|
built_at_commit | string | Commit SHA the graph was built from |
current_commit | string | Current git HEAD |
commits_behind | number | How many commits behind HEAD the graph is |
commit_stale | boolean | null | true=stale, false=current, null=unavailable (pre-v0.7, non-git) |
Rendered output (when signal is available):
Source commit: abc1234 (3 commits behind HEAD)Security: built_at_commit validated as 4–40 hex chars before reaching git — a hostile graph.json cannot inject dashed options into argv.
Fallback: pre-v0.7 graphs and non-git checkouts return commit_stale: null; callers fall back to the existing mtime-based stale flag. No behavior change for existing users.
Reference issue: #3170
131. MVP Mode SDK Resolution Layer
Purpose: Replace per-workflow MVP-mode predicate duplication with three canonical SDK query verbs. All consuming workflows now call a single source of truth instead of inlining 4–8 bash lines each.
New query verbs:
| Verb | Returns | Used by |
|---|---|---|
gsd-sdk query phase.mvp-mode <N> | \{active, source, roadmap_mode, config_mvp_mode, cli_flag_present\} | plan-phase, execute-phase, verify-work, progress |