During a rebase with detached HEAD, the branch name can be empty or
resolve to empty after stripping refs/heads/. This caused gh to return
arbitrary PRs and created invalid cache keys like "path::".
Guard all branch-to-cache-key paths: getPRForBranch bails before
acquiring the semaphore, renderer components skip cache lookups,
and syncPRChecksStatus validates the normalized branch.
gh pr view only matches the current checkout, which fails for worktrees
on different branches. Switch to gh pr list --repo --head to query by
branch name directly, with a fallback to gh pr view for non-GitHub
remotes. Also fix the ChecksPanel refresh button to use the proper
handleRefresh flow and force-refresh the PR cache.
- Use gh api --cache for issues, issue lists, and PR checks endpoints so 304 Not Modified responses don't count against the rate limit
- Pass branch to getPRChecks to enable the check-runs REST endpoint with caching
- Extract mapping functions into separate mappers.ts to keep client.ts within 300-line limit
- Extract mapIssueInfo() helper to deduplicate issue mapping logic
- Remove dead re-exports from client.ts
- Fix reference instability in ChecksPanel poll dependency array
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Add comprehensive tests for worktree parsing, GitHub check status derivation,
hooks YAML parsing, persistence store, layout serialization, store cascades,
and terminal helpers. Extract pure functions from worktrees.ts into
worktree-logic.ts for better testability.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix: extract path-security helpers and refactor IPC modules
- Extracted path-security helpers from filesystem.ts into filesystem-auth.ts to fix max-lines lint error (402 -> 293 lines)
- Extracted duplicated ENOENT detection into isENOENT() helper to eliminate code duplication
- Fixed missing curly braces on single-line if-return in isDescendantOrEqual (lint violation)
- Replaced any with unknown in test files to satisfy lint rules
- All tests passing (29/29)
- Lint clean (0 errors, 0 warnings)
* fix: bundle preload deps for sandbox mode and fix editor test types
The sandbox: true change in createMainWindow broke the app because
electron-vite was externalizing @electron-toolkit/preload, producing
a require() call that fails in sandboxed preload scripts. Exclude it
from externalization so it gets bundled inline.
Also fix type errors in editor.test.ts from the partial store setup.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>