Commit Graph

1307 Commits

Author SHA1 Message Date
Tom Boucher
c152d1275e Merge pull request #1302 from gsd-build/fix/config-get-misspell-1301
fix: correct 'config get' to 'config-get' in workflow files
2026-03-21 18:06:20 -04:00
Tom Boucher
781e900aed Merge pull request #1306 from gsd-build/fix/jq-dependency-1300
fix: remove jq as undocumented hard dependency
2026-03-21 18:06:00 -04:00
Tom Boucher
722e1db116 fix: remove jq as undocumented hard dependency (#1300)
Add --pick flag to gsd-tools.cjs for extracting a single field from
JSON output, replacing all jq pipe usage across workflow and reference
files. Since Node.js is already a hard dependency, this eliminates the
need for jq on systems where it is not installed (notably Windows).

Changes:
- gsd-tools.cjs: add --pick <field> global flag with dot-notation and
  bracket syntax support (e.g., --pick section, --pick directories[-1])
- Replace 15 jq pipe patterns across 6 workflow/reference files with
  --pick flag or inline Node.js one-liner for variable extraction
- Add regression tests for --pick flag behavior

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 17:52:59 -04:00
Tom Boucher
a316663c3c fix: correct 'config get' to 'config-get' in workflow files
The gsd-tools.cjs CLI uses hyphenated subcommands (config-get), but
two workflow files used a space-separated form (config get) which
causes "Unknown command: config" errors.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 17:38:06 -04:00
Tom Boucher
16b917ce69 Merge pull request #1299 from gsd-build/feat/milestone-summary-1298
feat: add /gsd:milestone-summary for post-build team onboarding
2026-03-21 16:47:55 -04:00
Tom Boucher
e4ca76dbb7 fix: address all review findings on PR #1299
Remaining items from adversarial review:
- Add type: prompt to command frontmatter (consistency with complete-milestone)
- Replace git stats step with 4-method fallback chain (tag → STATE.md date →
  earliest phase commit → skip gracefully)
- Add 7 fixture-based behavioral tests: archived milestone discovery,
  multi-phase artifact discovery with varying completeness, empty .planning/
  handling, output filename validation, git stats fallback verification,
  type: prompt frontmatter check

Tests: 25/25 milestone-summary, 1236/1236 full suite

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 16:38:34 -04:00
Tom Boucher
6c79ffe70e fix: correct skill count assertions after rebase onto main (54→55)
Main already bumped 53→54 from merged PRs. Our new milestone-summary
command adds one more skill, making the total 55.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 16:33:07 -04:00
Tom Boucher
679243b09a fix: address review findings on milestone-summary PR
1. Add <success_criteria> section to command (pattern compliance)
2. Fix archived audit path: check .planning/milestones/ not .planning/
3. Add RESEARCH.md to command context block
4. Add empty phase handling (graceful skip to minimal summary)
5. Add overwrite guard for existing summary files
6. Add 7 new tests: overwrite guard, empty phases, audit paths,
   success_criteria, RESEARCH.md context, artifact path resolution

Tests: 18/18 milestone-summary, 1184/1184 full suite

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 16:31:13 -04:00
Tom Boucher
832b6e19ac feat: add /gsd:milestone-summary for post-build onboarding (#1298)
New command that generates a comprehensive project summary from completed
milestone artifacts. Designed for team onboarding — new contributors can
run this against a completed project and understand what was built, how,
and why, with optional interactive Q&A grounded in build artifacts.

- commands/gsd/milestone-summary.md: command definition
- get-shit-done/workflows/milestone-summary.md: 9-step workflow
- tests/milestone-summary.test.cjs: 11 tests (command + workflow validation)
- tests/copilot-install.test.cjs: bump expected skill count 53→54

Reads: ROADMAP, REQUIREMENTS, PROJECT, CONTEXT, SUMMARY, VERIFICATION,
RETROSPECTIVE artifacts. Writes to .planning/reports/MILESTONE_SUMMARY-v{X}.md.

Closes #1298

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 16:31:13 -04:00
Tom Boucher
617a6bd6d1 Merge pull request #1282 from jippylong12/main
feat(manager): add /gsd:manager — interactive milestone dashboard
2026-03-21 14:55:09 -04:00
Tom Boucher
04d5ac72e3 Merge pull request #1297 from gsd-build/fix/discuss-phase-workflow-bypass-1292
fix: prevent discuss-phase from ignoring workflow instructions
2026-03-21 14:25:54 -04:00
Tom Boucher
3306a77a79 fix: prevent discuss-phase from ignoring workflow instructions (#1292)
The discuss-phase command file contained a 93-line detailed <process>
block that competed with the actual workflow file. The agent treated
this summary as complete instructions and never read the execution_context
files (discuss-phase.md, discuss-phase-assumptions.md, context.md template).

Root cause: Unlike execute-phase and plan-phase commands (which have short
2-line process blocks deferring to the workflow file), discuss-phase had
inline step-by-step instructions detailed enough to act on without reading
the referenced workflow files.

Changes:
- Replace discuss-phase command's <process> block with a short directive
  that forces reading the workflow file, matching execute-phase/plan-phase
  pattern
- Add MANDATORY instruction that execution_context files ARE the
  instructions, not optional reading
- Register workflow.research_before_questions and workflow.discuss_mode
  as valid config keys (were missing from VALID_CONFIG_KEYS)
- Fix config key mismatch: workflows referenced "research_questions"
  but documented key is "workflow.research_before_questions"
- Move research_before_questions from hooks section to workflow section
  in settings workflow
- Add research_before_questions default to config template and builder
- Add suggestion mapping for deprecated hooks.research_questions key
- Add 6 regression tests covering config keys and process block guard

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 14:13:11 -04:00
Tom Boucher
156c008c33 Merge pull request #1296 from gsd-build/fix/gemini-before-tool-hook-1295
fix: use BeforeTool hook event for Gemini CLI prompt guard
2026-03-21 14:10:55 -04:00
Tom Boucher
4395b2ecf9 fix: use BeforeTool hook event for Gemini CLI instead of PreToolUse
Gemini CLI uses BeforeTool (not PreToolUse) for pre-tool hooks, matching
the existing pattern where AfterTool is used instead of PostToolUse. The
prompt injection guard hook was hardcoded to PreToolUse, causing Gemini
CLI to log "Invalid hook event name: PreToolUse" on startup.

Apply the same runtime-conditional mapping used for post-tool hooks, and
update the uninstall cleanup to iterate both event names.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 14:08:32 -04:00
marcus.salinas
f7031e2f20 fix(manager): address review — withProjectRoot, milestone filter, planningPaths
Fixes from trek-e's review on PR #1282:

1. Add missing withProjectRoot() wrapper on output — all other cmdInit*
   functions include project_root in JSON, manager was the only one without it.

2. Add getMilestonePhaseFilter() to directory scan — prevents stale phase
   directories from prior milestones appearing as phantom dashboard entries.

3. Replace hardcoded .planning/ paths with planningPaths(cwd) — forward
   compatibility with workstream scoping (#1268).

4. Add 3 new tests:
   - Conflict filter blocks dependent phase execution when dep is active
   - Conflict filter allows independent phase execution in parallel
   - Output includes project_root field

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 09:13:32 -05:00
Tom Boucher
87e3b41d67 Merge pull request #1291 from gsd-build/feat/multi-runtime-select-1281
feat: multi-runtime selection in interactive installer
2026-03-21 10:05:56 -04:00
Tom Boucher
f3ce0957cd feat: multi-runtime selection in interactive installer (#1281)
The interactive prompt now accepts comma-separated or space-separated
choices (e.g., "1,4,6" or "1 4 6") to install multiple runtimes in
one go, without needing --all or running the installer multiple times.

- Replaced if/else-if chain with runtimeMap lookup + split parser
- Added hint text: "Select multiple: 1,4,6 or 1 4 6"
- Invalid choices silently filtered, duplicates deduplicated
- Empty input still defaults to Claude Code
- Choice "8" still selects all runtimes

Tests: 10 new tests covering comma/space/mixed separators,
deduplication, invalid input filtering, order preservation,
and source-level assertions.

Closes #1281

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 09:52:52 -04:00
Tom Boucher
4c749a4a61 Merge pull request #1290 from gsd-build/ci/optimize-test-matrix
ci: optimize test matrix — 9 containers down to 4
2026-03-21 09:46:14 -04:00
Tom Boucher
57c8a1abbb ci: optimize test matrix — 9 containers down to 4
- Drop Node 20 (EOL April 2026)
- Reduce macOS to single runner (Node 22) — platform compat check
- Reduce Windows to single runner (Node 22) — slowest CI, smoke-test
- Keep Ubuntu × {22, 24} as primary test surface

Estimated savings: ~60% fewer runner-minutes per CI run
(~500s → ~190s, 9 jobs → 4 jobs)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 09:44:09 -04:00
Tom Boucher
a37be8d0d8 Merge pull request #1288 from gsd-build/fix/home-tilde-expansion-1284
fix: use $HOME instead of ~ in installed shell command paths
2026-03-21 09:29:13 -04:00
Tom Boucher
ee9fad0376 Merge pull request #1287 from gsd-build/fix/monorepo-worktree-cwd-preservation-1283
fix: preserve subdirectory CWD in monorepo worktrees
2026-03-21 09:28:42 -04:00
Tom Boucher
f9cb02e005 fix: use $HOME instead of ~ in installed shell command paths (#1284)
The installer pathPrefix for global installs replaced os.homedir()
with ~, which does NOT expand inside double-quoted shell commands
in POSIX shells. This caused MODULE_NOT_FOUND errors when executing
commands like: node "~/.claude/get-shit-done/bin/gsd-tools.cjs"

Changed pathPrefix to use $HOME instead of ~, which correctly expands
inside double quotes. Also fixed a quoted-tilde instance in do.md.

- bin/install.js: $HOME prefix instead of ~ for global installs
- get-shit-done/workflows/do.md: node "$HOME/..." instead of "~/"
- tests/path-replacement.test.cjs: updated + 3 new regression tests

Closes #1284

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 09:24:31 -04:00
Tom Boucher
de11114d59 fix: preserve subdirectory CWD in monorepo worktrees (#1283)
When running GSD from a monorepo subdirectory inside a git worktree,
resolveWorktreeRoot() resolved to the worktree root, discarding the
subdirectory where .planning/ lives. All commands failed with
"No ROADMAP.md found" even though the planning structure existed.

Now check if CWD already contains .planning/ before worktree
resolution. If it does, the CWD is already the correct project root
and worktree resolution is skipped.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 09:20:58 -04:00
marcus.salinas
5e5abe0961 Merge upstream/main and resolve conflicts
Integrate upstream workspace features (new-workspace, list-workspaces,
remove-workspace) alongside manager feature. Bump copilot skill count
53 → 54 and agent count to 18 to account for both upstream additions
and the new manager skill.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 07:38:24 -05:00
marcus.salinas
afcd2a8ac2 feat(manager): add interactive command center with dependency-aware recommendations
Add /gsd:manager — a single-terminal dashboard for managing milestones.
Shows all phases with visual status indicators (D/P/E columns), computes
recommended next actions, and dispatches discuss inline while plan/execute
run as background agents.

Key behaviors:
- Recommendation engine prioritizes execute > plan > discuss
- Filters parallel execute/plan when phases share dependency chains
- Independent phases (no direct or transitive dep relationship) CAN
  run in parallel — dependent phases are serialized
- Dashboard shows compact Deps column for at-a-glance dependency view
- Sliding window limits discuss to one phase at a time
- Activity detection via file mtime (5-min window) for is_active flag

New files:
- commands/gsd/manager.md — skill definition
- get-shit-done/workflows/manager.md — full workflow spec
- get-shit-done/bin/lib/init.cjs — cmdInitManager() with phase parsing,
  dependency graph traversal, and recommendation filtering
- get-shit-done/bin/gsd-tools.cjs — route 'init manager' to new command
- tests/init-manager.test.cjs — 16 tests covering status detection,
  deps, sliding window, recommendations, and edge cases

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 07:22:21 -05:00
Tom Boucher
33db504934 Merge pull request #1274 from gsd-build/feat/discuss-mode-config-637
feat: add workflow.discuss_mode assumptions config
2026-03-21 01:18:20 -04:00
Tom Boucher
71b3a85d4b Merge pull request #1279 from gsd-build/fix/early-branch-creation-1278
fix: create strategy branch before first commit, not at execute-phase
2026-03-21 01:17:33 -04:00
Tom Boucher
9ddd6c1bdc fix: create strategy branch before first commit, not at execute-phase (#1278)
When branching_strategy is "phase" or "milestone", the branch was only
created during execute-phase — but discuss-phase, plan-phase, and
new-milestone all commit artifacts before that, landing them on main.

Move branch creation into cmdCommit() so the strategy branch is created
at the first commit point in any workflow. execute-phase's existing
handle_branching step becomes a harmless no-op (checkout existing branch).

Also fixes websearch test mocks broken by #1276 (fs.writeSync change).

Closes #1278

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 01:08:06 -04:00
Tom Boucher
7ceccc20d3 Merge pull request #1277 from gsd-build/fix/model-resolution-non-claude-1156
fix: resolve ProviderModelNotFoundError on non-Claude runtimes
2026-03-21 00:59:51 -04:00
Tom Boucher
02254db611 fix: resolve ProviderModelNotFoundError on non-Claude runtimes (#1156)
Extend resolve_model_ids to accept "omit" value: returns empty string
so non-Claude runtimes (OpenCode, Codex, Gemini, etc.) use their
configured default model instead of unresolvable Claude aliases.

- resolve_model_ids: "omit" short-circuits before alias resolution
- model_overrides still respected (checked first) for explicit IDs
- Installer sets resolve_model_ids: "omit" in ~/.gsd/defaults.json
  for non-Claude runtimes during install
- 4 new tests covering omit behavior and override passthrough
- Fix websearch test mocks for fs.writeSync output change (#1276)

Closes #1156

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 00:57:20 -04:00
Tom Boucher
3f2c0a16e0 Merge pull request #1276 from daresTheDevil/fix/stdout-pipe-truncation
fix: use fs.writeSync to prevent stdout truncation when piped
2026-03-21 00:41:42 -04:00
Tom Boucher
18bb0149c8 feat: add workflow.discuss_mode assumptions config (#637)
Add codebase-first assumption-driven alternative to the interview-style
discuss-phase. New `workflow.discuss_mode: "assumptions"` config routes
to a separate workflow that spawns a gsd-assumptions-analyzer agent to
read 5-15 codebase files, surface assumptions with evidence, and ask
only for corrections (~2-4 interactions vs ~15-20).

- New gsd-assumptions-analyzer agent for deep codebase analysis
- New discuss-phase-assumptions.md workflow (15 steps)
- Command-level routing via dual @reference + process gate
- Identical CONTEXT.md output — downstream agents unaffected
- Existing discuss-phase.md workflow untouched (zero diff)
- Mode-aware plan-phase gate and progress display
- User documentation and integration tests
- Update agent count and list in copilot-install tests (17 → 18)

Closes #637

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 00:21:17 -04:00
David Kay
045eabbbf9 fix: use fs.writeSync for stdout to prevent pipe truncation
process.stdout.write() is async when stdout is a pipe. The
immediate process.exit(0) tears down the process before the
downstream reader (jq, python3, etc) consumes the buffer,
producing truncated JSON.

Replace with fs.writeSync(1, data) which blocks until the
kernel pipe buffer accepts the bytes, and drop process.exit(0)
on the success path so the event loop drains naturally.

Fixes #1275
Related: #493 (addressed >50KB case, this fixes <50KB)
2026-03-20 23:05:15 -05:00
Tom Boucher
377a78fc21 Merge pull request #1272 from gsd-build/fix/verification-data-flow-env-audit-1245
feat: data-flow tracing, environment audit, and behavioral spot-checks in verification
2026-03-20 22:28:51 -04:00
Tom Boucher
e98b41aa15 feat: add data-flow tracing, environment audit, and behavioral spot-checks
Verification checked structure but not whether data actually flows
end-to-end or whether external dependencies are available. Adds:

- Step 4b (Data-Flow Trace): Level 4 verification traces upstream from
  wired artifacts to verify data sources produce real data, catching
  hollow components that render empty/hardcoded values
- Step 7b (Behavioral Spot-Checks): lightweight smoke tests that verify
  runnable code produces expected output, not just that it exists
- Step 2.6 (Environment Audit): researcher probes target machine for
  external tools/services/runtimes before planning, so plans include
  fallback strategies for missing dependencies

Closes #1245

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 22:26:22 -04:00
Tom Boucher
df6fcf0033 Merge pull request #1271 from gsd-build/claude/resolve-merge-conflict-oXpxa
fix(tests): disable GPG signing in temp git repos to fix CI failures
2026-03-20 22:18:56 -04:00
Tom Boucher
1dde5df364 Merge pull request #1261 from j2h4u/fix/frontmatter-status-preservation
fix(state): preserve frontmatter status when body Status field is missing
2026-03-20 22:14:49 -04:00
Tom Boucher
a583b489f3 Merge pull request #1270 from gsd-build/fix/new-milestone-verification-gate-1269
fix: add verification gate before writing PROJECT.md in new-milestone
2026-03-20 22:13:36 -04:00
Tom Boucher
0d2ee412c8 Merge pull request #1265 from chrisesposito92/feat/plan-phase-reviews-flag
feat: implement --reviews flag for gsd:plan-phase
2026-03-20 22:13:10 -04:00
Tom Boucher
802092d8ff fix: add verification gate before writing PROJECT.md in new-milestone
After gathering milestone goals and determining version, the workflow
now presents a summary and asks for confirmation before writing any
files. Users can adjust until satisfied, preventing the previous
behavior where GSD would immediately write PROJECT.md without verifying
its understanding of the milestone scope.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 22:07:57 -04:00
Tom Boucher
ae1a18ce2e Merge pull request #1267 from gsd-build/feat/multi-project-workspaces-1241
feat: add multi-project workspace commands
2026-03-20 21:57:13 -04:00
Claude
8f21ee0d4a merge: bring branch up to date with main
https://claude.ai/code/session_01Maa4rFLGVsFiLWynSbaVS8
2026-03-21 01:55:02 +00:00
Chris Esposito
71aedb28d5 test: add init tests for has_reviews and reviews_path
- Test that has_reviews=true and reviews_path is set when REVIEWS.md exists
- Test that reviews_path is undefined and has_reviews=false when missing

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 20:44:24 -04:00
chrisesposito92
31660d0f17 Update get-shit-done/workflows/plan-phase.md
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-03-20 20:41:06 -04:00
Claude
9db686625c fix(tests): disable gpg signing in temp git repos to fix CI failures
https://claude.ai/code/session_01Maa4rFLGVsFiLWynSbaVS8
2026-03-20 21:27:44 +00:00
Tom Boucher
ef4453ebf5 fix: respect HOME env var in workspace init functions for Windows compat
On Windows, os.homedir() reads USERPROFILE, not HOME. Tests pass HOME
override for sandboxing. Use process.env.HOME with os.homedir() fallback
so tests work cross-platform.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 17:08:50 -04:00
Tom Boucher
5c4d5e5f47 feat: add multi-project workspace commands (#1241)
Three new commands for managing isolated GSD workspaces:
- /gsd:new-workspace — create workspace with repo worktrees/clones
- /gsd:list-workspaces — scan ~/gsd-workspaces/ for active workspaces
- /gsd:remove-workspace — clean up workspace and git worktrees

Supports both multi-repo orchestration (subset of repos from a parent
directory) and feature branch isolation (worktree of current repo with
independent .planning/).

Includes init functions, command routing, workflows, 24 tests, and
user documentation.

Closes #1241

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 17:02:48 -04:00
Tom Boucher
ff3bf6622c docs: add multi-project workspaces design spec (#1241)
Physical workspace model with three commands: new-workspace,
list-workspaces, remove-workspace. Supports both multi-repo
orchestration and same-repo feature branch isolation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 16:49:33 -04:00
Tom Boucher
cd2eabf9a1 Merge pull request #1266 from gsd-build/fix/stale-hook-check-path-1249
fix: stale hook detection checks wrong directory path
2026-03-20 16:32:08 -04:00
Tom Boucher
57cf0bd97b enhance: add 'Follow the Indirection' debugging technique to gsd-debugger
Teaches the debugger agent to trace path/URL/key construction across
producer and consumer code — prevents shallow investigation that misses
directory mismatches like the stale hooks bug (#1249).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 16:28:15 -04:00