Refine archive management UX across web and mobile#3552
Conversation
- Group archived threads by project with collapsible sections - Add sortable archived/created columns and inline row actions - Support direct delete and bulk project actions with confirmation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
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 |
ApprovabilityVerdict: Needs human review This PR introduces significant new archive management features including search functionality, sortable columns, collapsible project groups, and bulk actions (unarchive/delete all). These new user-facing capabilities and components warrant human review. You can customize Macroscope's approvability policy. Learn more. |
- Replace inline project-level unarchive/delete buttons with a right-click menu - Keep the existing confirmation flow for bulk archived-thread actions
- Add case-insensitive search across archived thread titles - Rank exact phrase, full-term, and partial matches; auto-expand matching projects - Update archive empty states and preserve project actions under search
- Use filtered archive rows for project actions during search
- Use the full project archive list for bulk context actions - Keep search filtering from narrowing project-wide confirmations
- Limit project archive actions to filtered visible threads - Add archive search ranking tests
Selective archive-settings portion of main commit 1c6f66b. Keeps the branch-local extracted search-ranking helper and tests while preserving the project header interaction cleanup.
- Move archived search and grouping into logic helpers - Share bulk action and sort helpers with the panel - Add tests for grouping, sorting, and bulk action concurrency
- Wait for active bulk-action workers before rethrowing - Assert archived project bulk actions cover queued threads
- Aggregate archived bulk action errors - Index archived threads by project - Strengthen archived settings logic tests
- Skip local dialog confirmation when no local API is available
- Encode environment and project ids as tuple keys - Cover colon-containing ids in archive grouping tests
…ngs-ux # Conflicts: # apps/web/src/components/settings/SettingsPanels.tsx
- Add project grouping, sorting, search-aware bulk actions, and confirmations - Expose native swipe and long-press actions for archived threads - Document the shared web and mobile archive behavior
- Extend archive UX documentation to cover native mobile parity - Record native archive files and platform-specific action behavior
- Enable the global virtual store - Pin the Effect Vitest package extension to the beta release
- Filter active threads and fall back from invalid archive timestamps - Keep mobile groups collision-free and aligned with selected sorting - Report interrupted bulk actions and cover review regressions
- Require long press for native archived-row menus - Exclude active snapshots from archive empty-state counts - Preserve no-host confirmation fallback behavior
- Expand aggregate failures into distinct user-facing messages - Cover deduplication and truncation in archive logic tests
- Display labels when archived projects need environment context - Reuse environment label rules and cover primary and remote cases
- Verify remote labels remain visible with multiple environments
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 8463f78. Configure here.
- Track succeeded, failed, and in-flight-skipped outcomes - Report skipped mobile bulk actions separately from failures - Cover mixed bulk results and update branch behavior docs
f1addbd to
30e519e
Compare
- Bound within-tier scores before applying relevance offsets - Cover long-title ranking on web and mobile

Summary
This replaces the flat Archive settings list with a compact project-grouped browser on web and brings the same information hierarchy and management capabilities to the native Archived Threads screen. Archived conversations can be searched by ranked title matches, sorted by archived or created time, and expanded or collapsed by project.
Both surfaces load archive snapshots for every configured environment and expose scoped per-thread and project-level unarchive/delete actions. Destructive actions preserve each platform's guarded delete behavior, filtered bulk actions affect only matching rows, and bulk execution is bounded and failure-aware.
What Changed
ArchiveSettings.tsxand wired the archived settings route directly to the dedicated panel.confirmThreadDeleteon web and native confirmation flows on mobile.@effect/vitestpackage extension to the installed beta so itsvite-plusdependency resolves consistently in the shared workspace graph.Why
The previous archive views became difficult to scan and manage for users with large archives, and web and mobile exposed different levels of control. A shared dense hierarchy, consistent search and sort behavior, and actions close to each project or conversation make archive maintenance faster while preserving environment isolation and platform-native interaction patterns. The workspace package-extension update keeps the focused Effect/Vitest test graph reproducible with the pinned prerelease package.
Validation
pnpm exec vp test run apps/web/src/components/settings/SettingsPanels.logic.test.ts apps/mobile/src/features/archive/archivedThreadList.test.tspassed with 2 files and 37 tests.git diff --checkalso passed.Proof
Note
Medium Risk
Changes permanent delete and bulk unarchive behavior across environments with new concurrency and error paths; logic is heavily tested but touches thread lifecycle and multi-environment data merging.
Overview
Replaces the flat web Archive settings list with a project-grouped browser in
ArchiveSettings.tsxand aligns the native Archived Threads screen to the same hierarchy. Archive data now loads from all configured environments (not only those with active projects), with active snapshot rows excluded from archive content and empty states.Both surfaces add ranked title search (phrase and multi-token matching), sortable archived/created columns, collapsible project sections (auto-expanded while searching), environment labels when relevant, and invalid
archivedAtfallback tocreatedAtfor sort and display. Group keys use JSON-tuple scoped ids to avoid collisions when ids contain separators.Per-thread unarchive/delete and project-level bulk unarchive/delete are scoped to all rows or visible search matches, with platform-appropriate confirmations (
confirmThreadDeleteon web). Bulk work runs with bounded concurrency, stops scheduling after thrown errors, refreshes snapshots afterward, and reports partial, skipped-in-flight, and interrupted outcomes with clearer error text. Native thread actions returnsucceeded/failed/skippedso bulk flows do not treat in-flight rows as failures.Shared grouping, search, sort, and bulk logic live in
SettingsPanels.logic.ts(web) andarchivedThreadList.ts(mobile), with expanded unit tests. Minor workspace tooling: pnpm global virtual store and pinned@effect/vitestpackage extension forvite-plus.Reviewed by Cursor Bugbot for commit 2485e27. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Refine archived thread management UX with search, sorting, and bulk actions on web and mobile
ArchivedThreadsPanelin SettingsPanels.tsx with a fully reworked panel in ArchiveSettings.tsx that groups threads by project/environment, supports title search, column sorting by archived/created time, and per-thread and bulk context menus for unarchive/delete.LegendListtoFlatListkeyed to search query and viewport height.runArchivedThreadActions, and summarized error reporting.deleteThreadand returns asucceeded | failed | skippedstatus from both actions, with an option to suppress failure alerts for bulk flows.buildArchivedThreadGroupsnow requires parsedsearchandsortinputs; matching is title-only (branch, project label, and workspace text no longer influence search results); group keys are JSON-stringified[environmentId, projectId]pairs instead of colon-delimited strings.Macroscope summarized 2485e27.