bde2ca4b2f
* fix(merge): use git merge instead of file copy for diverged branches
Replace direct file copy with proper git merge for worktree branches that
have diverged from develop but have no actual conflicts. This preserves
changes from both branches instead of overwriting develop-side changes.
Key changes:
- Use `git merge --no-commit --no-ff` when branches diverged but no conflicts
- Add real-time merge progress tracking with UI overlay
- Emit structured JSON progress events from Python to Electron via stdout
- Add stall detection (30s) and progress visualization in frontend
The previous approach used direct file copy as a fallback when rebase failed
due to worktree lock, which would overwrite any develop-side changes. Now we
properly detect "diverged but no conflicts" scenarios and let git handle the
merge correctly.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat(merge): add conflict scenario detection for better UX messaging
Add intelligent detection of merge conflict scenarios to provide clearer
guidance when staging task changes:
- already_merged: Task changes identical to target branch - show "Mark as Done"
- superseded: Target has newer version - show "View Comparison" / "Discard"
- diverged: Both branches modified - standard AI merge flow
Backend: Add _detect_conflict_scenario() that compares file contents between
spec branch, base branch, and merge-base to classify the scenario.
Frontend: Add scenario-specific banners and action buttons that guide users
to the appropriate action instead of showing confusing "Branch Diverged" errors.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* auto-claude: subtask-1-1 - Add BILLING_FAILURE_PATTERNS regex array with patterns for credit/billing errors
Added comprehensive regex patterns to detect billing and credit failures:
- Credit balance patterns (insufficient, low, empty, exhausted)
- Billing error patterns (payment failed, subscription expired)
- Usage quota patterns (monthly limits, plan limits)
- API error patterns (billing_error, insufficient_credits, 402)
- Balance/funds patterns and add credits messages
* auto-claude: subtask-1-2 - Add BillingFailureDetectionResult interface parallel to AuthFailureDetectionResult
Add new TypeScript interface for billing failure detection that mirrors
the AuthFailureDetectionResult pattern with:
- isBillingFailure: boolean flag
- profileId: optional profile identifier
- failureType: specific billing failure types (insufficient_credits,
payment_required, subscription_inactive, unknown)
- message: user-friendly error message
- originalError: raw error from process output
* auto-claude: subtask-1-3 - Add classifyBillingFailureType() and getBillingFailureMessage() helpers
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* auto-claude: subtask-1-4 - Add detectBillingFailure() function to detect billing errors in output
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* auto-claude: subtask-2-1 - Add BillingFailureInfo interface to terminal.ts
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* auto-claude: subtask-3-1 - Add onBillingFailure callback to SubprocessOptions
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* auto-claude: subtask-3-2 - Add checkBillingFailure helper function in runPythonSubprocess
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* auto-claude: subtask-3-3 - Integrate checkBillingFailure into stdout/stderr handlers and close handler
- Added checkBillingFailure(line) call after checkAuthFailure(line) in stdout handler
- Added checkBillingFailure(line) call after checkAuthFailure(line) in stderr handler
- Added killedDueToBillingFailure check in close handler with proper error message
- Follows the exact same pattern as auth failure detection integration
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: billing detection patterns and add unit tests (qa-requested)
Fixes:
- Fix regex for "credit balance is too low" by adding optional (too\s+)? group
- Add extra_usage pattern to BILLING_FAILURE_PATTERNS for Claude API errors
- Fix 402 false positive by requiring HTTP/status/code/error context prefix
- Add 31 unit tests for detectBillingFailure, isBillingFailureError, and
classifyBillingFailureType covering spec appendix messages, negative cases,
false positive checks, and cross-detection tests
Verified:
- All 84 rate-limit-detector tests pass (53 existing + 31 new)
- TypeScript compilation succeeds with zero errors
- Full test suite passes (2599/2599 + 6 skipped)
QA Fix Session: 1
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: PR review feedback - async worktree listing and merge abort check
Issue 1 (HIGH): Convert synchronous git operations to async in
TASK_LIST_WORKTREES handler to prevent UI freezing:
- Use execFileAsync instead of execFileSync for git commands
- Use fsPromises.readdir/stat instead of readdirSync/statSync
- Process worktrees in parallel with Promise.all()
Issue 2 (MEDIUM): Add error check for git merge --abort:
- Check abort_result.returncode after merge --abort
- Log error and return None on failure to avoid inconsistent state
- Matches existing pattern from rebase --abort at line 870
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Revert popover removal and remove only the Claude.ai/code link
Partially reverts 8d18cc81a which removed the entire ClaudeCodeStatusBadge
popover. The intent was only to remove the "Learn more about Claude Code"
link that pointed to claude.ai/code.
Changes:
- Restore full popover functionality (version selector, installation
selector, update/rollback dialogs)
- Remove only the "Learn more about Claude Code" button that linked to
https://claude.ai/code
- Keep the Changelog link to GitHub
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: remove temporary debug file logging from PR review agents
Remove the _PRDebugLogger class and all file-based debug logging that was
writing to .auto-claude/github/pr/debug_logs/. This was temporary instrumentation
for measuring agent communication patterns.
Also adds circuit breaker protection (MAX_MESSAGE_COUNT=500) to prevent
runaway retry loops, and retry logic for the FindingValidator agent.
Changes:
- Remove _PRDebugLogger class (~220 lines)
- Remove all _dbg.* calls from process_sdk_stream
- Keep system_prompt/agent_definitions params for backwards compat (unused)
- Add circuit breaker to abort processing if msg_count > limit
- Add retry logic with MAX_VALIDATION_RETRIES=2 for FindingValidator
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat(pr-review): remove programmatic file scanning, fix SDK tool concurrency
Architecture Changes:
- Remove legacy programmatic file scanning from PRContextGatherer
- LLM agents now discover relevant files via their tools (Glob/Grep/Read)
- This removes the 2000 file scan limit and lets agents use judgment
SDK Tool Concurrency Fix:
- Add retry logic with MAX_RETRIES=3 for tool use 400 errors
- Add _is_tool_concurrency_error() detection in sdk_utils.py
- Add prompt guidance for sequential tool execution
- Upgrade claude-agent-sdk to >=0.1.25
Bug Fixes:
- Add in-progress review tracking to BotDetector (30min timeout)
- Fix missing dict keys in workspace_commands.py error path
- Fix stuck loading state in ClaudeCodeStatusBadge.tsx
i18n:
- Replace 11 hardcoded strings in WorkspaceStatus.tsx with translation keys
- Add 13 new translation keys to en/fr taskReview.json
Tests:
- Update TestReverseDepDetection to reflect new LLM-driven architecture
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>