Tighten all requirements references to use MUST/REQUIRED/CRITICAL language
instead of passive suggestions. Close the verification loop by extracting
phase requirement IDs from ROADMAP and passing them through the full chain:
researcher receives IDs → planner writes to PLAN frontmatter → executor
copies to SUMMARY → verifier cross-references against REQUIREMENTS.md with
orphan detection.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Write workflow.auto_advance to config.json so auto-mode survives
context compaction (re-read from disk on every workflow init)
- Auto-approve human-verify and auto-select first option for decision
checkpoints in both executor and orchestrator
- Pass --auto flag from plan-phase to execute-phase spawn
- Clear auto_advance on milestone complete (Route B)
- Document auto-mode checkpoint behavior in golden rules
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Closes#253 — plans were silently created without CONTEXT.md, and
discuss-phase didn't warn when plans already existed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Auto mode now chains: new-project → discuss-phase 1 → plan → execute → transition
- Accept pasted text OR file reference (not just @ references)
- YOLO mode implicit in --auto (skip that question)
- Config questions (depth, git, agents) asked FIRST in new Step 2a
- Step 5 skipped in auto mode (config already collected)
- Auto-advance banner shown before invoking discuss-phase
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Enables quality guarantees on quick tasks without full milestone ceremony.
--full spawns plan-checker (max 2 iterations) and post-execution verifier,
produces VERIFICATION.md, and adds Status column to STATE.md table.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Wire execute-phase to invoke transition.md inline when --auto flag or
workflow.auto_advance config is set, propagate --auto through transition
to next phase invocations, add config-get command to gsd-tools, and fix
broken "config get" calls to use hyphenated "config-get" subcommand.
Closes#344
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Document the #1 but... pattern for users who want a modified version
of an existing AskUserQuestion option without retyping it.
Closes#385
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
OpenCode uses "general" as its built-in general-purpose subagent type,
while Claude Code uses "general-purpose". This caused "Unknown agent type:
general-purpose is not a valid agent type" errors in OpenCode when running
workflows that spawn subagents (plan-phase, new-project, debug, etc.).
Fixes#411
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Strip .planning/ from staging before merge commits when commit_docs is
false. Prevents planning files from being committed during milestone
completion even when using branching strategies.
- Add commit_docs to config extraction in handle_branches step
- Reset .planning/ from staging before squash merge commits
- Use --no-commit flag for --no-ff merges to allow reset before commit
- Document branch merge behavior in planning-config.md
Closes#608
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Phase directories created by /gsd:add-phase and /gsd:insert-phase were
empty until planning, causing git to ignore them. This prevented syncing
across machines.
Fixes#427
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Local OpenCode installs were overwriting ~/.config/opencode/opencode.json
instead of ./.opencode/opencode.json. This fix threads the isGlobal flag
through the install/uninstall chain so permissions are written to the
correct location.
Fixes#435
Co-Authored-By: Gary Trakhman <gtrak@users.noreply.github.com>
Adds ASCII diagram showing how plans are grouped into waves based on
dependencies. Independent plans run in parallel within a wave; waves
run sequentially when dependencies exist.
Addresses user confusion in #486 about why phases may not parallelize
(dependencies prevent parallel execution by design).
Add optional phase archival to milestone completion and a standalone
/gsd:cleanup command for retroactive use. Phase dirs move to
.planning/milestones/v{X.Y}-phases/, reducing phases/ clutter after
multiple milestones.
Core changes:
- getArchivedPhaseDirs() and searchPhaseInDir() helpers in gsd-tools
- findPhaseInternal() searches archives when phase not found in current
- cmdPhasesList() accepts --include-archived flag
- cmdHistoryDigest() scans both current and archived phases
- cmdMilestoneComplete() accepts --archive-phases flag
- Workflow globs replaced with find-phase/phases-list CLI calls
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When init commands include many file contents (state, roadmap, requirements,
etc.), the JSON output can exceed Claude Code's Bash tool buffer (~50KB),
causing parse errors. The output() function now auto-detects large payloads
and writes to a tmpfile, returning @file:/path instead. All workflows that
consume init output handle both formats.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Only auto-fix issues directly caused by current task's changes
- Log pre-existing/unrelated issues to deferred-items.md instead of fixing
- Cap auto-fix attempts at 3 per task to prevent infinite build/fix loops
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Multi-milestone roadmaps use #### for phases nested under milestone
headers. Expanded all phase-matching regexes from #{2,3} to #{2,4}.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New projects seed config from ~/.gsd/defaults.json when available,
skipping the 8 setup questions. /gsd:settings offers to save current
settings as global defaults after configuration.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Phase insert failed when zero-padding differed between user input and
ROADMAP.md headers (e.g. "9.05" vs "09.05"). Normalize input and use
flexible regex matching with optional leading zeros.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Projects with "type": "module" in package.json cause Node to treat
gsd-tools.js as ESM, crashing on require(). The .cjs extension forces
CommonJS regardless of the host project's module configuration.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Allow overriding specific agent models without changing the entire profile.
Add model_overrides key to config that takes precedence over profile lookup.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Agents (executor, verifier, planner) were writing markdown files via
Bash heredocs. When approved, Claude Code persisted the entire heredoc
as a permission entry, breaking settings.local.json on next launch.
Added explicit "use Write tool" directives to all three agents and
added missing Write tool to gsd-verifier's tool list.
Closes#526Closes#491
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Typing /exec matched plan-phase instead of execute-phase because the
plan-phase description contained "execution plan".
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Three routing fixes:
- transition.md checks for CONTEXT.md before routing — discuss-phase when
missing, plan-phase when present (matches progress.md behavior)
- execute-phase.md offer_next delegates to transition.md instead of emitting
duplicate "Next Up" blocks
- discuss-phase.md adds explicit handling for "Other" free-text responses
Closes#530
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace NL instructions in execute-plan and execute-phase workflows with
deterministic `roadmap update-plan-progress` command that counts PLAN vs
SUMMARY files on disk. Prevents LLM from miscounting plan progress.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add opt-in mechanism to chain discuss → plan → execute automatically
via Task() subagents, eliminating manual /clear + paste overhead.
- Add `--auto` flag to discuss-phase and plan-phase commands
- Add `workflow.auto_advance` config toggle (default: false)
- Add auto_advance step to discuss-phase workflow (spawns plan-phase)
- Add step 14 to plan-phase workflow (spawns execute-phase)
- Add auto_advance toggle to /gsd:settings
Chain stops gracefully on INCONCLUSIVE, CHECKPOINT, or verification
failures. No work lost — artifacts persist at each step.
Closes#541
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The verifier was deriving verification truths from the vague one-line Goal
field, allowing partial implementations to pass. Now extracts Success Criteria
as a structured array from `roadmap get-phase` and uses them directly as truths,
with Goal derivation as fallback for older ROADMAPs without Success Criteria.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
cmdPhaseComplete now updates REQUIREMENTS.md when a phase finishes:
- Checks off requirement checkboxes (- [ ] → - [x])
- Updates traceability table status (Pending → Complete)
Parses Requirements line from ROADMAP.md phase section to find
which REQ-IDs belong to the completing phase.
Fixes#539
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add update_state step to record session info after context gathering,
matching the pattern used by execute-plan, add-todo, and other workflows.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Fix hardcoded headers exceeding the 12-character validation limit and
add max-length guidance for dynamically generated headers.
Closes#559
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Claude Code's "opus" alias maps to a specific model version (claude-opus-4-1).
Organizations that block older opus versions while allowing newer ones see
agents silently fall back to Sonnet. By returning "inherit" instead, agents
use whatever opus version the user has configured in their session.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add `close_parent_artifacts` step to execute-phase workflow that resolves
parent UAT gaps and debug sessions when a decimal/polish phase completes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
`init phase-op` only checked disk for phase directories, failing on
phases with Plans: TBD since no directory exists yet. Now falls back
to parsing ROADMAP.md when findPhaseInternal returns null.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>