Repository navigation
feat(desktop): project sidebar shell and Lanes redesign - #1304
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
|
Important Review skippedToo many files! This PR contains 154 files, which is 54 over the limit of 100. To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch. Upgrade to a paid plan to raise the limit. This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry. ⚙️ Run configurationConfiguration used: Repository: arul28/ADE/.coderabbit.yaml Review profile: CHILL Plan: Advanced Run ID: ⛔ Files ignored due to path filters (12)
📒 Files selected for processing (154)
You can disable this status message by setting the Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Note
Newer findings are available below. Devin Review posted a newer report on this PR, in addition to the findings presented here.
Devin Review found 3 potential issues.
2 flags not posted on this PR by your GitHub settings — view them in Devin Review. (Configure)
| const detailLaneId = useMemo(() => { | ||
| if (selectedLaneId && lanesById.has(selectedLaneId) && !deletingLaneIds.has(selectedLaneId)) return selectedLaneId; | ||
| return selectableFilteredLaneIds[0] ?? sortedSelectableLaneIds[0] ?? null; | ||
| }, [selectedLaneId, lanesById, deletingLaneIds, selectableFilteredLaneIds, sortedSelectableLaneIds]); |
There was a problem hiding this comment.
🟡 Collapsed matches leave lane dashboard blank
When a filter matches only collapsed-group lanes, selectableFilteredLaneIds is empty and the selected lane can fall outside the filter. detailLaneId becomes null despite matching lanes, leaving the dashboard blank.
Learn more
The sidebar builds selectableFilteredLaneIds from laneSidebarVisibleLaneIds, which excludes collapsed State groups. Filtering can match lanes whose group is collapsed, leaving that list empty. In that case, the new selection branch discards the previous selection but cannot choose a matching replacement.
Example: Select lane A, collapse the Behind group containing lane B, then search for B. B matches the filter, but the dashboard is blank because no visible row qualifies.
Recommended fix: When a filter matches lanes but none have visible rows, either expand the matching group before choosing a lane or fall back to a non-deleting ID from filteredLanes; ensure the resulting selection can be revealed.
Was this helpful? React with 👍 or 👎 to provide feedback.
Replace the hover rail with one fixed-width project sidebar. It has a tab strip (Work, Lanes, Files, PRs, Automations), a body that each tab fills through a portal, and a footer with CTO, History and Settings. - Top bar: sidebar toggle, project tabs, status. The window gradient now covers the top bar, the new chat pane and the welcome screen as one field. - Settings: an Account section, and feedback, help and zoom in its sidebar. - CTO and History open over the page you were on. The sidebar stays as it was, and the footer becomes one Back button. - Lanes: the sidebar lane list is the lane manager. It groups lanes by state, has a State or Stack toggle and bulk actions on group headers. The main area shows the selected lane with the Git pane beside it. - Work, Files, PRs and Automations lists live in the sidebar. Headers share one rail height. Scrollbars show only while scrolling. Menus that could be clipped now open on top of the page. - Remove dead code: the old rail, the Git pane page skin, the gradient header variant, the lane Work pane and the lane banner budget setting. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2aa98c5 to
2fca71a
Compare
Co-authored-by: Cursor <cursoragent@cursor.com>
There was a problem hiding this comment.
Devin Review found 3 new potential issues.
4 flags not posted on this PR by your GitHub settings — view them in Devin Review. (Configure)
| }, [laneId]); | ||
|
|
||
| const prs = useLaneOverviewPrs(lane); | ||
| const { current: currentPr, earlier: earlierPrs } = useMemo(() => splitLanePrs(prs.all), [prs.all]); |
There was a problem hiding this comment.
🟡 Historical pull requests disappear from dashboard
When a lane has only earlier-branch PRs, splitLanePrs(prs.current) returns no prominent PR. The PR section requires currentPr, so none of those PRs appear on the dashboard.
Learn more
The lane PR hook separates current-branch PRs from the historical collection in useLaneOverviewPrs. The PR section renders only when currentPr exists in LaneDashboard. Choosing the prominent PR solely from prs.current leaves that section empty when the branch has changed but earlier PRs still belong to the lane.
Example: A lane once had PR #12 on feature/old and now points at feature/new, which has no PR. prs.current is empty and prs.all contains #12; the dashboard shows no PR section instead of #12.
Recommended fix: Fall back to splitLanePrs(prs.all).current when prs.current is empty, then exclude that PR from the earlier list. Preserve current-branch priority when current PRs exist.
Was this helpful? React with 👍 or 👎 to provide feedback.
| }, [commits, historySessions, lane, operations, prs.all, trailerProviderBySha]); | ||
| const filtered = useMemo(() => filterLaneHistory(history, filter), [filter, history]); | ||
| // The primary lane's commit list is paged, so a full page may hide older rows. | ||
| const hasMoreCommits = lane?.laneType === "primary" && commits.length >= commitLimit; |
There was a problem hiding this comment.
🟡 Git pane collapses to zero width
In a narrow window, dragging the splitter right lets clampGitColumnWidth return zero. The Git pane disappears, and its saved width resets on reload because readStoredWidth rejects zero.
Learn more
The splitter calls clampGitColumnWidth on every mouse move and saves the resulting value on release. With an 800px container, dragging far right sends a negative requested width; the narrow-window branch clamps it to zero. readStoredWidth ignores zero on the next mount, so the pane then returns at its default size.
Example: At 800px, drag the divider fully right. The Git pane reaches 0px rather than retaining a usable minimum and resets after restarting.
Recommended fix: Set a positive Git minimum for narrow containers that fits alongside a dashboard minimum; clamp both panes to feasible sizes for very small container widths. Keep persisted-width behavior consistent with the permitted minimum.
Was this helpful? React with 👍 or 👎 to provide feedback.
Co-authored-by: Cursor <cursoragent@cursor.com>
…lit honest Co-authored-by: Cursor <cursoragent@cursor.com>
Take main's sidebar and Lanes redesign (#1304) and unified notices (#1305): - The Mac Desktop hover peek moves into the new lane sidebar row. - The reconnect sign-in link rides in the shared Banner's detail. - The Apple strip takes main's Banner; the Mac Desktop strip moves to the same Banner, and the now-unused shared ToolStatusStrip shell is removed. - The backdrop keeps main's field slicing (no header-only constants) plus this lane's render scale and idle freeze. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Problem
The desktop shell used a top tab rail, and the Lanes tab was a multi-pane cockpit that did not match the Work list.
Change and boundary
One project sidebar now hosts Work, Lanes, Files, PRs, and Automations at a shared width, with CTO and History opening over the page you left. The Lanes tab is a state-grouped sidebar plus one selected lane (dashboard and Git pane). Settings gains an Account section, and the window gradient is limited to the top bar, the Work new-chat pane, and the project picker.
This stays in the desktop renderer, shared keybindings, and one project-config change that drops the unused lane banner budget key. iOS and the TUI do not get this shell.
Verification
cd apps/desktop && npx vitest runon the edited renderer files after the quality fixes: 65 passed (ProjectSidebar, PRsPage, lane history, lane sidebar, App keep-alive).origin/main: TerminalsPage, ProjectSidebar, PRsPage, and App keep-alive, 100 passed.Authored with Grok 4.7 via Cursor.
Made with Cursor