Skip to content

fix(mobile): keep Chats titles and timestamps inline at large text - #2554

Merged
DoodleBears merged 4 commits into
mainfrom
codex/2553-chat-row-large-text
Oct 22, 2026
Merged

DoodleBears merged 4 commits into
mainfrom
codex/2553-chat-row-large-text

Conversation

@DoodleBears

@DoodleBears DoodleBears commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Closes #2553 · Agent claim · Task: codex/local/01a161ca-29cb-7e50-a917-73955c53f929

Why the change

Keep Chats titles and timestamps on the same line at large system text sizes, fixing the Android baseline failure against the mobile design contract.

Special things to note

Change outline

Android actual-device result — 2026-10-22

PARTIAL — title/time same-line geometry improved on Android; full accessibility and platform acceptance outstanding.

Tested 2026-10-22, physical Android16 arm64,1220×2712; development app. PR source 571b4437b4a5c323d243a56e79d25d5bf85f82b8, combined batch 8e09ba57d367dff346a4ab5f3c5d53e5c32c90e6, baseline 897e9334768baf26547eb155f9ab1b3e7a0ee61f. Native fingerprint 2cde0026048320af2a7fdcafdc10b68875aadd75; Expo58.0.17/RN0.88/React19.3. Reused compatible arm64 Debug APK SHA256 B3A5DF7CA0D0F1C393523BE945FD49EF7263110A6DAA5B89726073759CA9ED3A. 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 geometry: matched same-Host HarborBot/42 baseline and combined candidate captures show baseline title→time→preview stacking at2.0 versus candidate title+time header and preview/status below, with the actual PR2552 trailing menu. Default/intermediate1.3/light/dark and live scale changes were also captured locally.

Actual OEM maximum: system slider labelled200% reads font_scale1.45 on this device. Matched light/dark long mixed-language title and no-time row captures at1.45 show candidate inline header and no blank timestamp row. Direct2.0 is an extra stress setting, not the OEM maximum. Candidate2.0 dark still truncates title/time; do not infer full text visibility. Full accessible names sampled via XML only.

Outstanding: live font changes produced linking/navigation warnings in both sources; screenshots retain them. Root cause unassigned. TalkBack, long-title row activation, full accessibility, iOS and Human acceptance remain untested.

Immutable detailed results and artifact provenance. Evidence-only commit 653dfa866f6668056122608f8aa800aa5de5a058 is 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.

Before —2.0 stress light, title/time on different lines

Before —2.0 stress light, title/time on different lines

After —2.0 stress light, title/time inline with actual trailing menu

After —2.0 stress light, title/time inline with actual trailing menu

Before —2.0 stress dark

Before —2.0 stress dark

After —2.0 stress dark; title/time truncation remains visible

After —2.0 stress dark; title/time truncation remains visible

Before —OEM maximum1.45 light, long title and no-time row

Before —OEM maximum1.45 light, long title and no-time row

After —OEM maximum1.45 light; full title accessible label sampled separately

After —OEM maximum1.45 light; full title accessible label sampled separately

Before —OEM maximum1.45 dark

Before —OEM maximum1.45 dark

After —OEM maximum1.45 dark, inline title/time and no blank timestamp row

After —OEM maximum1.45 dark, inline title/time and no blank timestamp row

 ConversationRowFrame
-  header: column at large text
-    SourceName: stretch, title up to two lines
+  header: horizontal at every text size
+    SourceName: flexible remaining width, one-line tail ellipsis
+    source mark: does not shrink
     timestamp: optional, single line, does not shrink
-  preview: up to two lines at large text
+  preview/status: second line, preview uses tail ellipsis

Native scaling and complete accessibility labels remain intact. No timestamp means no timestamp element or blank metadata row. The real frame, SourceName and text adapters are exercised by the row fixture; it covers long mixed-language names, absent time, live scale inputs, full labels, row activation and an optional platform-touch-width sibling. It checks native layout/text props, not Yoga geometry or the actual trailing menu.

The six-line fixture follow-up isolates expo-router: combining with #2552 introduces ConversationRow → ConversationPeek → expo-router, which otherwise loads native code during test collection. The Router stub throws if navigation is rendered, so the fixture cannot silently claim navigation coverage. Production code and layout assertions are unchanged by this follow-up.

Controlled RED/GREEN evidence:

  • Original standalone head 432c3f2c17065d9947a02f5d1e366db95af39c4a: four focused files / 23 tests and mobile typecheck passed.
  • Exact frozen combo b86981ab4d49f0f1587a4c7e47397a8b528b5bb8: one-file RED reproduced SyntaxError: Unexpected token 'typeof' during collection, zero tests, exit 1 (4.88s).
  • Cherry-picking only the six-line fixture commit produced local diagnostic combo 69c5f139324fc6902d80c4b96e62793441aae396: one-file GREEN passed all 10 tests (1.73s); the original 12-file set passed all 84 tests (17.81s); mobile typecheck passed, exit 0. This is not a direct standalone run of the new PR head and not native qualification.
  • Checks ran serially with actual Node 24.21.0, pnpm 12.4.2 and process-local GOMAXPROCS=2. Own install used --frozen-lockfile --ignore-scripts --child-concurrency=1 --network-concurrency=1 (52.8s). Vitest used --maxWorkers=1 --no-file-parallelism; typecheck used node node_modules/typescript/bin/tsc --noEmit -p apps/mobile/tsconfig.json.

The 12 files were conversation-actions, conversation-sections, conversation-section-sheet, conversation-row-layout, conversation-streaming-rows, follow-latest-gestures, follow-latest, home-search, source-name, system-text, style-guard and action-menu-android. The heavy window was explicitly released at 2026-10-22T06:12:40.6413520Z after verifying observed own processes/descendants had exited and owned no listeners. No Host, Metro, device, build, full suite or lease was started.

Pre-run capture blocker (superseded for the sampled Android cases above): native acceptance and sanitized matched captures await the test center's new composition and explicit CUT/RUN. The original Android16 / Expo58.0.17 font-scale2.0/light failure was observed on main 8f4e650db551ae8458211634872ed291ff4e5a4f; its private raw PNG/XML are not published. No corrected candidate native screenshot is claimed.

Native review journey: open Chats with a timestamped HarborBot, a long mixed-language title and a no-time row. Check default/intermediate/actual maximum OS text in light/dark on Android/iOS, including live default → maximum → default. Verify title/time share one line, preview/status stay on the second, no-time leaves no blank metadata row, and full accessible names plus row activation remain available. In the new combined candidate, check the real trailing menu width and reachable action target. Capture matched sanitized evidence; source tests cannot establish native geometry, screen-reader usability or Human acceptance.

Issue: #2553

Agent-Task: codex/local/01a161ca-29cb-7e50-a917-73955c53f929
@coderabbitai

coderabbitai Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 41 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 2 included reviews currently available.

Learn how review limits work.

Review configuration:

⚙️ 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: de489078-c7a0-4e23-9646-cdbdf87a23c9
📥 Commits

Reviewing files that changed from the base of the PR and between 8f4e650 and bdd6dd0.

⛔ Files ignored due to path filters: 8
  • .github/pr-screenshots/2554-android/after-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2554-android/after-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2554-android/before-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2554-android/before-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2554-android/oem-after-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2554-android/oem-after-light.png is excluded by !**/*.png
  • .github/pr-screenshots/2554-android/oem-before-dark.png is excluded by !**/*.png
  • .github/pr-screenshots/2554-android/oem-before-light.png is excluded by !**/*.png
📒 Files selected for processing: 6
  • .github/pr-screenshots/2554-android/README.md
  • .github/pr-screenshots/2554-android/hashes.json
  • apps/mobile/src/ui/chat/conversation-row.tsx
  • apps/mobile/src/ui/chat/source-name.tsx
  • apps/mobile/test/conversation-row-layout.test.tsx
  • changes/2553-chat-row-large-text.md
  • 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.

Issue: #2553

Agent-Task: codex/local/01a161ca-29cb-7e50-a917-73955c53f929
Evidence only; runtime tested input remains 571b443. Native result remains PARTIAL.

Issue: #2553

Agent-Task: codex/local/01a161ca-29cb-7e50-a917-73955c53f929
@DoodleBears

Copy link
Copy Markdown
Contributor Author

Windows/Android test-center result: PARTIAL

Tested 2026-10-22, physical Android16 arm64,1220×2712; development app. PR source 571b4437b4a5c323d243a56e79d25d5bf85f82b8, combined batch 8e09ba57d367dff346a4ab5f3c5d53e5c32c90e6, baseline 897e9334768baf26547eb155f9ab1b3e7a0ee61f. Native fingerprint 2cde0026048320af2a7fdcafdc10b68875aadd75; Expo58.0.17/RN0.88/React19.3. Reused compatible arm64 Debug APK SHA256 B3A5DF7CA0D0F1C393523BE945FD49EF7263110A6DAA5B89726073759CA9ED3A. 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 geometry: matched same-Host HarborBot/42 baseline and combined candidate captures show baseline title→time→preview stacking at2.0 versus candidate title+time header and preview/status below, with the actual PR2552 trailing menu. Default/intermediate1.3/light/dark and live scale changes were also captured locally.

Actual OEM maximum: system slider labelled200% reads font_scale1.45 on this device. Matched light/dark long mixed-language title and no-time row captures at1.45 show candidate inline header and no blank timestamp row. Direct2.0 is an extra stress setting, not the OEM maximum. Candidate2.0 dark still truncates title/time; do not infer full text visibility. Full accessible names sampled via XML only.

Outstanding: live font changes produced linking/navigation warnings in both sources; screenshots retain them. Root cause unassigned. TalkBack, long-title row activation, full accessibility, iOS and Human acceptance remain untested.

Immutable detailed results and artifact provenance. Evidence-only commit 653dfa866f6668056122608f8aa800aa5de5a058 is 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.

Representative actual native evidence:

Before —2.0 stress light, title/time on different lines

Before —2.0 stress light, title/time on different lines

After —2.0 stress light, title/time inline with actual trailing menu

After —2.0 stress light, title/time inline with actual trailing menu

Before —2.0 stress dark

Before —2.0 stress dark

After —2.0 stress dark; title/time truncation remains visible

After —2.0 stress dark; title/time truncation remains visible

Before —OEM maximum1.45 light, long title and no-time row

Before —OEM maximum1.45 light, long title and no-time row

After —OEM maximum1.45 light; full title accessible label sampled separately

After —OEM maximum1.45 light; full title accessible label sampled separately

Before —OEM maximum1.45 dark

Before —OEM maximum1.45 dark

After —OEM maximum1.45 dark, inline title/time and no blank timestamp row

After —OEM maximum1.45 dark, inline title/time and no blank timestamp row

Issue: #2553

Agent-Task: codex/local/01a161ca-29cb-7e50-a917-73955c53f929
@DoodleBears
DoodleBears marked this pull request as ready for review October 22, 2026 08:27
@DoodleBears
DoodleBears merged commit 34116cb into main Oct 22, 2026
3 of 4 checks passed
DoodleBears added a commit that referenced this pull request Oct 22, 2026
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
jishi7 pushed a commit to jishi7/DeepSeekBot that referenced this pull request Oct 24, 2026
Remove the permanent overflow column. Preserve shared actions through Android long press, iOS Link preview context menus, swipe and screen-reader actions, including mark-read. Use shared Chats gutters with avatar slot compensation and retain BotHarness#2554 text layout.

Source-only candidate: targeted existing formatter and git diff --check passed. Tests/typecheck and native geometry or interaction checks await CI/test-center allocation; no overflow root cause is claimed.

Issue: BotHarness#2588

Agent-Task: codex/local/01a16196-5d76-7442-8c66-95cdef39752c
@DoodleBears
DoodleBears deleted the codex/2553-chat-row-large-text 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.

Mobile Chats: keep title and timestamp on one line at large system text sizes

1 participant