uttrflow / uttrflow/uttrflow-swift

Reset personalisation's confirmation doesn't say it deletes the clipboard history, pinned clips included

Open Beginner friendly
#680 0 comments 0 reactions 0 assignees View on GitHub
area:general bug good first issue P2
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.