The ripgrep command used --hidden with positive re-inclusion globs
('.github', '.github/**') to keep .github files visible. However,
positive globs in ripgrep act as a whitelist — once present, only files
matching those positive patterns are returned, which excluded every
non-dotfile (including CLAUDE.md and all source files).
Drop --hidden entirely so rg uses its default behavior: skip hidden
dirs, respect .gitignore, and return all normal files.
The conditional render guard hid the results container when there was
no query and loading was complete, which prevented the default 50-file
list from appearing. Include filtered.length > 0 in the condition so
the initial results are visible.
Also removes the outer pb-2 so there is no empty space below the input
when no results are present, and reduces inner padding to pb-1.
* fix(ui): allow Cmd/Ctrl+P when terminal is focused
xterm.js uses a hidden <textarea class="xterm-helper-textarea"> for
keyboard capture. isEditableTarget() was treating it as a real editable
field, which suppressed all global shortcuts (Cmd+P, Cmd+N, etc.) when
the terminal had focus.
Exclude that element so app-level keybindings remain reachable.
* fix(ui): hide empty quick-open results area and reduce bottom padding
The results container was always rendered with pb-2, leaving visible
empty space below the search input when there were no results.
Conditionally render the results div only when there is content, and
reduce padding from pb-2 to pb-1.
Introduce sortEpoch to decouple sort recomputation from click-triggered
state changes (clearing isUnread, GitHub refresh). Use synchronous useMemo
instead of useEffect so the sort order is available before the first render.
Also fix timeout-killed ripgrep searches resolving with truncated: false,
which misled the UI into showing partial results as complete.
The previous bg-accent/80 was too subtle to distinguish the active
worktree at a glance. Use bg-black/[0.06] (light) and bg-white/[0.10]
(dark) for a more obvious selection highlight.
- Update flex and height classes in MarkdownPreview, EditorContent, DiffViewer, and CombinedDiffViewer to ensure min-h-0 and flex-1 bubble down properly.
- Apply `scrollbar-editor` class to MarkdownPreview to match Monaco's scrollbar style.
* Squashed commits
- refactor
- commit design doc
* docs: add why-comments to conflict resolution code and track conflicts on open
- Add explanatory comments throughout conflict resolution code covering
safety constraints, architectural boundaries, and compatibility choices
- Track unresolved conflicts in openConflictFile so Resolved locally
state works for conflict-safe entry point
- Add CLAUDE.md/AGENTS.md guideline for documenting the "why"
- Add test for conflict tracking through openConflictFile
* docs(readme): refine tone and trim shipping section
Replace "nerds" with "100x engineers" and rewrite the shipping
section to be concise and match the confident tone of the rest
of the README.
* docs(readme): fix "Shipped daily" to "Shipping daily"
Add file/folder deletion via right-click context menu using Electron's
shell.trashItem (moves to OS trash, not permanent delete). Includes a
confirmation dialog, reveal-in-explorer support, and refactors the file
explorer into smaller composable modules.
The generic "No changes on this branch" empty state was showing on both
tabs. Scope it to the All tab so only "No uncommitted changes" shows on
the Uncommitted tab.
Replace the colored badge with the same PR display style used in
WorktreeCard: state-colored PullRequestIcon, clickable PR number link,
and truncated title text.
- Switch scrollbar to VS Code-like always-visible style with proper
hover/active states using color-mix
- Use background-color instead of background shorthand in scrollbar
pseudo-states to preserve background-clip: padding-box
- Add wheel capture handler to prevent draggable items from eating
scroll events in file explorer
- Fix flex overflow with h-full min-h-0 on scroll container
- Only allow file items (not directories) to be draggable
Shrink file entry rows in Source Control and File Explorer for a more
compact sidebar: smaller icons, tighter gaps, reduced font sizes, and
less left padding.
* refactor: auto-review fixes and UI improvements
- Remove dead code and fix type assertion in getBranchDiff
- Tighten GitDiffBinaryResult type constraint
- Fix race condition in CombinedDiffViewer with generationRef
- Fix reference stability in setGitBranchCompareResult
- Extract LazySection component to fix max-lines lint
- Update filesystem IPC to match updated signatures
- Adjust file explorer item spacing and font size
* fix: correct test expectation for staged diff header label
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.
Show a colored dot (success/failure/pending) on the Checks tab in the
right sidebar activity bar. Extracts check status derivation into a
dedicated github-checks module and syncs the computed status back into
the PR cache. Also reorders Search tab before Source Control.
Lift the side-by-side/inline toggle from DiffViewer's internal toolbar
into the EditorPanel header with a tooltip. Reduces header height
(52→36px) for a more compact diff view. The toggle only appears for
single-file diffs, not combined diffs.