Skip to content

test(mobile): cover first-DM visibility and reply following - #2551

Merged
DoodleBears merged 1 commit into
mainfrom
t3/mobile-chat-first-reply
Oct 22, 2026
Merged

DoodleBears merged 1 commit into
mainfrom
t3/mobile-chat-first-reply

Conversation

@DoodleBears

@DoodleBears DoodleBears commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Refs #2521 | Agent claim

Task: codex/local/01a16196-b7e0-70a2-a239-cf57d66db81d

Why the change

Protect the existing first-DM fixes with a screen-level regression journey and give native QA a precise way to distinguish blank lists, misplaced working indicators and lost reply following.

Special things to note

Change outline

Android actual-device result — 2026-10-22

PARTIAL — short replies and eventual long-tail visibility observed; performance and history retention unresolved.

Tested 2026-10-22, physical Android16 arm64,1220×2712; development app. PR source 5df949ff7fad82f128609a858277f161df484bcb, 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: actual non-Connect phone composer → official deepseek-official/deepseek-flash → canonical and visible 42 on both baseline and candidate. Candidate Human07:18:33.567Z → canonical07:18:37.517Z; Human/working/reply order and composer clearance observed with keyboard. Long13,101-character reply eventually displayed item40 above composer.

Unresolved: canonical long commit07:20:31.701Z preceded the final-tail observation by85.003s; this is an observation interval, not exact finish time or FPS. First history drag also closed the keyboard and the reading position later moved; a second drag held position only after canonical commit. Cross-commit hold with keyboard already closed is untested. Historical stream optimizations remain in both sources; M0 confirms one large40-item list, not a rendering root cause.

UNTESTED: matched long baseline/candidate timing, full light/dark × text-size/keyboard matrix, multiline draft/caret, TalkBack, iOS, Release performance and Human acceptance. This PR is tests/docs; these captures do not establish a runtime delta caused by it.

Immutable detailed results and artifact provenance. Evidence-only commit c87dab5def333e507dc0889d1441f2861c76412c is a publication reference, not a newly tested runtime head. This PR merged before evidence publication; these assets are on its retained source branch, not a new main change. 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 native short reply — different QA Bot/prompt and keyboard state; journey comparison only

Baseline native short reply — different QA Bot/prompt and keyboard state; journey comparison only

Candidate native short reply — real keyboard, Human above visible42

Candidate native short reply — real keyboard, Human above visible42

Candidate eventual long reply item40 — not a latency or FPS pass

Candidate eventual long reply item40 — not a latency or FPS pass

First history anchor after keyboard-dismiss gesture

First history anchor after keyboard-dismiss gesture

Later position moved to next reply — attribution unresolved

Later position moved to next reply — attribution unresolved

Recordings are immutable MP4 download links (GitHub serves these files as application/octet-stream; inline playback is not claimed):

Real ConversationScreen + useFollowLatest
  injected timeline + native-list events + composer callbacks
  empty → send → Human → working → streaming → committed reply → idle
    assert message order, list visibility, separate working overlay
    retain short-chat minHeight without another size event
    growing content → request measured end
    browse history → hold position → deliberate return → follow again
  empty → first message from another client
    no local send, no size change → list remains visible

English/Chinese verification guide
  existing fix SHAs → source-test limits → non-Connect native journey

Controlled mutations: removing the known-empty reveal fails with opacity: 0; always enabling visible-position preservation fails the following-state assertion; disconnecting the screen's growth callback fails the requested end offset; removing the overlay clamp fails the existing initial-offset test. These are source-level witnesses, not native reproductions.

Pre-run native status (superseded by the dated Android results above; remaining cases still required): the Windows lane is assigned to another batch, and the Mac runner/batch/status is unconfirmed. Preserve the #1845 owner's iOS reproduction; do not duplicate it or infer abandonment. The exact-head Android request is submitted under Next batch and awaits its owner's batch cut; no device, Metro or Host was started. Run the bilingual journey on iOS Simulator, physical iPhone and Android: new DM, working below Human, visible reply above composer, no blank, bottom follow and history hold. Record non-Connect route, source/batch/binary identities, canonical timeline, light/dark captures and default/intermediate/maximum text plus keyboard checks. No screenshot is presented as evidence of a runtime change.

Base: 8f4e650db551ae8458211634872ed291ff4e5a4f (fresh main). Head: 5df949ff7fad82f128609a858277f161df484bcb.

Unified-main streaming follow-up — backlog observed / visual FAIL

Tested main 31f313f, batch windows-unified-31f313, physical Android 16 / arm64-v8a. Strict native fingerprint: 1d971f8f1e438ac99cb56339c9300cf53092be9f. Evidence commit 976c8623c84e6df4c87d057205bfbfe3439fdeab is publication only, not a new tested input. Original APK/settings/reverse mappings restored; own pairing removed and Host credential revoked; lease/runtime released 2026-10-22T10:27:07Z. Two original offline Host copies remain pending.

This new-main observation supplements the older batch; it does not attribute the regression to this tests/docs PR. #2589 is not included. One real-model long reply, Debug, keyboard closed, no gestures/navigation/recording during sampling; not deterministic replay or A/B.

165 independent 2Hz snapshots: sample45 received=12557/cursor=5452/pending=7105; sample150 still pending=63; sample151 complete. Full/complete observation request envelopes are 54.444–55.420s apart, not exact arrival/completion events. Playback backlog remains after full text is observed, so unfinished Host output or scroll animation alone cannot explain it. Cross-snapshot owner-reference identity is unproven. Probe RTT P95≈522ms/max≈1067ms is not FPS; probe disturbance is unquantified.

Visual FAIL: about 23s after completion, the actual screen still displayed text as an extremely narrow vertical column. Layout/rendering cost, playback tick limits and probe effects remain unresolved; no fix or causal attribution. Debug APK SHA256: DB841DD80BEE8606B18150804CC0788A13761F87477D8138B0C47E745BDC7DC1.

Actual post-completion narrow text-column failure; private context cropped

Measurement details and limits

Add screen-level lifecycle regression coverage and a bilingual native verification guide without changing runtime behavior.

Issue: #2521

Agent-Task: codex/local/01a16196-b7e0-70a2-a239-cf57d66db81d
@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 48 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
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: edbdcdfb-0e25-40a7-8d6b-02475dd82e6f
📥 Commits

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

📒 Files selected for processing: 5
  • apps/mobile/README.md
  • apps/mobile/test/conversation-streaming-rows.test.tsx
  • changes/2521-mobile-first-reply-verification.md
  • docs/agents/mobile-first-reply.md
  • docs/agents/mobile-first-reply.zh.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.

@DoodleBears

DoodleBears commented Oct 22, 2026 •

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 5df949ff7fad82f128609a858277f161df484bcb, 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: actual non-Connect phone composer → official deepseek-official/deepseek-flash → canonical and visible 42 on both baseline and candidate. Candidate Human07:18:33.567Z → canonical07:18:37.517Z; Human/working/reply order and composer clearance observed with keyboard. Long13,101-character reply eventually displayed item40 above composer.

Unresolved: canonical long commit07:20:31.701Z preceded the final-tail observation by85.003s; this is an observation interval, not exact finish time or FPS. First history drag also closed the keyboard and the reading position later moved; a second drag held position only after canonical commit. Cross-commit hold with keyboard already closed is untested. Historical stream optimizations remain in both sources; M0 confirms one large40-item list, not a rendering root cause.

UNTESTED: matched long baseline/candidate timing, full light/dark × text-size/keyboard matrix, multiline draft/caret, TalkBack, iOS, Release performance and Human acceptance. This PR is tests/docs; these captures do not establish a runtime delta caused by it.

Immutable detailed results and artifact provenance. Evidence-only commit c87dab5def333e507dc0889d1441f2861c76412c is a publication reference, not a newly tested runtime head. This PR merged before evidence publication; these assets are on its retained source branch, not a new main change. 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:

Baseline native short reply — different QA Bot/prompt and keyboard state; journey comparison only

Baseline native short reply — different QA Bot/prompt and keyboard state; journey comparison only

Candidate native short reply — real keyboard, Human above visible42

Candidate native short reply — real keyboard, Human above visible42

Candidate eventual long reply item40 — not a latency or FPS pass

Candidate eventual long reply item40 — not a latency or FPS pass

First history anchor after keyboard-dismiss gesture

First history anchor after keyboard-dismiss gesture

Later position moved to next reply — attribution unresolved

Later position moved to next reply — attribution unresolved

Recordings are immutable MP4 download links (GitHub serves these files as application/octet-stream; inline playback is not claimed):

@DoodleBears

Copy link
Copy Markdown
Contributor Author

Unified-main streaming follow-up — backlog observed / visual FAIL

Tested main 31f313f, batch windows-unified-31f313, physical Android 16 / arm64-v8a. Strict native fingerprint: 1d971f8f1e438ac99cb56339c9300cf53092be9f. Evidence commit 976c8623c84e6df4c87d057205bfbfe3439fdeab is publication only, not a new tested input. Original APK/settings/reverse mappings restored; own pairing removed and Host credential revoked; lease/runtime released 2026-10-22T10:27:07Z. Two original offline Host copies remain pending.

This new-main observation supplements the older batch; it does not attribute the regression to this tests/docs PR. #2589 is not included. One real-model long reply, Debug, keyboard closed, no gestures/navigation/recording during sampling; not deterministic replay or A/B.

165 independent 2Hz snapshots: sample45 received=12557/cursor=5452/pending=7105; sample150 still pending=63; sample151 complete. Full/complete observation request envelopes are 54.444–55.420s apart, not exact arrival/completion events. Playback backlog remains after full text is observed, so unfinished Host output or scroll animation alone cannot explain it. Cross-snapshot owner-reference identity is unproven. Probe RTT P95≈522ms/max≈1067ms is not FPS; probe disturbance is unquantified.

Visual FAIL: about 23s after completion, the actual screen still displayed text as an extremely narrow vertical column. Layout/rendering cost, playback tick limits and probe effects remain unresolved; no fix or causal attribution. Debug APK SHA256: DB841DD80BEE8606B18150804CC0788A13761F87477D8138B0C47E745BDC7DC1.

Actual post-completion narrow text-column failure; private context cropped

Measurement details and limits

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 chat: first reply shows Thinking above the message, does not auto-scroll, can go blank

1 participant