uttrflow / uttrflow/uttrflow-swift
Per-app formatting can only be set for the last app dictated into
- Dominant language
- Swift
- Stars
- 4
- Forks
- 17
- Avg merge
- 3h 32m
- Merged PRs (30d)
- 277
Description
## What happens
Settings → Dictation → "Where your words go" lets the user say what kind of place an app is (a document, a chat, code, a SQL editor…), which changes how Uttrflow formats text for it. The group is built by `SettingsDestinations.places(_:lastApp:)` (`Sources/UttrflowUX/SettingsDestinations.swift:58-68`) from two things only:
- **the last app dictated into** (`lastAppRow`, `:71-102`), read from the newest history record that names an app (`FilePersonalisationStore.lastApp`, `Sources/UttrflowUX/SettingsReset.swift:193-199`); before any dictation the row reads "Nothing yet" with "Dictate somewhere once and it appears here";
- **overrides already made**, each with only "Use the Default" (`overrideRow`, `:115-122`).
So to change how, say, a notes app is treated, the user must dictate into that app, then open Settings before dictating anywhere else, because the next dictation replaces the row. There is no list of apps dictated into, no way to pick an app, and no way to change an existing override except to reset it and repeat the dance. The group does not say what "Work it out" decided for the last app either: the pop-up shows "Work it out" rather than the kind Uttrflow chose.
## Why it matters
Per-app formatting is how someone stops a code editor getting sentence-case prose, or a chat getting full stops. The feature is only reachable through a sequence nobody would guess, and someone who dictates into three apps a day will rarely find the one they want in the single row.
## How to reproduce
Dictate into app A, then app B, then open Settings → Dictation: only B can be changed. Make an override for B, dictate into A, reopen: B's override row has only "Use the Default".
## Acceptance criteria
Product call (hence `needs-info`): a list of recent apps from history, an app picker, or both.
Then:
- The group lists more than the last app (for example every app in kept history, newest first) with the same pop-up on each, including existing overrides.
- "Work it out" shows what it resolves to for that app (for example "Work it out (a chat)").
- Tests in `Tests/UttrflowUXTests/SettingsPresenterTests.swift` (or a `SettingsDestinations` test) cover several apps and an override that is changed rather than reset.
Contributor guide
Research direction
First resolve the product choice between a recent-app list, an app picker, or both. Read SettingsDestinations.places in Sources/UttrflowUX/SettingsDestinations.swift, the app-history access in Sources/UttrflowUX/SettingsReset.swift, and the existing tests in Tests/UttrflowUXTests/SettingsPresenterTests.swift. Done means multiple apps and editable overrides appear, resolved "Work it out" text is shown, and tests cover the listed cases.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- swift
- Domain
- desktop
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100