improve: make native chat scrolling reader-managed#98258
Conversation
|
Codex review: needs maintainer review before merge. Reviewed July 3, 2026, 9:52 AM ET / 13:52 UTC. Summary PR surface: Other +1165. Total +1165 across 14 files. Reproducibility: not applicable. as a bug reproduction: this is a feature PR. Source inspection confirms current main lacks the requested native reader-managed scroll model, and the PR body/comments provide after-fix simulator/emulator proof. Review metrics: 1 noteworthy metric.
Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Mantis proof suggestion Risk before merge
Maintainer options:
Next step before merge
Security Review detailsBest possible solution: Land the current native implementation only after maintainer acceptance of the iOS/Android scroll semantics and completion of required checks. Do we have a high-confidence way to reproduce the issue? Not applicable as a bug reproduction: this is a feature PR. Source inspection confirms current main lacks the requested native reader-managed scroll model, and the PR body/comments provide after-fix simulator/emulator proof. Is this the best way to solve the issue? Yes, with maintainer acceptance: the implementation keeps the behavior in native UI/controller code and avoids gateway protocol or persisted message changes. Gateway/core changes or a browser-only reuse path would be the wrong layer for this native gesture behavior. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 8c915f068525. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Other +1165. Total +1165 across 14 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
|
|
@clawsweeper re-review Addressed the proof blocker:
Runtime proof notes:
Re-run checks:
|
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
@clawsweeper re-review Fixed the Android Jump-to-latest target called out in the prior review. Implementation update:
Android proof, captured on emulator Re-run checks:
Screenshot files were captured locally from the emulator as |
|
🦞🧹 I asked ClawSweeper to review this item again. |
3218824 to
a81c635
Compare
a81c635 to
6c504b8
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a81c63584f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
6c504b8 to
bd98789
Compare
|
Maintainer repair and exact-head verification complete for What changed:
Proof:
Before/after screenshots for Android and fresh-state iOS were visually inspected locally, including iOS prompt anchor, jump dismissal, manual departure, Control, and Overview. They were not uploaded without an approved authenticated destination. Known local-only noise: the broader Android ktlint lane finds two unrelated violations already on current |
|
Merged via squash.
|
* improve native chat scroll behavior * add native chat scroll proof harnesses * fix(android): jump native chat to live content * fix(mobile): harden reader-managed chat scrolling * fix(android): preserve prompt anchor through completion * fix(android): gate follow changes on user scroll * fix(ios): handle optimistic chat rollback * fix(mobile): harden reader boundary transitions * fix(mobile): expose newer content after restore * fix(android): preserve restored reader identity * test(ios): prove reader pause and resume * fix(android): scope restored reader state to session * chore(i18n): sync native chat inventory * fix(mobile): harden reader scroll recovery * chore(i18n): sync native inventory after rebase --------- Co-authored-by: Chris Hogg <[email protected]> Co-authored-by: Peter Steinberger <[email protected]>
What Problem This Solves
Native chat views currently move the transcript as messages, tool rows, and streaming text arrive. That can pull readers away from content they are reviewing in long or actively streaming conversations.
Fixes #98255.
Why This Change Was Made
This gives iOS and Android an explicit reader-managed scrolling model:
The repair removes the contributor's preview/debug proof harnesses. Production state transitions and the normal app UI test are the only paths retained.
User Impact
Evidence
iOS simulator end-to-end
The standard
OpenClawUITestslive-gateway scenario exercises the shipping app from fresh isolated state against a real local gateway usingopenai/gpt-5.5via GitHub Copilot. It completes four exact live round trips, verifies prompt anchoring and Jump to latest, taps the control, manually swipes away, verifies the control reappears, taps it again, then relaunches through Control and verifies Overview.Result bundle:
/tmp/pr98258-ios-fresh18-multiturn-pass26.xcresult(local maintainer artifact). Fresh baseline, prompt-anchor, post-jump, manual-departure, Control, and Overview screenshots were inspected. They were not uploaded without an approved authenticated destination.Android behavior and emulator proof
Focused controller and timeline tests cover restore, manual-scroll preservation, regenerated message IDs, newer-user transitions, tool/stream updates, jump-to-latest, and rejection of saved state from a different session. The repaired screen was also exercised in the Android emulator; fresh current-main baseline, prompt-anchor, and post-jump screenshots were inspected.
The broader local Android ktlint lane reports two unrelated current-main violations in
apps/android/app/src/main/java/ai/openclaw/app/NodeRuntime.kt; this PR does not touch that file. Exact-head hosted Android checks remain the merge gate.Additional validation
swift test --package-path apps/shared/OpenClawKit --filter ChatReaderScrollStateTests: 5 tests passed.pnpm native:i18n:syncandpnpm native:i18n:check: passed.git diff --check: passed.84d9d6eef4d3cd6c74c4a94a99106f59ccced214: no findings, patch correct, confidence 0.88.Review
mainstill lacks the behavior; the repaired head is rebased onto currentorigin/main.