Commit Graph

599 Commits

Author SHA1 Message Date
LakshmanTurlapati
caec78ed38 fix: harden workstream session routing fallback 2026-04-02 21:36:36 -05:00
LakshmanTurlapati
5ce8183928 fix: isolate active workstream state per session 2026-04-02 20:01:08 -05:00
Tom Boucher
2f7f317c24 Merge pull request #1551 from luanngosodadigital/feat/add-opencode-reviewer
feat: add OpenCode as a peer reviewer in /gsd:review
2026-04-02 20:08:20 -04:00
ngothanhluan
372c0356e5 fix: add empty output guard for OpenCode reviewer
Addresses review feedback — checks if opencode output file is
non-empty after invocation, writes a failure message if empty
to prevent blank sections in REVIEWS.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 06:56:50 +07:00
ngothanhluan
2ff3853eab fix: address review feedback for OpenCode reviewer integration
- Remove --copilot alias to avoid collision with existing Copilot concept
- Remove hardcoded model (-m) and variant flags; let user's OpenCode
  config determine the model, consistent with other reviewer CLIs
- Use generic "OpenCode Review" section header since model varies by config

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 06:36:16 +07:00
Tom Boucher
18fad939ef Merge pull request #1475 from Tibsfox/fix/subagent-timeout-config-1472
feat(config): add workflow.subagent_timeout to replace hardcoded 5-minute limit
2026-04-02 18:03:45 -04:00
Tom Boucher
e705736046 Merge pull request #1484 from NedMalki-Chief/feature/multi-project-workspace
feat: GSD_PROJECT env var for multi-project workspaces
2026-04-02 18:03:20 -04:00
Tom Boucher
a7d223fafa Merge pull request #1470 from Tibsfox/fix/base-branch-config-1466
fix(git): add git.base_branch config to replace hardcoded main target
2026-04-02 18:01:53 -04:00
Tom Boucher
f58a71ebce Merge pull request #1480 from Tibsfox/feat/autonomous-interactive-1413
feat(autonomous): add --interactive flag for lean context with user input
2026-04-02 17:58:16 -04:00
Tom Boucher
d1b36bf07e Merge pull request #1550 from Tibsfox/fix/commit-docs-hook-1395-v2
feat(hooks): add check-commit guard for commit_docs enforcement
2026-04-02 17:54:33 -04:00
Tom Boucher
8fec00a23c Merge pull request #1555 from tonylt/fix/execute-phase-task-description-missing
fix(execute-phase): add required description param to Task() calls
2026-04-02 17:53:50 -04:00
Tom Boucher
5f0bd0902c Merge pull request #1561 from Tibsfox/fix/concurrency-safety-1473a
fix(core): concurrency safety — withPlanningLock and atomic STATE.md
2026-04-02 17:50:38 -04:00
Tom Boucher
da8f00d72f Merge pull request #1562 from Tibsfox/feat/1m-context-enrichment-1473b
feat(workflows): adaptive context enrichment for 1M models
2026-04-02 17:50:07 -04:00
Tibsfox
d4859220e2 fix(core): add concurrency safety and atomic state writes
Wire withPlanningLock into all ROADMAP.md write paths (phase add/insert/complete/remove, roadmap update-plan-progress) to prevent concurrent corruption when parallel agents modify planning files.

Extract acquireStateLock/releaseStateLock from writeStateMd and add readModifyWriteStateMd helper that holds the lock across the entire read-modify-write cycle, preventing lost updates.

Replace O(n^2) normalizeMd fence detection with single-pass O(n) pre-computed fence state array.

Warn on must_haves parse failure and stateReplaceFieldWithFallback field miss.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 04:28:06 -07:00
Tibsfox
25891db0b2 fix(health): STATE/ROADMAP cross-validation and config checks
Add W011: detect when STATE.md says current phase is N but ROADMAP.md shows it as [x] complete (can happen after crash mid-phase-complete). Add W012-W015: validate branching_strategy against known values, context_window as positive integer, phase_branch_template has {phase} placeholder, milestone_branch_template has {milestone} placeholder.

Add stateReplaceFieldWithFallback diagnostic: warn when neither primary nor fallback field name matches in STATE.md (surfaces template drift from external edits).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 04:20:02 -07:00
Tibsfox
9d430f6637 feat(workflows): adaptive context enrichment for 1M models
Read context_window config (default 200000) in execute-phase and plan-phase workflows. When >= 500000 (1M-class models), subagent prompts include richer context: executor agents receive CONTEXT.md, RESEARCH.md, and prior wave SUMMARYs; verifier agents receive all PLANs, SUMMARYs, and REQUIREMENTS.md; planner receives prior phase CONTEXT.md for cross-phase decision consistency.

At 200k (default), behavior is unchanged.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 04:16:24 -07:00
Liutuo
c0c881f020 fix(execute-phase): add required description param to Task() calls
Both the gsd-executor and gsd-verifier Task() invocations were missing
the required `description` parameter, causing InputValidationError when
spawning agents in parallel during /gsd:execute-phase.
2026-04-02 10:25:14 +08:00
Ned Malki
523c7199d0 fix: add path traversal validation and unit tests for planningDir
Reject project/workstream names containing path separators or ..
components. Covers both GSD_PROJECT and GSD_WORKSTREAM. Adds 9 tests
for the full resolution matrix and traversal rejection cases.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 09:18:39 +07:00
ngothanhluan
73af4fa815 feat: add OpenCode as a peer reviewer in /gsd:review
Adds OpenCode CLI as a 5th reviewer option, enabling teams with GitHub
Copilot subscriptions to leverage Copilot-routed models (e.g.
gpt-5.3-codex) for cross-AI plan reviews.

Closes #1520

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 06:30:01 +07:00
Tibsfox
9d90c7b420 feat(hooks): add check-commit guard for commit_docs enforcement (#1395)
Add check-commit command to gsd-tools that acts as a pre-commit guard.
When commit_docs is false, rejects commits that stage .planning/ files
with an actionable error message including the unstage command.

Recreated cleanly on current main — previous version carried stale
shared fixes that are now upstream.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 16:11:00 -07:00
Tibsfox
2aca125308 feat(autonomous): add --interactive flag for lean context with user input
The autonomous workflow previously had two extremes: full auto-answer
mode (--auto discuss, lean context but no user input) or manager mode
(interactive but bloated context from accumulating everything inline).

The --interactive flag bridges this gap:
- Discuss runs inline via gsd:discuss-phase (asks questions, waits for
  user answers — preserving all design decisions)
- Plan and execute dispatch as background agents (fresh context per
  phase — no accumulation in the main session)
- Pipeline parallelism: discuss Phase N+1 while Phase N builds in the
  background

This keeps the main context lean (only discuss conversations accumulate)
while preserving user input on all decisions. Particularly helpful for
users hitting context limits with /gsd:manager on multi-phase milestones.

Usage:
  /gsd:autonomous --interactive
  /gsd:autonomous --interactive --from 3
  /gsd:autonomous --interactive --only 5

Also adds --only N flag parsing to the upstream workflow (previously only
in PR #1444's branch).

Closes #1413

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 14:58:52 -07:00
Tibsfox
14b68410cc feat(config): add workflow.subagent_timeout to replace hardcoded 5-minute limit
The map-codebase workflow had a hardcoded 300000ms (5 minute) timeout
for parallel subagent tasks. On large codebases or with slower models
(e.g. GPT via Codex), subagents can need 10-20+ minutes, causing the
parent to kill still-working agents and fall back to sequential mode.

Changes:
- Add workflow.subagent_timeout config key (default: 300000ms)
- Register in VALID_CONFIG_KEYS (config.cjs)
- Add to loadConfig() defaults and return object (core.cjs)
- Emit in map-codebase init context (init.cjs)
- Update map-codebase.md to use config value instead of hardcoded 300000
- Document in planning-config.md reference

Users can now increase the timeout via:
  /gsd:settings workflow.subagent_timeout 900000

Closes #1472

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 14:57:24 -07:00
Tibsfox
0fb992d151 fix(git): add git.base_branch config to replace hardcoded main target
Adds `git.base_branch` config option that controls the target branch
for PRs and merges. When unset, auto-detects from origin/HEAD and
falls back to "main".

This fixes projects using `master`, `develop`, or any other default
branch — previously `/gsd:ship` would create PRs targeting `main`
(which may not exist) and `/gsd:complete-milestone` would try to
checkout `main` and fail.

Changes:
- config.cjs: add git.base_branch to valid config keys
- planning-config.md: document the option with auto-detect behavior
- ship.md: detect base branch at init, use in PR create, branch
  detection, push report, and completion report
- complete-milestone.md: detect base branch, use for squash merge
  and merge-with-history checkout targets
- 1 new test for config-set git.base_branch

Usage:
  gsd-tools config-set git.base_branch master

Or auto-detect (default — reads origin/HEAD):
  git.base_branch: null

Closes #1466

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 14:56:55 -07:00
Tom Boucher
fd2e844e9c Merge pull request #1544 from Tibsfox/fix/autonomous-phase-count-display-1516
fix(autonomous): clarify phase count display to prevent misleading N/T banner
2026-04-01 17:43:53 -04:00
Tom Boucher
d7aa47431f Merge pull request #1543 from Tibsfox/fix/workstream-set-requires-name-1527
fix(workstream): require name arg for set, add --clear flag
2026-04-01 17:43:15 -04:00
Tom Boucher
ada7d35cda Merge pull request #1525 from jhonymiler/feat/skills-discovery-claude-md
feat: add project skills discovery section to CLAUDE.md generation
2026-04-01 17:37:03 -04:00
Tibsfox
66e3cf87fe fix(autonomous): clarify phase count display to prevent misleading N/T (#1516)
When phase numbers are globally sequential across milestones (e.g.,
phases 61-67), the banner showed "Phase 63/5" where 5 was the count of
remaining phases — easily mistaken for "63 out of 5 total." Clarify
that T must be total milestone phases and add fallback display format
for when phase numbers exceed the total count.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 14:35:57 -07:00
Tibsfox
89f82d5483 fix(workstream): require name arg for set, add --clear flag (#1527)
workstream set with no argument silently cleared the active workstream,
a footgun for users who forgot the name. Now requires a name arg and
errors with usage hint. Explicit clearing via --clear flag, which also
reports the previous workstream in its output.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 14:35:00 -07:00
Tom Boucher
b12f3ce551 Merge pull request #1519 from alexpalyan/feat/add-coderabbit-reviewer
feat: Integrate CodeRabbit into review workflow
2026-04-01 17:34:49 -04:00
Tom Boucher
35b835b861 Merge pull request #1508 from Ecko95/fix/infinite-self-discuss-loop
fix: prevent infinite self-discuss loop in auto/headless mode
2026-04-01 17:34:15 -04:00
Tom Boucher
bf838c0d92 Merge pull request #1505 from Tibsfox/fix/quick-plan-uncommitted-1503
fix(quick): enforce commit boundary between executor and orchestrator
2026-04-01 17:32:05 -04:00
Tom Boucher
591d5358ac Merge pull request #1502 from Tibsfox/fix/worktree-cleanup-1496
fix(worktree): add post-execution cleanup for orphan worktrees
2026-04-01 17:31:47 -04:00
Tom Boucher
7b221a88b0 Merge pull request #1492 from grgbrasil/fix/scope-reduction-detection
feat: detect and prevent silent scope reduction in planner
2026-04-01 17:31:19 -04:00
Tom Boucher
4afc5969ef Merge pull request #1477 from Tibsfox/fix/stats-verification-status-1459
fix(stats): require verification for Complete status, add Executed state
2026-04-01 17:26:49 -04:00
Tom Boucher
2f16cb8631 Merge pull request #1456 from Tibsfox/fix/worktree-disable-config-1451
feat(config): add workflow.use_worktrees toggle to disable worktree isolation
2026-04-01 17:24:57 -04:00
Tom Boucher
be2f99ec85 Merge pull request #1455 from gsd-build/fix/manager-skill-pipeline-1453
fix: manager workflow delegates to Skill pipeline instead of raw Task prompts
2026-04-01 17:24:26 -04:00
Tom Boucher
5eed6973b8 Merge pull request #1447 from rahuljordashe/fix/phase-complete-roadmap-rollup
fix: cmdPhaseComplete updates Plans column and plan checkboxes
2026-04-01 17:20:14 -04:00
Tom Boucher
ce5fbc5d73 Merge pull request #1445 from Tibsfox/feat/discuss-phase-chain-1327
feat(discuss): add --chain flag for interactive discuss with auto plan+execute
2026-04-01 17:17:17 -04:00
Tom Boucher
dbb3239675 Merge pull request #1444 from Tibsfox/feat/autonomous-only-flag-1383
feat(autonomous): add --only N flag for single-phase parallel execution
2026-04-01 17:16:56 -04:00
Tom Boucher
1d97a03a36 Merge pull request #1442 from Tibsfox/fix/complete-phase-reference-1441
fix(next): remove reference to non-existent /gsd:complete-phase
2026-04-01 17:16:13 -04:00
Tom Boucher
1cf97fd9cb Merge pull request #1386 from gsd-build/fix/schema-drift-detection-1381
feat: schema drift detection prevents false-positive verification
2026-04-01 17:15:43 -04:00
Tom Boucher
dbc54b8386 Merge pull request #1439 from Tibsfox/fix/todo-done-vs-completed-1438
fix(todos): rename todos/done to todos/completed in workflows and docs
2026-04-01 17:12:47 -04:00
Tom Boucher
02c41940c7 Merge pull request #1432 from j2h4u/fix/verifier-human-needed-status
fix(verifier): enforce human_needed status when human verification items exist
2026-04-01 17:11:06 -04:00
Tom Boucher
53c7c1c993 Merge pull request #1518 from ElliotDrel/feat/full-flag-refactor
feat(quick): make --full include all phases, add --validate flag
2026-04-01 16:59:52 -04:00
Tibsfox
5e88db9577 feat(discuss): add --chain flag for interactive discuss with auto plan+execute
Adds --chain flag to /gsd:discuss-phase that provides the middle ground
between fully manual and fully automatic workflows:

  /gsd:discuss-phase 5 --chain

  - Discussion is fully interactive (user answers questions)
  - After context is captured, auto-advances to plan → execute
  - Same pipeline as --auto, but without auto-answering

This addresses the community request for per-phase automation where
users want to control discuss decisions but skip manual advancement
between plan and execute steps.

Workflow: discuss (interactive) → plan (auto) → execute (auto)

Changes:
- Workflow: --chain flag triggers auto_advance without auto-answering
- Workflow: chain flag synced alongside --auto in ephemeral config
- Workflow: next-phase suggestion preserves --chain vs --auto
- Command: argument-hint and description updated
- Success criteria updated

Closes #1327

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 13:56:20 -07:00
Tom Boucher
7f11543691 feat: add schema drift detection to prevent false-positive verification
GSD agents silently skip database schema push — verification passes but
production breaks because TypeScript types come from config, not the live
database. This adds two layers of protection:

1. Plan-phase template detection (step 5.7): When the planner detects
   schema-relevant file patterns in the phase scope, it injects a mandatory
   [BLOCKING] schema push task into the plan with the appropriate push
   command for the detected ORM.

2. Post-execution drift detection gate: After execution completes but
   before verification marks success, scans for schema-relevant file
   changes and checks if a push command was executed. Blocks verification
   with actionable guidance if drift is detected.

Supports Payload CMS, Prisma, Drizzle, Supabase, and TypeORM.
Override with GSD_SKIP_SCHEMA_CHECK=true.

Fixes #1381

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 16:53:20 -04:00
Tom Boucher
8502c11d97 Merge pull request #1501 from Tibsfox/fix/discuss-incremental-saves-1485
fix(discuss): incremental checkpoint saves to prevent answer loss on interrupt
2026-04-01 12:17:54 -04:00
Tom Boucher
4add6d2f42 Merge pull request #1408 from Tibsfox/fix/decimal-phase-regex-1402
fix(branching): capture decimal phase numbers in commit regex
2026-04-01 12:15:16 -04:00
Tom Boucher
d70ca3ee95 Merge pull request #1397 from bshiggins/feat/project-code-prefix
feat: add project_code config for phase directory prefixing
2026-04-01 12:14:48 -04:00
Tom Boucher
1dc0d90c6e Merge pull request #1394 from Tibsfox/fix/issue-triage-batch-1392-1391-1389
fix: trailing slash, slug newlines, and duplicate command registration
2026-04-01 12:12:37 -04:00