Skip to content

feat(mobile): drag iOS threads from their context menus - #10497

Closed
juliusmarminge wants to merge 7 commits into
t3code/mobile-drag-drop-threadsfrom
t3code/mobile-thread-native-drag
Closed

feat(mobile): drag iOS threads from their context menus#10497
juliusmarminge wants to merge 7 commits into
t3code/mobile-drag-drop-threadsfrom
t3code/mobile-thread-native-drag

Conversation

@juliusmarminge

@juliusmarminge juliusmarminge commented Sep 7, 2026

Copy link
Copy Markdown
Member

Long-press thread menus need to coexist with direct dragging, including moves between Pinned and Active. This adds native iOS drag/drop to the context-menu host view and routes drops through the lifecycle-aware arrangement actions from #10496.

All live thread rows can initiate a drag, including expanded Snoozed and Settled rows. Pinned and Active rows and headers accept drops. The Settled divider accepts settling drops and remains available when empty. Headers remain available when a section is empty, in both Home and the navigation sidebar. Moving into a section pins, unpins, wakes, or un-settles the source before saving its position. Starting a drag suppresses row taps. Android uses the shared Arrange screen.

During a native drag, snapshots of visible rows slide aside to open a full insertion gap. UIKit drop targets keep their original coordinates so the animated rows cannot destabilize hit testing. Pictures and original opacity are restored on completion or cancellation; recycled cells are refreshed during edge scrolling. Animation runs only during the gesture and respects Reduce Motion. A live native action badge follows the dragged card and updates as it crosses sections. Source-provided action labels use the same mapping as Arrange; invalid targets hide the badge, and unsupported settlement is rejected. The thread snapshot stays stable.

Validation: 78 focused tests and mobile TypeScript pass. The shared drop actions passed real Android Arrange gestures for reorder, pin, unpin, empty-section pinning, wake, and un-settle, with persisted server state checked. The first layer contains screenshots and a recording.

Draft limitation: the updated native iOS gesture still needs an on-device pass. The UIKit preview and live badge helper passes Swift typechecking against the iOS Simulator SDK, but Xcode 27 automation cannot inject the required drag movement. Shared Arrange motion passed a real Android emulator run; the first layer contains the recording.

This native patch requires a new binary. Standalone builds without Metro are queued from the final stack: iOS, Android.

Model: GPT-6. Harness: Codex.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). 📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. labels Sep 7, 2026
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ℹ️ No successful main baseline artifact is available yet. This run establishes the initial measurement.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 13.5 KiB 15.1 KiB
Codex Thread snapshot wire 7.0 KiB 7.3 KiB
Codex Live turn WebSocket wire 6.5 KiB 7.8 KiB
Codex Live turn WebSocket decoded 57.0 KiB 66.4 KiB
Codex Live turn messages 8 21
Claude Total thread wire 13.6 KiB 15.1 KiB
Claude Thread snapshot wire 7.1 KiB 7.3 KiB
Claude Live turn WebSocket wire 6.5 KiB 7.8 KiB
Claude Live turn WebSocket decoded 57.8 KiB 66.4 KiB
Claude Live turn messages 9 21

Baseline: unavailable · PR result: 2f3ee76 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 113.9 KiB
  • Claude decoded thread snapshot: 114.6 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

Comment thread apps/mobile/src/features/threads/thread-list-v2-items.tsx
@juliusmarminge
juliusmarminge force-pushed the t3code/mobile-thread-native-drag branch from 11388e0 to d0481a7 Compare September 7, 2026 10:44
@juliusmarminge
juliusmarminge force-pushed the t3code/mobile-drag-drop-threads branch from fc8642d to 8813025 Compare September 7, 2026 10:52
@juliusmarminge
juliusmarminge force-pushed the t3code/mobile-thread-native-drag branch 5 times, most recently from 6b39d75 to f1a9a77 Compare September 8, 2026 22:56
@juliusmarminge
juliusmarminge force-pushed the t3code/mobile-drag-drop-threads branch from d577ee4 to 9fcca6d Compare September 8, 2026 22:56
@juliusmarminge
juliusmarminge force-pushed the t3code/mobile-thread-native-drag branch from f1a9a77 to 0b57213 Compare September 8, 2026 23:24
@github-actions github-actions Bot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Sep 8, 2026
@juliusmarminge
juliusmarminge force-pushed the t3code/mobile-thread-native-drag branch from 0b57213 to 893b2be Compare September 8, 2026 23:30
@github-actions github-actions Bot added size:L 100-499 changed lines (additions + deletions). and removed size:XL 500-999 changed lines (additions + deletions). labels Sep 8, 2026
@juliusmarminge
juliusmarminge force-pushed the t3code/mobile-drag-drop-threads branch from 4cec59e to c2e9ca7 Compare September 8, 2026 23:58
@juliusmarminge
juliusmarminge force-pushed the t3code/mobile-thread-native-drag branch from 893b2be to caff97e Compare September 8, 2026 23:58
@github-actions github-actions Bot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Sep 8, 2026
@juliusmarminge
juliusmarminge force-pushed the t3code/mobile-thread-native-drag branch 3 times, most recently from 4d15e4d to 2d54f0f Compare September 9, 2026 00:23
@juliusmarminge
juliusmarminge force-pushed the t3code/mobile-thread-native-drag branch from 2d54f0f to 2f3ee76 Compare September 9, 2026 00:33
@juliusmarminge
juliusmarminge removed this pull request from stack #10498 September 9, 2026 02:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. size:XL 500-999 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.

1 participant