Skip to content

feat(mobile): prototype radial model picker - #5238

Draft
WillysKitchen wants to merge 1 commit into
pingdotgg:mainfrom
WillysKitchen:feat/mobile-model-picker-poc
Draft

feat(mobile): prototype radial model picker#5238
WillysKitchen wants to merge 1 commit into
pingdotgg:mainfrom
WillysKitchen:feat/mobile-model-picker-poc

Conversation

@WillysKitchen

@WillysKitchen WillysKitchen commented Aug 2, 2026

Copy link
Copy Markdown

Below written by sol, but hope you like the concept, if there's anything you want me to change, I'm happy to point my tokens at it :)

Important

Experimental PoC — not ready to merge. This draft is open so maintainers can inspect, run, and discuss the interaction before we commit to production scope.

What Changed

  • Adds an environment-gated radial model and reasoning picker to the expanded mobile composer.
  • Supports hold, slide, and release selection, with the model fan anchored to the leading corner and reasoning centered over its trigger.
  • Sources choices from the thread's live provider models and reasoning capability descriptor, then updates the real thread selection.
  • Adds a pen action for an in-memory two-to-four-item palette and a conventional tap fallback.
  • Locks the horizontal composer toolbar for the duration of a marking gesture.

Enable the experiment when starting Metro with EXPO_PUBLIC_MODEL_PICKER_PROTOTYPE=1.

Why

This explores whether a thumb-driven marking menu can make frequent model and reasoning changes faster without competing with iOS or Android edge gestures. It is intentionally an experimental PoC: palette membership is session-local and the existing picker remains unchanged when the flag is absent.

Not Production-Ready

  • Palette membership is session-local and is not persisted.
  • The marking interaction currently uses React Native Pressable; a production pass should evaluate a dedicated gesture recognizer and its cancellation semantics.
  • The interaction still needs broader physical-device, accessibility, and ergonomics validation.
  • Product direction and production architecture are intentionally left open pending maintainer feedback.

UI Changes

Before / after

Before After
Existing mobile composer Mobile composer with model and reasoning palette triggers

Interaction

t3-model-picker-pr-demo-compressed.mp4

Supporting states

Model fan Dark mode Palette editor
Expanded radial model fan Radial picker in dark mode Model palette editor

Verification

  • ./node_modules/.bin/vp test run apps/mobile/src/features/threads/model-picker-prototype/modelPickerPrototypeState.test.ts
  • ./apps/mobile/node_modules/.bin/tsc -p apps/mobile/tsconfig.json --noEmit
  • ./node_modules/.bin/vp fmt --check <changed files>
  • git diff --check
  • Seeded iOS Simulator pass with the experiment enabled: model and reasoning fans, four-choice palette, tap fallback, palette editor, stationary-hold cancellation, and toolbar gesture lock.
  • Seeded iOS Simulator pass without the flag: existing attachment, model, configuration, and send toolbar remains unchanged.
  • The simulator automation available on iOS 26.3 cannot emit touch-move events, so the complete hold-slide-release path is covered by the prepared interaction recording rather than the final semantic automation pass.
  • Claude Opus 5 review plus a final CodeRabbit CLI review of the revised diff; no unresolved automated findings.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Built with GPT-5.6 Sol via Codex in T3 Code.

@coderabbitai

coderabbitai Bot commented Aug 2, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 787329a3-f79f-4eb6-b0de-0c0a31471687

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Aug 2, 2026

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 76320a9. Configure here.

@macroscopeapp

macroscopeapp Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

1 blocking correctness issue found. This PR introduces a new feature (~1000 lines) with multiple unresolved review comments identifying bugs in palette state management and gesture handling. These substantive issues warrant human review before merging.

You can customize Macroscope's approvability policy. Learn more.

@WillysKitchen
WillysKitchen marked this pull request as draft August 2, 2026 15:30
@WillysKitchen
WillysKitchen force-pushed the feat/mobile-model-picker-poc branch from 76320a9 to 893f480 Compare August 2, 2026 16:35
@github-actions github-actions Bot added size:XXL 1,000+ changed lines (additions + deletions). and removed size:XL 500-999 changed lines (additions + deletions). labels Aug 2, 2026
@WillysKitchen

Copy link
Copy Markdown
Author

Review update for 893f480ef:

  • Fixed palette truncation by deduplicating IDs before applying the four-choice cap; added a focused regression test.
  • Fixed stationary long-press commits by tracking actual finger travel separately from the menu anchor; a hold-and-release now cancels.
  • Mounted the radial SVG overlay only while the menu is entering/open/exiting and hid it from the accessibility tree.
  • Restored explicit model/reasoning accessibility labels and isolated the prototype provider icons from existing production callers.
  • Kept the reconnect status pill stable on ordinary taps while preserving toolbar gesture locking.

Validation:

  • Focused state tests: 2 passed.
  • Mobile TypeScript check: passed.
  • Formatting and git diff --check: passed.
  • Seeded iOS Simulator: four-item palette and stationary-hold cancellation verified.
  • Claude Opus 5 review completed; its two correctness findings are addressed. Its production recommendation to evaluate a dedicated gesture recognizer is documented in the draft limitations.
  • CodeRabbit CLI re-review of the revised five-file diff: 0 findings.

All three inline review threads have been answered and resolved. This remains an experimental draft PoC, not a merge-ready feature.

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

Labels

size:XXL 1,000+ changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant