Skip to content

Agent: group and order sidebar tasks across computers - #1289

Merged
AnthonyRonning merged 29 commits into
ux/sidebar-polishfrom
ux/projects-view
Oct 28, 2026
Merged

AnthonyRonning merged 29 commits into
ux/sidebar-polishfrom
ux/projects-view

Conversation

@doowta

@doowta doowta commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Current implementation

This PR lets tasks from local and remote computers share one predictable sidebar while keeping their project, computer, and status ownership intact. It builds on the visual foundation in #1278, in GitHub stack #1304: master → #1278 → #1289.

Hands-on testing exposed confusing automatic project movement and differences between local and remote views. We simplified the sorting controls and added Connection grouping. The behavior below is the final implementation. Earlier proposals and descriptions are preserved below for historical reference; their superseded controls and old validation claims are not the current specification.

Grouping and sorting

Menu Final choices
Group tasks by Project, Connection, Status, In one list
Sort tasks by Last updated, Manual order
  • Project groups tasks beneath collapsible project folders and retains known empty projects. Connection groups projects beneath computer headings. Status groups ordinary tasks by Active/Settled; Archived remains separately accessible. In one list removes those grouping containers.
  • Connection is available once another computer has been added through Connect to another computer, including while that computer is offline. This computer's Remote access toggle does not control whether the grouping option appears.
  • Last updated orders tasks by activity. Projects and connections retain stable positions instead of jumping with task activity.
  • Manual order persists on the viewing desktop across grouping changes and restarts. New tasks appear at the top of their Manual-order group; later activity does not rearrange them.
  • The earlier Date created, Name, ascending/descending, Show, and Reset controls have been removed, along with the superseded grouping/sorting and header paths.

Pins, dragging, and menus

  • Pinned tasks appear once in a dedicated Pinned section above the Projects/Tasks/Connections header and remain visible when that grouping is collapsed. They leave their ordinary group visually while retaining their original project, computer, and status. Unpinning returns them to the appropriate group and ordering.
  • Dragging a task silently selects Manual order. Projects and connections can also be reordered; dragging changes presentation without moving a task to another project, computer, or status. Each landing gap has one thin orange insertion line.
  • Project Move up / Move down actions work alongside dragging. Task/project popups group related actions, keep keyboard access, and isolate Delete/Remove behind a thin divider.
  • View, Task, Project and New project chooser popups open toward the main pane, keeping task titles readable. Shared fly-out submenus support pointer, keyboard, Application Vim, and window-edge flipping.
  • Local, remote, pinned, and archived task titles share a consistent text column and section spacing. Switching computers or opening New Task after a drag does not shift the existing rows. Project-row hover keeps the normal cursor.
  • The Unpin icon uses the task's actual identity, fixing the saved-data conflict caused by passing its screen-element ID.

Creating projects on the intended computer

With another computer added, the global New project button opens a New project on device chooser, independently of the currently selected task. Selecting This Computer opens the local picker; selecting a remote computer opens that computer's folder browser. Each Connection heading also shows the existing New project icon on hover and opens its own picker directly.

The first selected remote folder is retained instead of being replaced by the remote default workspace. Viewer-local remote pins update immediately, Archived appears immediately after the first archive in Status/flat views, and Connection grouping survives inventory loading after restart.

Persistence and compatibility

Grouping and sorting stay on the viewing desktop; manual ranks and personal pins are scoped to its signed-in account. Remote task/project ownership stays with the execution computer. Remote protocol remains 7; remote wire/discovery and host paging match the tested master baseline. No remote sorting parameters, commands, or capabilities were added.

Review fixes

Anthony's blocking feedback is addressed: the test API compiles; invalid or unknown View preferences fall back without blocking host startup/settings edits; stale Manual catalog reads are canceled and activity coalesces into one trailing refresh. Investigation of the reported failures also fixed own-project scopes rendering the wrong pages while computers are paired.

Pinned drag order now has independent desktop-local ranks, so ordinary tasks keep their relative order and unpin returns to the expected position. First Manual selection includes cached tasks in folded groups. Merged Active/Settled and cross-computer lists expose a complete sorted prefix so Load more appends instead of filling gaps. Presentation-state flush failures are logged without blocking sign-out. Confirmed task deletion prunes its own computer's saved ranks, and missing icons/accessible names are fixed.

Unpaired-computer rank pruning and narrower/fewer Manual scans remain optional follow-ups. No remote protocol or paging API expansion was made.

Validation

The full native Computer Use report covers the combined stack at 3de538cf: 66 recorded checks, 65 passed, one pre-existing nonblocking issue. Subsequent layout, Pinned-section, and Unpin fixes received focused Computer Use checks, including local and remote tasks; this was not another full-suite run.

At 5588a070, GitHub Agent CI passes lint, workspace tests, macOS validation and Windows updater/typechecking. The app suite reports 1,144 passed, 0 failed, 3 ignored. New regressions cover invalid settings, cancellation/coalescing, scoped project pages, large/skewed/tied pagination, independent pin order, folded-group seeding, sign-out failure handling and popup geometry/keyboard behavior.

The unchanged normal macOS Dev Debug build/package passed and was launched. 12 focused Computer Use checks passed: nine on 564a30a3 covered menus, keyboard Rename/cancel, local/remote picker routing, pin drag/unpin and connection disclosure; three on final 5588a070 checked restart persistence, the corrected Move-down icon and final popup placement. QA found and fixed the missing icon registry entry. No projects/tasks were created or removed; temporary QA pins were cleared and original View choices restored. This was focused regression testing, not another full 66-check UI run.

Local formatting, the four-mode warning-denied Clippy matrix and Git metadata checks passed. Full local workspace/test rebuilds were interrupted to preserve disk; successful complete-suite evidence comes from CI. No WAN benchmark, heavy live-history, native Windows/Linux UI, destructive-action or full VoiceOver coverage is claimed.

Separate nonblocking issue: At a very narrow window size (about 602 × 502 logical pixels), an expanded sidebar can leave main-header/composer controls clipped at the right edge. This predates this work and is outside this PR's scope; it is documented in the test report as an independent layout follow-up.

Head: 5588a070. Base: ux/sidebar-polish at 9bccfe8a.

Screenshot 2026-10-27 at 4 23 01 PM Screenshot 2026-10-27 at 4 22 34 PM

Historical reference

The material below is preserved as a record of earlier designs, screenshots, implementation notes, and checks. It is superseded by the current implementation and validation above.

Original proposal and earlier stack notes — before the simplification

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

Description immediately before this final rewrite

Changes

Tasks can be organized without losing their project or execution computer. Group tasks by offers Project, Connection, Status and In one list; Sort tasks by offers Last updated and Manual order. Connection appears once another computer is added, including while offline; enabling this computer's Remote access alone does not add it.

  • Projects and connections keep stable positions and can be reordered. Dragging a task silently switches to Manual order; new tasks appear at the top. Manual order persists across grouping changes and restarts on the viewing desktop.
  • Project folders retain known empty projects and share one header with project options, inline rename and New task actions. Move up/down works; menus group related actions and separate destructive actions.
  • Dragging uses one orange insertion cue per landing gap. View options extends right from its button. Shared submenus retain pointer, keyboard, Application Vim and window-edge handling.
  • New project asks which computer to use, independently of the current task. Connection headings also provide a direct New project button, visible computer icon and aligned label/disclosure spacing.

The previous folder/date/name/direction/Show/reset design and old header fallback have been removed. Shared ordering helpers replace duplicated calculations.

Bugs fixed

  • Preserve the first selected remote folder instead of replacing it with the runtime's default workspace.
  • Reflect viewer-local remote pin state immediately.
  • Keep Archived accessible in Status and In one list.
  • Preserve Connection grouping while the computer inventory loads after restart.

Sidebar grouping, manual ranks and personal pins remain local to the viewing desktop. Remote protocol stays at 7; wire/discovery and host paging match the tested master baseline. No remote sorting parameters, commands or capabilities were added.

Stack and validation

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

Head: 3de538cf3f20e9c3a41f1c7744b1dbb6beb232ab. Base: ux/sidebar-polish at 9bccfe8a1e4b72c905a1f8c779ce0aa24253252f. Original feature commit boundaries and subsequent refinement/fix commits are retained.

The earlier combined 50-check native UI pass found four bugs. All four were fixed and received 11 targeted native regression checks with no failures. Later refinements received focused checks rather than another complete UI pass. The latest normal macOS Debug build, formatting and project/search/header/menu/rename-cancel/folding checks passed at 52fdf95b, against Dev with a paired Mac on master. The published tip has an identical Git tree; restacking only moved the spacing commit into #1278.

Large-history paging, peer removal/offline transitions, destructive actions, other platforms and full VoiceOver remain unverified. The removed missing-metadata fallback was source-reviewed; the transient condition was not forced in the live app. Full local unit/integration suites, just ci and test-running hooks were skipped as requested (MAPLE_HOOK_SKIP=1). No remote projects were removed or deleted; remote QA creations stayed within agent-sandbox.


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

@marksftw

Copy link
Copy Markdown
Collaborator

UI testing summary — October 27, 2026

Ran 50 live computer-use UI checks across the combined #1278 → #1289 stack and the latest New project computer chooser: 46 passed, 4 failed. Tested macOS Debug against Dev with a paired Mac on master, using remote protocol 7.

The tested local revision was d17a4a3046875cd00de2930aef4e5e9a17553f87, which includes refinements not yet pushed to #1289. These results describe that combined development build.

Bugs found

  1. First remote folder selection is overwritten. After launching the app, choose a remote project folder through New project. The project is added, but the New Task view reverts to the remote default workspace. This also reproduced with an existing folder after restarting. Source inspection points to a pre-existing activation issue exposed by the new chooser.
  2. Remote Pin task has no visible effect. The menu closes, but the task gets no pin indicator and reopening the menu still offers Pin task. Reproduced with mouse and keyboard, with the task selected and unselected. This is a display/state mismatch; it does not establish that saving the preference failed.
  3. Archived access disappears in Status / In one list. Archiving the first task while in Status removes it without exposing an Archived section. Switching to In one list still leaves it inaccessible; switching to Project reveals Archived and allows reopening it.
  4. Connection grouping resets after restart. Save Group tasks by → Connection and quit normally. On relaunch it changes to Project while remote computers load, and stays there after the remote computer returns.

All four findings remain unfixed, pending discussion. New remote QA projects were confined to agent-sandbox; no remote projects were removed or deleted.

This pass did not exercise large-history paging, peer removal/offline transitions, destructive actions, other platforms, or full VoiceOver navigation. Drag placement was checked, but the atomic computer-use drag could not capture the insertion line mid-drag.

doowta and others added 22 commits October 27, 2026 14:10
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>
@marksftw

Copy link
Copy Markdown
Collaborator

Published refinements — October 27, 2026

Updated ux/projects-view to 3de538cf3f20e9c3a41f1c7744b1dbb6beb232ab, based on #1278 at 9bccfe8a. Native GitHub stack #1304 remains master → #1278 → #1289.

Changes:

  • Simplified View options to Group tasks by: Project / Connection / Status / In one list and Sort tasks by: Last updated / Manual order. Connection is available when another computer has been added, independently of this computer's Remote access switch.
  • Kept project/connection order stable. Task dragging silently selects Manual order; new tasks appear at the top. Ordering and preferences belong to the viewing desktop.
  • Refined drag insertion to one orange landing line per gap; fixed project Move up/down; organized task/project menus into sections with destructive actions separated. View options opens toward the right.
  • Added the New project device chooser and direct New project buttons on connection headings, with visible computer icons, aligned labels and corrected disclosure spacing.
  • Removed obsolete grouping/sorting settings and the old project-header renderer, unused arguments and duplicated ordering logic. All projected projects now use the shared header and its actions.

The four issues in the earlier report are fixed: first remote folder selection is preserved, remote pin state is reflected immediately, Archived remains accessible in Status/List, and Connection grouping survives startup. Those fixes received 11 focused native regression checks with no failures. Subsequent menu, connection, drag and cleanup refinements received targeted checks.

The latest normal macOS Debug build/formatting and header/search/menu/rename-cancel/folding checks passed at 52fdf95b. The published tip has the same Git tree; the restack changed history only. Testing was against Dev with a paired Mac on master, using remote protocol 7. Final wire/discovery and host-paging source match the tested master baseline; no remote sorting commands, parameters or capabilities were added.

The earlier 50-check combined UI pass found four bugs; it was not rerun in full after the fixes. Large-history paging, peer removal/offline transitions, destructive actions, other platforms and full VoiceOver navigation remain unverified. The former missing-project-metadata fallback was removed structurally and source-reviewed; that transient condition was not forced in the live app. Local unit/integration suites, just ci and test-running hooks were skipped as requested. No remote projects were removed or deleted; remote QA creations stayed within agent-sandbox.

@marksftw marksftw changed the title Agent: group the sidebar under project folders, with View options Agent: group and order sidebar tasks across computers Oct 27, 2026
@marksftw

Copy link
Copy Markdown
Collaborator

Computer Use UI test report — October 27, 2026

Completed native macOS UI testing of the combined #1278 / #1289 stack against Dev with a paired remote Mac. 66 recorded checks: 65 passed and one pre-existing, non-blocking issue. No major regressions found in the tested workflows.

Coverage included all four grouping modes with both sort options, empty projects, search, project/task/connection reordering, popup actions and separators, keyboard navigation, sidebar appearance and collapse, local/remote project pickers, new-task placement, draft/attachment retention, and two full app restarts.

All four prior bug fixes passed regression checks: remote pins while viewing a local task, immediate visibility of the first archived task, grouping/manual-order persistence after restart, and retaining the selected remote project after a cold launch.

Tested source is identical to the published stack tip 3de538cf (including foundation 9bccfe8a). Remote protocol remains 7. No source changes were made during this UI test run.

Scope limits: macOS Debug/Dev only; destructive actions, offline/account transitions, large-history paging, other platforms and full VoiceOver testing were not covered. Drag results were verified; the Computer Use API does not expose a held-drag screenshot for checking the orange line mid-drag.

Non-blocking issue — pre-existing and separate from this PR

Very narrow windows can clip the main header and composer controls. At approximately 602 × 502 logical pixels, opening the sidebar leaves controls, including Send, off the right edge. Collapsing the sidebar exposes them again.

This predates the sidebar work and is outside this PR's scope. Source comparison with master 1df4cf70 confirms the fixed sidebar width and relevant composer/header sizing are unchanged. Attribution is based on that comparison; a separate master runtime was not relaunched. This can be handled as an independent layout follow-up.

@marksftw

Copy link
Copy Markdown
Collaborator

Tested manually and ready for review.

@AnthonyRonning

Copy link
Copy Markdown
Contributor

Those cicd failures look valid but probably quick for you to fix.

@AnthonyRonning

Copy link
Copy Markdown
Contributor

This is really tasteful work. I used the stack a lot on a local build with a paired second computer, and it felt solid and fluid: the grouping, the fly-out View menu, drag-to-reorder with the insertion line, Pinned, and "New project on" with the remote folder browser all worked well. Below, items are split into blocking (please fix before merge), nice to fix (not blocking) and minor notes (fine to ignore).

Blocking: please fix before merge

1. CI: the app test target doesn't compile, and once it does, 14 tests fail.

Failing tests
  • ui::chat::sidebar::tests::sidebar_remeasures_an_offscreen_heading_when_its_gap_changes
  • ui::chat::sidebar::computers::paging_tests::switching_sidebars_keeps_loaded_groups_and_own_rows
  • ui::chat::sidebar::paging::tests::metadata_only_project_pages_add_visible_folders
  • ui::chat::sidebar::paging::tests::scoped_pages_exclude_retained_tasks_from_other_projects
  • ui::chat::tests::state_tests::computer_project_search_and_live_summary_refresh
  • ui::chat::tests::state_tests::computer_projects_keep_identical_paths_and_task_ids_separate
  • ui::chat::tests::state_tests::inactive_project_rename_controls_are_scoped_and_do_not_navigate
  • ui::chat::tests::state_tests::renamed_computer_project_keeps_picker_identity_and_updates_cross_computer_search
  • ui::chat::tests::state_tests::test_a_press_on_a_menu_item_reaches_the_item
  • ui::chat::tests::state_tests::test_application_vim_walks_folder_groups
  • ui::chat::tests::state_tests::test_application_vim_row_follows_a_task_opened_on_another_computer
  • ui::chat::tests::state_tests::test_project_and_list_grouping_choose_contextual_labels †
  • ui::chat::tests::state_tests::test_projects_keep_initial_root_order_after_activity †
  • ui::chat::tests::state_tests::test_sidebar_menu_selects_grouping_and_task_order

2. View settings must never stop the app from starting. Make SidebarGroup/SidebarSort lenient.

  • load_host_settings deserializes the whole UI settings blob. Host startup calls it with ? (host.rs:1790), and apply_host_patch calls it before every change.
  • On master, AppSettings has no enums (theme, font and so on are strings). These two strict enums are the first fields in that blob that can fail to parse.
  • Any value this build doesn't know, from a future version after a downgrade or a bad write, makes the host refuse to start. Every settings change fails too. The store is encrypted, so users can't fix it by hand.
  • An earlier iteration of this branch had the right pattern: #[serde(other)] on the default variant. Please restore that on Project and Updated, and turn sidebar_layout_rejects_unknown_choices into a test that unknown values fall back to the defaults.
  • I'd like this to be the standard for view state going forward: unknown or invalid view preferences fall back, they never fail startup.

3. Manual order with a paired computer: cancel stale reloads and coalesce them.

  • In Manual, each sidebar revalidation re-scans Active and Settled history for each shown project on every host.
  • That costs 3 + 2×(projects, up to 20) remote requests instead of 3, run sequentially per project. That's about 2 s on WAN and about 5 s over relay with 20 projects.
  • I confirmed the mechanism live: a pin with 2 remote projects cost 7 requests in Last updated and 10 in Manual, the difference being 4 ListTasks scans.
  • revalidate_computer_pages (sidebar_computers.rs:698) only calls invalidate(). It never calls cancel_pending(), and all scans share one 2-slot queue.
  • So overlapping refreshes pile up. When several agents finish turns, "Loading tasks…" can persist, and new tasks and "more" links stay missing until activity stops. Any drag switches to Manual, so most users who reorder will hit this path.
  • Smallest fix:
    • call self.manual_catalog.cancel_pending() in revalidate_computer_pages (and the two similar paths at :653/:707);
    • queue at most one trailing revalidation while a Manual reload is in flight.
  • Skipping the scan for groups past the 200-row budget and revalidating only the computer that changed can come in a follow-up.

Nice to fix if easy: not blocking

  • Dragging inside Pinned/Status/List writes the group back into the global slots its members held, so other projects' tasks get reshuffled and an unpinned task doesn't return to its spot (sidebar_ordering.rs:636-646, 752-776).
  • Large histories: Active and Settled are paged separately and then interleaved in folders and the flat list, so "Load more" fills gaps mid-list. This is a regression vs master once a computer has more than ~50 tasks per state (sidebar.rs:1620-1634).
  • Sign-out now waits on a settings and sidebar-order flush and stays signed in if that fails (ui/chat/mod.rs:5408-5431). In the same spirit as item 2, presentation state shouldn't block sign-out: log the failure and continue.

Minor notes: fine to ignore

  • sidebar.order only grows: deleted tasks and unpaired computers are never pruned. At 8192 entries or 2 MiB, drags are refused with no reset.
  • The first switch to Manual seeds only the visible rows, so tasks in folded groups end up ordered by creation date.
  • Small polish:
    • the drag preview's message-square icon isn't bundled;
    • Move up uses arrow-up but Move down uses chevron-down;
    • the Unpin icon and the connection chevron have no accessible name.

@marksftw

Copy link
Copy Markdown
Collaborator

Thanks, Anthony. I agree with the feedback and am working through the CI/test failures, safe view-setting fallbacks, and Manual-order reload cancellation/coalescing, along with the smaller ordering and sign-out issues. I’m adding regression coverage and will post the results once the fixes pass testing. I'm also changing the task popup menu so it opens on the right of the cursor so it doesn't cover the sidebar. Remote protocol stays at 7.

@marksftw

Copy link
Copy Markdown
Collaborator

Addressed Anthony's review feedback in 0a4e3480, 564a30a3, and 5588a070.

Fixes

  • Fixed test-target visibility and investigated all 14 reported failures. Corrected a real scoped-project rendering regression with paired computers; updated stale expectations and isolated fixtures without disabling tests.
  • Made unknown/malformed View preferences fall back safely, including host startup and later settings edits.
  • Cancel stale Manual catalog readers and coalesce activity into at most one trailing refresh.
  • Separate Pinned order from ordinary task positions; preserve unrelated tasks' relative order and seed cached tasks in folded groups.
  • Merge paged Active/Settled and cross-computer rows as a complete sorted prefix so Load more appends instead of filling gaps.
  • Log presentation-state flush failures and continue sign-out, retaining authoritative runtime failure handling.
  • Fix missing icons and accessible control names; prune confirmed deleted tasks' saved ranks.
  • Open Task, Project, and New project chooser menus toward the main pane, retaining shared keyboard navigation and viewport flipping.

Validation
CI is green at 5588a070: Agent lint, workspace tests, macOS checks, and Windows typechecking/updater tests passed. The app suite reports 1,144 passed, 0 failed, 3 ignored.

12 focused native Computer Use checks passed against hosted Dev with a paired Mac: nine on 564a30a3 covered menus, keyboard Rename/cancel, local/remote picker routing, pin drag/unpin, and connection disclosure; three on final 5588a070 checked restart persistence, the corrected Move-down icon, and final popup placement. QA found the missing icon registry entry and verified its fix. The normal Dev Debug app was rebuilt and launched. No remote projects/tasks were created, removed, or deleted. This was focused regression coverage, not another full UI-suite run.

Protocol remains 7. Remote wire/discovery and host paging source remain unchanged from the tested master baseline.

Optional follow-ups: unpaired-computer rank pruning and reducing the scope/cost of Manual scans remain deferred. No WAN benchmark, heavy live-history, full VoiceOver, or native Windows/Linux UI pass is claimed. The previously reported narrow-window main-pane clipping remains a separate, pre-existing nonblocking issue.

@AnthonyRonning

Copy link
Copy Markdown
Contributor

Great work, Mark and Michael. I re-reviewed 0a4e3480..5588a070 and re-tested on a local build with a paired second computer. All three blockers are resolved, CI is green, and I'm approving and merging the stack.

The notes below are not requests. They're edge cases we noticed, written down only so we have context if we ever see them in practice. There's no need to work on them.

  • An offline paired computer in In one list / Status can hide rows. An unavailable computer keeps its backend handle, so its stream never counts as complete (sidebar_computers.rs:1534-1571). Rows past its cached frontier stay hidden until it reconnects. Seen once locally: one of the offline computer's cached tasks was replaced by "Could not load tasks — retry more from …". It recovered on reconnect.
  • A Manual drag with partially loaded pages also ranks loaded rows the prefix hides (sidebar_ordering.rs:719-745). Once more pages load, an older task could appear ahead of tasks it used to follow. This only applies with more than ~50 tasks per state.
  • Archiving a project prunes its tasks' Manual ranks (dialogs.rs:558 → forget_tasks → forget_task_order), so a restored task returns to its creation-time position.

@AnthonyRonning AnthonyRonning left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving — see the comment above. Great work.

@AnthonyRonning
AnthonyRonning merged commit d11071f into master Oct 28, 2026
23 checks passed
@AnthonyRonning
AnthonyRonning deleted the ux/projects-view branch October 28, 2026 05:05
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.

3 participants