Repository navigation
fix(mobile): preserve Markdown list width in chat bubbles - #2597
Conversation
List flex:1 gives content a zero basis inside shrink-to-fit bubbles. Allow shrinking without discarding intrinsic width, retaining compact short lists. The renderer/Yoga regression failed with 14px long-list text before this fix. Issue: #2596 Agent-Task: codex/local/01a16398-d657-75d0-9cfa-9a8a9f34b9c0
|
Note Currently processing new changes in this PR. This may take a few minutes, please wait... ⚙️ Run configuration
⛔ Files ignored due to path filters: 1
📒 Files selected for processing: 4
✨ 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 |
Remove only the two explanatory comments from the Markdown layout regression. Verification limits remain in the PR and source report. Issue: #2596 Agent-Task: codex/local/01a16398-d657-75d0-9cfa-9a8a9f34b9c0
|
Android native attempt — BLOCKED before matched layout comparison. Frozen app inputs: base
Source test results and CI remain separate from this blocked device attempt. This attempt does not establish that the previously observed playback backlog is fixed. |
|
Android follow-up window Exact base Default font1.0/dark: short list same Text node 7→294px, nested 7→666px, both now fully readable; long list no longer one-character wide, candidate ending visible (automatic scroll positions differ); plain paragraph width 846px both. Same four canonical synthetic Bot messages and exact body hashes, no model/stream injection. At font1.3/light, list width remained normal but Expo Router emitted duplicate linking configuration after activity recreation. Preserve this failure; no clean full-matrix, streaming/backlog/FPS/history/Jump/OEMmax/iOS or Human-acceptance claim. Existing Expo Doctor CI failure remains. Recovery gap from the prior comment is resolved. Original Release SHA256 Immutable evidence and eight reviewed crops; screenshots are embedded in the PR body. Evidence commit |
|
Integration and merge complete: exact head Published Android PARTIAL evidence remains tied to base |
Issue #2596 | Agent claim
Why the change
Android Markdown lists can collapse to a single-character column inside content-sized chat bubbles, making long replies unreadable.
Special things to note
codex/local/01a16398-d657-75d0-9cfa-9a8a9f34b9c0.Change outline
MessageBubble (content-sized, maxWidth 80%) Android MarkdownView MarkdownText list row marker - body: flex: 1 // zero basis loses intrinsic width + body: flexShrink: 1 // content sizes the row, then wraps to fitThe problematic list style dates to
209fe8dcd1d8fe06bec2fe6542a68a2f246f510a(October 17), before the latest QA fixes; this does not establish the first affected native release.The regression renders the actual components, carries their layout styles into Yoga, and checks completed/streaming 40-item Chinese lists, nested lists at three window widths with enlarged text, compact short lists and plain prose. Yoga is an exact-pinned development-only dependency.
Native comparison PARTIAL — 2026-10-22: tested base
914bfa57ed04807dc3f94a1ed6a4e678da898591against runtime candidateb3c0f4236533226433b0e89102d707f25f955ca0on the designated POCO 24069PC21G, Android 16/API 36, arm64, 1220 × 2712 pixels/density 480. The4d77e61csuccessor only removed two test comments; the later integration headd8d677e4d1e3d889d006b746894b11395c8970c1additionally merges main and was not run on the phone. These screenshots remain bound to the original base/candidate. Detailed evidence, build hashes, crops and limits.Four previously committed synthetic Bot messages were reused through the real Host; canonical author/body hashes matched. Separate sequential Metro instances loaded the frozen base/candidate using the audited SDK 58 Debug APK, fingerprint
1d971f8f1e438ac99cb56339c9300cf53092be9f. No model, live stream or product instrumentation was used.Widths are native UI Automator Text-node bounds, not glyph-ink or full-height measurements. Long-list/prose screenshots differ in automatic scroll position, so they are not equal-offset pixel comparisons. The short/nested pairs use the same text and visible message position. Published crops remove status/notification and developer-overlay regions.
Additional failure / untested: after font 1.3/light-theme recreation, the long list remained wide, but Expo Router logged and displayed “Looks like you have configured linking in multiple places”; attribution is unresolved. Private app-only logs and the uncropped error screenshot are retained. This is not a clean font/theme matrix pass. OEM maximum, other widths, TalkBack, iOS, Human visual acceptance, live playback drain, history/Jump and FPS remain untested; the old 54.444–55.420s observation is not requalified by these completed messages.
Restoration complete: the earlier blocked attempt was recovered after the Human rebooted. The new comparison ended at
17:27:29.9775527Z: original Release APK was restored and pulled back with matching hash, eight settings/USB reverses match, own pairing/credential removed, own Host/Metro stopped and lease released. The Human's explicit Allow-notifications choice was preserved and read back. No uninstall or data clear.Short list — default font, dark
All three fixed items are readable after; the bubble still fits short content.
Before
After
Nested list — default font, dark
The same nested content is readable after instead of clipped into a narrow strip.
Before
After
40-item list — default font, dark
Same canonical body and device settings; before shows the beginning, after the automatically selected end. This pair demonstrates the visible column-width change, not identical scroll geometry.
Before
After
Plain-prose regression crops: before, after.
Integration
d8d677e4d1e3d889d006b746894b11395c8970c1: ordinary merge of maina1656d18a70f1f115da41092ca159b59e8895f4f; the sole package conflict retains upstream@types/react-dom ~19.3.0and this PR's development-only Yoga 3.2.1. The old Expo Doctor failure is preserved as historical evidence. Fresh frozen scripts-disabled installation, 7 focused files / 64 tests, mobile typecheck, touched format and changelog checks all pass; Expo Doctor now passes 20/20. Exact-head CI 39835907249 passed all applicable jobs, including three full test shards, mobile verification, Android module checks, static/build, docs and isolated Host smoke; real-model scenarios were skipped. Merged at 2026-10-22T19:06:06Z asbdcc996a1ae1fa6d83439647bda4e4643b2b21aeunder the Human merge-first instruction. Native evidence above does not qualify this newer integrated main or streaming performance.No HTML explainer is needed for this one-line styling change; the component outline and regression limits above describe the full behavior change.
Summary by CodeRabbit