Commit graph

2034 commits

Author SHA1 Message Date
mastertyko
2a1bd3a265 fix(gsd): detach auto start from active turns 2026-04-12 13:28:49 +02:00
Jeremy
d5e4938320 Merge remote-tracking branch 'upstream/main' into fix/4018-anti-fabrication-guardrails
# Conflicts:
#	src/resources/extensions/gsd/prompts/discuss-prepared.md
2026-04-12 00:07:30 -05:00
Jeremy
5aa1fe0c0c fix(gsd): enforce anti-fabrication turn-taking in discuss prompts 2026-04-12 00:04:08 -05:00
Jeremy McSpadden
e7dc2d4bd2 Merge pull request #3655 from Tibsfox/fix/connection-error-transient
fix(gsd): classify plain 'Connection error.' as transient for auto-mode retry
2026-04-11 23:22:05 -05:00
Jeremy McSpadden
b797380786 Merge pull request #3025 from jeremymcs/worktree-fix-3023-home-dir-error
fix(commands): friendly message when /gsd runs from $HOME
2026-04-11 23:19:51 -05:00
Jeremy McSpadden
12ed853dc3 Merge pull request #3735 from mastertyko/fix/3720-dispatch-guard-reverse-dependency-fallback-fresh
fix(gsd): skip reverse dependents in dispatch fallback
2026-04-11 22:57:10 -05:00
Jeremy McSpadden
0935720161 Merge pull request #3986 from mastertyko/fix/3913-complete-slice-flat-summary-layout
fix(gsd): document flat task summary layout
2026-04-11 22:55:18 -05:00
Jeremy McSpadden
30129a1a49 Merge pull request #3985 from mastertyko/fix/3895-validate-milestone-verification-classes
fix(gsd): require verification classes in validation prompts
2026-04-11 22:54:05 -05:00
Jeremy McSpadden
f76c282bad Merge pull request #3982 from mastertyko/fix/3965-pre-exec-existing-file-ordering
fix(gsd): ignore pre-existing files in task ordering
2026-04-11 22:53:07 -05:00
Jeremy McSpadden
80416f0859 Merge pull request #3991 from mastertyko/fix/3910-plan-slice-prose-inputs
fix(gsd): ignore prose inputs in pre-exec checks
2026-04-11 22:52:34 -05:00
Jeremy McSpadden
083fc8e03d Merge pull request #3988 from mastertyko/fix/3717-read-existing-artifacts-before-write
fix(gsd): read existing artifacts before write
2026-04-11 22:50:53 -05:00
Jeremy McSpadden
7161424152 Merge pull request #3994 from mastertyko/fix/3822-auto-start-project-db-path
fix(gsd): keep project db path after worktree enter
2026-04-11 22:47:55 -05:00
Jeremy McSpadden
904cc4a3cd Merge pull request #3930 from mastertyko/fix/3924-tool-invocation-json-variant
fix(gsd): detect property-value JSON invocation errors
2026-04-11 22:35:07 -05:00
Jeremy McSpadden
8cd176649c Merge pull request #3877 from mastertyko/fix/3844-ensure-db-open-bootstrap
fix(gsd): open DB before bootstrap deriveState
2026-04-11 22:34:15 -05:00
Jeremy McSpadden
2858eb70f7 Merge pull request #3883 from mastertyko/fix/3762-notification-dedup-fallback
fix(gsd): dedupe repeated notifications
2026-04-11 22:25:58 -05:00
Jeremy McSpadden
de065094ea Merge pull request #4006 from jeremymcs/fix/workflow-events-toctou
fix: TOCTOU file locking race conditions in event log and custom workflow graph
2026-04-11 16:27:37 -05:00
Jeremy
01b4177041 test(gsd): add file-lock TOCTOU fallback coverage 2026-04-11 16:15:51 -05:00
Jeremy McSpadden
31e88c99d2 Merge pull request #4007 from jeremymcs/refactor/state-derive-god-function
refactor: extract deriveStateFromDb logic into composable helpers
2026-04-11 16:11:45 -05:00
Jeremy
647056aa7d test(state): add tests for extracted deriveStateFromDb helpers
Cover the composable helpers extracted from deriveStateFromDb:
reconcileDiskToDb, buildCompletenessSet, buildRegistryAndFindActive,
handleNoActiveMilestone, resolveSliceDependencies, reconcileSliceTasks,
detectBlockers, checkReplanTrigger, checkInterruptedWork, and queue
order sorting.
2026-04-11 16:00:28 -05:00
Jeremy
c63220ab72 refactor: extract deriveStateFromDb logic into composable helpers
Extracts the monolithic deriveStateFromDb function into distinct,
composable helper functions (reconcileDiskToDb, resolveSliceDependencies,
detectBlockers, etc.) inside state.ts.

Resolves technical debt identified during the code quality audit by
drastically reducing cyclomatic complexity while preserving the exact
type signature and logical behavior.

Also removes duplicate disk->DB reconciliation that could overwrite
milestone statuses.
2026-04-11 15:19:48 -05:00
Jeremy
68b638a588 fix: TOCTOU file locking race conditions in event log and custom workflow graph
Implements file-level advisory locking via proper-lockfile to ensure
atomic read-modify-write sequences in:
- compactMilestoneEvents (event-log.jsonl)
- custom-workflow-engine reconcile (GRAPH.yaml)

Fixes silent data loss when concurrent auto-mode or dashboard
sessions overlap in these operations.
2026-04-11 14:49:19 -05:00
Jeremy
bf4bcfadde fix(claude-code): harden MCP elicitation schema handling 2026-04-11 13:26:24 -05:00
Jeremy
1495e711e1 fix(claude-code): accept secure_env_collect MCP elicitation forms 2026-04-11 13:18:27 -05:00
Jeremy
74fee9ed48 fix(interactive): keep MCP tool output ordered and restore secure prompt fallback 2026-04-11 12:47:41 -05:00
mastertyko
c35b3d219b fix(gsd): keep project db path after worktree enter 2026-04-11 18:29:57 +02:00
mastertyko
3f407b0ec4 fix(gsd): ignore prose inputs in pre-exec checks 2026-04-11 18:25:32 +02:00
mastertyko
12be0eab7a fix(gsd): read existing artifacts before write 2026-04-11 18:10:09 +02:00
mastertyko
c15b34faca fix(gsd): document flat task summary layout 2026-04-11 17:52:56 +02:00
mastertyko
fa69156677 fix(gsd): require verification classes in validation prompts 2026-04-11 17:49:59 +02:00
Jeremy McSpadden
23f1e72868 Merge pull request #3975 from jeremymcs/fix/windows-portability-sweep
fix(gsd): harden Claude Code workflow MCP bootstrap and guidance
2026-04-11 10:49:23 -05:00
Jeremy
9e5203fdf8 fix(gsd): resolve workflow MCP test typing regressions 2026-04-11 10:34:51 -05:00
Jeremy McSpadden
902c020590 Merge pull request #3979 from jeremymcs/fix/mcp-tool-iserror-flag
fix(mcp): return isError flag on workflow tool execution failures
2026-04-11 10:31:58 -05:00
mastertyko
cfd4d1d13a fix(gsd): ignore pre-existing files in task ordering 2026-04-11 17:30:22 +02:00
Jeremy
818bf97c36 test(gsd): add regression for plan_slice isError failures 2026-04-11 10:18:20 -05:00
Jeremy
d572e372a1 fix(mcp): return isError flag on workflow tool execution failures
This fixes an issue where MCP workflow tools (e.g. gsd_plan_slice) would return error details in their JSON response, but without setting the 'isError: true' flag at the top level of the tool response payload. This caused MCP clients (like Claude Code) to interpret failed validations (like empty tasks arrays) as successes and get stuck in infinite validation failure loops.
2026-04-11 09:51:03 -05:00
Jeremy
d853992cb7 fix(discuss): add structuredQuestionsAvailable conditional to all gates
The depth verification gate and multi-milestone readiness gate
unconditionally referenced ask_user_questions. On transports where
structuredQuestionsAvailable is false, this would trap the flow in
re-ask loops.

Add {{structuredQuestionsAvailable}} conditionals to:
- Depth verification (true: ask_user_questions, false: plain text)
- Multi-milestone Phase 3 readiness gate
- Per-milestone technical assumption verification
2026-04-11 09:44:08 -05:00
Jeremy
6f27e514ca fix(discuss): add multi-round questioning to new-project discuss phase
The discuss.md prompt (used for /gsd new project creation) only asked
"What's the vision?" once and relied on LLM judgment for follow-ups.
This led to the agent asking a single question then jumping straight
to planning without gathering enough context.

Add explicit Question Rounds section with:
- 1-3 questions per round structure
- Conditional ask_user_questions vs plain text support
- Incremental persistence (CONTEXT-DRAFT save every 2 rounds)
- Depth-matching rule (1-2 rounds for simple, 4+ for large visions)
- Round cadence that drives toward the depth enforcement checklist

Thread structuredQuestionsAvailable through buildDiscussPrompt() and
prepareAndBuildDiscussPrompt() so the template variable resolves
correctly at runtime.

Closes #3976
2026-04-11 09:32:20 -05:00
Jeremy
4301a72522 fix(gsd): harden claude-code workflow MCP bootstrap
Ensure startup/session/init paths auto-prepare workflow MCP for Claude Code.

Disable native AskUserQuestion in Claude Code SDK options to avoid broken host prompts.

Add explicit /gsd mcp init . guidance when workflow MCP is missing.

Refs #3964
2026-04-11 08:35:19 -05:00
Jeremy McSpadden
1e6919d92b Merge pull request #3963 from jeremymcs/fix/3962-model-routing-transparency
fix(routing): skip dynamic routing for interactive dispatches (#3962)
2026-04-10 22:54:10 -05:00
Jeremy
66710f2b28 fix(routing): address codex review — complete interactive bypass and accurate banner
resolvePreferredModelConfig now skips routing-ceiling synthesis when
isAutoMode=false, preventing interactive dispatches from silently switching
to the tier_models.heavy model. The auto-start banner now reflects
effective routing state by checking flat-rate provider suppression and
using the actual ceiling from tier_models.heavy when configured.
2026-04-10 22:18:42 -05:00
Jeremy McSpadden
19cbb17683 Merge pull request #3961 from jeremymcs/fix/windows-portability-sweep
fix: harden Windows portability across runtime and tooling
2026-04-10 21:53:10 -05:00
Jeremy
839cd8d55b fix(routing): skip dynamic routing for interactive dispatches, always show model changes (#3962)
Dynamic routing silently downgraded models in interactive commands (guided-flow),
overriding the user's /model selection. Now routing only applies in auto-mode where
cost optimization is expected. Model downgrade notifications always fire regardless
of verbose setting, and auto-mode shows routing status upfront on start.
2026-04-10 21:51:18 -05:00
Jeremy
61204ce771 fix(windows): harden portability across runtime and tooling 2026-04-10 20:33:18 -05:00
Jeremy McSpadden
8fcaee6d5a Merge pull request #3885 from mastertyko/fix/3856-doctor-scope-db-unavailable
fix(gsd): surface scoped doctor health warnings
2026-04-10 20:31:47 -05:00
Jeremy McSpadden
b5ffff50ee Merge pull request #3886 from mastertyko/fix/3806-update-registry-version-fallback
fix(update): fetch latest version from registry
2026-04-10 20:31:06 -05:00
Jeremy McSpadden
854ab38498 Merge pull request #3894 from mastertyko/fix/3892-double-backtick-preexec
fix(gsd): handle doubled-backtick pre-exec paths
2026-04-10 20:29:46 -05:00
Jeremy McSpadden
999c2fc576 Merge pull request #3931 from mastertyko/fix/3912-skip-skipped-summaries
fix(gsd): skip skipped slices in milestone prompts
2026-04-10 20:29:27 -05:00
Jeremy
e26c5cff56 fix(auto): use pathToFileURL for cross-platform import and reconcile regression test
Convert resource-loader import path to file URL via pathToFileURL() to
fix Windows ERR_UNSUPPORTED_ESM_URL_SCHEME. Update existing regression
test to validate the GSD_PKG_ROOT + pathToFileURL contract.
2026-04-10 20:05:32 -05:00
Jeremy
7b2601e6a0 fix(auto): resolve resource-loader.js from GSD_PKG_ROOT on resume (#3949)
Auto-mode resume crashed with "Cannot find module" because the relative
import ../../../resource-loader.js only works from the source tree, not
from the deployed path at ~/.gsd/agent/extensions/gsd/auto.js.

Expose GSD_PKG_ROOT from loader.ts and use it in auto.ts to construct
an absolute path to dist/resource-loader.js that works in both contexts.
2026-04-10 20:00:46 -05:00
Jeremy
d64056f833 fix claude code mcp elicitation bridge 2026-04-10 19:24:51 -05:00