Commit graph

2092 commits

Author SHA1 Message Date
mastertyko
4cde9e8eae fix(gsd): stop stale forensics context hijacks 2026-04-09 20:19:53 +02:00
Jeremy
9b20b28a25 fix(claude-code-cli): suppress streamed internal tool noise 2026-04-09 09:51:28 -05:00
Jeremy McSpadden
f18d8e9f30 Merge pull request #3864 from mastertyko/fix/3839-snapshot-stage-untracked-files
fix(gsd): snapshot new untracked files before dispatch
2026-04-09 09:23:51 -05:00
Jeremy McSpadden
72b7b6be7f Merge pull request #3867 from jeremymcs/fix/claude-code-cli-noise
fix: suppress Claude Code internal tool noise in TUI
2026-04-09 09:09:44 -05:00
Jeremy McSpadden
dde62ebc75 Merge pull request #3865 from mastertyko/fix/3786-provider-manager-non-oauth-auth
fix(pi-coding-agent): avoid OAuth login for API-key providers
2026-04-09 08:46:34 -05:00
Jeremy
b4a0392464 fix(claude-code-cli): suppress internal tool call noise 2026-04-09 08:27:23 -05:00
Jeremy McSpadden
76d3925ea7 Merge pull request #3863 from mastertyko/fix/3848-pi-ai-event-stream-factory
fix(pi-ai): restore event stream factory export
2026-04-09 08:09:03 -05:00
mastertyko
c671e3912f fix(pi-coding-agent): avoid oauth login for api-key providers 2026-04-09 15:08:33 +02:00
Jeremy McSpadden
b75c81074d Merge pull request #3858 from jeremymcs/fix/audit-remediations
fix: harden command execution and remediate audit findings
2026-04-09 08:02:08 -05:00
mastertyko
9a8ae40b25 fix(gsd): snapshot new untracked files before dispatch 2026-04-09 14:58:06 +02:00
Jeremy
82944a845d fix(platform): harden command execution and stabilize onboarding sync 2026-04-09 06:39:19 -05:00
mastertyko
ebf5ca398a fix(pi-ai): restore event stream factory export 2026-04-09 13:03:27 +02:00
Jeremy McSpadden
7135573324 Merge pull request #3854 from jeremymcs/fix/gsd-codebase-cache
[codex] fix(gsd): auto-refresh codebase cache
2026-04-09 06:02:42 -05:00
Jeremy
a8000489b3 fix(gsd): use valid codebase refresh logger 2026-04-09 05:50:43 -05:00
Jeremy
655f10de4b fix(gsd): auto-refresh codebase cache 2026-04-09 05:46:55 -05:00
Jeremy
172c4d3110 fix(gsd): align model switching and prefs surfaces 2026-04-09 05:33:13 -05:00
Jeremy
dcc85c6d0a fix: route slice and validation artifacts through DB tools 2026-04-09 05:16:58 -05:00
Jeremy
b5937734ca fix: make gsd_complete_task the only execute-task summary path 2026-04-09 05:12:16 -05:00
Jeremy
b02b1b1a81 fix(test): align auto-loop test timers with updated session timeout
NEW_SESSION_TIMEOUT_MS was increased from 30s to 120s in #3819, but the
session-switch guard test still ticked only 30s. The test hung, leaked
mock.timers state, and caused 7 downstream tests to hang — timing out
the entire CI build job.
2026-04-09 00:28:45 -05:00
Jeremy McSpadden
d8574e5669 Merge pull request #3737 from mastertyko/fix/3736-safety-expected-output-paths
fix(gsd): normalize described expected output paths
2026-04-08 22:18:56 -05:00
Jeremy McSpadden
535d3a29da Merge pull request #3775 from mastertyko/fix/3770-claude-code-windows-lookup
fix(claude-code): use native Windows claude lookup
2026-04-08 21:53:42 -05:00
Jeremy McSpadden
af15d62c28 Merge pull request #3795 from mastertyko/fix/3751-repair-tool-json-nested-xml
fix(pi-ai): recover XML parameters trapped in valid JSON strings
2026-04-08 21:40:47 -05:00
Jeremy McSpadden
04d4ea1774 Merge pull request #3799 from mastertyko/fix/3778-parseplan-filename-task-ids
fix(gsd): ignore filename headings in parsePlan
2026-04-08 21:13:22 -05:00
Jeremy McSpadden
3e32c02851 Merge pull request #3819 from jeremymcs/fix/auto-session-timeout-3767
fix(auto): increase session timeout to 120s and treat timeout as recoverable pause
2026-04-08 20:50:40 -05:00
Jeremy McSpadden
25dadc2026 Merge pull request #3832 from jeremymcs/fix/orchestration-safety-hardening
fix: harden auto merge recovery and session safety
2026-04-08 20:50:01 -05:00
Jeremy
93fc6fac8a test(gsd): align complete-state milestone assertion 2026-04-08 20:38:15 -05:00
Jeremy McSpadden
2bfd6b5cc6 Merge pull request #3834 from jeremymcs/fix/overlay-widget-surface-fixes
fix: repair overlay, shortcut, and widget surfaces
2026-04-08 20:38:02 -05:00
Jeremy McSpadden
1a6b655228 Merge pull request #3837 from jeremymcs/fix/prompt-contract-validation-flow
fix: align prompt contracts and validation flow
2026-04-08 20:36:34 -05:00
Jeremy McSpadden
5c31b5f6d7 Merge pull request #3835 from jeremymcs/fix/gate-enforcement-hardening
fix: fail closed for discussion gate enforcement
2026-04-08 20:36:00 -05:00
Jeremy
b4d06255dd fix(gsd): repair CI after branch split 2026-04-08 20:23:16 -05:00
Jeremy
1d774ca6d8 fix(gsd): repair CI after branch split 2026-04-08 20:22:34 -05:00
Jeremy
eddbfd6a1b fix(gsd): repair CI after branch split 2026-04-08 20:22:33 -05:00
Jeremy
56fbd4d87d fix(gsd): fail closed for discussion gate enforcement 2026-04-08 20:15:21 -05:00
Jeremy
e8c6b5019b fix(gsd): harden auto merge recovery and session safety 2026-04-08 20:15:20 -05:00
Jeremy
ec1bc349aa fix(gsd): repair overlay, shortcut, and widget surfaces 2026-04-08 20:15:20 -05:00
Jeremy
bb4d708b80 fix(gsd): prevent stale workflow reconcile state writes 2026-04-08 20:13:36 -05:00
Jeremy
722dfc96cb fix(gsd): align prompt contracts and validation flow 2026-04-08 20:13:35 -05:00
Jeremy
74fb4913b1 fix(remote-questions): cancel local TUI when remote answer wins the race
showInterviewRound now accepts an AbortSignal via opts.signal. When the
remote channel wins the race, controller.abort() closes the local TUI
modal instead of leaving an orphaned interactive prompt capturing input.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 19:08:33 -05:00
Jeremy
b619373f0d fix(auto): increase session timeout to 120s and treat timeout as recoverable pause (#3767)
NEW_SESSION_TIMEOUT_MS was 30s which fired before agent_end on slow-starting
tasks, causing spurious stopAuto hard stops. Increased to 120s and added a
dedicated timeout branch in runUnitPhase that calls pauseAuto (recoverable)
instead of stopAuto (destructive teardown).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 18:17:26 -05:00
Jeremy
55cde8549a fix(ui): display 'anthropic-api' in GSD preferences wizard provider list
Applies the same provider display name mapping to the /gsd prefs model
picker so both /model and /gsd prefs show 'anthropic-api' consistently.
2026-04-08 17:36:33 -05:00
Jeremy McSpadden
75a3795e9a Merge pull request #3811 from jeremymcs/worktree-fix+race-remote-local-questions
fix(remote-questions): race local TUI against remote channel
2026-04-08 16:46:22 -05:00
Jeremy
c1a68a48a9 test(remote-questions): add regression tests for race model (#3810)
Validates the race routing logic: raceRemoteAndLocal helper exists,
routing checks both hasRemote and ctx.hasUI, remote timeouts are
treated as non-wins, AbortController cancels the loser, and
isRemoteConfigured is exported from manager.ts.
2026-04-08 16:20:13 -05:00
Jeremy
dadb0b136e fix(remote-questions): race local TUI against remote channel instead of remote-only routing
When a remote channel (Discord/Slack/Telegram) is configured, ask_user_questions
now races the local TUI against the remote dispatch. The first response wins and
the loser is cancelled. Previously, remote completely preempted the local TUI,
meaning terminal users never saw the question prompt when remote was configured.

Closes #3801
2026-04-08 15:58:06 -05:00
Jeremy McSpadden
ecfd4fbc90 Merge pull request #3802 from jeremymcs/fix/harden-prompt-gates
fix(prompts): harden non-bypassable gates and exclude dot-folders from scanning
2026-04-08 14:19:07 -05:00
Jeremy
d84778336c fix(gates): add mechanical enforcement for discussion question gates
When ask_user_questions fails, errors, or is cancelled during a
discussion flow, the model is now mechanically blocked from all
non-read-only tool calls until it re-asks and gets a valid response.

Previously, gate enforcement was prompt-only — the model could
rationalize past failed ask_user_questions calls ("auth issue, I'll
continue") and generate an entire plan without any user interaction.

The pending gate mechanism:
- tool_call hook: any ask_user_questions during discussion sets pending
- tool_result hook: valid user response clears pending; failure keeps it
- tool_call hook: blocks write/edit/gsd/mutating-bash while pending
- read-only tools and ask_user_questions itself always allowed
2026-04-08 14:00:16 -05:00
Jeremy
2c1e4b695e test(scanning): add regression tests for dot-folder exclusions
- codebase-generator: verify .claude/, .plans/, .cursor/, .vscode/ excluded
- detection: verify scanProjectFiles skips .claude, .gsd, .planning, .plans, .cursor, .vscode
2026-04-08 13:08:12 -05:00
Jeremy
757ce56594 fix(prompts): harden non-bypassable gates and exclude dot-folders from scanning
Regression: discuss-prepared.md was created without the non-bypassable gate
language from discuss.md, allowing the LLM to fabricate excuses ("auth issues")
and bypass user approval gates. Also, codebase scanning included .claude/ and
other tool directories, tainting project analysis with LLM metadata.

Gate hardening (9 prompts):
- discuss-prepared.md: all 4 layer gates + requirements/roadmap preview
- discuss.md: requirements, roadmap preview, Phase 3 multi-milestone gate
- guided-discuss-slice.md: added missing write-gate before CONTEXT.md write
- guided-discuss-milestone.md: plain-text fallback path now matches structured
- worktree-merge.md: merge confirmation gate
- system.md: outward-facing actions gate
- rethink.md: skip-slice gate added, discard confirmation hardened
- complete-milestone.md: tool-failure handling for verification gate
- triage-captures.md: quick-task/inject/replan confirmation gate

Dot-folder exclusions (2 files):
- codebase-generator.ts: added .claude/, .plans/, .cursor/, .vscode/
- detection.ts: added .gsd, .planning, .plans, .claude, .cursor, .vscode
2026-04-08 12:58:13 -05:00
mastertyko
afa0f9e463 fix(gsd): ignore filename headings in parsePlan 2026-04-08 19:19:32 +02:00
Jeremy
d98456cad7 test(pi-tui): add regression tests for slash command TUI interactions
Add 3 new tests covering editor↔selector/input component swaps that
happen during /gsd prefs, /gsd migrate, and /gsd setup:

- editor-to-selector swap: verifies cursor tracking when editor with
  CURSOR_MARKER is replaced by a selector without one
- selector-to-editor swap: verifies cursor restores to CURSOR_MARKER
  position when editor returns after selector dismissal
- input component swap: verifies typing in prefs wizard text input
  produces correct cursor movement without jumps

All tests confirm hardwareCursorRow baseline computes correct movement
deltas for these interactive component transitions.
2026-04-08 12:09:21 -05:00
Jeremy
c07ecc1028 fix(providers): match 'out of extra usage' error and respect claude-code provider in model resolution (#3772)
Two bugs prevented subscription users from routing through Claude Code CLI:
1. Retry handler regex only matched "third-party" errors but actual error is
   "You're out of extra usage" — fallback never triggered
2. auto-model-selection actively rerouted bare model IDs back to anthropic
   even after startup migration set claude-code as the session provider
2026-04-08 10:47:35 -05:00