Home Paste: verify and eliminate reuse of a historical menu-panel destination
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 45/100
Research direction
Read Sources/LocalVoice/WorkbenchHome.swift, main.swift and TextDelivery.swift, tracing how Home paste chooses a destination and how delivery validates it. Reproduce the two-destination sequence with harmless scratch fields and synthetic text, recording the activated app and changed field. Done means either native evidence shows the risk is blocked and the investigation is documented, or the issue's acceptance checks pass without weakening guarded delivery.
Written by the indexing model from the issue text.
Description
Outcome and evidence
P1 investigation, source-supported delivery risk; no native wrong-target paste reproduced. Home's Paste path can reuse the destination captured by an earlier opening of Quick controls. A historic destination is not a fresh choice for a later Home action.
Workbench Preview 2.3.0, build 20260928054038, source 00be555139f87d4557f48fcffc132b8621c251a2, unmodified source, macOS 26.5.1 (25F80), Apple M5, built-in display. Identity verified in the running app using Copy build details on 28 September 2026.
This audit did not paste into live message composers. The request's first step is a controlled two-destination reproduction, not a claim that user text was already misdelivered.
Source chain
Source links below pin the earlier audited commit 9578d8cf; the relevant paths were checked against installed 00be5551 and the described behaviour is unchanged. Source findings and native observations are distinguished below.
- WorkbenchHome.swift invokes onPasteTranscript, wired to paste in main.swift.
- main.swift captures menuTarget when the panel opens. It is not cleared on panel closure.
- main.swift lines 477–483 resume that stored app/field; lines 518–529 use this route for paste.
- TextDelivery.swift revalidates the reactivated field, but that does not establish that the current Home invocation selected this historical destination.
A historical field may still be valid. This is the specific risk to establish, not a request to bypass guarded delivery.
Controlled reproduction and bounded fix
- Use two harmless scratch fields in separate apps, A and B.
- Focus A; open and close Quick controls.
- Work in B, then open Home through the normal window route.
- Paste a synthetic recent transcript. Record activated app, changed field and receipt.
- Repeat without a prior panel visit and with a changed field in A.
If the old destination is reused, give the current invocation a fresh explicit destination lifetime and expire panel-only snapshots. If the runtime contract already blocks it, document that evidence and close this investigation rather than adding redundant state.
Acceptance
- Home cannot resurrect an unrelated historical field; ambiguous delivery safely copies or asks for a current destination through the existing flow.
- Panel paste and fresh toolbar dictation still reach their intended fields.
- Test same app/different field, unavailable app, secure field, drawing active, focus changes and clipboard changes during confirmation.
- Never submit automatically; preserve originals and guarded target validation.
- Record native evidence with synthetic text before claiming the risk fixed.
Related: #134 and #7. This investigation is prioritised by potential consequence, not by confirmed occurrence.
- Dominant language
- Swift
- Stars
- 0
- Forks
- 1
- Avg merge
- 8h 5m
- Merged PRs (30d)
- 215
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from Ship-Work/workbench
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
Maintainers usually reply within 1 day
-
documentation good first issue help wanted
Difficulty 2/5 Half a day Newbie friendliness 74/100
Ship-Work/workbench#29 · 1 comment ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 55/100
Maintainers usually reply within 1 day
All issues in Ship-Work/workbench
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
Emanuele-web04/remodex#203 ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 92/100
Maintainers usually reply within 1 day
-
test(BrainBar): inject synthetic observabilityCadence in BackupsHealth/one-page fixtures (DCI-1)Open
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
EtanHey/brainlayer#1367 ·
Maintainers usually reply within 1 day
-
cmux-next: new workspaces show no name instead of workspace-NPossibly taken A pull request linked to this issue is open or already merged. Openarea: workspaces
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
manaflow-ai/cmux#21357 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
Maintainers usually reply within 4 days