Commit Graph

369 Commits

Author SHA1 Message Date
Tom Boucher
a6ba3e268e feat: PreToolUse workflow guard hook for rogue edit prevention (#678) (#1197)
New opt-in PreToolUse hook that warns when Claude edits files outside
a GSD workflow context (no active /gsd: command or subagent).

Soft guard — advises, does not block. The edit proceeds but Claude
sees a reminder to use /gsd:fast or /gsd:quick for state tracking.

Enable: set hooks.workflow_guard: true in .planning/config.json
Default: disabled (false)

Allows without warning:
- .planning/ files (GSD state management)
- Config files (.gitignore, .env, CLAUDE.md, settings.json)
- Subagent contexts (executor, planner, etc.)

Includes 3s stdin timeout guard and silent fail-safe.

Closes #678
2026-03-18 17:36:07 -04:00
Tom Boucher
a75c1d1f67 feat: cross-phase regression gate in execute-phase pipeline (#945) (#1120)
Add regression_gate step between executor completion and verification
in execute-phase workflow. Runs prior phases' test suites to catch
cross-phase regressions before they compound.

- Discovers prior VERIFICATION.md files and extracts test file paths
- Detects project test runner (jest/vitest/cargo/pytest)
- Reports pass/fail with options to fix, continue, or abort
- Skips silently for first phase or when no prior tests exist

Changes:
- execute-phase.md: New regression_gate step
- CHANGELOG.md: Document regression gate feature
- docs/FEATURES.md: Add REQ-EXEC-09

Fixes #945

Co-authored-by: TÂCHES <afromanguy@me.com>
2026-03-18 10:02:34 -06:00
Tom Boucher
0f095ac3d0 feat: requirements coverage gate in plan-phase pipeline (#984) (#1121)
Add step 13 (Requirements Coverage Gate) to plan-phase workflow.
After plans pass the checker, verifies all phase requirements are
covered by at least one plan before declaring planning complete.

- Extracts REQ-IDs from plan frontmatter and compares against
  phase_req_ids from ROADMAP
- Cross-checks CONTEXT.md features against plan objectives to
  detect silently dropped scope
- Reports gaps with options: re-plan, defer, or proceed
- Skips when phase_req_ids is null/TBD (no requirements mapped)

Fixes #984

Co-authored-by: TÂCHES <afromanguy@me.com>
2026-03-18 10:02:02 -06:00
Tom Boucher
f54f3df776 feat: structured session handoff artifact for cross-session continuity (#940) (#1122)
Enhance /gsd:pause-work to write .planning/HANDOFF.json alongside
.continue-here.md. The JSON provides machine-readable state that
/gsd:resume-work can parse for precise resumption.

HANDOFF.json includes:
- Task position (phase, plan, task number, status)
- Completed and remaining tasks with commit hashes
- Blockers with type classification (technical/human_action/external)
- Human actions pending (API keys, approvals, manual testing)
- Uncommitted files list
- Context notes for mental model restoration

Resume-work changes:
- HANDOFF.json is primary resumption source (highest priority)
- Surfaces blockers and human actions immediately on session start
- Validates uncommitted files against git status
- Deletes HANDOFF.json after successful resumption
- Falls back to .continue-here.md if no JSON exists

Also checks for placeholder content in SUMMARY.md files to catch
false completions (frontmatter claims complete but body has TBD).

Fixes #940
2026-03-18 10:01:25 -06:00
Tom Boucher
a97e4c2c6f feat: /gsd:ship command for PR creation from verified phase work (#829) (#1123)
* feat: /gsd:ship command for PR creation from verified phase work (#829)

New command that bridges local completion → merged PR, closing the
plan → execute → verify → ship loop.

Workflow (workflows/ship.md):
1. Preflight: verification passed, clean tree, correct branch, gh auth
2. Push branch to remote
3. Auto-generate rich PR body from planning artifacts:
   - Phase goal from ROADMAP.md
   - Changes from SUMMARY.md files
   - Requirements addressed (REQ-IDs)
   - Verification status
   - Key decisions
4. Create PR via gh CLI (supports --draft)
5. Optional code review request
6. Update STATE.md with shipping status

Files:
- commands/gsd/ship.md: New command entry point
- get-shit-done/workflows/ship.md: Full workflow implementation
- get-shit-done/workflows/help.md: Add ship to help output
- docs/COMMANDS.md: Command reference
- docs/FEATURES.md: Feature spec with REQ-SHIP-01 through 05
- docs/USER-GUIDE.md: Add to command table
- CHANGELOG.md: Document new command

Fixes #829

* fix(tests): update expected skill count from 39 to 40 for new ship command

The Copilot install E2E tests hardcode the expected number of skill
directories and manifest entries. Adding commands/gsd/ship.md increased
the count from 39 to 40.
2026-03-18 10:01:08 -06:00
Tom Boucher
849aed6654 fix: prevent agent from suggesting non-existent /gsd:transition command (#1081) (#1129)
The agent was telling users to run '/gsd:transition' after phase completion,
but this command does not exist. transition.md is an internal workflow invoked
by execute-phase during auto-advance.

Changes:
- Add <internal_workflow> banner to transition.md declaring it is NOT a user command
- Add explicit warning in execute-phase completion section that /gsd:transition
  does not exist
- Add 'only suggest commands listed above' guard to prevent hallucination
- Update resume-project.md to avoid ambiguous 'Transition' label
- Replace 'ready for transition' with 'ready for next step' in execute-plan.md

Fixes #1081
2026-03-18 10:00:35 -06:00
Tom Boucher
7101ddcb9c fix: prevent PROJECT.md drift and fix phase completion counters (#956) (#1130)
Two gaps in the standard workflow cycle caused planning document drift:

1. PROJECT.md was never updated during discuss → plan → execute → verify.
   Only transition.md (optional) and complete-milestone evolved it.
   Added an 'update_project_md' step to execute-phase.md that evolves
   PROJECT.md after phase completion: moves requirements to Validated,
   updates Current State, bumps Last Updated timestamp.

2. cmdPhaseComplete() in phase.cjs advanced 'Current Phase' but never
   incremented 'Completed Phases' counter or recalculated 'percent'.
   Added counter increment and percentage recalculation based on
   completed/total phases ratio.

Addresses the workflow-level gaps identified in #956:
- PROJECT.md evolution in execute-phase (gap #2)
- completed_phases counter not incremented (gap #1 table row 3)
- percent never recalculated (gap #1 table row 4)

Fixes #956
2026-03-18 10:00:24 -06:00
Tom Boucher
e8dbc3031b fix: add runtime compatibility fallback for Copilot executor stuck issue (#1128) (#1131)
Copilot's subagent spawning (Task API) may not properly return completion
signals to the orchestrator, causing it to hang indefinitely waiting for
agents that have already finished their work.

Added <runtime_compatibility> section to execute-phase.md with:
- Runtime-specific subagent spawning guidance (Claude Code, Copilot, others)
- Fallback rule: if agent completes work but orchestrator doesn't get the
  signal, treat as success based on spot-checks (SUMMARY.md exists, commits
  present)
- Sequential inline execution fallback for runtimes without reliable Task API

Fixes #1128
2026-03-18 10:00:07 -06:00
Tom Boucher
7dd31e6d20 feat: signal file for decision points — WAITING.json (#1034) (#1133)
When GSD hits a blocking decision point (AskUserQuestion, next action prompt),
external watchers have no way to detect it. Users monitoring multiple auto
sessions must visually check each terminal.

Added:
- state signal-waiting: writes .planning/WAITING.json (or .gsd/WAITING.json)
  with type, question, options, timestamp, and phase info
- state signal-resume: removes WAITING.json when user answers

Signal file format:
  { status, type, question, options[], since, phase }

External tools can watch for this file via fswatch, polling, or inotify.
Complements the existing remote-questions extension (Slack/Discord).

Fixes #1034
2026-03-18 09:59:39 -06:00
Tom Boucher
27e9bad203 feat: interactive executor mode for pair-programming style execution (#963) (#1136)
Adds --interactive flag to /gsd:execute-phase that changes execution from
autonomous subagent delegation to sequential inline execution with user
checkpoints between tasks.

Interactive mode:
- Executes plans sequentially inline (no subagent spawning)
- Presents each plan to user: Execute, Review first, Skip, Stop
- Pauses after each task for user intervention
- Dramatically lower token usage (no subagent overhead)
- Maintains full GSD planning/tracking structure

Changes:
- execute-phase.md: new check_interactive_mode step with full interactive flow
- execute-phase command: documented --interactive flag in argument-hint and context

Use cases:
- Small phases (1-3 plans, no complex dependencies)
- Bug fixes and verification gap closure
- Learning GSD workflow
- When user wants to pair-program with Claude under GSD structure

Fixes #963
2026-03-18 09:59:11 -06:00
Tom Boucher
665c948c22 feat: MCP tool awareness for GSD subagents (#973) (#1137)
GSD executor agents ignore MCP tools (e.g. jCodeMunch) even when CLAUDE.md
explicitly instructs their use. Agents default to Grep/Glob because those
are explicitly referenced in workflow patterns.

Added MCP tool instructions to:
- execute-phase.md: <mcp_tools> section in executor agent prompt telling
  agents to prefer MCP tools over Grep/Glob when available
- execute-plan.md: Step 2 in execute section with MCP tool fallback guidance

Agents now:
1. Check if CLAUDE.md references MCP tools
2. Prefer MCP tools for code navigation when accessible
3. Fall back to Grep/Glob if MCP tools are not available

Fixes #973
2026-03-18 09:58:36 -06:00
Tom Boucher
6536214a3a fix: add explicit agent type listings to prevent fallback after /clear (#949) (#1139)
After /clear, Claude Code sometimes loses awareness of custom agent types
and falls back to 'general-purpose'. This happens because the model doesn't
re-read .claude/agents/ after context reset.

Added <available_agent_types> sections to:
- execute-phase.md: lists all 12 valid GSD agent types with descriptions
- plan-phase.md: lists the 3 agent types used during planning

The explicit listing in workflow instructions ensures the model always has
an unambiguous reference to valid agent types, regardless of whether
.claude/agents/ was re-read after /clear.

Fixes #949
2026-03-18 09:58:08 -06:00
Tom Boucher
309d867172 fix: prevent nested Skill calls that break AskUserQuestion (#1009) (#1140)
When plan-phase invokes discuss-phase as a nested Skill call,
AskUserQuestion calls auto-resolve with empty answers — the user never
sees the question UI. This is a Claude Code runtime bug with nested
subcontexts.

Made the 'Run discuss-phase first' path explicitly exit the workflow
with a display message instead of risking nested invocation:
- Added explicit warning: do NOT invoke as nested Skill/Task
- Show the command for user to run as top-level
- Exit the plan-phase workflow immediately

Fixes #1009
2026-03-18 09:57:59 -06:00
Tom Boucher
c2c4301a98 feat: model alias-to-full-ID resolution for Task API compatibility (#991) (#1141)
Claude Code's Task tool sometimes doesn't resolve short aliases (opus,
sonnet, haiku) and passes them directly to the API, causing 404s. Tasks
then inherit the parent session's model instead of the configured one.

Added:
- MODEL_ALIAS_MAP in core.cjs mapping aliases to full model IDs
- resolve_model_ids config option (default: false for backward compat)
- resolveModelInternal() maps aliases when resolve_model_ids is true

Usage:
  { "resolve_model_ids": true }

This causes gsd-tools resolve-model to return 'claude-sonnet-4-5' instead
of 'sonnet', which the Task tool passes to the API without needing alias
resolution on Claude Code's side.

The alias map is maintained per release. Users can also use model_overrides
for full control.

All 755 tests pass.

Fixes #991
2026-03-18 09:57:42 -06:00
Tom Boucher
26d742c548 fix(core): replace negative-heuristic stripShippedMilestones with positive milestone lookup (#1145) (#1146)
stripShippedMilestones() uses a negative heuristic: strip all <details>
blocks, assume what remains is the current milestone. This breaks when
agents accidentally wrap the current milestone in <details> for
collapsibility — all downstream consumers then see an empty milestone.

Observed failure: cmdPhaseComplete() returns is_last_phase: true and
next_phase: null for non-final phases because the current milestone's
phases were stripped along with shipped ones.

Added extractCurrentMilestone(content, cwd) — a positive lookup that:
1. Reads the current milestone version from STATE.md frontmatter
2. Falls back to 🚧 in-progress marker in ROADMAP.md
3. Finds the section heading matching that version
4. Returns only that section's content
5. Falls back to stripShippedMilestones() if version can't be determined

Updated 12 call sites across 6 files to use extractCurrentMilestone:
- core.cjs: getRoadmapPhaseInternal(), getMilestonePhaseFilter()
- phase.cjs: cmdPhaseAdd(), cmdPhaseInsert(), cmdPhaseComplete() (2 sites)
- roadmap.cjs: cmdRoadmapGetPhase(), cmdRoadmapAnalyze()
- commands.cjs: stats/progress display
- verify.cjs: phase verification (2 sites)
- init.cjs: project initialization

Kept stripShippedMilestones() for:
- getMilestoneInfo() — determines the version itself, can't use positive lookup
- replaceInCurrentMilestone() — write operations, conservative boundary
- extractCurrentMilestone() fallback — when no version available

All 755 tests pass.

Fixes #1145
2026-03-18 09:57:31 -06:00
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
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
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
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
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
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
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
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
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
Rezolv
e1f6d11655 feat(note): add zero-friction note capture command (#1080) 2026-03-16 08:50:19 -06:00
Tom Boucher
2b0f595a17 fix(core): return 'opus' directly instead of mapping to 'inherit' (#1079)
resolveModelInternal() was converting 'opus' to 'inherit', assuming
the parent process runs on Opus. When the orchestrator runs on Sonnet
(the default), 'inherit' resolves to Sonnet — silently downgrading
quality profile subagents.

Remove the opus→inherit conversion so the resolved model name is
passed through directly. Claude Code's Task tool now supports model
aliases like 'opus', 'sonnet', 'haiku'.

Fixes #695
2026-03-16 08:49:55 -06:00
Colin Johnson
0fde04f561 fix(stats): correct git and roadmap reporting (#1066) 2026-03-15 19:31:28 -06:00
Rezolv
4aea69e02c feat(do): add freeform text router command (#1067)
* feat(do): add freeform text router command

* test(do): update expected skill count from 36 to 37
2026-03-15 19:30:46 -06:00
Colin Johnson
6de816f68c fix(init): prefer current milestone phase-op targets (#1068) 2026-03-15 19:30:28 -06:00
TÂCHES
ddb9923df2 feat(quick): add --research flag for focused pre-planning research (#317) (#1063)
Add composable --research flag to /gsd:quick that spawns a focused
gsd-phase-researcher before planning. Investigates implementation
approaches, library options, and pitfalls for the task.

Addresses the middle-ground gap between quick (no quality agents) and
full milestone workflows. All three flags are composable:
--discuss --research --full gives the complete quality pipeline.

Made-with: Cursor

Co-authored-by: ralberts3 <ralberts3@gatech.edu>
2026-03-15 11:45:25 -06:00
Aly Thobani
44de7c210c feat: Programmatic implementation of /gsd:set-profile command (#1007)
* perf: make `/gsd:set-profile`'s implementation more programmatic

* perf: run the set-profile script without Claude needing to invoke it

- inject the script's output as dynamic context into the set-profile skill, so that Claude doesn't
  need to invoke it and can simply read + print the output to the user
  - reference: https://code.claude.com/docs/en/skills#inject-dynamic-context

* feat: improve output message for case where model profile wasn't changed

* feat: specify haiku model for set-profile command since it's so simple

* fix: remove ' (default)' from previousProfile to avoid false negative for didChange

* chore: add docstring to MODEL_PROFILES with note about the analogous markdown reference table

* chore: delete set-profile workflow file that's no longer needed
2026-03-15 11:45:14 -06:00
jorge g
698985feb1 feat: add inherit model profile for OpenCode /model (#951) 2026-03-15 11:40:08 -06:00
Shard
ca4ae7b3b8 fix: scope ROADMAP.md searches to current milestone (#1059)
Phase numbers reset per milestone (v1.0 Phase 1-26, v1.1 Phase 1-6,
v1.2 Phase 1-6). Functions that searched ROADMAP.md for phase headings
or checkboxes would match archived milestone entries inside <details>
blocks before reaching the current milestone's entries.

This caused:
- roadmap_complete: true for phases that aren't complete (checkbox
  regex matched the archived [x] Phase N from a previous milestone)
- phase-complete marking the wrong checkbox (archived instead of current)
- phase-add computing wrong maxPhase from archived headings
- progress not showing phases defined in ROADMAP but not yet on disk
2026-03-15 11:39:59 -06:00
Maxim Brashenko
eba9423ce0 fix(config): prevent workflow.research reset during milestone transitions
Two bugs caused workflow.research to silently reset to false:

1. new-milestone.md unconditionally overwrote workflow.research via
   config-set after asking about research — coupling a per-milestone
   decision to a persistent user preference. Now the research question
   is per-invocation only; persistent config changes via /gsd:settings.

2. verify.cjs health repair (createConfig/resetConfig) used flat keys
   (research, plan_checker, verifier) instead of the canonical nested
   workflow object from config.cjs, also missing branch templates,
   nyquist_validation, and brave_search fields.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 10:08:59 -06:00
Frank
63823c2e8a fix: skip no-research nyquist artifact gating (closes #980) 2026-03-15 10:08:57 -06:00
ashanuoc
944df19926 feat: add /gsd:stats command for project statistics
Add a new `/gsd:stats` command that displays comprehensive project
statistics including phase progress, plan execution metrics, requirements
completion, git history, and timeline information.

- New command definition: commands/gsd/stats.md
- New workflow: get-shit-done/workflows/stats.md
- CLI handler: `gsd-tools stats [json|table]`
- Stats function in commands.cjs with JSON and table output formats
- 5 new tests covering empty project, phase/plan counting, requirements
  counting, last activity, and table format rendering

Co-authored-by: ashanuoc <ashanuoc@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 21:58:09 -06:00
Fana
9481fdf802 feat: add /gsd:ui-phase + /gsd:ui-review design contract and visual audit layer (closes #986)
Add pre-planning design contract generation and post-execution visual audit
for frontend phases. Closes the gap where execute-phase runs without a visual
contract, producing inconsistent spacing, color, and typography across components.

New agents: gsd-ui-researcher (UI-SPEC.md), gsd-ui-checker (6-dimension
validation), gsd-ui-auditor (6-pillar scored audit + registry re-vetting).
Third-party shadcn registry blocks are machine-vetted at contract time,
verification time, and audit time — three enforcement points, not a checkbox.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 21:57:59 -06:00
Oussema Bouafif
47a8c70432 fix(update): make /gsd:update runtime-aware and target correct runtime 2026-03-14 21:57:53 -06:00
ashanuoc
c82c0a76b9 fix(phase-complete): improve REQUIREMENTS.md traceability updates (closes #848)
- Scope phase section regex to prevent cross-phase boundary matching
- Handle 'In Progress' status in traceability table (not just 'Pending')
- Add requirements_updated field to phase complete result object
- Add 3 new tests: result field, In Progress status, cross-boundary safety

Co-authored-by: ashanuoc <ashanuoc@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 21:57:48 -06:00
TÂCHES
823bb2a99a fix: make --auto flag skip interactive discussion questions (closes #1025) (#1050)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 21:23:56 -06:00