refactor(web): pass the project record to ProjectFavicon so icons cannot drift - #10714
Conversation
ProjectFavicon took five loose props (environment, cwd, title, favicon path, icon override). Any call site could pass a display label as the title and change the automatic icon, which is how the command palette drifted from the sidebar. ProjectFavicon now takes one project prop typed as a Pick of the project record. Every call site passes the record itself. Sidebar rows, drafts, the chat header, the command palette subtitle, the PR filter menu, and the archive panel drop their per-field plumbing and pass the project through instead. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a focused web refactor and low-risk UI consistency fix: ProjectFavicon now receives the canonical project data so saved titles, favicon paths, and icon overrides cannot drift between surfaces. Existing project behavior is preserved aside from correcting mismatched automatic icons, with focused tests covering the component behavior. You can add or adjust custom eligibility rules. Learn more. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (12)
Included review availability: Your plan provides up to 10 included reviews per hour; 5 remain after this review. 📝 WalkthroughWalkthrough
ChangesProject metadata consolidation
Estimated code review effort: 3 (Moderate) | ~20 minutes Merge Risk: ⚪ Minimal · up to Project favicon rendering now receives cohesive project records across the application, preserving existing behavior for known projects while omitting icons when no project is available. No current merge-blocking risk remains. Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Comment |
Upstream's pingdotgg#10714 changed ProjectFavicon to take a project record instead of flattened props, to stop icons drifting from the saved title/favicon. This page's own ProjectFavicon call wasn't a textual conflict during the merge (upstream never touched this feature-only file), so it silently broke instead of failing the build until now.
## What's Changed * feat(chat): attach files to question answers by @shivamhwp in pingdotgg/t3code#9871 * feat(desktop): refresh macOS installer with aurora artwork by @saphid in pingdotgg/t3code#10632 * fix(server): give completed turns a full session idle window by @StiensWout in pingdotgg/t3code#10689 * feat(web): add pull request merge defaults by @Bil0000 in pingdotgg/t3code#8088 * fix(usage): keep account columns aligned across limit rows by @juliusmarminge in pingdotgg/t3code#10690 * fix(web): chat text no longer shows through a 1px gap under composer banners by @vitalyiegorov in pingdotgg/t3code#10635 * refactor(server): classify runtime exports by @juliusmarminge in pingdotgg/t3code#10274 * refactor(server): classify orchestration exports by @juliusmarminge in pingdotgg/t3code#10275 * refactor(server): classify service exports by @juliusmarminge in pingdotgg/t3code#10276 * refactor(server): classify telemetry exports by @juliusmarminge in pingdotgg/t3code#10277 * refactor(server): classify provider exports by @juliusmarminge in pingdotgg/t3code#10278 * refactor(server): classify source control exports by @juliusmarminge in pingdotgg/t3code#10279 * refactor(server): classify source control registry API by @juliusmarminge in pingdotgg/t3code#10280 * refactor(server): classify preview toolkit exports by @juliusmarminge in pingdotgg/t3code#10281 * ci(knip): enforce server exports by @juliusmarminge in pingdotgg/t3code#10282 * feat(web): add previous/next turn navigation in minimap by @UtkarshUsername in pingdotgg/t3code#8531 * fix(web): stop the settings sidebar shifting when switching pages by @t3dotgg in pingdotgg/t3code#10705 * fix(web): copy terminal selection with Ctrl+Insert by @iamshadmantaqi in pingdotgg/t3code#8541 * fix(web): show the same project icon in the command palette as everywhere else by @t3dotgg in pingdotgg/t3code#10712 * fix(web): stop sidebar rows flashing and shifting on click by @t3dotgg in pingdotgg/t3code#10713 * refactor(web): pass the project record to ProjectFavicon so icons cannot drift by @t3dotgg in pingdotgg/t3code#10714 ## New Contributors * @iamshadmantaqi made their first contribution in pingdotgg/t3code#8541 **Full Changelog**: pingdotgg/t3code@v0.0.41-nightly.20260908.1387...v0.0.41-nightly.20260908.1400 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.41-nightly.20260908.1400
Follow-up to #10712. `ProjectFavicon` took five loose props, and any call site could hand it a display label as the title. The automatic icon is derived from the title, so one wrong string changed the icon on that surface only. That is exactly how the command palette drifted from the sidebar.
`ProjectFavicon` now takes one `project` prop typed as a Pick of the project record (environment, workspace root, title, favicon path, icon override). Every call site passes the record itself, so the saved title and icon override always travel together. Sidebar rows, drafts, the chat header, the command palette subtitle, the PR filter menu, and the archive panel drop their per-field plumbing and pass the project through. Sidebar goes from four per-field lookup maps to one.
Behavior is unchanged where a project exists. Rows with no matching project record used to render a generic icon from an empty title. They now render no icon.
Verified with the web typecheck, lint on the touched files, and the favicon, command palette, chat header, and PR filter test files.
Created with Claude Fable 5.1 in Claude Code.
🤖 Generated with Claude Code
Summary by CodeRabbit