Skip to content

fix(mobile): use full conversation rows in Pinned - #2618

Merged
DoodleBears merged 1 commit into
mainfrom
codex/2571-pinned-list
Oct 23, 2026
Merged

DoodleBears merged 1 commit into
mainfrom
codex/2571-pinned-list

Conversation

@DoodleBears

@DoodleBears DoodleBears commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Refs #2571 | Design-feedback follow-up to #2574 | Agent claim

Task: codex/local/01a16587-3995-7b22-8c81-7c19caccddef

Why the change

Human screenshot feedback found the mobile Pinned grid hard to scan, so Pinned now uses the same conversation rows as other sections to make names, message previews, timestamps and unread/status information easier to read.

Special things to note

  • Merge risk: two-way door — revert this commit; small blast radius — mobile Pinned presentation and actions, with no Host, storage, dependency or native-config change. Review focus: row information, inverse swipe/menu actions and no duplicate section entries.
  • Preserves canonical pin order/membership, unpin placement, per-Host collapse, search ranking and Cloud separation. Organize/drag remains a later slice. Phone Chats: render Remote Host sections and Pinned list #2571 is currently closed; its closure does not establish the remaining platform/Human acceptance gates.
  • Validation: 69 focused tests across seven files, mobile TypeScript, lint, formatting, source policy, bilingual ledgers, CLI parity and feature-map checks pass. CI39880968069 passes all applicable jobs, including the full three-shard suite, builds, mobile exports, Android module tests and Host smoke. Batch63 now supplies actual iOS Simulator interactions and six matched before/after layout pairs below. Android, physical Release and Human/assistive-technology acceptance remain separate and untested.

Change outline

 Chats FlatList
   Pinned SectionHeader (collapsible, scrolls with content)
-    PinnedBand[] → PinnedConversationCard (avatar/name/status/unread)
+    ConversationRow[] (same name/preview/time/status/unread as other sections)
   Custom SectionHeader
     ConversationRow[]
   Loose ConversationRow[]

Pinned rows reuse ordinary swipe actions, iOS preview/context menu, Android long-press and accessibility actions. Removed the card, width/column policy and band projection. Kept coverage for 100 individually virtualized pins, order and collapse; updated design, the unreleased bilingual fragment and the native verification journey to the accepted list presentation.

Batch63 native evidence — iPhone 17 Pro Simulator, iOS 27 beta, 402 × 874 pt

Before 5be050bef4dc runs the grid; After 76078cfc7fc5 runs this merged list change. Same installed Debug dev client, verified iOS fingerprint 4176fdf936e537bf2a1b7f6f5d906e2ca1615ecc, with independently verified loaded JS for each revision. The synthetic “QA Batch 62” connection is the retained fixture reused by Batch63, not the old product revision. The six pairs match data, locale, device, theme and system text size; both DM rows have one unread message before any interaction tests.

Light · default system text — Before grid / After list

Before: light default Pinned

After: light default Pinned

Light · intermediate system text — Before grid / After list

Before: light intermediate Pinned

After: light intermediate Pinned

Light · maximum system text — Before grid / After list

Before: light maximum Pinned

After: light maximum Pinned

Dark · default system text — Before grid / After list

Before: dark default Pinned

After: dark default Pinned

Dark · intermediate system text — Before grid / After list

Before: dark intermediate Pinned

After: dark intermediate Pinned

Dark · maximum system text — Before grid / After list

Before: dark maximum Pinned

After: dark maximum Pinned

At maximum text size, names are heavily ellipsized and the workspace header becomes tall; the tall header is also present in the matched baseline. Scrolling and opening the final row passed, but this is not a blanket readability or accessibility acceptance.

Actual interaction checks

Check Observed result
Unpin Pinned 3 → 2; Notes returns once to Work; canonical membership retained.
Swipe / long press / preview Native Unpin, Add to section and Mute controls appear; preview displays the selected DM.
Mute / Unmute Actual menu actions update and restore canonical muted state.
Add to section Notes moves Work → Empty → Work while remaining pinned, with no duplicate row.
Collapse / keyboard search / close Search finds Notes through the collapsed section; closing restores collapse; canonical roster unchanged.
Long list 27 pinned rows scroll normally; last pinned Notes opens correctly; maximum text can reach and open final loose QA Design row.

Swipe actions

Swipe actions

Unpin returns to Work

Unpin returns to Work

Native preview and context menu

Native preview and context menu

Native section picker

Native section picker

Search with real native keyboard

Search with real native keyboard

Search closed; collapse restored

Search closed; collapse restored

27 pinned rows, newest first

27 pinned rows, newest first

End of 27 pinned rows

End of 27 pinned rows

Maximum text: final loose row reachable

Maximum text: final loose row reachable

Maximum text: final row opened

Maximum text: final row opened

Not tested: Android, physical/Release app, VoiceOver/TalkBack, wide/rotation layouts, working-state transitions, an independent Mark read command, two disposable Hosts/Cloud/Web scope isolation and failure/reconnect behavior. Peek/open changed unread state; this does not prove a separate Mark read action. Prior provider quota errors mean no live model-working claim. Human design acceptance remains separate.

Public screenshot provenance and limitations. All 22 images were visually inspected and contain only synthetic QA data. Temporary 24 empty groups removed; original pins/section membership restored. This batch's Host, both Metro servers and driver stopped with ports released; original Simulator workspace/theme/text restored. Retained phone services and shared package outputs were preserved. No phone install, release or deployment.

Issue: #2571
Agent-Task: codex/local/01a16587-3995-7b22-8c81-7c19caccddef
@coderabbitai

coderabbitai Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 55f64e04-0ce9-4305-99c0-ab406de9f75a
📥 Commits

Reviewing files that changed from the base of the PR and between 5be050b and c0106bf.

📒 Files selected for processing: 13
  • .agents/skills/verify-deepseekbot/features/README.md
  • .agents/skills/verify-deepseekbot/features/phone-pinned-list.md
  • apps/mobile/DESIGN.md
  • apps/mobile/app/(tabs)/(home)/index.tsx
  • apps/mobile/src/ui/chat/pinned-conversation-card.tsx
  • apps/mobile/src/ui/chat/pinned-grid.ts
  • apps/mobile/src/ui/design/tokens.ts
  • apps/mobile/test/home-search.test.tsx
  • apps/mobile/test/pinned-list.test.ts
  • changes/2571-phone-pinned-grid.md
  • changes/2571-phone-pinned-list.md
  • docs/architecture/botharness-architecture.md
  • scripts/verification-inventory.json
+--------------------------------------------------------------+
| I had to scroll so far I hit the heat death of the universe. |
+--------------------------------------------------------------+
  \
   \   (\__/)
       (•ㅅ•)
       /   づ
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

@DoodleBears
DoodleBears marked this pull request as ready for review October 23, 2026 02:25
@DoodleBears
DoodleBears merged commit 76078cf into main Oct 23, 2026
12 checks passed
@DoodleBears
DoodleBears deleted the codex/2571-pinned-list branch October 28, 2026 04:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant