uttrflow / uttrflow/uttrflow-swift
Reset personalisation's confirmation doesn't say it deletes the clipboard history, pinned clips included
- Dominant language
- Swift
- Stars
- 4
- Forks
- 17
- Avg merge
- 3h 32m
- Merged PRs (30d)
- 277
Description
## What happens
Settings → Privacy → "Reset personalisation" describes itself as:
> Puts Uttrflow back to a fresh install: your dictionary, your history and every preference on this screen.
(`Sources/UttrflowUX/SettingsPresenter.swift:653-656`), and its confirmation says, for example, "This removes 12 words you added yourself and 30 saved transcripts, and puts every preference back to its default. It cannot be undone." (`resetSentence`, `:680-688`).
What it actually removes is `SettingsReset.everything.targets` (`Sources/UttrflowUX/SettingsReset.swift:41`): `[.everyWord, .history, .clipboard, .everySuggestion, .preferences]`. So the row and the confirmation leave out that it deletes **the whole clipboard history, pinned and named clips included** (`FilePersonalisationStore.remove`, `SettingsReset.swift:216-217`: "`forgetEverything` takes pinned clips too"). The confirmation counts only dictionary words and transcripts (`resetSentence`, `:680-688`).
Two more things in the wording are not true:
- "every preference **on this screen**": the row is on the Privacy tab, but the reset puts back every preference in every tab;
- the words the app ships with do not come back: `.everyWord` empties the dictionary (`Sources/UttrflowDictionary/PersonalDictionaryStore.swift:130-133`) while the record that the shipped list was already applied stays, so `seedShippedWords` will not add them again (`:84-94`). The confirmation's "puts every preference back to its default" suggests a starting state the dictionary never returns to.
Related, and not repeated here: #648 (the reset leaves recordings, snippets and set-aside files, so "fresh install" is not true) and #640 (the `.everySuggestion` target is a no-op in the app as built, so nothing AI suggestions learned is removed either).
## Why it matters
The confirmation is the last thing a person reads before an action that "cannot be undone". Someone who pinned and named clips in the clipboard panel loses them without having been told, and someone who resets to start the dictionary over loses the words it shipped with for good.
## How to reproduce
Read the two strings above against `SettingsReset.everything.targets`, or: pin a clip in the clipboard panel, run Reset personalisation, and open the panel.
## Acceptance criteria
- The row explanation and the confirmation say the reset removes clipboard history, pinned clips included (and whatever else #648 and #640 settle it removes).
- "on this screen" is replaced with wording that is true for every tab.
- Either the shipped words are seeded again after a reset (clear the seed record in `removeEverything`), or the confirmation says they will not return; say which in the pull request.
- The confirmation still builds its sentence only from parts that exist (keep the existing counted phrases).
- Tests in `Tests/UttrflowUXTests/SettingsResetTests.swift` (around lines 491 and 511) updated to the new wording.
## Where to start
- `Sources/UttrflowUX/SettingsPresenter.swift:649-715` (the row, `resetConfirmation`, `resetSentence` and its helpers).
- `SettingsPersonalisation` may need a clip count if you want the confirmation to count clips; a sentence without a number is fine for this issue.
- Run `make verify` (export `DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer` first) and read CONTRIBUTING.md.
**Size:** S, about 1–2 hours.
Contributor guide
Research direction
Start in Sources/UttrflowUX/SettingsPresenter.swift:649-715, then compare the wording with SettingsReset.everything.targets and the reset behavior described in SettingsReset.swift. Update the row and confirmation to accurately describe the reset, preserving existing counted phrases, and update Tests/UttrflowUXTests/SettingsResetTests.swift around lines 491 and 511. Run make verify with the specified DEVELOPER_DIR and read CONTRIBUTING.md.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- macos, swift
- Domain
- desktop
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 78/100