Skip to content

Offer an explicit Copy fallback for unsupported extension paste #101

Closed

Description

@moikdev

Part of #1/#19/#14 and the observed #95 command queue. Prioritize after bounded command handoff #100.

The frozen instant-translate-paste command reaches the real translation service, then calls native Clipboard.paste with output matching the owned response. Android explicitly rejects that operation; the extension shows generic failure feedback. Final tablet and phone observations on the unchanged ed38313 app (de99960d…1d5e18d) / c262fdf harness (f0acef65…0f7ffd) preserve the original source/range and fresh clipboard sentinel, with 18/20 successful restoration checks. This is a tested partial workflow, not successful paste or service failure.

Acceptance:

  1. Keep native paste rejection truthful. Do not automatically copy, modify another app, grant Accessibility/IME authority, or let the extension display a false successful paste result.
  2. For a current foreground invocation with bounded text output, offer an inline, explicit Copy result instead action and an ordinary return/cancel path. Use the existing palette surface. Explain the unavailable insertion and the effect of Copy in product language.
  3. Retain output only in bounded, invocation-owned memory. Clear it on disposal, command replacement, source replacement, return and cancellation. Do not persist it, log it, export private values, or let stale/queued callbacks copy output from an ended invocation.
  4. Copy only after an actual user action. Verify exact Unicode/combining/emoji bytes with a fresh sentinel, unchanged external source/range, and correct return route. Unsupported/oversized/nontext input must fail without copying.
  5. Exercise duplicate/stale ownership, lifecycle, pending cancellation, keyboard/IME and touch at 100%/200% on tablet, phone and short landscape. Require complete labels and 48 dp targets. Preserve original installed data, clipboard and evidence through guarded recovery.
  6. Publish real before/error/fallback/copied/source-return screenshots and exact source/APK identities. Require appropriate local checks, actual exact-head hosted CI, two independent gpt-6.1-sol/high audits and expected-head merge.

This provides a useful Android fallback, not arbitrary cross-app paste parity. The frozen command's original paste action remains classified as partial unless actual insertion is independently implemented and verified.

Activity

  1. moikdev commented on Nov 4, 2026

    @moikdev
    OwnerAuthor

    Implementation is in progress after merged #103. The current foreground paste request stays rejected and now offers explicit Copy result instead / Return; the clipboard stays unchanged until Copy is selected. The private bounded output is single-use and cleared on replacement, source changes, disposal and cancellation.

    Recorded so far on the unchanged production candidate: six real frozen Translate paste→explicit Copy→original source-return workflows pass across tablet/phone/short-landscape at 100%/200%; two identical-harness old-app controls fail at the intended missing-action assertion. The current owned harness passes 13/13 on tablet and 13/13 on phone, including Unicode, stale/duplicate, source replacement, engine ownership, window focus, lifecycle, uncaught rejection and actual IME/keyboard protocols. Both build variants compile; lint is 0 errors/55 warnings each. Enlarged keyboard checks and affected regressions are still running.

    Historical harness failures remain excluded: clipboard notifications are not write counts; a dialog-thread mistake and API-level null normalization were corrected in the harness, without claiming an application repair. Final evidence, exact-head hosted CI and the two independent gpt-6.1-sol/high audits remain required. This earns no successful cross-app insertion or full Clipboard/Raycast parity claim.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions