uttrflow / uttrflow/uttrflow-swift

The "Paste" recovery button only dismisses the notice; it does not paste

Open
#560 0 comments 0 reactions 0 assignees View on GitHub
area:dictation bug P2
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

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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.