Skip to content

feat(desktop): per-lane visibility toggles on the workspaces board - #6568

Merged
Kitenite merged 3 commits into
mainfrom
board-lane-visibility
Aug 17, 2026
Merged

Kitenite merged 3 commits into
mainfrom
board-lane-visibility

Conversation

@Kitenite

@Kitenite Kitenite commented Aug 17, 2026 •

Copy link
Copy Markdown
Member

Links

Summary

  • Adds a Lanes section to the board's Display dropdown: one checkbox per lane (Idle, Working, Needs attention, Needs review, Merged, Deleted), each with its BoardColumnIcon status glyph, so any lane can be hidden — not just the empty archived ones.
  • Includes fix(desktop): hide empty archived workspace lanes #6563 as its base: board view by default, archived hidden by default, and empty Merged/Deleted lanes omitted while archived workspaces are hidden.

Why / Context

#6563 fixed the empty Merged/Deleted lanes left behind by the archived filter, but hiding was implicit and hard-coded to those two lanes. The actual intent is user-controlled column visibility. Linear's board (our reference) offers per-column "Hide column" plus a "Show empty columns" toggle; this PR brings the per-lane control to our board in the Display menu where the other board options already live.

How It Works

  • v2WorkspacesFilterStore gains hiddenLanes: V2WorkspacesBoardLane[] and toggleLane(). The lane union is defined self-contained in the store (mirroring BoardColumnKey) to avoid the store → deriveBoardColumn → useAccessibleV2Workspaces → store import cycle; reset() restores all lanes.
  • V2WorkspacesHeader renders the Lanes checkbox section only in board view, reusing BOARD_COLUMN_LABELS and BoardColumnIcon so the menu rows match the column headers 1:1. onSelect is prevented so the menu stays open while toggling several lanes.
  • V2WorkspacesBoard filters getVisibleBoardColumns(...) (from fix(desktop): hide empty archived workspace lanes #6563) by hiddenLanes.

Manual QA Checklist

Verified end-to-end over CDP against the dev app (renderer on this branch, real signed-in session):

  • Display menu shows the Lanes section with all six lanes checked and their status icons
  • Unchecking "Needs attention" removes the lane from the board immediately; menu stays open
  • Re-checking restores the lane
  • Lanes section absent in list view
  • fix(desktop): hide empty archived workspace lanes #6563 behavior intact: archived hidden by default omits empty Merged/Deleted lanes; "Past week" restores them
  • Zero renderer console errors during the flow

Testing

  • bun run --cwd apps/desktop typecheck
  • bun test for the v2-workspaces suite (16 pass: new toggleLane/reset tests + existing store, board-column, and filter tests)
  • Mutation check: no-op'ing toggleLane makes the new test fail
  • Scoped biome check --write on all touched files

Known Limitations / Follow-ups

  • hiddenLanes is in-memory only — not persisted to the URL or across restarts (same as other filter state pre-fix(desktop): hide empty archived workspace lanes #6563; URL persistence is a natural follow-up).
  • Hiding all six lanes yields an empty board; Linear solves discoverability with an always-visible "Hidden columns" rail at the board's end — good follow-up if we want parity.
  • No per-lane-header hide affordance (Linear's ⋯ → Hide column) yet; the Display menu is the single control surface for now.

Summary by cubic

Adds per-lane visibility toggles to the Workspaces board and sets Board as the default view with archived items hidden by default. Previously only empty Merged/Deleted lanes were implicitly hidden when archived were hidden; now users can show/hide any lane from the Display menu.

Review notes

  • UI: Display dropdown adds a Lanes section (Idle, Working, Needs attention, Needs review, Merged, Deleted) with status icons; shown only in board view; the menu stays open while toggling.
  • Store: adds hiddenLanes and toggleLane(lane); defaults now viewMode: "board" and archivedWindow: "none"; reset() clears filters and hidden lanes, preserves the chosen view, and restores archived to "none".
  • Rendering: board uses getVisibleBoardColumns(...); when archivedWindow === "none", empty Merged/Deleted lanes are omitted; visible lanes are further filtered by hiddenLanes.
  • Routing: view accepts "board" or "list"; default values are omitted from the URL (view omitted when board, archived omitted when none); parsing handles both.
  • Tests: adds unit tests for getVisibleBoardColumns and the filter store. Hidden lanes are not persisted (URL/app state persistence is a follow-up).
  • Supersedes and includes fix(desktop): hide empty archived workspace lanes #6563.

Written for commit cd68a98. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • New Features
    • Added board display controls to show or hide individual workspace lanes.
    • Board columns now adapt to archive settings and available workspace counts.
    • Preserved selected board or list view and filters when navigating or sharing URLs.
  • Bug Fixes
    • Corrected empty-state behavior for all archive-window filters.
    • Archived columns now remain visible when they contain workspaces.
  • Tests
    • Added coverage for lane visibility, archive column behavior, filter resets, and lane toggling.

Roshvan and others added 3 commits August 17, 2026 15:11
Linear-style lane hiding: each board lane gets a checkbox (with its
status icon) in the Display dropdown, backed by hiddenLanes in the
filter store. Toggling keeps the menu open; reset restores all lanes.
@coderabbitai

coderabbitai Bot commented Aug 17, 2026 •

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: fa5c5d0e-dab7-4d6c-a37d-bacc337a0772

📥 Commits

Reviewing files that changed from the base of the PR and between 630a41f and cd68a98.

📒 Files selected for processing (10)
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspaces/components/V2WorkspacesBoard/V2WorkspacesBoard.tsx
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspaces/components/V2WorkspacesBoard/utils/getVisibleBoardColumns/getVisibleBoardColumns.test.ts
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspaces/components/V2WorkspacesBoard/utils/getVisibleBoardColumns/getVisibleBoardColumns.ts
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspaces/components/V2WorkspacesBoard/utils/getVisibleBoardColumns/index.ts
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspaces/components/V2WorkspacesHeader/V2WorkspacesHeader.tsx
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspaces/components/V2WorkspacesList/V2WorkspacesList.tsx
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspaces/page.tsx
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspaces/stores/v2WorkspacesFilterStore/index.ts
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspaces/stores/v2WorkspacesFilterStore/v2WorkspacesFilterStore.test.ts
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspaces/stores/v2WorkspacesFilterStore/v2WorkspacesFilterStore.ts

Included review availability: Your plan includes up to 10 reviews per rolling hour; 8 remain after this review.


📝 Walkthrough

Walkthrough

The V2 Workspaces page now supports board-lane visibility controls, archive-aware board columns, and synchronized board or list view state in the URL and filter store.

Changes

V2 Workspaces filtering and view state

Layer / File(s) Summary
Filter state and URL synchronization
apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspaces/stores/v2WorkspacesFilterStore/*, apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspaces/page.tsx, apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspaces/components/V2WorkspacesList/V2WorkspacesList.tsx
The filter store tracks hidden lanes and uses board view with no archive window by default. The route validates and preserves board or list view values and synchronizes defaults in the URL.
Archive-aware board columns
apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspaces/components/V2WorkspacesBoard/*
The board hides empty archived columns unless an archive window is active, removes hidden lanes, and renders the computed column list.
Board lane display controls
apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspaces/components/V2WorkspacesHeader/V2WorkspacesHeader.tsx
The board-view Display menu now provides labeled, icon-based checkboxes for toggling lane visibility.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Merge Risk: ⚪ Minimal · up to cd68a

This change adds optional per-lane visibility controls to the workspaces board, with hidden lanes restored through the Display menu. No actionable merge-blocking risk remains after normal checks and review.

Sequence Diagram(s)

sequenceDiagram
  participant V2WorkspacesHeader
  participant v2WorkspacesFilterStore
  participant V2WorkspacesBoard
  participant getVisibleBoardColumns
  V2WorkspacesHeader->>v2WorkspacesFilterStore: toggleLane(lane)
  v2WorkspacesFilterStore-->>V2WorkspacesBoard: update hiddenLanes
  V2WorkspacesBoard->>getVisibleBoardColumns: provide archive window and workspace counts
  getVisibleBoardColumns-->>V2WorkspacesBoard: return archive-aware columns
  V2WorkspacesBoard->>V2WorkspacesBoard: render columns excluding hidden lanes
Loading

Possibly related PRs

Suggested reviewers: saddlepaddle

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description check ✅ Passed The description explains the changes, context, implementation, testing, manual QA, and known limitations in sufficient detail.
Title check ✅ Passed The title uses conventional commit format and clearly describes the primary change: per-lane visibility toggles on the workspaces board.
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.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch board-lane-visibility

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.

❤️ Share

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

@Kitenite
Kitenite merged commit b404f8d into main Aug 17, 2026
12 checks passed
@Kitenite
Kitenite deleted the board-lane-visibility branch August 17, 2026 22:03
@github-actions

Copy link
Copy Markdown
Contributor

🧹 Preview Cleanup Complete

The following preview resources have been cleaned up:

  • ⚠️ Neon database branch

Thank you for your contribution! 🎉

Kitenite added a commit that referenced this pull request Aug 19, 2026
* docs: weekly update for PRs merged 2026-08-12 to 2026-08-19

- usage.mdx (new): Usage page - quota meters, multi-account switching,
  expired sign-in copy command, token-cost analytics, machine resources
  (#6530, #6567, #6585, #6628)
- agent-integration.mdx: interrupted agent sessions now auto-resume;
  Resume button/banner replaced by Resuming pill + failure Retry (#6572)
- automations.mdx: Triggers list on the detail page - multiple schedules,
  Add Trigger, explicit Save triggers; Custom label; COUNT/UNTIL and
  no-upcoming-run rules rejected (#6534, #6542, #6618)
- workspaces.mdx: Board default + Filter/Display menus, Pinned filter,
  per-lane visibility toggles (#6561, #6568); CLI/automation sessions
  auto-place in the sidebar (#6558)
- first-workspace.mdx: stale Auto-run command line reworked (toggle now
  lives on tasks surfaces only)

Trigger event providers (Slack/Linear/GitHub/etc.) deliberately not
documented: gated to internal accounts by automation-event-triggers.

* docs: tighten wording in the weekly update

* docs: add Usage page screenshot captured from the live app
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants