Skip to content

fix(mobile): keep terminal Paste visible beside keyboard dismissal - #25388

Open
juliusmarminge wants to merge 2 commits into
mainfrom
fix/issue-24694
Open

juliusmarminge wants to merge 2 commits into
mainfrom
fix/issue-24694

Conversation

@juliusmarminge

Copy link
Copy Markdown
Member

Problem

On a phone, opening a thread terminal and showing the keyboard leaves Paste off-screen in the horizontal accessory toolbar. Pasting requires discovering and scrolling the toolbar.

Change

Move Paste into a fixed clipboard icon button beside Dismiss keyboard. Keep the existing clipboard write path and modifier reset, and map the Android clipboard icon to the existing icon library.

Scope and approval

Fixes #24694

Triaged bug via the automated issue flow. GitCafe: #24694. This is a focused visibility fix to an existing terminal action.

Verification

  • Reproduced on current main in the real Android dev client, pooled Pixel 9, Android 16, Gboard, font size large, native 1080×2424 portrait capture. Explicit isolated --home-dir /home/ubuntu/t3code/.t3/issue-24694.
  • After: Paste stays visible at both ends of the scroller, pastes once, and keyboard dismiss/show and continued typing work.
  • Existing terminal input/paste tests: 2 files, 9 tests passed, including after merging main.
  • vp run check:changed: format, lint, both knip passes, mobile/scripts typechecks reported pass. Initial post-merge attempt needed vp i for newly added upstream dependencies; rerun completed its passing summary but wrapper exited 143.
  • Two independent implementation reviews: MERGE; no concrete findings.
  • Proof audit: Android core behavior confirmed; full fixture set remains incomplete. iOS glyph/layout, macOS-host modifier labels, landscape/wider layout, logical dp width and runtime modifier-reset proof are unverified. The CTRL tap recording does not visibly establish selected state, so no reset-proof claim is made. Final lead recheck was blocked by expired pool lease.

Before source: 3de45c6254; after source: 87a794338a. Final head merges main without changing either implementation file. Evidence index, environment, scripts, matrix and detailed visible differences.

Phone portrait Before (3de45c6254) After (87a794338a) Diff zero ×8 Diff >16/255
Light Light before Light after Light diff zero Light diff threshold
Dark Dark before Dark after Dark diff zero Dark diff threshold

Visible differences: fixed clipboard circle, earlier scroller fade, less of CTRL visible; Dismiss stays in place. Unrelated capture deltas: clock/signal pixels in dark and keyboard-dismiss chevron tint in light. No “nothing else changed” claim.

Before: scroll to discover Paste · After: fixed Paste, scroll, paste, dismiss/show and type. Narrated action timing and original drivers are in the evidence index.

Models: Claude Opus 5.5 (implementation and review), GPT-6.1 Sol (triage, review, evidence and audit), through T3 Code / Claude and Codex harnesses.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Oct 26, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 26, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 4002c08

Macroscope's review found this PR approvable — This localized mobile fix moves the existing Paste action outside the scrollable terminal controls so it stays visible beside keyboard dismissal, and adds its Android icon mapping. The underlying paste and terminal input behavior is unchanged.

You can add or adjust custom eligibility rules. Learn more.

@coderabbitai

coderabbitai Bot commented Oct 26, 2026

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between 572cf74 and 4002c08.

Files selected for processing: 2
  • apps/mobile/src/components/ui/AppSymbol.tsx
  • apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 2 remain after this review.

Walkthrough

The mobile terminal now presents Paste as a dedicated keyboard accessory button rather than as an action in the scrolling toolbar. The content_paste Material symbol maps to a clipboard icon.

Changes: Mobile terminal paste access

Layer / File(s) Summary
Clipboard icon mapping
apps/mobile/src/components/ui/AppSymbol.tsx
The content_paste Material symbol maps to IconClipboard.
Dedicated terminal Paste button
apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx
Paste is removed from the toolbar actions. A separate keyboard accessory button clears any pending modifier and starts clipboard paste. The button uses platform-specific clipboard icons.

Priority: Low

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix · Severity of issue fixed: Low

Possibly related PRs

Suggested labels: size:S

Suggested reviewers: maria-rcks

Merge Risk: Minimal · up to 4002c

The focused Paste visibility change has no established merge-blocking risk.

Pre-merge checks: Passed 4
Check name Status Explanation
Title check Passed The title clearly summarizes the main change: keeping the terminal Paste action visible beside keyboard dismissal.
Description check Passed The description covers the required Problem, Change, Scope and approval, and Verification sections. It explains the issue and fix, identifies the linked issue, reports test and manual-check results, i…
Linked Issues check Passed Issue #24694 has one active direct target. Its coding objective is to keep Paste visible without scrolling in the mobile terminal accessory, using a pinned icon button beside Dismiss keyboard. The dif…
Out of Scope Changes check Passed The changes are limited to two files. AppSymbol.tsx adds one icon import and one Material-name mapping (content_paste). This supports the new Android Paste icon. ThreadTerminalRouteScreen.tsx removes …
Full details: Description check

Explanation

The description covers the required Problem, Change, Scope and approval, and Verification sections. It explains the issue and fix, identifies the linked issue, reports test and manual-check results, includes screenshots and recordings, and states remaining verification gaps.

Full details: Linked Issues check

Explanation

Issue #24694 has one active direct target. Its coding objective is to keep Paste visible without scrolling in the mobile terminal accessory, using a pinned icon button beside Dismiss keyboard. The diff implements this. In ThreadTerminalRouteScreen.tsx, Paste is removed from the scrolling toolbar action list (the 'paste' entry and its kind branch are deleted). A new ComposerToolbarButton with accessibilityLabel 'Paste' is rendered outside ComposerToolbarScroller, directly before the existing 'Dismiss keyboard' button. Its icon is { ios: 'doc.on.clipboard', android: 'content_paste' }. This matches the suggested approach in the issue. The handlePaste function clears pending modifier state and calls pasteFromClipboard, which keeps the existing clipboard write path and modifier reset. In AppSymbol.tsx, content_paste maps to IconClipboard from @tabler/icons-react-native, so the Android icon resolves. The issue names iOS as its environment. The button is shared across platforms, and the iOS symbol name is a standard SF Symbol. The PR reports runtime verification only on Android. That gap is runtime proof, not a missing coding requirement. The issue does not request new automated tests. No coding requirement is unmet.

Full details: Out of Scope Changes check

Explanation

The changes are limited to two files. AppSymbol.tsx adds one icon import and one Material-name mapping (content_paste). This supports the new Android Paste icon. ThreadTerminalRouteScreen.tsx removes the paste action kind from the toolbar union and action list, moves the paste behavior into handlePaste, and adds the Paste button beside Dismiss keyboard. Each hunk directly implements the linked issue. No unrelated refactoring, dependency, or behavior change appears in the reviewed diff. The PR description's image and video evidence is not part of the code diff and does not affect this assessment.

Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

This branch has not been deployed

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

Labels

size:S 10-29 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Mobile terminal paste button is hidden off-screen in the scrolling toolbar

1 participant