Commit Graph

1147 Commits

Author SHA1 Message Date
Tony Park
6dc8caa0d5 fix(commit): stage file deletions when passed non-existent paths
When check-todos moves a file from pending/ to done/, the commit only
staged the new destination. The deletion of the source was never staged
because `git add` on a non-existent path is a no-op. Now we detect
missing files and use `git rm --cached` to stage the deletion.

Closes #1228

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 01:51:33 +09:00
Tom Boucher
1427aab41b Merge pull request #1070 from MenglongFan/docs/zh-cn-translation
docs: add Chinese (zh-CN) documentation
2026-03-18 23:58:15 -04:00
Tom Boucher
ed7c7375ee Merge pull request #1193 from trek-e/feat/research-before-questions-1186
feat: research-before-questions config option (#1186)
2026-03-18 23:56:45 -04:00
Tom Boucher
1192c0ae02 Merge pull request #1203 from trek-e/fix/stale-hooks-filter-1200
fix: filter stale hooks check to gsd-prefixed files only (#1200)
2026-03-18 23:56:33 -04:00
Tom Boucher
cd8c406a7c Merge pull request #1204 from trek-e/fix/codex-config-toml-1202
fix: prevent Codex config.toml corruption from non-boolean [features] keys (#1202)
2026-03-18 23:56:18 -04:00
Tom Boucher
b0c78fa9bc Merge pull request #1205 from trek-e/refactor/adopt-planning-paths
refactor: adopt planningPaths() across 4 modules, standardize test assertions
2026-03-18 23:56:05 -04:00
Tom Boucher
7f864ce87d Merge pull request #1206 from trek-e/chore/node-24-ci-update
chore: update CI to Node 20, 22, 24 — drop EOL Node 18
2026-03-18 23:55:47 -04:00
Tom Boucher
7cd3824c81 Merge pull request #1207 from trek-e/feat/community-requested-commands
feat: community-requested commands — /gsd:review, /gsd:plant-seed, /gsd:pr-branch
2026-03-18 23:55:32 -04:00
Tom Boucher
c41a9f5908 feat: community-requested commands — /gsd:review, /gsd:plant-seed, /gsd:pr-branch
Three commands reimplemented from positively-received community PRs:

1. /gsd:review (#925) — Cross-AI peer review
   Invoke external AI CLIs (Gemini, Claude, Codex) to independently
   review phase plans. Produces REVIEWS.md with per-reviewer feedback
   and consensus summary. Feed back into planning via --reviews flag.
   Multiple users praised the adversarial review concept.

2. /gsd:plant-seed (#456) — Forward-looking idea capture
   Capture ideas with trigger conditions that auto-surface during
   /gsd:new-milestone. Seeds preserve WHY, WHEN to surface, and
   breadcrumbs to related code. Better than deferred items because
   triggers are checked, not forgotten.

3. /gsd:pr-branch (#470) — Clean PR branches
   Create a branch for pull requests by filtering out .planning/
   commits. Classifies commits as code-only, planning-only, or mixed,
   then cherry-picks only code changes. Reviewers see clean diffs.

All three are standalone command+workflow additions with no core code
changes. Help workflow updated. Test skill counts updated.

797/797 tests pass.
2026-03-18 23:53:13 -04:00
Tom Boucher
f656dcbd6f chore: update CI matrix to Node 20, 22, 24 — drop EOL Node 18
Node 18 reached EOL April 2025. Node 24 is the current LTS target.

Changes:
- CI matrix: [18, 20, 22] → [20, 22, 24]
- package.json engines: >=16.7.0 → >=20.0.0
- Removed Node 18 conditional in CI (c8 coverage works on all 20+)
- Simplified CI to single test:coverage step for all versions

797/797 tests pass on Node 24.
2026-03-18 23:43:28 -04:00
Tom Boucher
1d4deb0f8b refactor: adopt planningPaths() across 4 modules — eliminate 34 inline path constructions
Consolidates repeated path.join(cwd, '.planning', ...) patterns into
calls to the shared planningPaths() helper from core.cjs.

Modules updated:
- state.cjs: 16 → planningPaths() (2 remain for non-standard paths)
- commands.cjs: 8 → planningPaths() (4 remain for todos dir)
- milestone.cjs: 5 → planningPaths() (3 remain for archive/milestones)
- roadmap.cjs: 4 → planningPaths()

Benefits:
- Single source of truth for .planning/ directory structure
- Easier to change planning dir location in the future
- Consistent path construction across the codebase
- No behavioral changes — pure refactor

797/797 tests pass.
2026-03-18 23:39:47 -04:00
Tom Boucher
862f6b91ba fix: prevent Codex config.toml corruption from non-boolean [features] keys (#1202)
When GSD installs codex_hooks = true under [features], any non-boolean
keys already in that section (e.g. model = "gpt-5.4") cause Codex's
TOML parser to fail with 'invalid type: string, expected a boolean'.

Root cause: TOML sections extend until the next [section] header. If
the user placed model/model_reasoning_effort under [features] (common
since Codex's own config format encourages this), GSD's installer
didn't detect or correct the structural issue.

Fix: After injecting codex_hooks, scan the [features] section for
non-boolean values and move them above [features] to the top level.
This preserves the user's keys while keeping [features] clean for
Codex's strict boolean parser.

Includes 2 regression tests:
- Detects non-boolean keys under [features] (model, model_reasoning_effort)
- Confirms boolean keys (codex_hooks, multi_agent) are not flagged

Closes #1202
2026-03-18 23:32:05 -04:00
Tom Boucher
9ca03ec35e fix: filter stale hooks check to gsd-prefixed files only (#1200)
gsd-check-update.js scanned ALL .js files in the hooks directory and
flagged any without a gsd-hook-version header as stale. This incorrectly
flagged user-created hooks (e.g. guard-edits-outside-project.js),
producing a persistent 'stale hooks' warning that /gsd:update couldn't
resolve.

Fix: filter hookFiles to f.startsWith('gsd-') && f.endsWith('.js')
since all GSD hooks follow the gsd-* naming convention.

Includes regression test validating the filter excludes user hooks.

Closes #1200
2026-03-18 23:29:38 -04:00
Tom Boucher
42a2c15b39 feat: research-before-questions config option (#1186)
Adds workflow.research_questions config toggle (default: false) that
enables web research before asking questions during /gsd:new-project
and /gsd:discuss-phase.

When enabled:
- discuss-phase: searches best practices for each gray area before
  presenting questions, showing 2-3 bullet points of findings
- new-project: researches the user's described domain before asking
  follow-up questions, weaving findings into the conversation

Added to /gsd:settings as a toggle ('Research Qs' section).

Closes #1186
2026-03-18 20:27:51 -04:00
Tom Boucher
5fd384f336 fix: universal agent name replacement for non-Claude runtimes (#766) (#1195)
* fix: universal agent name replacement for non-Claude runtimes (#766)

Adds neutralizeAgentReferences() shared function that all non-Claude
runtime converters call to replace Claude-specific references:

- 'Claude' (standalone agent name) → 'the agent'
- 'CLAUDE.md' → runtime-specific file (AGENTS.md, GEMINI.md, COPILOT.md)
- Removes 'Do NOT load full AGENTS.md' (harmful for AGENTS.md runtimes)

Preserves: 'Claude Code' (product), 'Claude Opus/Sonnet/Haiku' (models),
'claude-' prefixes (packages, CSS classes).

Integrated into: OpenCode, Gemini, Copilot, Antigravity, and Codex
converters. Claude Code converter unchanged (references are correct).

Includes 7 new tests covering all replacement rules.

Closes #766

* fix: use copilot-instructions.md instead of COPILOT.md for Copilot runtime

Addresses review from Solvely-Colin: Copilot's actual instruction file
is copilot-instructions.md, not COPILOT.md. The neutralizer was mapping
CLAUDE.md -> COPILOT.md which would reference a non-existent file.

- install.js: pass 'copilot-instructions.md' to neutralizeAgentReferences
- runtime-converters.test.cjs: update test to validate correct filename
2026-03-18 19:20:58 -04:00
Tom Boucher
973c6b267d Merge pull request #1115 from trek-e/feat/discuss-phase-todo-crossref 2026-03-18 18:09:42 -04:00
Tom Boucher
7424b3448d Merge pull request #1117 from trek-e/fix/parallel-commit-no-verify-1116 2026-03-18 18:09:17 -04:00
Tom Boucher
16444d7c23 Merge pull request #1118 from trek-e/fix/evolution-block-visibility-1039 2026-03-18 18:08:59 -04:00
Tom Boucher
73d6ec06cc Merge pull request #1132 from trek-e/feat/1m-context-awareness-1086 2026-03-18 18:08:19 -04:00
Tom Boucher
d77956f6bd Merge pull request #1192 from trek-e/feat/gsd-fast-command-609 2026-03-18 18:08:00 -04:00
Tom Boucher
ae3ff4f123 Merge pull request #1194 from trek-e/feat/discuss-pre-analysis-833 2026-03-18 18:07:40 -04:00
Tom Boucher
a61228eddc Merge pull request #1124 from trek-e/refactor/deduplicate-and-cleanup 2026-03-18 18:06:25 -04:00
Tom Boucher
a8539a1779 Merge pull request #1164 from trek-e/fix/opencode-model-inherit-1156 2026-03-18 18:06:03 -04:00
Tom Boucher
62afbb56e0 Merge pull request #1196 from trek-e/fix/windows-subagent-timeout-732 2026-03-18 18:05:14 -04:00
Tom Boucher
a2bcbd55d3 Merge pull request #1158 from mitchelladam/feat/cursor-cli-support 2026-03-18 18:04:04 -04:00
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
214a621cb2 docs: update changelog, architecture, CLI tools, config, features, and user guide for parallel execution fixes
Documentation updates for #1116 fixes and code review findings:

- CHANGELOG.md: Add --no-verify commit flag, post-wave hook validation,
  STATE.md file locking, duplicate function removal, cross-platform init
- docs/ARCHITECTURE.md: Add 'Parallel Commit Safety' section explaining
  --no-verify strategy and STATE.md lockfile mechanism
- docs/CLI-TOOLS.md: Document --no-verify flag on commit command with
  usage guidance
- docs/CONFIGURATION.md: Add note about pre-commit hooks and parallel
  execution behavior under parallelization settings
- docs/FEATURES.md: Add --no-verify to executor capabilities, add
  'Parallel Safety' section
- docs/USER-GUIDE.md: Add troubleshooting entries for parallel execution
  build lock errors and Windows EPERM crashes, update recovery table
2026-03-18 17:18:01 -04:00
Tom Boucher
60f38cdb9e fix: remove duplicate stateExtractField, cross-platform code detection, STATE.md file locking
Code review fixes from codebase pattern analysis:

1. state.cjs: Remove duplicate stateExtractField() definition (lines 12 vs 184).
   The second definition shadowed the first with identical logic. Keeps the
   original that uses escapeRegex() from core.cjs.

2. init.cjs: Replace Unix-only 'find' pipe with cross-platform fs.readdirSync
   recursive walk for code file detection. The execSync('find ... | grep ...')
   command fails on Windows where these Unix utilities aren't available.
   Removes unused child_process import.

3. state.cjs: Add lockfile-based mutual exclusion to writeStateMd() to prevent
   parallel executor agents from overwriting each other's STATE.md changes.
   Uses O_EXCL atomic file creation for lock acquisition, stale lock detection
   (10s timeout), and spin-wait with jitter. Ensures data integrity during
   wave-based parallel execution where multiple agents update STATE.md
   concurrently.

All 755 existing tests pass.
2026-03-18 17:17:34 -04:00
Tom Boucher
3bfc0f6845 fix: add --no-verify support for parallel executor commits (#1116)
Parallel executor agents trigger pre-commit hooks on every commit, causing
build lock contention (e.g., cargo lock fights in Rust projects) and 40+
minute delays from cascading retries.

Changes:
- Add --no-verify flag to gsd-tools commit command (commands.cjs)
- Wire --no-verify through gsd-tools.cjs CLI parser
- Update execute-phase.md to instruct parallel agents to use --no-verify
- Add post-wave hook validation step so orchestrator runs hooks once
- Update execute-plan.md pre-commit handling: parallel agents skip hooks,
  sequential agents still handle hooks normally
- Add parallel agent note to git-integration.md reference

Fixes #1116
2026-03-18 17:17:34 -04:00
Tom Boucher
a99caaeb59 feat: /gsd:fast command for trivial inline tasks (#609)
New lightweight command for tasks too small to justify planning overhead:
typo fixes, config changes, forgotten commits, simple additions.

- Runs inline in current context (no subagent spawn)
- No PLAN.md or SUMMARY.md generated
- Scope guard: redirects to /gsd:quick if task needs >3 file edits
- Atomic commit with conventional commit format
- Logs to STATE.md quick tasks table if present

Complements /gsd:quick (which spawns planner+executor) for cases where
the planning overhead exceeds the actual work.

Closes #609
2026-03-18 17:17:28 -04:00
Tom Boucher
297adf8425 fix: add Windows troubleshooting for plan-phase freezes (#732)
Windows users experience plan-phase freezes due to Claude Code stdio
deadlocks with MCP servers. When a subagent hangs, the orchestrator
blocks indefinitely with no timeout or error.

Adds:
- Windows troubleshooting section to plan-phase.md with:
  - Orphaned process cleanup (PowerShell commands)
  - Stale task directory cleanup (~/.claude/tasks/)
  - MCP server reduction advice
  - --skip-research fallback to reduce agent chain
- Stale task directory detection to health.md (I002 diagnostic)
  - Reports count of stale dirs on --repair
  - Safe cleanup guidance

Closes #732
2026-03-18 17:13:55 -04:00
Tom Boucher
be302f02bb feat: --analyze flag for discuss-phase trade-off analysis (#833)
Adds --analyze flag to /gsd:discuss-phase that provides a trade-off
analysis before each question (or question group in --batch mode).

When active, each question is preceded by:
- 2-3 options with pros/cons based on codebase context
- A recommended approach with reasoning
- Known pitfalls or constraints from prior phases

Composable with existing flags: --batch --analyze gives grouped
questions each with trade-off tables.

Closes #833
2026-03-18 17:07:33 -04:00
Tom Boucher
a9be67f504 docs: comprehensive v1.26 release documentation update (#1187)
Updates all docs to reflect v1.26.0 features and changes:

README.md:
- Add /gsd:ship and /gsd:next to command tables
- Add /gsd:session-report to Session section
- Update workflow to show ship step and auto-advance
- Update inherit profile description for non-Anthropic providers

docs/COMMANDS.md:
- Add /gsd:next command reference with full state detection logic
- Add /gsd:session-report command reference with report contents

docs/FEATURES.md:
- Add Auto-Advance (Next) feature (#14)
- Add Cross-Phase Regression Gate feature (#20)
- Add Requirements Coverage Gate feature (#21)
- Add Session Reporting feature (#24)
- Fix all section numbering (was broken with duplicates)
- Update inherit profile to mention non-Anthropic providers
- Renumber all 39 features consistently

docs/USER-GUIDE.md:
- Add /gsd:ship to workflow diagram
- Add /gsd:next and /gsd:session-report to command tables
- Add HANDOFF.json and reports/ to file structure
- Add troubleshooting for non-Anthropic model providers
- Add recovery entries for session-report and next
- Update example workflow to include ship and session-report

docs/CONFIGURATION.md:
- Update inherit profile to mention non-Anthropic providers
2026-03-18 14:54:02 -04:00
mitchelladam
69cfae2011 fix(cursor): preserve slash-prefixed gsd commands in converted markdown
Keep `/gsd-*` command examples slash-prefixed during Cursor conversion while still normalizing legacy `gsd:` syntax, and add regression coverage for Next Up markdown output.

Made-with: Cursor
2026-03-18 18:49:28 +00:00
adam.mitchell
7172d16447 Merge branch 'main' into feat/cursor-cli-support 2026-03-18 18:34:04 +00:00
mitchelladam
026a1b013e fix(cursor): write unquoted skill and subagent names
Prevent Cursor from treating frontmatter quotes as part of skill/subagent identifiers by emitting plain name scalars, and add regression tests to lock the conversion behavior.

Made-with: Cursor
2026-03-18 18:29:47 +00:00
Tom Boucher
c7954d1ad7 refactor: deduplicate code, add planningPaths helper, annotate empty catches
Code quality refactoring across 9 lib modules:

1. state.cjs: Remove duplicate stateExtractField() definition (lines 12
   vs 184). Replace 3 inline regex escape patterns with escapeRegex()
   from core.cjs. Add getStatePath() local helper for the 15 repeated
   statePath declarations. Import planningPaths from core.

2. core.cjs: Add planningPaths(cwd) helper returning an object with all
   common .planning paths (state, roadmap, project, config, phases,
   requirements). Add planningDir(cwd) shorthand. Export both.

3. init.cjs: Replace Unix-only execSync('find . | grep | head') with
   cross-platform fs.readdirSync recursive walk for code file detection.
   Remove unused child_process import. Fixes Windows compatibility.

4. All lib modules: Annotate 48 empty catch blocks with
   /* intentionally empty */ to distinguish deliberate error swallowing
   from accidental missing handlers. Affected: commands.cjs (8),
   config.cjs (1), core.cjs (4), init.cjs (13), milestone.cjs (3),
   phase.cjs (6), roadmap.cjs (1), state.cjs (3), verify.cjs (9).

All 755 tests pass.
2026-03-18 12:31:20 -04:00
Tom Boucher
0377951a04 feat: context window size awareness for 1M+ models (#1086)
GSD was designed around 200k context windows. With Opus 4.6 / Sonnet 4.6
shipping 1M context at standard pricing, GSD should adapt its strategies.

Changes:
- Add context_window config option (default: 200000, configurable to 1000000)
- Expose context_window in init output so workflows can adapt behavior
- Update execute-phase.md to note context-size-dependent strategies:
  - 200k: paths-only executor context, 10-15% orchestrator budget
  - 1M+: richer context passing, inline small phases, relaxed /clear
- Context monitor already uses percentage-based thresholds (adaptive)

Users can opt in via config.json:
  { "context_window": 1000000 }

Addresses #1086
2026-03-18 12:27:55 -04:00
Tom Boucher
6e612c54d7 fix: embed evolution rules in generated PROJECT.md so agents see them at runtime (#1039)
The <evolution> block in templates/project.md defined requirement lifecycle
rules (validate, invalidate, add, log decisions) but these instructions
only existed in the template — they never made it into the generated
PROJECT.md that agents actually read during phase transitions.

Changes:
- new-project.md: Add ## Evolution section to generated PROJECT.md with
  the phase transition and milestone review checklists
- new-milestone.md: Ensure ## Evolution section exists in PROJECT.md
  (backfills for projects created before this feature)
- execute-phase.md: Add .planning/PROJECT.md to executor <files_to_read>
  so executors have project context (core value, requirements, evolution)
- templates/project.md: Add comment noting the <evolution> block is
  implemented by transition.md and complete-milestone.md
- docs/ARCHITECTURE.md, docs/FEATURES.md: Note evolution rules in
  PROJECT.md descriptions
- CHANGELOG.md: Document the new Evolution section and executor context

Fixes #1039

All 755 tests pass.
2026-03-18 12:26:04 -04:00
Tom Boucher
e84999663c feat(discuss-phase): cross-reference pending todos against phase scope
Add a cross_reference_todos step to discuss-phase that surfaces relevant
backlog items before scope-setting decisions are made.

Implementation:
- New 'todo match-phase <N>' CLI command (commands.cjs) that scores
  pending todos against a phase's ROADMAP goal using three heuristics:
  keyword overlap, area match, and file path overlap
- New cross_reference_todos step in discuss-phase.md between
  load_prior_context and scout_codebase
- CONTEXT.md template gains 'Folded Todos' subsection in <decisions>
  and 'Reviewed Todos (not folded)' subsection in <deferred>

Design:
- No AI call for matching — pure keyword/area/file heuristics for speed
- Silent skip when todo_count is 0 or no matches (no workflow slowdown)
- Auto mode folds all todos with score >= 0.4 automatically
- Scoring: keywords (up to 0.6), area match (0.3), file overlap (0.4)

Tests: 5 new tests covering empty state, keyword matching, unrelated
todo exclusion, area matching, and score sorting.

Closes #1111
2026-03-18 12:25:04 -04:00
Tom Boucher
0f112abf55 fix: remove model:inherit from OpenCode agent conversion (#1156)
OpenCode does not recognize 'model: inherit' as a valid model identifier —
it throws ProviderModelNotFoundError when spawning any GSD subagent.

Changes:
- Remove 'model: inherit' injection for OpenCode agents in install.js
- Strip 'model:' field entirely during OpenCode frontmatter conversion
  (OpenCode uses its configured default model when no model is specified)
- Update tests to verify model: inherit is NOT added

This fixes all 15 GSD agent definitions and the gsd-set-profile command
for OpenCode users.

Fixes #1156
2026-03-18 12:23:41 -04:00
Lex Christopherson
fc468adb42 fix(tests): update copilot skill count assertions for ship and next commands
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 10:16:26 -06:00
Lex Christopherson
641a4fc15a 1.26.0 2026-03-18 10:08:52 -06:00
Lex Christopherson
9bf78719b6 docs: update changelog for v1.26.0
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 10:08:49 -06: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