uttrflow / uttrflow/uttrflow-swift
The "Paste" recovery button only dismisses the notice; it does not paste
- Dominant language
- Swift
- Stars
- 4
- Forks
- 17
- Avg merge
- 3h 32m
- Merged PRs (30d)
- 277
Description
## What happens
`RecoveryAction.pasteManually` is drawn as "Paste" on the floating button (`Sources/Uttrflow/Dock/DockView.swift:310`), the menu bar (`Sources/UttrflowUX/ErrorPresentation.swift:108`) and the main window (`Sources/UttrflowUX/MainPresentation.swift:174`). Clicking it runs:
```swift
// Sources/Uttrflow/AppDelegate.swift:1818-1820
case .pasteManually:
// Already on the clipboard, put there by the insertion floor before it reported failure.
Task { await pipeline?.acknowledge() }
```
which returns the pipeline to idle and removes the notice. Nothing is pasted. It is offered for `TextInsertionError.insertionRejected`, including the insertion stage timing out (`Sources/UttrflowPipeline/DictationPipeline.swift:713-716`), and for every `TransformationError`.
## Why it matters
A button labelled with a verb must do that verb. A user who clicks "Paste" sees the notice disappear, looks at their document, and finds nothing there. They may assume the words are lost, when the fix was to press ⌘V themselves.
## How to reproduce
Read the code above. At runtime, the timeout path is the easiest to reach: dictate into an application that is hung (for example a process stopped with `kill -STOP`).
## Acceptance criteria
One of:
- the button is renamed to what it does ("Got It" / "Dismiss") and the message keeps saying "press ⌘V"; or
- the action performs a paste into the frontmost app (through the same inserter the dictation used), and only then dismisses.
Whichever is chosen, the three title tables agree, and `Tests/UttrflowUXTests/ErrorPresentationTests.swift` pins the title.
Contributor guide
Research direction
Start with the RecoveryAction.pasteManually case in Sources/Uttrflow/AppDelegate.swift and compare the three titles in DockView.swift, ErrorPresentation.swift, and MainPresentation.swift. Review Tests/UttrflowUXTests/ErrorPresentationTests.swift, choose one acceptance path, and update the test so the labels and behavior consistently match; confirm the timeout and transformation recovery notices still dismiss correctly.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- macos, swift
- Domain
- desktop, testing
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 76/100