Bring your history: Chats and Memories toggles, sources one level deeper

Merged
TE
1d ago
+1347-254

Summary

Leo, on the Bring your history step (2026-11-05):

why isn't it just import memories and chats? ... import clone chats, import clone memory, and then you can go deeper if you want

He also called it ugly and split up oddly, in an order that "isn't even alphabetical". The "Found on this Mac" labels were noise, and the spacing, font sizes and titles looked "unformatted, untitled, unsized". A card was clipped under the header when the list scrolled, and the footer was a dark band with "Import↩" crammed together.

The first view is now one list with two rows, Chats and Memories. Each row has a switch that covers every detected source in its group, a short summary of what it brings ("Claude Code, Codex chats", "Not included", "None found yet") and its source marks. Its Sources disclosure opens the next level down: one row per source (checkbox, mark, title, and the path or file under it), sorted alphabetically in the page's language, with Choose export… on the archives, Paste a summary on the pasted-memory sources, and Find exports. The "Found on this Mac" labels are gone.

  • Chats: Claude Code conversations, Codex chats, the ChatGPT and claude.ai exports, and saved archives found by Find exports.
  • Memories: Claude memory, Codex memory notes, and the Grok Bot, Muse, ChatGPT Dots and Instinct summaries.

Every source, the paste flow, Undo, the progress lines and the credentials-skipped note are still there. No source is removed. A failed source or an open paste box keeps its group open.

Layout: the header, list and notes share one scroll region above the footer, so nothing scrolls under a fixed header and no card is clipped under it. The footer paints no band of its own, only a hairline, with Skip on the left, the live status in the middle, and Undo and Import on the right. The keycap sits apart from its label and one step quieter, as in #34594 by @austinywang, whose scroll-region and footer approach this carries forward (co-authored). The type uses the shared scale: the page heading, body for rows and titles, detail for summaries and notes, caption for paths. Spacing uses the 4–32 steps.

Spec: leo-workspace design/onboarding.md (the surface's spec in .github/design-surfaces.json). References: cmux-design-references cmux/live/first-run-bring-history-source-list, -list-2 and first-run-import-footer-band (Leo's screenshots), plus windsurf/web/import-settings-extensions and cursor/web/import-preferences (one narrow column of migration choices with row-level actions).

Variants (gallery pages.import-history)

  • groups (shipped): two toggles in one inset list, with the sources behind a disclosure.
  • groups-open: the same list with both groups open.
  • sections: each group its own card with every source always listed. More to read before the first click, and it is what Leo called split up.
  • tiles: the two groups side by side. The summaries wrap sooner and the sources open under one tile only.

I picked groups: it is the only one whose first view is just "import chats, import memory", with the detail one level deeper.

Gallery: pages.import-history/groups, pages.import-history/groups-open, pages.import-history/sections, pages.import-history/tiles, pages.import-history/autodetected, pages.import-history/importing, pages.import-history/paste-summary, pages.import-history/nothing-detected

Testing

  • bun test test/import-history-groups.test.tsx (new): 5 fail on base origin/feat-cmux-next (the old ImportHistory.tsx swapped in) and 5 pass on head. It checks the two groups and no source rows in the first view, the absence of "Found on this Mac", every source in exactly one group with none dropped, the alphabetical sources with their paths, the group switch turning its sources off and on without touching the other group, and the one-scroll-region structure with the keycap as its own element.
  • bun test src/pages/import-history/model.test.ts: 18 pass, with the store unchanged.
  • Strings: 5 new keys (history.group.*) in all 21 locales, English translated and the rest needs_review.

Observed / Not run

Observed: the tests above, on this lane VM. The before/after stills come from the gallery advisory run on this PR.
Not run: a DEV build check of the page in the app. That comes after merge.

Changelog

  • Changed: Bring your history now starts with two switches, Chats and Memories, with each source one level deeper under Sources, sorted alphabetically, and a cleaner footer.

🤖 Generated with Claude Code

Agent session: agent session


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


Summary by cubic

Reworks the Bring your history step so the first view is one list with two toggles, Chats and Memories, instead of every source at once. Each group's Sources disclosure opens its rows one level deeper, sorted alphabetically in the page's language, with each source's path under its name; the "Found on this Mac" labels are gone.

No source or flow is removed — every source, the paste flow, Find exports, Undo, and the credentials-skipped note stay, and a failed source or an open paste box keeps its group open. Layout: the header, list, and notes share one scroll region above the footer so nothing clips under a fixed header; the footer paints only a hairline (no dark band) with Skip left, the live status in the middle, and Undo and Import on the right. A group's switch is on only when every available source in it is selected; a partial group reads as off and turns fully on in one click.

Testing

  • New test/import-history-groups.test.tsx: 6 fail on base, 6 pass on head.
  • model.test.ts (18 tests) passes; the store is unchanged.
  • Adds 5 history.group.* strings to all 21 locales; English translated, the rest needs_review.