Repository navigation
feat(mobile): swipe Chats rows and create Host sections - #2552
Conversation
Reuse row action callbacks for swipe and accessible menus, preserve the iOS drawer edge and preview, and add a Host-bound create/assign sheet with recoverable partial failures. Issue: #2519 Agent-Task: codex/local/01a16196-5d76-7442-8c66-95cdef39752c
|
Note Currently processing new changes in this PR. This may take a few minutes, please wait... ⚙️ Run configuration
⛔ Files ignored due to path filters: 9
📒 Files selected for processing: 27
✨ Finishing Touches
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. Comment |
|
Native QA handoff for An exact-head HTML explanation of the callback/Host/retry paths was rendered and inspected in T3 at desktop and narrow widths. It has no public GitHub attachment; local/T3 availability is not reviewer-hosted evidence. The PR body and committed journey contain the public review and acceptance details. |
Release integration dependencyVain's macOS 1.5.0 handoff includes #2519 and final iOS/Android native acceptance. The release task is Fresh metadata for head No device was claimed and no native pass is inferred from the existing source tests. The final acceptance SHA will be announced on #2524 only after the integration gate clears; both platforms then build from that SHA. This comment records the blocker, not merge authorization. |
Preserve the Chats row actions and native composer journeys in the feature index. DESIGN and verification inventory retain both automatically merged changes. Validation: git diff --check only; source-only integration, no fresh-main tests or native acceptance. Issue: #2519 Agent-Task: codex/local/01a16196-5d76-7442-8c66-95cdef39752c
Evidence only; tested PR input remains a0a3f17, combined candidate 8e09ba57d367dff346a4ab5f3c5d53e5c32c90e6 on baseline 897e933. PARTIAL qualification and transient selected/Retry frame limitations remain in the reviewed README. Issue: #2519 Agent-Task: codex/local/01a16196-5d76-7442-8c66-95cdef39752c
Windows/Android test-center result: PARTIALTested 2026-10-22, physical Android16 arm64,1220×2712; development app. PR source PASS, sampled: full swipe revealed actions without canonical write; explicit native pin/mute/unpin/unmute changed the intended DM. Actual soft-keyboard pinyin created 测试2552; Host recorded exactly one section and DM assignment, retaining pin per this frozen contract. Native group menu and assignment to that section worked. Unsent draft255299 was dismissed on switching QA Hosts; the other chooser showed only Baseline Only and neither Host received the draft/cross-Host assignment. Capture qualification: created.png was taken about1.4s after submit and shows selected name/Retry without an error. A later07:32:25 snapshot was back on Chats with successful canonical state. It is an intermediate state, not evidence of persistent failure or of the controlled failure/retry case. UNTESTED: injected assignment/refresh failures and retry, offline draft retention, in-flight Host-switch refusal, TalkBack/hidden-rail focus, unread action, full font/theme/rotation/CJK caret matrix. Original pin-preserving assignment is tested here; newer Pinned-grid/Organize/unpin-on-assign requirements are excluded. iOS and Human acceptance pending. Immutable detailed results and artifact provenance. Evidence-only commit Restored original dev APK (pullback hash matched), recorded settings and original reverse mappings; removed own QA pairings/revoked credentials, stopped own Host/Metro/recorders and released lease at07:53:03.733Z. Two original offline Host entries remain; exact original pairing-ID comparison unavailable because the pre-run snapshot omitted IDs, and offline Host-copy state remains pending. No production app changes, uninstall or data clear. No full native, TalkBack, iOS or Human acceptance claim. Representative actual native evidence: Baseline prior row entry point, no action rail/menu — different synthetic roster from candidate Candidate full swipe exposes actions; canonical roster unchanged until tap Actual Android native group overflow menu Empty Host section chooser Real CJK keyboard input and reachable create control Early selected-section/Retry intermediate state, not final outcome Existing section chooser for group assignment Other QA Host exposes only its own section Recordings are immutable MP4 download links (GitHub serves these files as application/octet-stream; inline playback is not claimed): |
Resolve the additive verification inventory conflict by retaining both phone.chat-row-actions and marketplace.browse. Preserve automatic merges and the published Android evidence. Unverified gutter preparation remains separately saved and is not included. Validation: lightweight JSON parse and git diff --check only. No local tests, typecheck, build, Host, Metro or device run. Native evidence remains PARTIAL at its recorded tested input. Issue: #2519 Agent-Task: codex/local/01a16196-5d76-7442-8c66-95cdef39752c
Formatting only: remove three extra blank lines. Preserve evidence semantics, media, hashes and original immutable evidence references. Issue: #2519 Agent-Task: codex/local/01a16196-5d76-7442-8c66-95cdef39752c
Preserve #2554 horizontal large-text title/time and one-line preview, its native fixture and evidence, and #2578 encrypted uploads. Automatic merge has no conflicts. Only manual edits format the inherited evidence README and row-layout test; media and hashes remain unchanged. Validation: existing oxfmt check on the two files and git diff --check passed. No tests/typecheck/install/build or native operations; gutter preparation remains stashed. Issue: #2519 Agent-Task: codex/local/01a16196-5d76-7442-8c66-95cdef39752c








Issue #2519 · Work claim · Human-authorized section creation scope
Why the change
Phone Chats users can swipe or open an accessible row menu to pin, mute, or add a conversation to an existing or newly created section on its Remote Host.
Special things to note
897e9334768baf26547eb155f9ab1b3e7a0ee61fby ordinary merge (heada0a3f17af55af20e48a8c4bb1d47430bda7b7b99). JavaScript only, with no native dependency/config changes. Android sampled results and captures are now recorded below; complete gesture/menu/keyboard/screen-reader acceptance remains outstanding. The implementation task itself started no shared device resources; the test center executed the dated batch below. iPhone handoff is prepared but not submitted because actual Mac queue access is unavailable.git diff --check(working and staged), both passed. No install, tests, typecheck, build, Host, Metro or device run was performed on the integrated main. Historical results below belong to original headdb6186f96da024d5a6d3938fcf7a2d46233fac25on base8f4e650db551ae8458211634872ed291ff4e5a4f, not fresh-main validation: final focused suite 36 passed; root/mobile typecheck, lint (existing warnings), formatting, changelog and feature-map checks passed. Broader mobile run: 1,073 passed / 12 failed / 9 skipped; all 12 failures independently reproduced on clean main in the same five files (45 passed / 12 failed), involving locale expectations. Final lifecycle/guard changes were rechecked by the focused suite. Full/native builds and native runtime checks are unrun. CI plan selects related tests plus mobile checks.Change outline
Android actual-device result — 2026-10-22
PARTIAL — native row actions and Host ownership sampled; failure/retry and accessibility matrix outstanding.
Tested 2026-10-22, physical Android16 arm64,1220×2712; development app. PR source
a0a3f17af55af20e48a8c4bb1d47430bda7b7b99, combined batch8e09ba57d367dff346a4ab5f3c5d53e5c32c90e6, baseline897e9334768baf26547eb155f9ab1b3e7a0ee61f. Native fingerprint2cde0026048320af2a7fdcafdc10b68875aadd75; Expo58.0.17/RN0.88/React19.3. Reused compatible arm64 Debug APK SHA256B3A5DF7CA0D0F1C393523BE945FD49EF7263110A6DAA5B89726073759CA9ED3A. Host/Metro Node24.21 verified; original APK build's Node24.16/24.21 provenance uncertainty retained. Source preparation20files/163tests+mobiletype and serial builds passed separately; they are not phone acceptance.PASS, sampled: full swipe revealed actions without canonical write; explicit native pin/mute/unpin/unmute changed the intended DM. Actual soft-keyboard pinyin created 测试2552; Host recorded exactly one section and DM assignment, retaining pin per this frozen contract. Native group menu and assignment to that section worked. Unsent draft255299 was dismissed on switching QA Hosts; the other chooser showed only Baseline Only and neither Host received the draft/cross-Host assignment.
Capture qualification: created.png was taken about1.4s after submit and shows selected name/Retry without an error. A later07:32:25 snapshot was back on Chats with successful canonical state. It is an intermediate state, not evidence of persistent failure or of the controlled failure/retry case.
UNTESTED: injected assignment/refresh failures and retry, offline draft retention, in-flight Host-switch refusal, TalkBack/hidden-rail focus, unread action, full font/theme/rotation/CJK caret matrix. Original pin-preserving assignment is tested here; newer Pinned-grid/Organize/unpin-on-assign requirements are excluded. iOS and Human acceptance pending.
Immutable detailed results and artifact provenance. Evidence-only commit
04287a80b6511e5b22e74f81b9725821d6a5851fis a publication reference, not a newly tested runtime head. Screenshots crop status/navigation pixels only. Clips retain original speed, no audio, and are cropped/downscaled; sampled privacy review and exact source intervals are documented in the report. Warning overlays are retained.Restored original dev APK (pullback hash matched), recorded settings and original reverse mappings; removed own QA pairings/revoked credentials, stopped own Host/Metro/recorders and released lease at07:53:03.733Z. Two original offline Host entries remain; exact original pairing-ID comparison unavailable because the pre-run snapshot omitted IDs, and offline Host-copy state remains pending. No production app changes, uninstall or data clear. No full native, TalkBack, iOS or Human acceptance claim.
Baseline prior row entry point, no action rail/menu — different synthetic roster from candidate
Candidate full swipe exposes actions; canonical roster unchanged until tap
Actual Android native group overflow menu
Empty Host section chooser
Real CJK keyboard input and reachable create control
Early selected-section/Retry intermediate state, not final outcome
Existing section chooser for group assignment
Other QA Host exposes only its own section
Recordings are immutable MP4 download links (GitHub serves these files as application/octet-stream; inline playback is not claimed):
The iOS row recognizer excludes the drawer's existing 24-point edge zone. Full swipes only reveal actions. Hidden rail buttons leave the accessibility tree; iOS preview remains inside the row while the native menu has its own trigger. Pin/mute/read reuse their existing Host operations. Cloud rows and Bots without a DM receive no Host swipe actions.
The Human explicitly requested mobile section creation and Remote Host authority. The sheet uses a virtualized Host section list, a keyboard-aware create form, trimmed nonempty names, immediate busy feedback, and separate creation/assignment/refresh errors. It captures the Host client, checks ownership before each continuation, and never persists sections locally. A lost creation response cannot be retried idempotently by the existing API: retain the draft and inspect the refreshed Host list before creating again. Rename/delete/reorder are outside this flow.
Pre-run evidence blocker (superseded for the sampled Android cases above): this Windows task has no assigned Android batch or Mac/iPhone lane. The exact-head native journey specifies default/intermediate/maximum OS text × light/dark, swipe/edge/preview, VoiceOver/TalkBack, actual keyboard/CJK entry, persistence, delayed assignment failure and Host switching. Capture matched base/candidate closed row, revealed rail, native menu, chooser, create keyboard and retry states. Source tests and an HTML explainer are not native evidence or Human acceptance.
Source-only integration: original head
db6186f96da024d5a6d3938fcf7a2d46233fac25+ freshly fetched main897e9334768baf26547eb155f9ab1b3e7a0ee61f→ merge heada0a3f17af55af20e48a8c4bb1d47430bda7b7b99. The only manual resolution keeps both Chats row actions and native composer entries in the feature index; DESIGN and verification inventory retain their automatic merges. Main includes #2567 and #2570; those imported changes are distinct from the resolution. No #2571 organization design is included. Previous HTML explainer is bound to the original head, not this integration. Native acceptance remains outstanding.Closes #2519. Agent-Task:
codex/local/01a16196-5d76-7442-8c66-95cdef39752c.