Skip to content

Show a focus ring on sidebar thread and draft rows - #13344

Merged
Yash-Singh1 merged 1 commit into
pingdotgg:mainfrom
ryanilano:fix/sidebar-row-focus-ring
Sep 26, 2026
Merged

Yash-Singh1 merged 1 commit into
pingdotgg:mainfrom
ryanilano:fix/sidebar-row-focus-ring

Conversation

@ryanilano

@ryanilano ryanilano commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Sidebar thread and draft rows are focusable (role="button", tabIndex={0}) but set outline-none with no replacement, so keyboard focus is invisible. This adds the same inset focus-visible ring the tool-call region already uses.

Verify: press Tab into the sidebar; the focused row shows a ring. Mouse users see no change.

Screenshots to follow.

Summary by CodeRabbit

  • Accessibility
    • Sidebar draft and thread rows now display a visible focus ring when reached by keyboard navigation.

Thread and draft rows are role=button with tabIndex=0 but set outline-none
with no replacement, so keyboard focus is invisible. Add the inset ring the
tool-call region and turn-fold button already use.

Verify: Tab into the sidebar; the focused row shows a ring.
@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Sep 24, 2026
@macroscopeapp

macroscopeapp Bot commented Sep 24, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 2978ef5

Macroscope's review found this PR approvable — This single-file change adds a keyboard-visible focus ring to two already focusable sidebar rows. It is a small, self-contained visual accessibility improvement that leaves mouse behavior and application workflows unchanged.

You can add or adjust custom eligibility rules. Learn more.

@coderabbitai

coderabbitai Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: pingdotgg/t3code/.coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: 7280c73b-bbe0-4fe1-836a-4f482c718598

📥 Commits

Reviewing files that changed from the base of the PR and between e4eb997 and 2978ef5.

📒 Files selected for processing (1)
  • apps/web/src/components/Sidebar.tsx

Included review availability: Your plan provides up to 10 included reviews per hour; 9 remain after this review.


📝 Walkthrough

Walkthrough

Draft and thread sidebar rows now include focus-visible ring styles. The styles apply to draft rows and to both card and slim thread rows.

Changes

Sidebar focus visibility

Layer / File(s) Summary
Add focus rings to sidebar rows
apps/web/src/components/Sidebar.tsx
Draft rows and card and slim thread rows add focus-visible ring styles.

Priority: ⬇️ Low

Estimated code review effort: 1 (Trivial) | ~3 minutes

Change: Bug fix

Suggested reviewers: juliusmarminge

Merge Risk: ⚪ Minimal · up to 2978e

The sidebar rows gain the intended keyboard focus indication; no material merge risk remains.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description explains the problem, the change, and the verification step. It does not use the required sections, provide the required UI screenshots, or include the checklist. Add the What Changed, Why, UI Changes, and Checklist sections. Include before-and-after screenshots for the UI change, then complete the checklist.
✅ Passed checks (4 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 1…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly and concisely describes the main change: adding focus rings to sidebar thread and draft rows.
  • Fix all pre-merge checks with AI
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR

Comment @coderabbitai help to get the list of available commands.

@ryanilano

Copy link
Copy Markdown
Contributor Author
t3code-pr13344-focus-ring-after-2026-09-25-10 28am After: Tab from the sidebar search box to a thread row. The row now shows a focus ring.

@Yash-Singh1
Yash-Singh1 merged commit 92f0af2 into pingdotgg:main Sep 26, 2026
23 of 24 checks passed
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 26, 2026
## What's Changed
* feat(observability): write a server heap snapshot on SIGUSR2 by @t3dotgg in pingdotgg/t3code#13694
* perf(server): shutdown no longer rewrites every stopped session row by @t3dotgg in pingdotgg/t3code#13688
* perf(server): build the thread list snapshot without decoding it twice by @t3dotgg in pingdotgg/t3code#13693
* fix(client): slow servers finish loading the thread list instead of loading it twice by @t3dotgg in pingdotgg/t3code#13683
* perf(web): hidden terminal drawers no longer keep full thread history in memory by @t3dotgg in pingdotgg/t3code#13686
* perf(server): per-thread settlement and PR checks no longer rebuild the whole thread list by @t3dotgg in pingdotgg/t3code#13691
* fix(mobile): running threads open at the latest message by @AKolenda in pingdotgg/t3code#13530
* feat(observability): record event loop stalls in the server trace by @t3dotgg in pingdotgg/t3code#13697
* perf(server): stop re-running git for every project each minute by @t3dotgg in pingdotgg/t3code#13689
* fix(usage): hide the Cursor keychain prompt when Cursor isn't set up by @Gigioxx in pingdotgg/t3code#13714
* feat(web): add chat width setting for wide screens by @otavio in pingdotgg/t3code#11594
* fix(opencode): accept v2 serve ready line when spawning server by @shirishpothi in pingdotgg/t3code#13651
* fix(editors): stop treating the agy CLI as the Antigravity IDE by @ishaanko in pingdotgg/t3code#7079
* fix(web): make the empty workspace draggable on desktop by @otavio in pingdotgg/t3code#13713
* fix(server): installed editors no longer vanish when discovery is slow by @bfowler in pingdotgg/t3code#13669
* fix(git): exclude SSH ports from provider URLs by @GaMeRaM in pingdotgg/t3code#12537
* fix(web): Mod+B bolds on non-Latin layouts by @ValeraZSD in pingdotgg/t3code#13409
* fix(server): prune expired replay-protection files from the secrets directory by @t3dotgg in pingdotgg/t3code#13695
* fix(web): terminal links drop a trailing colon by @ValeraZSD in pingdotgg/t3code#13408
* fix(server): bump node-pty to 1.2.0-beta.15 for linux-arm64 prebuild by @Ephraim-9 in pingdotgg/t3code#13748
* Show a focus ring on sidebar thread and draft rows by @ryanilano in pingdotgg/t3code#13344
* fix(mobile): keep composer within folded screen after resume by @PixPMusic in pingdotgg/t3code#13310
* fix(server): let OpenCode generate session titles by @macodev00 in pingdotgg/t3code#13368
* fix(server): let Antigravity inspect unsupported files by path by @Bil0000 in pingdotgg/t3code#13339
* fix(mobile): link URLs with ports and single-label hosts by @Yash-Singh1 in pingdotgg/t3code#13795
* feat(web): add keyboard navigation for usage by @tris203 in pingdotgg/t3code#10158
* perf(observability): stop writing empty spans on spawns, projected events, and idle polls by @t3dotgg in pingdotgg/t3code#13756
* perf(server): opening Diagnostics no longer loads the whole trace ring into memory by @t3dotgg in pingdotgg/t3code#13763
* perf(clients): sort projects and settled threads without re-parsing dates per comparison by @t3dotgg in pingdotgg/t3code#13759
* fix(observability): the renderer trace proxy stops tracing itself by @t3dotgg in pingdotgg/t3code#13761
* perf(server): background sweeps only read threads that can still settle by @t3dotgg in pingdotgg/t3code#13765
* perf(clients): saving the thread list cache no longer freezes the UI by @t3dotgg in pingdotgg/t3code#13767
* perf(server): cut idle wakeups from the Connect relay and session reaper by @t3dotgg in pingdotgg/t3code#13774
* fix(mobile): keep trailing underscores and tildes in autolinked URLs by @Yash-Singh1 in pingdotgg/t3code#13807
* fix(web): queued messages send while their thread is not open by @t3dotgg in pingdotgg/t3code#13764
* fix(server): background git status fetches no longer fill the disk with failed repacks by @t3dotgg in pingdotgg/t3code#13812
* fix(mobile): thread list shows the pull request icon instead of # by @flamboh in pingdotgg/t3code#13742
* fix(accessibility): correct control announcements and sidebar traversal by @blinding-pixels in pingdotgg/t3code#13491
* fix(usage): tolerate newer provider variants by @tris203 in pingdotgg/t3code#10076
* fix(usage): omit Cursor warning when no login is saved by @tris203 in pingdotgg/t3code#13820
* fix(usage): identify client version mismatches by @tris203 in pingdotgg/t3code#8208
* fix(web): stop mistaking offline servers for updates by @tris203 in pingdotgg/t3code#13083
* test(usage): assert contract mismatch details by @Yash-Singh1 in pingdotgg/t3code#13861
* fix(build): validate Linux node-pty prebuilds in Windows artifacts by @Yash-Singh1 in pingdotgg/t3code#13867

## New Contributors
* @otavio made their first contribution in pingdotgg/t3code#11594
* @shirishpothi made their first contribution in pingdotgg/t3code#13651
* @bfowler made their first contribution in pingdotgg/t3code#13669
* @GaMeRaM made their first contribution in pingdotgg/t3code#12537
* @ValeraZSD made their first contribution in pingdotgg/t3code#13409
* @Ephraim-9 made their first contribution in pingdotgg/t3code#13748
* @ryanilano made their first contribution in pingdotgg/t3code#13344
* @macodev00 made their first contribution in pingdotgg/t3code#13368
* @blinding-pixels made their first contribution in pingdotgg/t3code#13491

**Full Changelog**: pingdotgg/t3code@v0.0.43-nightly.20260926.2282...v0.0.43-nightly.20260926.2318

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.43-nightly.20260926.2318
aorwall added a commit to aorwall/t3code that referenced this pull request Sep 27, 2026
Merges `pingdotgg/t3code` `main` into the fork: `eeea71a88` →
`ab099178a` (35 commits). Branched from `main`; no open merge PR to
stack on.

## Merge
- **Conflicts:** only `pnpm-lock.yaml`. I took upstream's copy and
re-ran `install.mjs`, which put the fork's own entries back
(`moatless-api`, `mermaid`).
- **Silent merges:** git merged nine other files both sides had changed
without stopping (`ChatView.tsx`, `Sidebar.tsx`, `MessagesTimeline.tsx`,
`ui/sidebar.tsx`, `__root.tsx`, `settings.tsx`, `entities.ts`,
`apps/web/package.json`, `GitVcsDriverCore.test.ts`). The duplicate-line
and dropped-side checks found nothing, and every delta guard held,
including `FEATURES.serverUpdateBanner` after pingdotgg#13083 rewrote the offline
banner code.
- **File counts:** 126 files landed, exactly the 126 upstream changed.
The fork delta is 756 files, unchanged.
- **New upstream files in fork-owned areas:** three matched the sweep.
`auth/replayMarkers.ts` and its test are upstream's own server auth;
`ConnectionFormField.test.tsx` is a mobile test. Neither touches a
fork-owned surface.
- **`UnsupportedMethodError` union:** no methods to add or drop.

## Verification
`verify.mjs` (full run) passed all 10 checks: duplicate-adds, tripwires,
resolution-check, unsupported-methods, lockfile, fmt, lint, typecheck,
build and test.

## Usable as-is
- Queued messages now send while their thread is not open
(`QueuedMessageSender`, `sendQueuedMessage.ts`, pingdotgg#13764).
- Keyboard navigation for Usage, plus `useNavigateBack` (pingdotgg#10158).
- Usage identifies which side has the version mismatch (pingdotgg#8208) and
tolerates newer provider variants (pingdotgg#10076).
- Accessibility fixes: control announcements, sidebar traversal, focus
rings (pingdotgg#13491, pingdotgg#13344).
- Other web fixes: reasoning-arrow alignment, tooltip resize, Mod+B on
non-Latin keyboard layouts, terminal links dropping a trailing colon.
- Faster project and thread sorting, and saving the thread-list cache no
longer freezes the UI (pingdotgg#13759, pingdotgg#13767).
- Mobile link and composer fixes.

## Unsupported in Moatless / needs implementation
- Nothing new. The upstream changes in this range to editor discovery
(pingdotgg#13669), Cursor Keychain prompts (pingdotgg#13870) and device tools (pingdotgg#13908) sit
behind surfaces the fork already gates (`openInEditor`,
`providerConfiguration`, `deviceHub`).

## Backend behavior to consider reproducing in Moatless
Added to `docs/fork/gaps.md` under *Runtime fixes upstream made to its
own server*:
- **pingdotgg#13812:** the background git status fetch passes `--no-auto-gc`.
Without it, a failing auto gc leaves a full-size `tmp_pack_*` behind on
every fetch and can fill the disk.
- **pingdotgg#13765:** the settlement and PR sweeps read only threads that can
still settle.
- **pingdotgg#13774:** the relay and session reaper no longer wake up on idle
sessions.

Also relevant but not recorded as gaps: pingdotgg#13736 (`OTEL_*_EXPORTER=none`
honoured per signal) and pingdotgg#13695 (expired replay-protection files pruned
from the secrets directory).

## Caveat
Running `vp install` again after committing changes two `type-fest`
entries in the lockfile (5.7.0 → 5.10.0). I kept the committed
re-derived lockfile, which passes the `lockfile` check.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---
Moatless task:
https://moatless.soaplabstest.com/tasks/06f86e30-4ca2-4771-bf22-feb0699349ff
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS 0-9 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants