uttrflow / uttrflow/uttrflow-swift

Into a remote desktop or virtual machine window, ⌘V is forwarded to the other machine and the dictation still says Inserted

Open
#619 0 comments 0 reactions 0 assignees View on GitHub
area:dictation enhancement help wanted needs-info P2
Dominant language
Swift
Stars
4
Forks
17
Avg merge
4h 27m
Merged PRs (30d)
286

Description

## What happens

For any frontmost app except Uttrflow, the paste strategy volunteers (`PasteboardTextInsertionEngine.canInsert`, `Sources/UttrflowInput/PasteboardTextInsertionEngine.swift:28`). It writes the words to **this Mac's** pasteboard and posts ⌘V (`:42-44`).

A remote desktop client or a virtual machine window does not paste locally. It forwards the key press to the other machine, which pastes **its own** clipboard. Clipboard sharing, where it is on at all, is asynchronous, so the remote clipboard may or may not have the dictation by the time the forwarded ⌘V arrives. The likely outcomes are that the previous remote clipboard is pasted, that nothing is pasted, or that the text is pasted as intended.

On this side:

- Those windows publish no focused text field, so the Accessibility write is skipped.
- `PasteConfirmation.waitFor` returns `.notReported` immediately (`Sources/UttrflowInput/PasteConfirmation.swift:49`).
- `.notReported` maps to `InsertionArrival.notReported` (`PasteboardTextInsertionEngine.swift:58-59`), which draws the plain "Inserted" tick. By design, "Not reported draws the plain tick, because treating 'unknown' as 'doubtful' would put a warning on nearly every dictation" (`Docs/insertion.md`).

So the one case where the words are most likely *not* where the user thinks gets the same confident tick as a native text field. Nothing identifies these windows. `DestinationRules` has no row for them, and there is no insertion-side app table at all.

## Why it matters

People who work in a remote session all day dictate into it. If the tick lies, they send a message or a command holding their old remote clipboard.

## Needs a decision and a test

`needs-info`, because the right behaviour depends on what these clients actually do. `help wanted`, because it needs them installed:

1. For each remote desktop client and VM app you have, with clipboard sharing **on** and then **off**: copy `OLD` inside the remote machine, then dictate "new words" into a remote text field.
2. Report what appeared remotely each time, and what the floating button said.

## Acceptance criteria

Once the above is known:

- Destinations that forward key presses to another machine are recognised by an app-kind row, not by special cases in the engine.
- For them, the dictation either waits for clipboard sharing and says "Pasted into the remote session — check it", or skips the paste and says "Copied — paste it in the remote window".
- The chosen behaviour has a test through the `AccessibilityFocus`/`InsertionDestination` seam, and `Docs/insertion.md` gains a section for it.

Contributor guide

Open the contributing guide

Research direction

Start with Sources/UttrflowInput/PasteboardTextInsertionEngine.swift, PasteConfirmation.swift, and the AccessibilityFocus/InsertionDestination seam. Reproduce remote desktop and VM behavior with clipboard sharing enabled and disabled, then use the results to choose the destination behavior and add the seam test. Update Docs/insertion.md with the chosen behavior and its limitations.

Written by the indexing model from the issue text.

Assessment

Tech stack
macos, swift
Domain
accessibility, desktop-dev
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.