Commit Graph

4203 Commits

Author SHA1 Message Date
Tom Boucher
e7198f419f fix: hook version tracking, stale hook detection, stdin timeout, and session-report command (#1153, #1157, #1161, #1162) (#1163)
* fix: hook version tracking, stale hook detection, and stdin timeout increase

- Add gsd-hook-version header to all hook files for version tracking (#1153)
- Install.js now stamps current version into hooks during installation
- gsd-check-update.js detects stale hooks by comparing version headers
- gsd-statusline.js shows warning when stale hooks are detected
- Increase context monitor stdin timeout from 3s to 10s (#1162)
- Set +x permission on hook files during installation (#1162)

Fixes #1153, #1162, #1161

* feat: add /gsd:session-report command for post-session summary generation

Adds a new command that generates SESSION_REPORT.md with:
- Work performed summary (phases touched, commits, files changed)
- Key outcomes and decisions made
- Active blockers and open items
- Estimated resource usage metrics

Reports are written to .planning/reports/ with date-stamped filenames.

Closes #1157

* test: update expected skill count from 39 to 40 for new session-report command
2026-03-18 09:57:20 -06:00
Tom Boucher
14c1dd845b fix(build): add syntax validation to hook build script (#1165)
Prevents shipping hooks with JavaScript SyntaxError (like the duplicate
const cwd declaration that caused PostToolUse errors for all users in
v1.25.1).

The build script now validates each hook file's syntax via vm.Script
before copying to dist/. If any hook has a SyntaxError, the build fails
with a clear error message and exits non-zero, blocking npm publish.

Refs #1107, #1109, #1125, #1161
2026-03-18 09:56:51 -06:00
Tom Boucher
8520424a62 fix: replace curl with fetch() in verification examples for Windows compatibility (#899) (#1166)
MSYS curl on Windows has SSL/TLS failures and path mangling issues.
Replaced curl references in checkpoint and phase-prompt templates with
Node.js fetch() which works cross-platform.

Changes:
- checkpoints.md: server readiness check uses fetch() instead of curl
- checkpoints.md: added cross-platform note about curl vs fetch
- checkpoints.md: verify tags use fetch instead of curl
- phase-prompt.md: verify tags use fetch instead of curl

Partially addresses #899 (patch 1 of 6)
2026-03-18 09:56:44 -06:00
Tom Boucher
41f8cd48ed feat: add /gsd:next command for automatic workflow advancement (#927) (#1167)
Adds a zero-friction command that detects the current project state and
automatically invokes the next logical workflow step:

- No phases → discuss first phase
- Phase has no context → discuss
- Phase has context but no plans → plan
- Phase has plans but incomplete → execute
- All plans complete → verify and complete phase
- All phases complete → complete milestone
- Paused → resume work

No arguments needed — reads STATE.md, ROADMAP.md, and phase directories
to determine progression. Designed for multi-project workflows.

Closes #927
2026-03-18 09:56:35 -06:00
Tom Boucher
1efc74af51 refactor(tests): consolidate runtime converters, remove duplicate tests, standardize helpers (#1169)
Test consolidation:
- Merged gemini-config.test.cjs + opencode-agent-conversion.test.cjs
  into runtime-converters.test.cjs (single file for small runtime converters)
- Removed 11 duplicate tests from core.test.cjs:
  - 5 comparePhaseNum tests (authoritative copies in phase.test.cjs)
  - 6 normalizePhaseName tests (authoritative copies in phase.test.cjs)
- Added note in core.test.cjs pointing to phase.test.cjs as canonical location

Standardization:
- core.test.cjs now uses createTempProject()/cleanup() from helpers.cjs
  instead of inline fs.mkdtempSync/fs.rmSync patterns

File count: 21 → 19 test files
Test count: 755 → 744 (11 duplicates removed, 0 coverage lost)
2026-03-18 09:56:25 -06:00
Tom Boucher
93dc3d134f test: add coverage for model-profiles, template, profile-pipeline, profile-output (#1170)
New test files for 4 previously untested modules:

model-profiles.test.cjs (15 tests):
- MODEL_PROFILES data integrity (all agents, all profiles, valid aliases)
- VALID_PROFILES list validation
- getAgentToModelMapForProfile (balanced, budget, quality, agent count)
- formatAgentToModelMapAsTable (header, separator, column alignment)

template.test.cjs (11 tests):
- template select: minimal/standard/complex heuristics, fallback
- template fill: summary/plan/verification generation, --plan option
- Error paths: existing file, unknown type, missing phase

profile-pipeline.test.cjs (7 tests):
- scan-sessions: empty dir, synthetic project, multi-session
- extract-messages: user message extraction, meta/internal filtering
- profile-questionnaire: structure validation

profile-output.test.cjs (13 tests):
- PROFILING_QUESTIONS data (fields, options, uniqueness)
- CLAUDE_INSTRUCTIONS coverage (dimensions, instruction mapping)
- write-profile: analysis JSON → USER-PROFILE.md
- generate-claude-md: --auto generation, --force protection
- generate-dev-preferences: analysis → preferences command

Test count: 744 → 798 (+54 new tests, 0 failures)
2026-03-18 09:55:55 -06:00
Tom Boucher
9acfa4bffc fix: add sequential fallback for map-codebase on runtimes without Task tool (#1174) (#1184)
Runtimes like Antigravity don't have a Task tool for spawning subagents.
When the agent encounters Task() calls, it falls back to browser_subagent
which is meant for web browsing, not code analysis — causing
gsd-map-codebase to fail.

This adds:
1. A detect_runtime_capabilities step before spawn_agents
2. An explicit warning to NEVER use browser_subagent for code analysis
3. A sequential_mapping fallback step that performs all 4 mapping passes
   inline using file system tools when Task is unavailable

Closes #1174
2026-03-18 09:55:40 -06:00
Tom Boucher
94b83759af fix: use arrays for RUNTIME_DIRS to fix zsh word-splitting (#1173) (#1183)
The version detection script in update.md used a space-separated string
for RUNTIME_DIRS and iterated with `for entry in $RUNTIME_DIRS`. This
relies on word-splitting which works in bash but fails in zsh (zsh does
not word-split unquoted variables by default), causing the entire string
to be treated as one entry and detection to fall through to UNKNOWN.

Fix: convert RUNTIME_DIRS and ORDERED_RUNTIME_DIRS from space-separated
strings to proper arrays, and iterate with ${array[@]} syntax which
works correctly in both bash and zsh.

Closes #1173
2026-03-18 09:55:21 -06:00
Tom Boucher
31a93e2da7 docs: document inherit profile for non-Anthropic providers (#1036) (#1185)
Users on OpenRouter or local models get unexpected API costs because
GSD's default 'balanced' profile spawns specific Anthropic models for
subagents. The 'inherit' profile exists but wasn't well-documented for
this use case.

Changes:
- model-profiles.md: add 'Using Non-Anthropic Models' section explaining
  when and how to use inherit profile
- model-profiles.md: update inherit description to mention OpenRouter and
  local models
- settings.md: update Inherit option description to mention OpenRouter
  and local models (was only mentioning OpenCode)

Closes #1036
2026-03-18 09:55:07 -06:00
Diego Mariño
43fc1b11d4 fix(workflow): restore nyquist_validation derivation in Step 5 config
Before this PR, Step 5 derived nyquist_validation from depth !== "quick"
(now granularity !== "coarse"). The new config-new-project call omitted
it, silently defaulting to true even when the user selected "Coarse"
granularity.

Adds nyquist_validation back to the Step 5 JSON payload with an explicit
inline rule: false when granularity=coarse, true otherwise.
2026-03-18 15:29:40 +01:00
Diego Mariño
63f6424d1b fix(tests): sandbox HOME in runGsdTools to prevent flaky assertions
buildNewProjectConfig() merges ~/.gsd/defaults.json when present, so
tests asserting concrete config values (model_profile, commit_docs,
brave_search) would fail on machines with a personal defaults file.

- Pass HOME=cwd as env override in runGsdTools — child process resolves
  os.homedir() to the temp directory, which has no .gsd/ subtree
- Update three tests that previously wrote to the real ~/.gsd/ using
  fragile save/restore logic; they now write to tmpDir/.gsd/ instead,
  which is cleaned up automatically by afterEach
- Remove now-unused `os` import from config.test.cjs
2026-03-18 15:27:46 +01:00
Diego Mariño
f649543b20 feat: materialize full config on new-project initialization
Add `config-new-project` CLI command that writes a complete,
fully-materialized `.planning/config.json` with sane defaults
instead of the previous partial template (6-7 user-chosen keys
only). Unset keys are no longer silently resolved at read time —
every key GSD reads is written explicitly at project creation.

Previously, missing keys were resolved silently by loadConfig()
defaults, making the effective config non-discoverable. Now every
key that GSD reads is written explicitly at project creation.

- buildNewProjectConfig() — single source of truth for all
  defaults; merges hardcoded ← ~/.gsd/defaults.json ← user choices
- ensureConfigFile() refactored to reuse buildNewProjectConfig({})
  instead of duplicating default logic (~40 lines removed)
- new-project.md Steps 2a and 5 updated to call config-new-project
  instead of writing a hardcoded partial JSON template
- Test coverage for config.cjs: 78.96% → 93.81% statements,
  100% functions; adds config-set-model-profile test suite

FIXES:
- VALID_CONFIG_KEYS extended with workflow.auto_advance,
  workflow.node_repair, workflow.node_repair_budget,
  hooks.context_warnings — these keys had hardcoded defaults
  but were not settable via config-set
2026-03-18 14:58:58 +01:00
Matteo Michele Bianchini
7eed3bc2df fix(workflows): add explicit TaskOutput instructions to map-codebase
The workflow spawns 4 background agents but didn't tell Claude how to
wait for them. Without explicit TaskOutput instructions, the orchestrator
displays "Waiting for agents to complete..." indefinitely.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 10:03:40 +00:00
Matteo Michele Bianchini
8c1b224474 fix: use ~/ instead of resolved absolute paths in global install
On Windows, install.js resolves $HOME to the absolute path
(e.g. C:/Users/matte/.claude/) in all workflow .md files.
This breaks when ~/.claude is mounted into a Docker container
where the path doesn't exist — Node interprets the Windows path
as relative to CWD, producing paths like:
/workspace/project/C:/Users/matte/.claude/get-shit-done/bin/gsd-tools.cjs

For global installs, replace os.homedir() with ~ in pathPrefix
so that paths like ~/.claude/get-shit-done/bin/gsd-tools.cjs
work correctly across all environments.

Local installs keep using resolved absolute paths since they
may be outside $HOME.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 09:57:33 +00:00
mitchelladam
92e5c04e00 feat: add Cursor CLI runtime support
Add Cursor as a fifth supported runtime alongside Claude Code, OpenCode,
Gemini, and Codex. Cursor uses skills (~/.cursor/skills/gsd-*/SKILL.md)
like Codex, with tool name mappings (Bash→Shell, Edit→StrReplace),
subagent type conversion, and full Claude-to-Cursor content adaptation
including project conventions (CLAUDE.md→.cursor/rules/, .claude/skills/
→.cursor/skills/) and brand references.

Includes install, uninstall, interactive prompt, help text, manifest
tracking, and .cjs/.js utility script conversion.

Made-with: Cursor
2026-03-17 21:18:08 +00:00
Colin
3a0c81133b feat(quick): add quick-task branch support 2026-03-17 12:04:02 -04:00
Colin
f5167a5ca9 feat(claude-md): add workflow enforcement guidance 2026-03-17 11:41:44 -04:00
Colin
2314988e59 fix(prompt): clarify execute-phase active flags 2026-03-17 11:32:35 -04:00
0Shard
7156f02ed5 fix: semver 3+ segment parsing and CRLF frontmatter corruption recovery
- fix(core): getMilestoneInfo() version regex `\d+\.\d+` only matched
  2-segment versions (v1.2). Changed to `\d+(?:\.\d+)+` to support
  3+ segments (v1.2.1, v2.0.1). Same fix in roadmap.cjs milestone
  extraction pattern.

- fix(state): stripFrontmatter() used `^---\n` (LF-only) which failed
  to strip CRLF frontmatter blocks. When STATE.md had dual frontmatter
  blocks from prior CRLF corruption, each writeStateMd() call preserved
  the stale block and prepended a new wrong one. Now handles CRLF and
  strips all stacked frontmatter blocks.

- fix(frontmatter): extractFrontmatter() always used the first ---
  block. When dual blocks exist from corruption, the first is stale.
  Now uses the last block (most recent sync).
2026-03-17 17:18:48 +02:00
Colin
ad8b58b676 feat(execute-phase): support wave-specific execution 2026-03-17 11:18:33 -04:00
Colin
6b6c73256d fix(health): preserve state on phase mismatch repair 2026-03-17 11:08:32 -04:00
Colin
52b2d390cc feat(milestones): support safe phase-number resets 2026-03-17 11:00:24 -04:00
CI
5a7d56e6c5 fix(codex): include required agent metadata in TOML 2026-03-17 20:24:35 +08:00
Medhat Galal
10294128c9 Fix duplicate Codex GSD agent blocks without marker 2026-03-17 08:10:59 -04:00
Elliot Drel
63af9af0f4 fix: track hook files in manifest for local patch detection (#769)
Hook files (gsd-statusline.js, gsd-check-update.js, gsd-context-monitor.js)
are installed during updates but were never included in gsd-file-manifest.json.
This means saveLocalPatches() could not detect user modifications to hooks,
causing them to be silently overwritten on update with no backup.

Add hooks/gsd-*.js to writeManifest() so the existing local patch detection
system automatically backs up modified hooks to gsd-local-patches/ before
overwriting, matching the behavior already in place for workflows, commands,
and agents.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 23:49:34 -04:00
PiyushRane
4915d28f98 fix: replace nonexistent /gsd:transition with real commands in execute-phase (#1100)
The offer_next step in execute-phase.md suggests /gsd:transition to users
when auto-advance is disabled. This command does not exist as a registered
skill — transition.md is an internal workflow only invoked inline during
auto-advance chains (line 456).

Replace with /gsd:discuss-phase and /gsd:plan-phase which are the actual
user-facing equivalents for transitioning between phases.

No impact on auto-advance path — that invokes transition.md by file path,
not as a slash command.

Co-authored-by: Piyush Rane <piyush.rane@inmobi.com>
2026-03-16 13:42:34 -06:00
Tyler Satre
d3fd8b2cc5 Remove duplicate variable declaration (#1101) 2026-03-16 13:41:10 -06:00
Tom Boucher
2842f076ea fix: CRLF frontmatter parsing, duplicate cwd crash, STATE.md phase transitions (#1105)
- fix(frontmatter): handle CRLF line endings in extractFrontmatter,
  spliceFrontmatter, and parseMustHavesBlock — fixes wave parsing on
  Windows where all plans reported as wave 1 (#1085)

- fix(hooks): remove duplicate const cwd declaration in
  gsd-context-monitor.js that caused SyntaxError on every PostToolUse
  invocation (#1091, #1092, #1094)

- feat(state): add 'state begin-phase' command that updates STATUS,
  Last Activity, Current focus, Current Position, and plan counts
  when a new phase starts executing (#1102, #1103, #1104)

- docs(workflow): add state begin-phase call to execute-phase workflow
  validate_phase step so STATE.md is current from the start
2026-03-16 13:40:21 -06:00
Tom Boucher
80605d2051 docs: add developer profiling, execution hardening, and idempotent mark-complete to docs (#1108)
Update documentation for features added since v1.25.1:

- CHANGELOG.md: Add [Unreleased] entries for developer profiling pipeline,
  execution hardening (pre-wave check, cross-plan contracts, export
  spot-check), and idempotent requirements mark-complete

- README.md: Add /gsd:profile-user command to utilities table

- docs/COMMANDS.md: Add full /gsd:profile-user command documentation
  with flags, generated artifacts, and usage examples

- docs/FEATURES.md: Add Feature 33 (Developer Profiling) with 8
  behavioral dimensions, pipeline modules, and requirements; add
  Feature 34 (Execution Hardening) with 3 quality components

- docs/AGENTS.md: Add gsd-user-profiler agent documentation and
  tool permissions entry
2026-03-16 13:39:52 -06:00
Tom Boucher
460f92e727 feat: normalize generated markdown for markdownlint compliance (#1112)
Add normalizeMd() utility that fixes common markdownlint violations
in GSD-generated .planning/ files, improving IDE readability:

  MD022 — Blank lines around headings
  MD031 — Blank lines around fenced code blocks
  MD032 — Blank lines around lists
  MD012 — No multiple consecutive blank lines (collapsed to max 2)
  MD047 — Files end with a single newline

Applied at key write points:
  - state.cjs: writeStateMd() normalizes STATE.md on every write
  - frontmatter.cjs: frontmatter set/merge commands normalize output
  - template.cjs: template fill normalizes generated plan/summary files
  - milestone.cjs: MILESTONES.md archive writes normalized

Includes 14 new tests covering all rules, edge cases (CRLF, frontmatter,
ordered lists, code blocks, real-world STATE.md patterns).

Closes #1040
2026-03-16 13:39:34 -06:00
Maxim Brashenko
f2adc0cec4 fix(milestone): make requirements mark-complete idempotent (#948)
Previously, calling `mark-complete` on already-completed requirements
reported them as `not_found`, since the regex only matched unchecked
`[ ]` checkboxes and `Pending` table cells.

Now detects `[x]` checkboxes and `Complete` table cells and returns
them in a new `already_complete` array instead of `not_found`.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 11:39:54 -06:00
jecanore
a80a89b262 feat: add execution hardening (pre-wave check, cross-plan contracts, export spot-check) (#1082)
Three additive quality improvements to the execution pipeline:

1. Pre-wave dependency check (execute-phase): Before spawning wave N+1,
   verify key-links from prior wave artifacts. Catches cross-plan wiring
   gaps before they cascade into downstream failures.

2. Cross-Plan Data Contracts dimension (plan-checker): New Dimension 9
   checks that plans sharing data pipelines have compatible transformations.
   Flags when one plan strips data another plan needs in original form.

3. Export-level spot check (verify-phase): After Level 3 wiring passes,
   spot-check individual exports for actual usage. Catches dead stores
   that exist in wired files but are never called.
2026-03-16 11:39:34 -06:00
Maxim Brashenko
fe1e92bd07 fix(profile): correct template paths, field names, and evidence key in profile-output (#1095)
Three bugs preventing /gsd:profile-user from generating complete profiles:

1. Template path resolves to bin/templates/ (doesn't exist) instead of
   templates/ — __dirname is bin/lib/, needs two levels up not one
2. write-profile reads analysis.projects_list and analysis.message_count
   but the profiler agent outputs projects_analyzed and messages_analyzed
3. Evidence block checks dim.evidence but profiler outputs evidence_quotes

Fixes all three with fallback patterns (accepts both old and new field
names) so existing and future analysis formats both work.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 11:39:08 -06:00
Lex Christopherson
3da844af83 fix(tests): update copilot install count assertions for developer profiling
PR #1084 added profile-user command and gsd-user-profiler agent but
didn't bump the hardcoded count assertions in copilot-install tests.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 09:59:56 -06:00
jecanore
4cf6c04a3e feat: add developer profiling pipeline (#1084)
Analyze Claude Code session history to build behavioral profiles across
8 dimensions (communication, decisions, debugging, UX, vendor choices,
frustrations, learning style, explanation depth). Profiles generate
USER-PROFILE.md, dev-preferences command, and CLAUDE.md profile section.

New modules:
- profile-pipeline.cjs: session scanning, message extraction, sampling
- profile-output.cjs: profile rendering, questionnaire, artifact generation

New files:
- agents/gsd-user-profiler.md: profiler agent (8-dimension scoring)
- commands/gsd/profile-user.md: user-facing command
- workflows/profile-user.md: orchestration workflow
- templates/: user-profile, dev-preferences, claude-md templates
- references/user-profiling.md: detection heuristics reference

8 new CLI commands: scan-sessions, extract-messages, profile-sample,
write-profile, profile-questionnaire, generate-dev-preferences,
generate-claude-profile, generate-claude-md

Co-authored-by: TÂCHES <afromanguy@me.com>
2026-03-16 09:46:00 -06:00
Tom Boucher
a2f359e94b docs: update README and documentation for v1.25 release (#1090)
- Add Antigravity to verify instructions and uninstall commands
- Add Gemini to uninstall commands (was missing)
- Add hooks.context_warnings config to README and CONFIGURATION.md
- Add /gsd:note command documentation to COMMANDS.md
- Add Note Capture feature (section 13) to FEATURES.md
- Renumber subsequent feature sections (14-33)
2026-03-16 09:44:48 -06:00
Lex Christopherson
f35fe0dbb9 1.25.1 2026-03-16 09:05:41 -06:00
Lex Christopherson
f722623a85 fix(tests): update model resolution assertions to match opus-direct behavior 2026-03-16 09:05:41 -06:00
Lex Christopherson
4ce0925851 1.25.0 2026-03-16 09:03:01 -06:00
Lex Christopherson
78ebdc32e3 docs: update changelog for v1.25.0 2026-03-16 09:02:55 -06:00
Lex Christopherson
8d6457733e docs: add /gsd:do and /gsd:note to README commands table 2026-03-16 08:59:01 -06:00
Tom Boucher
d20fa8a9f6 docs: add comprehensive feature, architecture, and requirements documentation (#1089)
New documentation suite in docs/:

- README.md — Documentation index with audience-targeted links
- ARCHITECTURE.md — System architecture: component model, agent patterns,
  data flow, file system layout, installer architecture, hook system,
  runtime abstraction, and design principles
- FEATURES.md — Complete feature reference with 32 features documented,
  each with formal requirements (REQ-*), produced artifacts, process
  descriptions, and functional specifications
- COMMANDS.md — Full command reference: all 37 commands with syntax,
  flags, arguments, prerequisites, produced artifacts, and examples
- CONFIGURATION.md — Complete config schema: 40+ settings across core,
  workflow, planning, parallelization, git branching, gates, safety,
  model profiles, and environment variables
- CLI-TOOLS.md — gsd-tools.cjs programmatic API: all commands across
  state, phase, roadmap, config, verify, template, frontmatter,
  scaffold, init, milestone, and utility categories
- AGENTS.md — All 15 specialized agents: roles, tool permissions,
  spawn patterns, model assignments, produced artifacts, key behaviors,
  and a complete tool permission matrix

Coverage derived from:
- All 37 command files (commands/gsd/*.md)
- All 41 workflow files (get-shit-done/workflows/*.md)
- All 15 agent definitions (agents/*.md)
- All 13 reference documents (get-shit-done/references/*.md)
- Full CLI source (gsd-tools.cjs + 11 lib modules, ~10K lines)
- All 3 hooks (statusline, context-monitor, check-update)
- Installer (bin/install.js, ~3K lines)
- Full CHANGELOG.md (1.0.0 through 1.24.0, ~170 releases)
2026-03-16 08:55:08 -06:00
Tom Boucher
1e46e820d6 chore: improve issue and PR templates with industry best practices (#1088)
Bug report template:
- Add OS, Node.js version, shell, and install method fields
- Add all 6 supported runtimes (+ Multiple option)
- Add frequency and severity/impact dropdowns
- Add config.json, STATE.md, and settings.json retrieval instructions
- Add PII warnings on every field that could leak sensitive data
- Recommend presidio-anonymizer and scrub for log anonymization
- Add diagnostic commands for debugging install issues
- Add mandatory PII review checklist checkbox

Feature request template:
- Add scope dropdown (core workflow, planning, context, runtime, etc.)
- Add runtime multi-select checkboxes

New templates:
- Documentation issue template (incorrect, missing, unclear, outdated)
- config.yml to disable blank issues and link Discord/Discussions

PR template:
- Add linked issue reference (Closes #)
- Add How section for approach description
- Add runtime testing checklist (all 5 runtimes + N/A)
- Add template/reference update check
- Add test pass check
- Add screenshots/recordings section
2026-03-16 08:54:52 -06:00
Tom Boucher
9d7001a6b7 feat(plan-phase): ask user about research instead of silently deciding (#1075)
Instead of silently skipping research based on the config toggle,
plan-phase now asks the user whether to research before planning
(when no explicit --research or --skip-research flag is provided).

The prompt includes a contextual recommendation:
- 'Research first (Recommended)' for new features, integrations, etc.
- 'Skip research' for bug fixes, refactors, well-understood tasks

The --research and --skip-research flags still work as silent overrides
for automation. Auto mode (--auto) respects the config toggle silently.

Fixes #846
2026-03-16 08:54:32 -06:00
Tom Boucher
08dc7494ff fix(settings): clarify balanced profile uses Sonnet for research (#1078)
The settings UI description for the 'balanced' profile said 'Opus for
planning, Sonnet for execution/verification' — omitting that research
also uses Sonnet. Users assumed research was included in 'planning'
and expected Opus for the researcher agent.

Updated to: 'Opus for planning, Sonnet for research/execution/verification'

This matches model-profiles.md and the actual MODEL_PROFILES mapping.

Fixes #680
2026-03-16 08:54:16 -06:00
Tom Boucher
540913c09b fix(researcher): verify package versions against registry before recommending (#1077)
The researcher agent now verifies each recommended package version
using 'npm view [package] version' before writing the Standard Stack
section. This prevents recommending stale versions from training data.

Addresses patch 5 from #899
2026-03-16 08:53:55 -06:00
Tom Boucher
3977cf3947 fix(verify): add CWD guard and strip archived milestones in health checks (#1076)
Two fixes to verify.cjs:

1. Add CWD guard to cmdValidateHealth — detects when CWD is the home
   directory (likely accidental) and returns error E010 before running
   checks that would read the wrong .planning/ directory.

2. Import and apply stripShippedMilestones to both cmdValidateConsistency
   and cmdValidateHealth (Check 8) — prevents false warnings when
   archived milestones reuse phase numbers.

This PR subsumes #1071 (strip archived milestones) to avoid merge
conflicts on the same import line.

Addresses patch 2 from #899, fixes #1060
2026-03-16 08:53:29 -06:00
Tom Boucher
c7b933dcc6 fix(executor): add untracked files check after task commits (#1074)
After committing task changes, the executor now checks for untracked
files (git status --short | grep '^??') and handles them: commit if
intentional, add to .gitignore if generated/runtime output.

This prevents generated artifacts (build outputs, .env files, cache
files) from being silently left untracked in the working tree.

Changes:
- execute-plan.md: Add step 6 to task commit protocol
- gsd-executor.md: Add step 6 to task commit protocol

Fixes #957
2026-03-16 08:51:24 -06:00
Tom Boucher
406b998d45 feat(hooks): add config option to disable context window warnings (#1073)
Add hooks.context_warnings config option (default: true) that allows
users to disable the context monitor hook's advisory messages. When
set to false, the hook exits silently, allowing Claude Code to reach
auto-compact naturally without being interrupted.

This is useful for long unattended runs where users prefer Claude to
auto-compact and continue rather than stopping to warn about context.

Changes:
- hooks/gsd-context-monitor.js: Check config before emitting warnings
- get-shit-done/templates/config.json: Add hooks.context_warnings default
- get-shit-done/workflows/settings.md: Add UI for the new setting

Fixes #976
2026-03-16 08:51:04 -06:00
Tom Boucher
281b288e95 feat(discuss): show remaining areas when asking to continue or move on (#1072)
When the discuss-phase workflow asks 'More questions about [area], or
move to next?', it now also lists the remaining unvisited areas so the
user can see what's still ahead and make an informed decision about
whether to go deeper or move on.

Example: 'More questions about Layout, or move to next?
(Remaining: Loading behavior, Content ordering)'

Fixes #992
2026-03-16 08:50:44 -06:00