Repository navigation
fix(mobile): no-project threads show a chat bubble instead of a monogram - #21546
Conversation
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a focused mobile rendering fix that maps the server-provided no-project icon to an existing native chat-bubble symbol while leaving other project icon behavior unchanged. Its runtime impact is confined to the affected icon display path. Notes:
You can add or adjust custom eligibility rules. Learn more. |
|
No actionable comments were generated in the recent review.
|
| Layer / File(s) | Summary |
|---|---|
Glyph resolution and color classes apps/mobile/src/lib/projectIcon.ts, apps/mobile/src/lib/projectIcon.test.ts |
The resolver maps message-square-dashed to text.bubble and returns the configured color. Project icon colors now include tint classes. Tests cover the mapped icon and unmapped icon types. |
Symbol glyph rendering apps/mobile/src/components/ProjectFavicon.tsx |
ProjectFavicon renders a resolved symbol with its configured name, size, and tint before the existing glyph and favicon paths. |
Priority:
Estimated code review effort: 2 (Simple) | ~10 minutes
Change: Bug fix · Severity of issue fixed: Low
Possibly related issues
- pingdotgg/t3code#16346: The issue reports the same mobile rendering behavior for
message-square-dashed.
Suggested labels: bugfix
Merge Risk: 
Minimal · up to 0d510
-
Merge Risk: ⚪ Minimal · up to
0d510The no-project icon mapping and rendering path are consistent with the existing mobile symbol implementation and present no actionable merge-blocking risk.
Pre-merge checks: 
4
-
Full details: Description check
-
Explanation
The description explains the problem, the implementation, scope approval, and the UI evidence. It includes before/after screenshots and capture environments, and identifies the agent and harness. It does not use the required "## Verification" heading or explicitly state focused checks and observed results, but the verification evidence is substantially present.
-
Finishing Touches
-
🧪 Generate unit tests (beta)
-
- 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.
a00ff95 to
82d7a33
Compare
Dismissing prior approval to re-evaluate 82d7a33
Dismissing prior approval to re-evaluate 0d510d7
…n via Merge • 26028b637a Overlay branch overlay/antigravity-symlink-write on top of origin/main via Merge |\ | • d9ea865 fix(server): let Antigravity write new folders in a linked workspace • | b24e8ce fix(mobile): the unfolded Duo keeps its header in portrait (pingdotgg#24339) • | 940e3fa fix(mobile): stabilize Duo search and portrait navigation (pingdotgg#24206) • | 45cedfe fix(mobile): no-project threads show a chat bubble instead of a monogram (pingdotgg#21546) • | c14cda1 fix(mobile): keep iPad workspace columns aligned while resizing (pingdotgg#24182) • | 91455de feat(mobile): add Usage and Settings to workspace navigation (pingdotgg#23841) • | c893353 feat(usage): include Muse Code session history (pingdotgg#22443)
* apps/server/src/orchestration-v2/Orchestrator.ts * apps/web/src/session-logic.ts * packages/contracts/src/orchestrationV2.ts • e51806ef89 Overlay branch overlay/rewind-no-git on top of origin/main via Merge |\ | • 88e481f Overlay branch overlay/rewind-no-git on top of origin/main via Merge | |\ | | • f0429aa Overlay branch overlay/rewind-no-git on top of origin/main via Merge | | |\ | | | • e46136a fix(checkpoints): rewind the conversation in folders without Git • | | | b24e8ce fix(mobile): the unfolded Duo keeps its header in portrait (pingdotgg#24339) • | | | 940e3fa fix(mobile): stabilize Duo search and portrait navigation (pingdotgg#24206) • | | | 45cedfe fix(mobile): no-project threads show a chat bubble instead of a monogram (pingdotgg#21546) • | | | c14cda1 fix(mobile): keep iPad workspace columns aligned while resizing (pingdotgg#24182)
• df561d090a Overlay branch overlay/web-android-enter on top of origin/main via Merge |\ | • dc833a3 Overlay branch overlay/web-android-enter on top of origin/main via Merge | |\ | | • 21c0db9 Overlay branch overlay/web-android-enter on top of origin/main via Merge | | |\ | | | • a808491 fix(web): detect keyboards that resize the layout viewport • | | | b24e8ce fix(mobile): the unfolded Duo keeps its header in portrait (pingdotgg#24339) • | | | 940e3fa fix(mobile): stabilize Duo search and portrait navigation (pingdotgg#24206) • | | | 45cedfe fix(mobile): no-project threads show a chat bubble instead of a monogram (pingdotgg#21546) • | | | c14cda1 fix(mobile): keep iPad workspace columns aligned while resizing (pingdotgg#24182)
…via Merge • 51990a0d88 Overlay branch overlay/web-thread-panel-closed on top of origin/main via Merge |\ | • ba5b42a Overlay branch overlay/web-thread-panel-closed on top of origin/main via Merge | |\ | | • 0e8c327 Overlay branch overlay/web-thread-panel-closed on top of origin/main via Merge | | |\ | | | • 39b79db feature(web): thread details card starts closed on new threads • | | | b24e8ce fix(mobile): the unfolded Duo keeps its header in portrait (pingdotgg#24339) • | | | 940e3fa fix(mobile): stabilize Duo search and portrait navigation (pingdotgg#24206) • | | | 45cedfe fix(mobile): no-project threads show a chat bubble instead of a monogram (pingdotgg#21546) • | | | c14cda1 fix(mobile): keep iPad workspace columns aligned while resizing (pingdotgg#24182)
* apps/web/src/components/chat/MessagesTimeline.logic.ts • 8aa2fed190 Overlay branch overlay/web-work-log on top of origin/main via Merge |\ | • 58d3ba9 Overlay branch overlay/web-work-log on top of origin/main via Merge | |\ | | • 2d75bf6 Overlay branch overlay/web-work-log on top of origin/main via Merge | | |\ | | | • 834a12c fix(web): long tool arguments get a height-capped block in the inspector | | | • 043df2b fix(web): approvals with multi-line prompts use their title as the row label • | | | b24e8ce fix(mobile): the unfolded Duo keeps its header in portrait (pingdotgg#24339) • | | | 940e3fa fix(mobile): stabilize Duo search and portrait navigation (pingdotgg#24206) • | | | 45cedfe fix(mobile): no-project threads show a chat bubble instead of a monogram (pingdotgg#21546)
## What's Changed * fix(mobile): Live Activity stops shouting the running-agent count by @juliusmarminge in pingdotgg/t3code#24329 * feat(usage): include Muse Code session history by @Wiktor102 in pingdotgg/t3code#22443 * feat(mobile): add Usage and Settings to workspace navigation by @PixPMusic in pingdotgg/t3code#23841 * fix(mobile): keep iPad workspace columns aligned while resizing by @PixPMusic in pingdotgg/t3code#24182 * fix(mobile): no-project threads show a chat bubble instead of a monogram by @flamboh in pingdotgg/t3code#21546 * fix(mobile): stabilize Duo search and portrait navigation by @PixPMusic in pingdotgg/t3code#24206 * fix(mobile): the unfolded Duo keeps its header in portrait by @juliusmarminge in pingdotgg/t3code#24339 * fix(client-runtime): avoid duplicate handoff previews during startup by @Yash-Singh1 in pingdotgg/t3code#24349 * fix(mobile): Usage and Settings use the glass header and the Duo rail by @juliusmarminge in pingdotgg/t3code#24348 * perf(server): coalesce superseded streaming text updates by @juliusmarminge in pingdotgg/t3code#24267 ## New Contributors * @Wiktor102 made their first contribution in pingdotgg/t3code#22443 **Full Changelog**: pingdotgg/t3code@v0.1.3-nightly.20261024.3604...v0.1.3-nightly.20261024.3617 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.1.3-nightly.20261024.3617
* test: delete low-value tests and dead test-only exports (pingdotgg#24058) * test(server): restore DST scheduling tests deleted in the test snap (pingdotgg#23991) * test(web): restore project settings permission tests deleted in the test snap (pingdotgg#24011) * test(mobile): restore clipboard secret-redaction test deleted in the test snap (pingdotgg#23980) * fix(web): Cmd+B toggles the sidebar unless text is selected (pingdotgg#24063) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): agent-browser and Chrome no longer outlive the agent that started them (pingdotgg#21299) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: Theo Browne <me@theo.li> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * test(client-runtime): restore render scheduler tests deleted in the test snap (pingdotgg#23977) * fix(web): cmd+k search hides subagents and favors recent, whole-word matches (pingdotgg#24032) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * test(lint): new polling loops in tests now fail lint (pingdotgg#23983) * ci: unused dependency patches fail in check:changed, not after push (pingdotgg#23988) * fix(desktop): PDFs in the preview can be annotated (pingdotgg#24022) Co-authored-by: PR Batch Tester <agent@local.test> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): instructed compact runs without a bare compaction first (pingdotgg#24008) Co-authored-by: fixfon <12512757+fixfon@users.noreply.github.com> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> * fix(desktop): reduce app crashes when a preview tab's renderer dies during agent screenshots (pingdotgg#24056) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): Stop stops a thread's subagents again (pingdotgg#23886) Co-authored-by: PR Batch Tester <agent@local.test> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(desktop): a stuck quit no longer leaves the app unkillable (pingdotgg#23873) Co-authored-by: PR Batch Tester <agent@local.test> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): keep blockquote text readable in every theme (pingdotgg#24036) * fix(bitbucket): stop the startup sweep from flooding Bitbucket with 429s (pingdotgg#23889) Co-authored-by: PR Batch Tester <agent@local.test> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): screen readers hear when the open thread starts, needs you or finishes (pingdotgg#23752) Co-authored-by: PR Batch Tester <agent@local.test> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * perf(web): reduce allocations in streaming timeline scans (pingdotgg#23739) * perf(web): reuse a collator when sorting changed-file trees (pingdotgg#23776) * perf(scripts): check:changed finishes in about 10 s (pingdotgg#23581) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): size Usage header controls to the available width (pingdotgg#24123) * perf(server): speed up large terminal clipboard sequences (pingdotgg#23819) Co-authored-by: Julius Marminge <julius0216@outlook.com> * fix(server): make stale CLI service recovery actionable (pingdotgg#23541) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): pasted images show their upload tile instantly (pingdotgg#23832) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> * fix(server): clean up deleted threads worktrees with subagents (pingdotgg#23900) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): pause periodic PR discovery without foreground clients (pingdotgg#23852) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): meter checkpoint git subprocess attempts (pingdotgg#24218) Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> Co-authored-by: Yordis Prieto <yordis.prieto@gmail.com> * fix(web): clear stale resource monitor errors after retry (pingdotgg#24229) Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> Co-authored-by: Yordis Prieto <yordis.prieto@gmail.com> * fix(mobile): align draft workspace controls with the composer (pingdotgg#24239) * feat(mobile): thread header minimizes on the Duo while reading back through history (pingdotgg#24235) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): center pull request timeline actions (pingdotgg#24259) * fix(server): find the resource monitor when the server runs from its build output (pingdotgg#23965) Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> Co-authored-by: Theo Browne <me@t3.gg> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Victor Vogel <satsdev@only21mil.xyz> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: Yash Singh <saiansh2525@gmail.com> Co-authored-by: Joseph Vidal <135430578+josephv123@users.noreply.github.com> Co-authored-by: Theo Browne <me@theo.li> Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> Co-authored-by: PR Batch Tester <agent@local.test> Co-authored-by: fixfon <12512757+fixfon@users.noreply.github.com> Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com> Co-authored-by: Yukun Shan <92423096+nateEc@users.noreply.github.com> Co-authored-by: Akshar Patel <123344143+AksharP5@users.noreply.github.com> Co-authored-by: Ben Davis <45952064+bmdavis419@users.noreply.github.com> * fix(pull-requests): list filters narrow on every host that can (pingdotgg#23922) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(pull-requests): a filtered list fills its page instead of waiting for a scroll (pingdotgg#23923) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * feat(pull-requests): label and author filters search the host (pingdotgg#23924) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mobile): chat and composer chips stay readable in light mode (pingdotgg#22585) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): review thread avatars no longer clip in collapsed activity rows (pingdotgg#23545) * ci: close "needs more info" issues after 7 days without a reply (pingdotgg#22628) Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> * fix(server): Codex accounts show ChatGPT's current plan names (pingdotgg#24200) * fix(observability): desktop dev version and web environment match the other services (pingdotgg#23975) Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> * fix(observability): custom resource attributes use the t3code prefix (pingdotgg#23974) Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> * fix(mobile): Home and pull request lists let UIKit own their top inset (pingdotgg#24284) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mobile): keep the Duo's Home and pull request headers fixed (pingdotgg#24295) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): interrupts started by an agent no longer say "by user" in the timeline (pingdotgg#24299) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * feat(relay): deploy on-demand preview stages for labeled PRs Labeled same-repo PRs deploy stage pr-<n> behind the relay-preview environment reviewer gate. Unlabel or close tears the stage down, and a nightly job retries failed teardowns. Runtime-created managed endpoint tunnels and CNAMEs are swept by a PreviewTunnelSweep resource. Known gaps, tracked as follow-ups: an interrupted preview deploy can leave runtime tunnels behind; repo-level relay secrets still bypass the environment gate until moved. 🤖 Generated with [Claude Code](https://claude.com/claude-code) * fix(mobile): HTML links in pull request comments open when tapped (pingdotgg#22110) * perf(client): avoid full ordering scans for streamed replacements (pingdotgg#24264) * fix(server): a fork's first /compact compacts its inherited history (pingdotgg#24172) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): agent recordings honor the browser frame rate setting (pingdotgg#23895) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(client-runtime): Stop clears commands already finished on the server (pingdotgg#23814) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): SSH environments on an older reused remote server explain the version mismatch instead of reconnecting forever (pingdotgg#23647) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): keep usage-limit wake action visible (pingdotgg#23803) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): reject pairing with an incompatible server protocol (pingdotgg#23789) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mobile): Live Activity stops shouting the running-agent count (pingdotgg#24329) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * feat(usage): include Muse Code session history (pingdotgg#22443) Co-authored-by: Theo Browne <me@theo.li> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * feat(mobile): add Usage and Settings to workspace navigation (pingdotgg#23841) * fix(mobile): keep iPad workspace columns aligned while resizing (pingdotgg#24182) * fix(mobile): no-project threads show a chat bubble instead of a monogram (pingdotgg#21546) * fix(mobile): stabilize Duo search and portrait navigation (pingdotgg#24206) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mobile): the unfolded Duo keeps its header in portrait (pingdotgg#24339) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(client-runtime): avoid duplicate handoff previews during startup (pingdotgg#24349) * fix(mobile): Usage and Settings use the glass header and the Duo rail (pingdotgg#24348) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * perf(server): coalesce superseded streaming text updates (pingdotgg#24267) * fix(server): stop flooding analytics with successful MCP tool calls (pingdotgg#24287) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * feat(search): Cmd+K finds the right thread first, with indexed message search (pingdotgg#24343) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> --------- Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> Co-authored-by: Theo Browne <me@t3.gg> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Joseph Vidal <135430578+josephv123@users.noreply.github.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: Theo Browne <me@theo.li> Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> Co-authored-by: PR Batch Tester <agent@local.test> Co-authored-by: fixfon <12512757+fixfon@users.noreply.github.com> Co-authored-by: Yash Singh <saiansh2525@gmail.com> Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com> Co-authored-by: Yukun Shan <92423096+nateEc@users.noreply.github.com> Co-authored-by: Akshar Patel <123344143+AksharP5@users.noreply.github.com> Co-authored-by: Ben Davis <45952064+bmdavis419@users.noreply.github.com> Co-authored-by: Yordis Prieto <yordis.prieto@gmail.com> Co-authored-by: Alex <me@pixp.cc> Co-authored-by: Victor Vogel <satsdev@only21mil.xyz> Co-authored-by: oliver <97427849+flamboh@users.noreply.github.com> Co-authored-by: Wiktor Golicz <56449542+Wiktor102@users.noreply.github.com>
On mobile, threads without a project showed an "NP" monogram tile. Desktop shows a gray chat bubble. The server gives the no-project folder a Lucide
message-square-dashedicon, but mobile has no Lucide set, so every Lucide icon fell back to a monogram.ProjectFaviconnow draws that icon as the nativetext.bubblesymbol, tinted with the icon's color. That's the same symbol mobile already uses for the "No project" option in the project picker. Lucide icons that people pick for their own projects still fall back to a monogram, and the composer chip is unchanged.Captured on the iOS 27.0 simulator, the Android 16 emulator and the web client.
Scope and approval
Fixes #16346, which is triaged as a bug. Triage suggested reusing the picker's symbol so every "No project" surface on mobile looks the same, and this PR does that. The earlier fix, #16347, was closed only because it had no before/after screenshots; they're included above.
Made with Claude Opus 5.5 in Claude Code via T3 Code.