Repository navigation
refactor(mobile): expose native menus through a shared Menu API - #19265
Conversation
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: unavailable · PR result: Scenario and decoded snapshot size10 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.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a repository-wide mobile menu naming and import migration, with the existing iOS, Android, popup, long-press, and modal-specific behavior preserved. The broad file count reflects caller updates rather than new runtime logic or a product-default change. No code changes detected at You can add or adjust custom eligibility rules. Learn more. |
Dismissing prior approval to re-evaluate dcda47e
dcda47e to
d8b9b71
Compare
Design-system progress
API adoption and Pen rendering are tracked separately. This is cumulative through this PR, not a claim that all native renderers are finished.
Custom Appearance cards stay. Segmented controls stay native. Composer, thread-row and task-tray redesigns remain deferred.
Menus were exposed through ControlPillMenu and often imported from ControlPill, despite accepting arbitrary triggers. Expose Menu and MenuProps directly and migrate all mobile consumers to that module.
Keep the iOS native context menu, Android anchored Compose menu, editor anchoring, nested actions, disabled/destructive states and long-press suppression intact. Media menus inside Android modals retain their native MenuView exception.
Validation: Mobile typecheck passed. Opened native menus and selected the destructive item on iOS 27 and Android 17; both opened the confirmation and cancelled correctly. Targeted lint retains the existing ref-in-event-handler warning in the unchanged long-press implementation.
The internal popup renderer is named MenuPopup with its Android implementation in MenuPopup.android.tsx; app code does not import a Material-prefixed wrapper.
Model: GPT-6.1. Harness: Codex.
Captured from the actual parent branch and the integrated new layers, with Iris dark selected. Search and menu rendering is intentionally preserved. The added Prompt catalog button moves the example menu trigger.
iOS native menu
Android anchored menu