Skip to content

fix(prompt): clarify execute-phase active flags#1

Open
Solvely-Colin wants to merge 170 commits into
Solvely/execute-specific-wavesfrom
Solvely/execute-phase-active-flags
Open

fix(prompt): clarify execute-phase active flags#1
Solvely-Colin wants to merge 170 commits into
Solvely/execute-specific-wavesfrom
Solvely/execute-phase-active-flags

Conversation

@Solvely-Colin

Copy link
Copy Markdown
Owner

Closes gsd-build#673

Stacked On

  • Base branch: Solvely/execute-specific-waves
  • This is intentionally stacked on top of the wave-execution work in gsd-build/get-shit-done#1150 to avoid conflicts in commands/gsd/execute-phase.md

Summary

  • clarify that documented flags are available options, not implied active flags
  • require --wave and --gaps-only to be treated as active only when their literal tokens appear in $ARGUMENTS
  • add regression coverage for the prompt contract so weaker runtimes do not infer --gaps-only by mistake

Why

Some runtimes were reading the flag documentation in the expanded command prompt and incorrectly assuming --gaps-only was active even when the user only ran /gsd:execute-phase <phase>.

Testing

  • npm test -- --test-name-pattern="execute-phase.*(wave|active flags)|active flags are explicit|wave flag"

lone and others added 8 commits March 16, 2026 10:13
- Add language switch link to root README
- Translate README.md to docs/zh-CN/README.md
- Translate USER-GUIDE.md to docs/zh-CN/USER-GUIDE.md
- Translate all 13 reference documents to docs/zh-CN/references/

Key terminology mappings:
- context engineering → 上下文工程
- spec-driven development → 规格驱动开发
- context rot → 上下文衰减
- phase → 阶段
- milestone → 里程碑
- roadmap → 路线图

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…d#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>
- 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).
Solvely-Colin and others added 21 commits March 17, 2026 11:41
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
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>
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>
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
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
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.
…#1036) (gsd-build#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 gsd-build#1036
…#1173) (gsd-build#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 gsd-build#1173
…k tool (gsd-build#1174) (gsd-build#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 gsd-build#1174
…ofile-output (gsd-build#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)
…ts, standardize helpers (gsd-build#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)
…uild#927) (gsd-build#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 gsd-build#927
…ompatibility (gsd-build#899) (gsd-build#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 gsd-build#899 (patch 1 of 6)
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 gsd-build#1107, gsd-build#1109, gsd-build#1125, gsd-build#1161
…session-report command (gsd-build#1153, gsd-build#1157, gsd-build#1161, gsd-build#1162) (gsd-build#1163)

* fix: hook version tracking, stale hook detection, and stdin timeout increase

- Add gsd-hook-version header to all hook files for version tracking (gsd-build#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 (gsd-build#1162)
- Set +x permission on hook files during installation (gsd-build#1162)

Fixes gsd-build#1153, gsd-build#1162, gsd-build#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 gsd-build#1157

* test: update expected skill count from 39 to 40 for new session-report command
…itive milestone lookup (gsd-build#1145) (gsd-build#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 gsd-build#1145
…sd-build#991) (gsd-build#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 gsd-build#991
…#1009) (gsd-build#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 gsd-build#1009
gsd-build#949) (gsd-build#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 gsd-build#949
trek-e and others added 28 commits March 20, 2026 08:39
…ns-node24

Upgrade GitHub Actions for Node 24 compatibility
On Windows, os.homedir() reads USERPROFILE instead of HOME. The 6
tests using { HOME: tmpDir } to sandbox ~/.gsd/ lookups failed on
windows-latest because the child process still resolved homedir to
the real user profile.

Pass USERPROFILE alongside HOME in all sandboxed test calls.
…config-crlf-features

fix(codex-config): safely manage codex_hooks in existing configs
…esearch

feat: add Exa and Firecrawl MCP support for research agents
…ify-work (gsd-build#1238)

cmdInitPlanPhase, cmdInitExecutePhase, and cmdInitVerifyWork returned
phase_found: false when the phase existed in ROADMAP.md but no phase
directory had been created yet. This caused workflows to fail silently
after /gsd:new-project, producing directories named null-null.

cmdInitPhaseOp (used by discuss-phase) already had a ROADMAP fallback.
Applied the same pattern to the three missing commands: when
findPhaseInternal returns null, fall back to getRoadmapPhaseInternal
and construct phaseInfo from the ROADMAP entry.

Added 5 regression tests covering:
- plan-phase ROADMAP fallback
- execute-phase ROADMAP fallback
- verify-work ROADMAP fallback
- phase_found false when neither directory nor ROADMAP entry exists
- disk directory preferred over ROADMAP fallback
…build#1250)

loadConfig() defaulted commit_docs to true regardless of whether
.planning/ was gitignored. The documented auto-detection only existed
inside cmdCommit, so init commands returned commit_docs: true even
when .planning/ was in .gitignore. This caused LLM executors to
bypass the cmdCommit gate and re-commit planning files with raw git.

Now loadConfig() checks isGitIgnored(cwd, '.planning/') when no
explicit commit_docs value is set in config.json. If .planning/ is
gitignored, commit_docs defaults to false. An explicit commit_docs
value in config.json is always respected.

Added 5 regression tests covering auto-detection, explicit overrides,
and the no-config-file edge case.
gsd-workflow-guard.js was missing the // gsd-hook-version: {{GSD_VERSION}}
header that all other hook files have. The stale hook detection in
gsd-check-update.js scans all gsd-*.js files for this header and flags
any without it as stale (hookVersion: 'unknown'). This caused a
persistent '⚠ stale hooks — run /gsd:update' warning in the statusline
even on the latest version.

Added the version header to gsd-workflow-guard.js. Running /gsd:update
will reinstall the hook with the correct version stamp.
…ild#1246)

The gsd-context-monitor PostToolUse hook was configured without a
matcher or timeout, causing it to fire on every tool use including
Read, Glob, and Grep. When multiple Read calls happen in parallel,
some hook processes failed with errors.

Added matcher: 'Bash|Edit|Write|MultiEdit|Agent|Task' to limit the
hook to tools that actually modify context significantly. Added
timeout: 10 to prevent hangs.

Includes migration logic: existing installations without matcher/timeout
get them added on next /gsd:update.
…-build#1244)

Enhanced gsd-verifier's anti-pattern detection to catch:
- Hardcoded empty data props (={[]}, ={{}}, ={null})
- 'not available' and 'not yet implemented' placeholder text
- Data stub classification guidance (only flag when value flows
  to rendering without a data-fetching path)

Added stub tracking to gsd-executor's summary creation:
- Before writing SUMMARY, scan files for stub patterns
- Document stubs in a '## Known Stubs' section
- Block plan completion if stubs prevent the plan's goal
…ity (gsd-build#1243)

Decisions in CONTEXT.md are now numbered (D-01, D-02, etc.) so
downstream agents can reference them and the plan-checker can verify
100% coverage.

Changes:
- templates/context.md: Decisions use **D-XX:** prefix format
- workflows/discuss-phase.md: write_context step numbers decisions
- agents/gsd-planner.md: Self-check verifies decision ID references
  in task actions; tasks reference D-XX IDs for traceability
- agents/gsd-plan-checker.md: Dimension 7 (Context Compliance)
  extracts D-XX IDs and verifies every decision has a task
ensureConfigFile(): keep our refactored version that delegates to
buildNewProjectConfig({}) instead of upstream's duplicated logic.

buildNewProjectConfig(): add firecrawl and exa_search API key
detection alongside existing brave_search, matching upstream's
new integrations.
…lback-1238

fix(init): add ROADMAP fallback to plan-phase, execute-phase, and verify-work
…gnore-autodetect-1250

fix(core): auto-detect commit_docs from gitignore in loadConfig
…flow-guard-1249

fix(hooks): add version header to gsd-workflow-guard.js
…matcher-1246

fix(install): add matcher and timeout to context-monitor hook
…-stub-detection-1244

enhancement(agents): add stub detection to verifier and executor
…-traceability-1243

enhancement(workflow): add decision IDs for discuss-to-plan traceability
…ew-project-config

feat: materialize full config on new-project initialization
feat: add advisor mode with research-backed discussion
… input validation

Defense-in-depth security hardening for a codebase where markdown files become
LLM system prompts. Adds centralized security module, PreToolUse hook for
injection detection, and CI-ready codebase scan.

New files:
- security.cjs: path traversal prevention, prompt injection scanner/sanitizer,
  safe JSON parsing, field name validation, shell arg validation
- gsd-prompt-guard.js: PreToolUse hook scans .planning/ writes for injection
- security.test.cjs: 62 unit tests for all security functions
- prompt-injection-scan.test.cjs: CI scan of all agent/workflow/command files

Hardened code paths:
- readTextArgOrFile: path traversal guard (--prd, --text-file)
- cmdStateUpdate/Patch: field name validation prevents regex injection
- cmdCommit: sanitizeForPrompt strips invisible chars from commit messages
- gsd-tools --fields: safeJsonParse wraps unprotected JSON.parse
- cmdFrontmatterGet/Set: null byte rejection
- cmdVerifyPathExists: null byte rejection
- install.js: registers prompt guard hook, updates uninstaller

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ction-guards

security: prompt injection guards, path traversal prevention, input validation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add documentation for all new v1.27 features:
- 7 new commands (/gsd:fast, /gsd:review, /gsd:plant-seed, /gsd:thread,
  /gsd:add-backlog, /gsd:review-backlog, /gsd:pr-branch)
- Security hardening (security.cjs, prompt guard hook, workflow guard hook)
- Multi-repo workspace support, discussion audit trail, advisor mode
- New config options (research_before_questions, hooks.workflow_guard)
- Updated component counts in ARCHITECTURE.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…otes

docs: update README and docs/ for v1.27 release
Copilot AI review requested due to automatic review settings March 20, 2026 17:53

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR clarifies /gsd:execute-phase flag semantics (flags are only “active” when explicitly present in $ARGUMENTS) and adds regression coverage to prevent runtimes from inferring --gaps-only from documentation text. It also includes substantial additional platform/workflow additions (new commands/workflows, hooks hardening, Node engine bump, and docs expansion).

Changes:

  • Clarify execute-phase prompt contract so optional flags are not treated as implicitly active.
  • Expand GSD workflows/commands/docs (ship/review/next/fast/audit-uat, branching, UAT debt tracking, etc.) and add new hooks.
  • Update runtime/tooling expectations (Node >= 20, CI matrix changes, hook build validation, updated counts in install tests).

Reviewed changes

Copilot reviewed 99 out of 138 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
tests/copilot-install.test.cjs Updates expected installed skill/agent counts and golden agent list
tests/commands.test.cjs Adds command-level regression tests (summary extraction; todo match-phase)
tests/claude-md.test.cjs Adds tests for generate-claude-md and new-project workflow references
tests/agent-frontmatter.test.cjs Adds workflow content regression assertions (execute-phase fallback, discussion log)
scripts/build-hooks.js Adds syntax validation before copying hooks to dist; expands hook list
package.json Bumps version and raises Node engine requirement
hooks/gsd-workflow-guard.js Adds advisory PreToolUse hook warning on edits outside workflow context
hooks/gsd-statusline.js Adds hook version header and “stale hooks” warning display
hooks/gsd-prompt-guard.js Adds advisory PreToolUse prompt-injection scanner for .planning/ writes
hooks/gsd-context-monitor.js Adds hook version header and raises stdin timeout for reliability
hooks/gsd-check-update.js Adds hook version headers and stale-hook detection in cache output
get-shit-done/workflows/verify-work.md Adds “blocked” inference and final status computation (partial vs complete)
get-shit-done/workflows/update.md Fixes shell iteration portability by switching to arrays
get-shit-done/workflows/transition.md Marks transition as internal and adds verification-debt surfacing behavior
get-shit-done/workflows/stats.md Changes stats command invocation path
get-shit-done/workflows/ship.md Adds shipping workflow to create PRs via gh and update state
get-shit-done/workflows/settings.md Extends settings schema (hooks, quick branching, text mode, research Qs)
get-shit-done/workflows/session-report.md Adds workflow for generating session report markdown
get-shit-done/workflows/review.md Adds workflow for cross-AI plan review via external CLIs
get-shit-done/workflows/resume-project.md Adds HANDOFF.json structured resume path and updates routing copy
get-shit-done/workflows/quick.md Adds quick-task branching step
get-shit-done/workflows/progress.md Adds partial UAT handling and cross-phase verification debt warning
get-shit-done/workflows/pr-branch.md Adds workflow to filter .planning/ commits into PR-ready branch
get-shit-done/workflows/plant-seed.md Adds workflow to capture structured “seed” ideas with trigger conditions
get-shit-done/workflows/plan-phase.md Adds agent type list, discuss-phase nesting warning, requirements coverage gate
get-shit-done/workflows/pause-work.md Adds HANDOFF.json structured handoff and expands captured pause context
get-shit-done/workflows/next.md Adds auto-routing “next step” workflow
get-shit-done/workflows/new-milestone.md Adds --reset-phase-numbers and phase dir archival safety behavior
get-shit-done/workflows/map-codebase.md Adds sequential fallback mode when Task tool is unavailable
get-shit-done/workflows/help.md Documents new commands and flags
get-shit-done/workflows/health.md Updates repair semantics and adds Windows stale task dir diagnostics
get-shit-done/workflows/fast.md Adds inline trivial-task workflow (no planning artifacts)
get-shit-done/workflows/execute-plan.md Expands init fields; adds MCP preference; adds sub-repo commit flow
get-shit-done/workflows/audit-uat.md Adds workflow for cross-phase UAT/verification audit
get-shit-done/templates/project.md Clarifies embedded evolution rules linkage
get-shit-done/templates/phase-prompt.md Updates verification examples to use fetch
get-shit-done/templates/discussion-log.md Adds discussion-log template with audit-only constraints
get-shit-done/templates/context.md Adds numbered decision IDs formatting
get-shit-done/templates/config.json Adds planning.sub_repos default
get-shit-done/templates/claude-md.md Adds workflow enforcement section marker and updates section counts
get-shit-done/templates/UAT.md Adds partial status and blocked result semantics
get-shit-done/references/planning-config.md Adds quick-branch template documentation
get-shit-done/references/model-profiles.md Documents inherit for non-Anthropic providers
get-shit-done/references/git-integration.md Documents --no-verify in parallel runs; adds sub_repos support
get-shit-done/references/checkpoints.md Switches examples from curl to fetch for Windows compatibility
docs/zh-CN/references/ui-brand.md Adds Chinese UI brand reference
docs/zh-CN/references/tdd.md Adds Chinese TDD reference
docs/zh-CN/references/questioning.md Adds Chinese questioning reference
docs/zh-CN/references/planning-config.md Adds Chinese planning config reference
docs/zh-CN/references/phase-argument-parsing.md Adds Chinese phase parsing reference
docs/zh-CN/references/model-profiles.md Adds Chinese model profiles reference
docs/zh-CN/references/model-profile-resolution.md Adds Chinese model profile resolution reference
docs/zh-CN/references/git-planning-commit.md Adds Chinese git planning commit reference
docs/zh-CN/references/git-integration.md Adds Chinese git integration reference
docs/zh-CN/references/decimal-phase-calculation.md Adds Chinese decimal phase calculation reference
docs/zh-CN/references/continuation-format.md Adds Chinese continuation format reference
docs/CONFIGURATION.md Extends config schema docs (hooks, quick branching, research toggle)
docs/COMMANDS.md Documents new commands (next, ship, session-report, audit-uat, fast, review, etc.)
docs/CLI-TOOLS.md Updates CLI module counts and documents --no-verify
docs/ARCHITECTURE.md Updates counts, documents new hooks/modules/artifacts
commands/gsd/thread.md Adds thread command entry point
commands/gsd/ship.md Adds ship command entry point
commands/gsd/session-report.md Adds session-report command entry point
commands/gsd/review.md Adds review command entry point
commands/gsd/review-backlog.md Adds review-backlog command entry point
commands/gsd/pr-branch.md Adds pr-branch command entry point
commands/gsd/plant-seed.md Adds plant-seed command entry point
commands/gsd/next.md Adds next command entry point
commands/gsd/fast.md Adds fast command entry point
commands/gsd/execute-phase.md Updates execute-phase argument hint and explicit flag activation rules
commands/gsd/discuss-phase.md Updates discuss-phase argument hint to include new flags
commands/gsd/audit-uat.md Adds audit-uat command entry point
commands/gsd/add-backlog.md Adds add-backlog command entry point
agents/gsd-verifier.md Expands stub detection patterns and adds classification guidance
agents/gsd-ui-researcher.md Adds Exa/Firecrawl MCP tools and ordering guidance
agents/gsd-project-researcher.md Adds Exa/Firecrawl MCP research guidance and source priority
agents/gsd-planner.md Requires decision ID traceability in tasks/self-check
agents/gsd-plan-checker.md Enforces decision ID coverage checks
agents/gsd-phase-researcher.md Adds Exa/Firecrawl guidance and runtime state inventory requirement
agents/gsd-executor.md Adds sub_repos-aware commit-to-subrepo guidance and stub tracking
agents/gsd-advisor-researcher.md Adds new advisor researcher agent
README.zh-CN.md Updates Chinese readme to include new runtimes/commands
README.md Adds language links and documents new commands/security hardening
CHANGELOG.md Adds 1.27.0 release notes and updates comparison links
.release-monitor.sh Adds script to monitor GitHub releases and signal updates
.github/workflows/test.yml Updates CI node matrix and action versions
.github/workflows/auto-label-issues.yml Bumps github-script action major version

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread package.json
{
"name": "get-shit-done-cc",
"version": "1.25.1",
"version": "1.27.0",

Copilot AI Mar 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR title/description focus on clarifying execute-phase flag activation, but the diff also includes a major version bump and a Node engine floor change (plus many new commands/workflows/hooks). Please either (a) update the PR title/description to reflect the broader scope, or (b) split the unrelated feature/workflow additions into separate PRs so the flag-contract fix can be reviewed and shipped independently.

Copilot uses AI. Check for mistakes.
Comment thread package.json
},
"engines": {
"node": ">=16.7.0"
"node": ">=20.0.0"

Copilot AI Mar 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR title/description focus on clarifying execute-phase flag activation, but the diff also includes a major version bump and a Node engine floor change (plus many new commands/workflows/hooks). Please either (a) update the PR title/description to reflect the broader scope, or (b) split the unrelated feature/workflow additions into separate PRs so the flag-contract fix can be reviewed and shipped independently.

Copilot uses AI. Check for mistakes.
@@ -625,7 +625,7 @@ describe('copyCommandsAsCopilotSkills', () => {
// Count gsd-* directories — should be 31

Copilot AI Mar 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comment says the directory count “should be 31” but the assertion expects 50. Please update or remove the outdated comment so test intent matches the current expected counts.

Suggested change
// Count gsd-* directories — should be 31
// Count gsd-* directories — should be 50

Copilot uses AI. Check for mistakes.

```bash
STATS=$(node "$GSD_TOOLS" stats json)
STATS=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" stats json)

Copilot AI Mar 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This hard-codes the Claude install path and bypasses the previously parameterized $GSD_TOOLS invocation pattern, which will break non-Claude runtimes and local installs. Prefer using the already-provided $GSD_TOOLS variable (or the init-resolved tool path) so stats works across supported runtimes.

Suggested change
STATS=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" stats json)
STATS=$("$GSD_TOOLS" stats json)

Copilot uses AI. Check for mistakes.

This document evolves at phase transitions and milestone boundaries.

**After each phase transition** (via `/gsd:transition`):

Copilot AI Mar 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This references a user-facing /gsd:transition command, but workflows/transition.md is explicitly marked as internal and says users should never be told to run /gsd:transition. Please reword this to reference phase transitions generically (or the actual user-facing commands that trigger transition behavior).

Suggested change
**After each phase transition** (via `/gsd:transition`):
**After each phase transition in the roadmap**:

Copilot uses AI. Check for mistakes.
Comment on lines +72 to +73
# Append entry — workflow handles the format
echo "| $(date +%Y-%m-%d) | fast | $TASK | ✅ |" >> .planning/STATE.md

Copilot AI Mar 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Appending $TASK directly into a markdown table can corrupt STATE.md if the task contains pipes (|), newlines, or shell-meaningful characters. It’s also bypassing any existing state update helpers/locking guarantees. A safer approach is to route this through gsd-tools state update/append functionality (or sanitize/escape table content) to avoid generating invalid markdown or introducing race/corruption in STATE.md.

Suggested change
# Append entry — workflow handles the format
echo "| $(date +%Y-%m-%d) | fast | $TASK | ✅ |" >> .planning/STATE.md
# Append entry — sanitize task to avoid breaking markdown or shell
sanitized_task=$(printf '%s' "$TASK" | tr '\n' ' ' | sed 's/|/\\|/g')
printf '| %s | fast | %s | ✅ |\n' "$(date +%Y-%m-%d)" "$sanitized_task" >> .planning/STATE.md

Copilot uses AI. Check for mistakes.
// Allow edits to common config/docs files that don't need GSD tracking
const allowedPatterns = [
/\.gitignore$/,
/\.env/,

Copilot AI Mar 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The allowlist regex /.env/ is very broad and will match many non-env paths (e.g., src/dotenv.ts, docs/.env-notes.md), reducing the guard’s effectiveness. Tighten this pattern to only allow typical env file names (e.g., .env, .env.local, .env.production, etc.) and ideally anchor to path segments/end-of-string.

Suggested change
/\.env/,
/(?:^|[\\/])\.env(?:\.(?:local|production|development|test|staging))?$/,

Copilot uses AI. Check for mistakes.
Comment thread scripts/build-hooks.js
function validateSyntax(filePath) {
const content = fs.readFileSync(filePath, 'utf8');
try {
// Use vm.compileFunction to check syntax without executing

Copilot AI Mar 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comment says vm.compileFunction but the implementation uses new vm.Script(...). Please update the comment to match the actual mechanism to avoid confusion during future maintenance.

Suggested change
// Use vm.compileFunction to check syntax without executing
// Use vm.Script to check syntax without executing

Copilot uses AI. Check for mistakes.
Comment thread README.md

**Solves context rot — the quality degradation that happens as Claude fills its context window.**

[**English**](README.md) | [**简体中文**](docs/zh-CN/README.md)

Copilot AI Mar 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This link points to docs/zh-CN/README.md, but the diff updates README.zh-CN.md (at repo root). If docs/zh-CN/README.md doesn’t exist, this becomes a broken link. Please point this link at the actual Chinese README path (or add the target file at docs/zh-CN/README.md).

Suggested change
[**English**](README.md) | [**简体中文**](docs/zh-CN/README.md)
[**English**](README.md) | [**简体中文**](README.zh-CN.md)

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.