fix(android): filter device and internal sessions from thread picker#99557
Conversation
|
Codex review: needs maintainer review before merge. Reviewed July 3, 2026, 3:31 PM ET / 19:31 UTC. Summary PR surface: Other +157. Total +157 across 4 files. Reproducibility: yes. source-reproducible: seed Android chat sessions with main, agent device, onboarding, stale channel, and channel keys, then open the chat thread picker. Current main admits raw entries into choices, while the PR filters them and the inspected screenshots show the before/after UI result. Review metrics: none identified. 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:
Risk before merge
Maintainer options:
Next step before merge
Security Review detailsBest possible solution: Land the focused Android session-filter helper and tests after required checks and maintainer review clear; broader session-browser policy can stay separate if maintainers want it. Do we have a high-confidence way to reproduce the issue? Yes, source-reproducible: seed Android chat sessions with main, agent device, onboarding, stale channel, and channel keys, then open the chat thread picker. Current main admits raw entries into choices, while the PR filters them and the inspected screenshots show the before/after UI result. Is this the best way to solve the issue? Yes. The shared SessionFilters classifier is the right layer because both Android picker call sites already flow through resolveSessionChoices, and it mirrors the existing iOS classifier instead of adding per-composable filtering policy. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 8cc1786f495a. Label changesLabel justifications:
Evidence reviewedPR surface: Other +157. Total +157 across 4 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
|
Local proof (Windows)Environment
Command cd d:\WorkSpace\AI\openclaw\.worktrees\android-session-filters-parity\apps\android
.\gradlew.bat :app:testPlayDebugUnitTest --tests ai.openclaw.app.ui.chat.SessionFiltersTestResult: JUnit (
|
|
@clawsweeper re-review Updated PR body Evidence with local Windows Gradle proof (5/5 |
|
🦞🧹 I asked ClawSweeper to review this item again. |
4822296 to
8795a89
Compare
Align SessionFilters with iOS isRecentChatSession so agent device sessions, internal main aliases, and onboarding keys do not appear in recent choices. Co-authored-by: Cursor <[email protected]>
8795a89 to
51a96ca
Compare
|
Land-ready maintainer proof for exact head
No known proof gap remains for the picker behavior. |
|
Merged via squash.
|
…penclaw#99557) * fix(android): filter device and internal sessions from thread picker Align SessionFilters with iOS isRecentChatSession so agent device sessions, internal main aliases, and onboarding keys do not appear in recent choices. Co-authored-by: Cursor <[email protected]> * fix(android): tighten chat session filtering * fix(android): preserve access to stale chat sessions * chore(android): sync native i18n inventory --------- Co-authored-by: Cursor <[email protected]> Co-authored-by: Peter Steinberger <[email protected]>


What Problem This Solves
Android's chat thread picker exposed transport/device and internal sessions such as
agent:main:node-*, main aliases, and onboarding. Raw hidden sessions could also create a misleading All chip, while counting only recent visible sessions would hide All when valid older conversations existed.Why This Change Was Made
User Impact
The picker now shows user-facing conversations only. Device, direct/internal, main-alias, and onboarding rows disappear; channel conversations remain selectable; and valid older sessions remain reachable through All.
Evidence
Exact head:
51a96cab192b560d9762d851e4728f97af705335ANDROID_HOME=$HOME/Library/Android/sdk ./gradlew :app:testPlayDebugUnitTest --tests ai.openclaw.app.ui.chat.SessionFiltersTest :app:assemblePlayDebugnode --import tsx scripts/native-app-i18n.ts checkThe screenshots contain synthetic session labels only. The candidate also removes the bogus All row caused solely by filtered internal sessions; focused tests preserve All when an undisplayed selectable conversation is stale or compacted.