Skip to content

Diff wrap cutoff fix, worktree chat tabs, and actionable gh merge errors - #12

Merged
enisze merged 3 commits into
mainfrom
t3code/create-new-dmg
Jul 31, 2026
Merged

enisze merged 3 commits into
mainfrom
t3code/create-new-dmg

Conversation

@enisze

@enisze enisze commented Jul 31, 2026

Copy link
Copy Markdown
Owner

Summary

  • fix(web): with word wrap on, the diff virtualizer under-counted total height (each wrapped line estimated as one row), so the scrollbar bottomed out before the last file's trailing lines could be scrolled into view. Over-estimate the row height only in wrap mode; it self-corrects via measured deltas.
  • feat(web): add a worktree chat tab row beneath the chat header (one tab per chat in the active thread's worktree, click-to-switch, plus a new-chat button), and collapse the Open and Add action header controls into a single "…" overflow menu to free header space.
  • fix(server): merging a PR could fail with the opaque "GitHub CLI command failed." — especially with multiple accounts where the project's selected account isn't a collaborator. Classify exits into permission-denied / merge-blocked and surface clear, actionable messages. Raw stderr is still never retained (no secret leakage).

Testing

  • tsgo typecheck: web, server (t3), contracts — pass
  • vitest VcsProcess (12) and sourceControl (119) suites — pass
  • Verified live in the running app: overflow "…" menu opens and the Add-action dialog works from inside it; diff scroll reachability confirmed by measuring scrollHeight.

🤖 Generated with Claude Code

enisze and others added 3 commits July 31, 2026 10:09
In wrap mode a long line spans several visual rows, but the virtualizer
estimates every off-screen line at a single row. That under-counts total
height, so the scrollbar bottoms out before the last file's trailing
lines can be scrolled into view. Over-estimate the row height only in
wrap mode; the library shrinks it back via measured deltas as items
render, so the last file stays reachable without a permanent gap.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add a tab row beneath the chat header listing every chat in the active
thread's worktree, with the current one highlighted, click-to-switch,
and a trailing button to start a new chat in the same worktree.

Collapse the "Open in editor" and "Add action" header controls behind a
single "…" overflow menu so the header keeps room for the project and
thread identity. The controls render unchanged inside the popover, so
their dropdowns and add/edit dialogs keep working.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Merging a PR could fail with the opaque "GitHub CLI command failed.",
which was especially confusing with multiple GitHub accounts where the
account selected for a project isn't a collaborator on its repo.

Classify non-zero VCS exits into two new safe buckets — permission-denied
and merge-blocked — from stderr patterns, and map them to clear GitHub
errors ("the selected account lacks permission…", "GitHub wouldn't merge
this PR — conflicts, failing checks, branch protection, or a disallowed
merge method"). Raw stderr is still never retained, so no secret it might
contain can leak.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@enisze
enisze merged commit 9221e57 into main Jul 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant