Skip to content

Agent: group the sidebar under project folders, with View options - #1289

Open
doowta wants to merge 4 commits into
ux/sidebar-polishfrom
ux/projects-view
Open

doowta wants to merge 4 commits into
ux/sidebar-polishfrom
ux/projects-view

Conversation

@doowta

@doowta doowta commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Current GitHub stack — October 26, 2026

Native GitHub stack #1304: master → #1278 → #1289.

Head: f77e74833cfe3259297303213305dd5dd5becb6f. Base: ux/sidebar-polish at 45fa4a1df68c4774356e8161dc4b2c3c42aa9ba2.

This is the top layer of native GitHub stack #1304, based on #1278 (45fa4a1d). The four original folder/View/submenu commits remain separate. Reconciled the newly merged Search row, its focus/reveal call and existing row-index expectations while preserving folder hover behavior.

Current validation: Rust formatting and the pinned-component macOS debug build/package passed at combined stack tip f77e74833cfe3259297303213305dd5dd5becb6f. Artifact revision, development PCR trust, isolated bundle identity and hosted Dev configuration were verified. Joint human manual testing is pending. No local unit/integration suites, just ci, test-running hooks or automated computer-use tests were run; MAPLE_HOOK_SKIP=1 was used.

This is combined-tip build/startup evidence. Neither refreshed layer has a separate manual pass. Existing screenshots and original-author checks below predate this rebase.


Why

  • The sidebar mixes every project in one Active list and repeats the project name on each task, so tasks from different projects blur together.
  • Grouping and order are fixed (status, newest first), with no way to find tasks by project, date or name.

What this PR adds

  • Project folders: tasks grouped under collapsible folders, one per known project, ranked by recent activity. A Projects header folds them all; Pinned and Archived stay separate. An expanded empty project shows a muted "No tasks".
  • Folder actions: hovering a folder shows "…" (project options) and New task; right-click opens the same menu at the pointer; rename happens in the folder header.
  • View options: a header button with Group by (Folder, Status, Recent), Sort by (Updated, Created, Name, either direction) and Show (project names), plus Reset. Choices are saved.
  • Menu submenus: the menu component (popup.rs) gains fly-out submenus, with pointer, keyboard and Vim support, used by View options.

Screenshots and a recording follow shortly.

Related: top layer of native GitHub stack #1304, based on #1278. Stack 1 is included through merged master. #1280, #1281 and #1283 remain independent.

Remote: with a paired computer, the sidebar keeps today's computer switcher and status sections; folders and View options apply to the single-computer sidebar. Switching from paired back to a single computer rebuilds the grouping. Project menus route through the owning computer as before.

Details for reviewers (commits, design, files, checks)

Commits (four original feature boundaries retained)

  1. Agent: group the sidebar under project folders: 6 files, +1,892 / −376.
  2. Agent: let a menu item open a submenu: 2 files (popup.rs, keymap.rs), +569 / −17.
  3. Agent: add sidebar View options: 7 files, +666 / −157.
  4. Agent: show View options as submenus: 3 files, +89 / −29.

Design

  • Grouping and sorting run when sidebar state changes; render reads cached sections. Sorting is stable and applies to loaded tasks, including Pinned and Archived; Load more extends it. Paging keeps the host's cursor order, and project pages show folders before their task pages arrive.
  • Every menu goes through popup.rs. Submenus open after a 175 ms hover (one cancellable delay, no polling) or immediately on click, Right or Enter; Left and Escape return to the parent; picking an item closes the chain. Children sit beside their row and flip at the window edge.
  • Folder hover clears on rebuilds and real list movement; a zero-distance wheel event (trackpad) no longer closes an open menu.
  • View choices persist through the existing host settings writer; missing or unknown saved values fall back to defaults.

Scope: project folders, View options and shared submenu support in the existing 11-file layer.

Original author checks (historical, before the current rebase; component Nix shell, Xcode 26.5)

  • cargo fmt --all -- --check: passed.
  • cargo clippy -p maple-agent-app --all-targets --locked -- -D warnings: passed.
  • cargo test -p maple-agent-app --locked: 971 passed, 2 ignored. Each commit compiles on its own.
  • Full workspace CI was not run locally; GitHub CI covers it. The local commit hook was skipped (MAPLE_HOOK_SKIP=1) because of the existing updater test installer::tests::reads_native_release_tar_format_and_preserves_bundle_modes, which fails only on this machine.

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

@marksftw
marksftw added this pull request to stack #1304 October 26, 2026 19:34
doowta and others added 4 commits October 26, 2026 14:37
Keep each project's tasks together so the sidebar can show all projects
without repeating a project line on every task. Cache folder sections and
folds, preserve pin-aware activity ranking, and put project actions and
inline rename on the folder headers. Keep the paired switcher and task
ladder behavior while making the single-computer Projects header fold the
list and reveal Add project on hover.

Co-Authored-By: Codex GPT-6.1-Sol <noreply@openai.com>
Grouped choices need a child menu attached to their row, with the current
value visible before it opens. Reuse nested popups for delayed hover,
keyboard navigation, focus return, and placement that flips at the edge.

Dismiss ancestors only for submenu selections so existing nested field
and project menus keep their selection behavior.

Co-Authored-By: Codex GPT-6.1-Sol <noreply@openai.com>
Let a single-computer sidebar switch between Folder, Status and Recent,
choose a stable order for every section, and choose whether task metadata shows.
Persist the view with safe defaults and keep paired browsing unchanged.
Reveal the header controls on hover while keeping the open View menu's
button visible. Omit Date grouping until its clock lifecycle is defined.

Co-Authored-By: Codex GPT-6.1-Sol <noreply@openai.com>
Keep grouping, sort order, and row visibility in separate child menus so
View options stays compact and shows its current choices. Reuse the shared
popup navigation and dismissal while preserving saved view preferences.

Co-Authored-By: Codex GPT-6.1-Sol <noreply@openai.com>

This branch has not been deployed

No deployments
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.

1 participant