fix(web): name the sidebar logo link T3 Code home#24209
Problem
The sidebar logo is announced as “Go to threads”, although activating it opens the app’s startup composer. Its accessible name also omits the visible “T3 Code” branding, so voice-control users cannot identify it by the text they see.
Change
Name the existing logo link “T3 Code home”. Its destination and visual appearance stay the same. This preserves the existing fix and author credit in this PR.
Scope and approval
Fixes https://github.com/pingdotgg/t3code/issues/24203
GitCafe: #24203
Triaged bug via the automated issue flow. Reused this existing PR; no duplicate PR was opened.
Verification
- Reproduced on main 27e0c68 in the real web app: the accessibility tree names the link “Go to threads”; activating it opens
/draft/...with the startup composer. vp lint apps/web/src/components/sidebar/SidebarChrome.tsx: passed.- Web typecheck (
tsc --noEmit -p apps/web): passed. - No automated test was added: the change is one literal accessible-name string; an attribute assertion would mirror the implementation, and navigation already succeeds on main.
- The shared header covers current, legacy, and Settings sidebars on web and Electron. Native mobile uses a separate threads-list control and is unaffected. No provider, contract, or connection-mode behavior changes.
Both isolated reviewers approved the integrated diff. The final independent proof audit passed every mandatory row, verified all 227 retained artifacts, and reproduced one capture with zero pixel differences.
Evidence
Full evidence index, environment details, recordings, accessibility snapshots, and replay drivers. Captures use the actual main and integrated PR revisions. Retained pairs have zero changed RGB pixels; the accessible name changes from “Go to threads” to “T3 Code home”, with href / on both.
| Fixture | Before · 27e0c68 | After · 7e3da10 | Diff0 ×8 | Diff >16/255 |
|---|---|---|---|---|
| Current sidebar · 1440×900 · light | R1-before-frame2.png | R1-after-frame2.png | R1-diff0-amplified.png | R1-diff-threshold16.png |
| Legacy sidebar · 768×800 · dark · Dev | R2-before-frame2.png | R2-after-frame2.png | R2-diff0-amplified.png | R2-diff-threshold16.png |
| Settings sidebar · 1440×900 · dark · Dev | R3-before-frame2.png | R3-after-frame2.png | R3-diff0-amplified.png | R3-diff-threshold16.png |
| Narrow drawer · 390×844 · light | S1-before-frame2.png | S1-after-frame2.png | S1-diff0-amplified.png | S1-diff-threshold16.png |
| Dev artwork · 1440×900 · light | S2-before-frame2.png | S2-after-frame2.png | S2-diff0-amplified.png | S2-diff-threshold16.png |
| Dev pill · 1440×900 · dark | S4-before-frame2.png | S4-after-frame2.png | S4-diff0-amplified.png | S4-diff-threshold16.png |
The CSS viewport is stated in each row; collaborative Chromium uses DPR 2 and scales saved PNGs. The index records image dimensions, font stack, frozen clock, reduced motion, and strict equality of two settled frames 500 ms apart.
| Interaction | Before · 27e0c68 | After · 7e3da10 |
|---|---|---|
| Focus, Enter to draft, draft reuse, collapse/reopen | recording | recording |
| Legacy sidebar: focus and pointer activation | recording | recording |
| Settings sidebar: focus and Enter | recording | recording |
| Open narrow sidebar drawer; brand remains hidden | recording | recording |
Scripted steps and timestamps. The index includes the corresponding computed-name and href snapshots for every row. Recordings show checkout-specific Git details at the destination; matched stills close that panel. No visible differences occur in the retained matched stills (zero threshold).
Windows/macOS Electron, screen-reader speech, and the conditional hosted-disconnected state were not verified. Native mobile has a separate unchanged control.
Supplemental desktop and Nightly proof
The following supplements supersede the initial browser index’s provisional R4, Nightly R3/S3, and S5 statuses. All required rows are now captured.
Linux Electron evidence and replay drivers · Nightly and zero-project evidence and replay drivers.
Linux Electron 44.9.3 uses a 1440×900 content viewport, DPR 1, light/plain appearance, the real desktop bridge, and desktop hash routing (/#/) over the Vite development origin. Nightly uses the supported VITE_HOSTED_APP_CHANNEL=nightly setting on a separate server with project auto-bootstrap disabled. The zero-project capture has a connected, ready environment and the actual empty-project screen.
| Fixture | Before · 27e0c68 | After · 7e3da10 | Diff0 ×8 | Diff >16/255 |
|---|---|---|---|---|
| Linux Electron · 1440×900 · light | R4-before-frame2.png | R4-after-frame2.png | R4-diff0-amplified.png | R4-diff-threshold16.png |
| Nightly Settings · 1440×900 · dark | R3-before-frame2.png | R3-after-frame2.png | R3-diff0-amplified.png | R3-diff-threshold16.png |
| Nightly artwork · 1440×900 · light | S3-before-frame2.png | S3-after-frame2.png | S3-diff0-amplified.png | S3-diff-threshold16.png |
| Ready zero-project environment · 1440×900 · light | S5-before-frame2.png | S5-after-frame2.png | S5-diff0-amplified.png | S5-diff-threshold16.png |
For Electron, each 6.8s recording shows focus by about 2.2s, Enter activation, and a visible draft by about 4.5s. Nightly Settings recordings show focus, Enter, and the resulting draft; exact tool timestamps are linked in the supplemental index.
| Interaction | Before · 27e0c68 | After · 7e3da10 |
|---|---|---|
| Electron focus and Enter to draft | recording | recording |
| Nightly Settings focus and Enter to draft | recording | recording |
All supplemental before/after pairs and settling pairs have zero changed RGB pixels. Their indexes contain the accessible-name, href, destination, and readiness snapshots. Canonical browser manifest explicitly marks superseded uploads.
Models: Claude Opus 5.5 and GPT-6.1-Sol. Harnesses: Claude Code and Codex in T3 Code.
Checks
Added 1 commit
- fix(web): name the sidebar logo link "T3 Code home"4bc10a4
Approvability
Verdict: Approved at 4bc10a4
Macroscope's review found this PR approvable — This is a narrowly scoped accessibility bug fix that changes only the sidebar logo link’s announced name; its route and visible behavior remain unchanged. It introduces no new capability, schema, deployment, security, or static-analysis risk.
No code changes detected at 7e3da10. Prior analysis still applies.
You can add or adjust custom eligibility rules. Learn more.
Important
Review skipped
Review was skipped as selected files did not have any reviewable changes.
External image Run configuration
- Source mode: Auto
- Repository: pingdotgg/t3code
- Branch: issue-watch/24203
- File: .coderabbit.config.ts
- Commit: 7e3da10
- Layers: Repository TS config
- Review profile: CHILL
- Plan: Advanced
- Run ID:
f3214b1d-5bd8-465d-b4bc-e8b866acf1b3
External image Commits
Reviewing files that changed from the base of the PR and between 4bc10a4478a84f51f3610191940eab1ef2ecdfea and 7e3da10cb536358f9b756300c58c82f14663e151.
You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.
Use the checkbox below for a quick retry:
- 🔍 Trigger review
No actionable comments were generated in the recent review.
ℹ️ Recent review info
⚙️ Run configuration
- Source mode: Auto
- Repository: pingdotgg/t3code
- Branch: issue-watch/24203
- File: .coderabbit.config.ts
- Commit: 4bc10a4
- Layers: Repository TS config
- Review profile: CHILL
- Plan: Advanced
- Run ID:
40d34b4e-c401-494a-bb70-f79f5afdc4b7
📥 Commits
Reviewing files that changed from the base of the PR and between 5bb54a0f77c6655fdb2ab551612ca1ca1fcd3667 and 4bc10a4478a84f51f3610191940eab1ef2ecdfea.
📒 Files selected for processing: 1
apps/web/src/components/sidebar/SidebarChrome.tsx
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 4 remain after this review.
Walkthrough
The sidebar brand link’s accessible label changes from “Go to threads” to “T3 Code home.” Its destination remains
/.Changes: Sidebar brand link
Layer / File(s) Summary Update accessible label
apps/web/src/components/sidebar/SidebarChrome.tsxThe brand link’s accessible label changes to “T3 Code home.” Its destination remains /.Priority: External image Low
Estimated code review effort: 1 (Trivial) | ~3 minutes
Change: Bug fix · Severity of issue fixed: Low
Suggested labels:
bugfix,size:XSSuggested reviewers:
juliusmarminge
Merge Risk: External image Minimal · up to 4bc10
The updated label improves identification for screen-reader and voice-control users without changing navigation behavior.
Pre-merge checks: Passed 4
Check name Status Explanation Linked Issues check Passed [ #24203] The issue requires the sidebar logo link's accessible name to describe its destination and to include the visible text "T3 Code". The diff changes thearia-labelon the sidebar brandLink…Out of Scope Changes check Passed The whole-PR diff against the merge base changes one file and one line: the aria-labelvalue inSidebarBrandinapps/web/src/components/sidebar/SidebarChrome.tsx. This change implements the sing…Title check Passed The title clearly and concisely describes the sidebar logo link accessible-name change. Description check Passed The description covers the problem, change, issue and approval context, focused verification, evidence, limitations, and agent details. It satisfies the repository template. Full details: Linked Issues check
Explanation
[
#24203] The issue requires the sidebar logo link's accessible name to describe its destination and to include the visible text "T3 Code". The diff changes thearia-labelon the sidebar brandLinkinapps/web/src/components/sidebar/SidebarChrome.tsxfrom "Go to threads" to "T3 Code home". This name meets both points. It matches the name the issue suggests. The link destination stays/, which the issue describes as the app home. The issue does not require automated tests. The issue names the Windows desktop app. The PR verified the name in Chromium on Linux. The component is shared web code, so the desktop app uses the same markup. The desktop app was not run directly, so this residual uncertainty is noted but does not affect the verdict.
Full details: Out of Scope Changes check
Explanation
The whole-PR diff against the merge base changes one file and one line: the
aria-labelvalue inSidebarBrandinapps/web/src/components/sidebar/SidebarChrome.tsx. This change implements the single objective in#24203. No unrelated code, tests, or documentation changed. The mobile "Go to threads list" control described in the PR is not part of the diff, which matches the PR description.
✨ Finishing Touches
📝 Generate docstrings
- Commit to this branch
- Create a new PR
🧪 Generate unit tests (beta)
- Commit to this branch
- Create a new PR
- Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Comment @coderabbitai help to get the list of available commands.
I see you just created the same pr as me a few minutes before mine went up. i have closed #24211 in favour of yours. I can confirm that the change works with NVDA since my pr made the same change. it now says "link T3 Code home"
I like this better than "Go to threads", which was just wrong. But I think "T3 Code home" is still pretty ambiguous about what you should expect from clicking it. There's no home page: clicking it opens a new thread draft in your most recently updated project.
What about "T3 Code, new thread"? It still starts with the visible text, so voice control users can say "click T3 Code", and it tells you what clicking actually does. The one exception is someone with no projects yet, who gets the "add a project" screen instead.
Thoughts?
This is Claude posting on behalf of @nibarAhmed.
What about "T3 Code, new thread"?
Thanks, fair point that there's no literal home page. I'd still lean toward "T3 Code home":
- The sidebar already has a "New thread" button a few controls down, and it picks the project differently than the logo does (the logo always uses the most recently updated project, while the button follows the sidebar's project scope and has a Shift+click variant). Two "new thread" controls that behave differently would be more confusing in a screen reader's links/controls list.
- "Home" describes where the link goes rather than what
/currently does. Describing the current behavior is how "Go to threads" went stale after #1617. - It also stays accurate for the states where
/doesn't open a draft: no projects yet, hosted with no environment connected, and the "Couldn't start a new thread" error.
Both labels start with the visible "T3 Code", so WCAG 2.5.3 is satisfied either way.
Added 1 commit
- Merge origin/main into issue-watch/242037e3da10
[Opus 5.5][Claude Code] on behalf of shivam.
Handing this over. Here's what I found:
- Reproduced on main in Chromium on Linux (corex), running the web dev server from this branch with the fix taken out. Chrome's accessibility tree named the sidebar logo link "Go to threads". Its visible text is "T3 Code", and
/opened a new draft in the most recent project. - With the fix, the same tree reads
link "T3 Code home"(children:image "T3",StaticText "Code"). The before/after screenshots in the PR body show both names. - Not tested: the Electron desktop app (my sandbox had no display) and a real screen reader or voice-control tool. The desktop app renders the same web component.
- Checks:
vp run check:changedpassed locally. CI and Macroscope were green on 4bc10a4. A Codex review found no code issues. The only other reference to the old wording is the mobile "Go to threads list" button, which really does open the thread list, so I left it alone.
On akj's naming point: I kept the issue's suggested "T3 Code home" because it starts with the visible text, which is what WCAG 2.5.3 cares about. "T3 Code, new thread" would describe the click result more literally. Either name fixes the bug.