[fix] the save picker was the last place still selling folders as customers - #213
Merged
Conversation
…tomers #211 demoted folders everywhere except one spot: the save-destination picker (pre-flight's "save somewhere else" and the Settings default) still listed every personal folder — so the first screen of a meeting showed a customer picker AND a folder picker, the exact two-answers split the refactor removed. Personal options are now just the root; orgs keep their folders (an org has no companies). A legacy personal-folder default still resolves, and a startup normalization rewrites it to the root so the picker shows the truth. That picker is also where users SAW the second pre-#211 wound: the registry can hold same-name folder twins (the dev/packaged dual-instance id ping-pong, see history/folders.ts), and ensureCompanyFolder adopts only one of each pair. A new startup dedupe merges them — recordings repointed onto the survivor (company-paired preferred, else oldest), twins deleted locally and in the cloud so the mirror-down doesn't resurrect them. Groups where several companies claim the same name are skipped: that's two same-named customers, and merging on the name would move recordings between them. Ordering: pairing → dedupe → owner backfill, so the backfill sees the merged registry. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
5 tasks
Lanznx
added a commit
that referenced
this pull request
Aug 9, 2026
… choice left (#214) Even after #213 trimmed the save picker to one personal option, pre-flight still showed a 存到 section with a folder-shaped dropdown — a control whose only remaining personal choice was itself. The user's read was correct: if the customer decides filing, no folder control belongs on the meeting screen at all. The 存到 section is gone. Filing is the customer's folder (or the root with no customer) with nothing to choose; the one real decision left — share a copy to an org — is now its own row, shown only when signed in with sync on, and phrased as sharing rather than saving. The share is also independent of the customer now. The old override model made an org "save destination" beat the company link, silently dropping the local copy at the root — sharing to a team un-filed the customer's own recording. resolveMeetingSave now composes them: local filing always follows the customer; autoShare rides alongside. - meetingSaveOverride → meetingOrgShare ("off" suppresses a default share for one meeting; null follows the settings default) - SaveDestinationPicker → OrgSharePicker (off + orgs/org folders only) - Settings "default save location" becomes "auto-share to an organization"; the stored DefaultSaveLocation shape is unchanged, so existing org defaults keep working and personal ones mean "off" Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



What this changes
Two upgrade wounds left visible after #212, both reported from a real install the moment it updated:
history/folders.ts);ensureCompanyFolderadopts only one of each pair. A new startup dedupe merges them: recordings repointed onto the survivor (company-paired preferred, else oldest), twins deleted locally and in the cloud — the mirror-down inreloadFolderswould otherwise resurrect them next launch. Groups where several companies claim the same name are skipped: merging those on a name match would move recordings between customers.Migration order is now pairing → dedupe → owner backfill, so the backfill sees the merged registry.
Why
Follow-up to #211 / #212 — the refactor's own screen was contradicting it.
How it was verified
bunx tsc --noEmitpassesbunx vitest runpasses (327 tests, +5 forplanFolderDedupe: paired-survivor, oldest fallback, same-named-companies skip, 3-way clone group)Screenshots
Dropdown after the change: one 個人 option (root), org groups when signed in.