feat(swift-ios): add pull-down command drawer - #7345
Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Warning Your free Security trial is over. An organization admin can activate Security or dismiss this notice. Comment |
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This is a substantial new iOS capability that adds a searchable command drawer, global pan-gesture arbitration, keyboard/focus handoff, and routing from both Home and thread detail. Because it changes core workspace interaction and introduces cross-view UIKit/SwiftUI lifecycle behavior across several production files, it warrants human review. You can add or adjust custom eligibility rules. Learn more. |
1f39d72 to
fce7740
Compare
9a94ad2 to
b815cd4
Compare
|
Adds the command drawer's gesture and fixes how it presents. The drawer now opens on a plain downward swipe that starts anywhere on the app's top bar — Home, an open thread, and the other pushed surfaces alike — instead of only on a deliberate long drag: the settle is an absolute commit distance measured from the rest position the drag started at, with the release's momentum projected a little ahead, so a short fast swipe commits on speed and a slow one on position, and the push that closes the drawer is as short as the swipe that opened it. Eligibility is unchanged, so Home's thread list and the thread transcript keep every ordinary scroll and the status bar above the safe-area inset stays the system's own notification-shade gesture. The drawer is also presented over the workspace rather than pushing it: the page underneath no longer translates at all, so the rows, header and composer stay exactly where they were while the drawer and its scrim move with the finger (measured on the simulator as a 0-pixel shift of the background, with a sharp minimum). Finally, the search field now reliably takes focus — the request is made when the pull starts, which is what puts the keyboard's height into the drawer's open height before the finger lifts, but at that moment the field is still above the window's top edge and the request can be dropped; it is now renewed once the drawer is open and still unfocused, so the keyboard arrives on every entry path including a quarter-second swipe. Coordination trace: T3 thread DD1ED949-643E-4C94-B93A-8A87DF73B471 · saphid/t3code-personal#122 |
|
Desperately needs screenshots and videos |
|
Added the visual proof to the PR description:
The assets are committed in |
|
Replaced the obsolete command-palette media with fresh captures from the current SwiftUI PR build.
The PR description now embeds/links the replacements from commit |
|
Updated the visual proof again with a populated simulator environment: 3 projects (T3 Code, React, Linux) and 9 recent threads. The replacement videos now open on the populated Home list and show the unfiltered drawer before searching:
The two replacement screenshots also visibly include the recent thread rows and all three project actions. Assets are in |
|
Re-recorded both videos with the iOS software keyboard explicitly visible for the complete drawer search interaction.
Replacements are in |
Define the command drawer geometry, gesture arbitration, responder ownership, and bounded focus renewal as a focused foundation slice. Restore the exact prior responder after an abandoned pull and cover cancellation, teardown, and eligibility paths with focused tests.
b3a4673 to
0e0fb94
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 55623cf. Configure here.
|
Current status: do not merge yet. Theo's SwiftUI target advanced to |

What Changed
Add a searchable command drawer for actions, threads and projects, reachable from visible controls and a pull-down gesture. Closing or abandoning the drawer restores the prior text-input focus.
This consolidates native work items saphid/t3code-personal#86, saphid/t3code-personal#122, saphid/t3code-personal#135 and saphid/t3code-personal#154 and supersedes the former stacked draft #8350.
Why
This gives the native client a common place to find commands and navigate while preserving ordinary transcript/list scrolling and keyboard use.
Verification and remaining proof
Candidate:
c1eef5a073bf25dfb277882444f187c1f64647b9. This PR targetst3code/rebuild-mobile-app-swift; its historical integration base isb67837984e5650888b1eed0e1cd7fff83625f696. The current native parent inspected in the readiness review isb99405468a6b2be1e0f67d551ece824b1627e35c. Merging this child does not by itself deliver the native app to upstream main.The hosted native build/test job passed on the candidate. The earlier report records 61 FeatureCommandDrawerTests and FeatureCommandDrawerPresentationTests on iPhone 16 Pro / iOS 26.5, for this head on base b678379. No local build, test or client session was run for this description update; full historical local invocations were not recovered here.
Integrate the drawer with the current attachment, voice, caret and gesture lifecycle; repeat open, cancel, selection, dismissal and focus-restoration proof. This PR is not evidence-complete for human merge review against the current native parent.
Earlier visual evidence
These retained captures/reports belong to the revisions and conditions stated below. They were not recaptured, visually inspected or revalidated for current-parent integration in this pass. Historical access/playback statements describe the original check, not a new one.
Earlier captures and their original conditions
Exact target
b67837984e5650888b1eed0e1cd7fff83625f696→ headc1eef5a073bf25dfb277882444f187c1f64647b9.The dark-mode sequence shows
prior, an abandoned pull followed byrestored, then a complete pull/open/gesture-close followed byreturned. Both suffixes were typed without tapping Home search; the caret and software keyboard remain with the same field.Annotated MP4 · Clean MP4 · Contact sheet
Exact-target and light-mode context
Exact-target pull — the same top-edge pull leaves Home unchanged because the live target has no drawer.
Tracking: native work item #122.
Generated by GPT-5.6 Sol in the Codex harness.
Description and evidence audit: GPT-6 in Codex, using prepare-proof-media from #9926.