Skip to content

Process Cat A cluster A1 (Android, 31 files) — cherry-pick + EXCLUDE-DIVERGENT for v2026.3.22 sync backlog #2582

@alexey-pelykh

Description

@alexey-pelykh

Background

Decomposition of #2576 (Cat A processing). Cluster A1 covers the Android surface of the v2026.3.22 sync backlog: 31 files under apps/android/ where fork content diverges from upstream@v2026.3.22 with rebrand applied.

See full triage at hq/upstream/pending-sync-review/2026-04-24-cat-a-triage.md (cluster A1 section) and per-cluster TSV at hq/upstream/pending-sync-review/2026-04-24-cat-a-clusters.tsv.

Disposition summary

Disposition Count
CHERRY-PICK 29
EXCLUDE-DIVERGENT 2
Total 31

Cluster scope (per fork path prefix):

  • apps/android/app/src/main/java/org/remoteclaw/{android,app}/** — 25 main src files
  • apps/android/app/src/test/java/org/remoteclaw/{android,app}/** — 6 test files

Scope

For each of the 31 files:

  1. CHERRY-PICK (29): Apply the upstream change between fork's last sync of this file and v2026.3.22 to the fork's rebranded path with rebrand-content transforms. Per-file inspection may convert to EXCLUDE-DIVERGENT if the upstream change touches a fork-gutted code path.
  2. EXCLUDE-DIVERGENT (2): Add row to hq/upstream/disposition.tsv with rationale citing the fork commit (gut/fork-divergent) that intentionally caused divergence.

File list

Action Diff lines Upstream path Fork path
CHERRY-PICK 2 apps/android/app/src/main/java/ai/openclaw/app/LocationMode.kt apps/android/app/src/main/java/org/remoteclaw/android/LocationMode.kt
CHERRY-PICK 38 apps/android/app/src/main/java/ai/openclaw/app/NodeForegroundService.kt apps/android/app/src/main/java/org/remoteclaw/android/NodeForegroundService.kt
EXCLUDE-DIVERGENT 74 apps/android/app/src/main/java/ai/openclaw/app/chat/ChatController.kt apps/android/app/src/main/java/org/remoteclaw/android/chat/ChatController.kt
EXCLUDE-DIVERGENT 1 apps/android/app/src/main/java/ai/openclaw/app/chat/ChatModels.kt apps/android/app/src/main/java/org/remoteclaw/android/chat/ChatModels.kt
CHERRY-PICK 3 apps/android/app/src/main/java/ai/openclaw/app/gateway/DeviceAuthStore.kt apps/android/app/src/main/java/org/remoteclaw/android/gateway/DeviceAuthStore.kt
CHERRY-PICK 4 apps/android/app/src/main/java/ai/openclaw/app/gateway/GatewayDiscovery.kt apps/android/app/src/main/java/org/remoteclaw/android/gateway/GatewayDiscovery.kt
CHERRY-PICK 259 apps/android/app/src/main/java/ai/openclaw/app/gateway/GatewaySession.kt apps/android/app/src/main/java/org/remoteclaw/android/gateway/GatewaySession.kt
CHERRY-PICK 19 apps/android/app/src/main/java/ai/openclaw/app/node/A2UIHandler.kt apps/android/app/src/main/java/org/remoteclaw/android/node/A2UIHandler.kt
CHERRY-PICK 107 apps/android/app/src/main/java/ai/openclaw/app/node/CameraCaptureManager.kt apps/android/app/src/main/java/org/remoteclaw/android/node/CameraCaptureManager.kt
CHERRY-PICK 8 apps/android/app/src/main/java/ai/openclaw/app/node/CameraHandler.kt apps/android/app/src/main/java/org/remoteclaw/android/node/CameraHandler.kt
CHERRY-PICK 90 apps/android/app/src/main/java/ai/openclaw/app/node/CanvasController.kt apps/android/app/src/main/java/org/remoteclaw/android/node/CanvasController.kt
CHERRY-PICK 10 apps/android/app/src/main/java/ai/openclaw/app/node/ConnectionManager.kt apps/android/app/src/main/java/org/remoteclaw/android/node/ConnectionManager.kt
CHERRY-PICK 52 apps/android/app/src/main/java/ai/openclaw/app/node/ContactsHandler.kt apps/android/app/src/main/java/org/remoteclaw/android/node/ContactsHandler.kt
CHERRY-PICK 24 apps/android/app/src/main/java/ai/openclaw/app/node/DeviceHandler.kt apps/android/app/src/main/java/org/remoteclaw/android/node/DeviceHandler.kt
CHERRY-PICK 13 apps/android/app/src/main/java/ai/openclaw/app/node/LocationCaptureManager.kt apps/android/app/src/main/java/org/remoteclaw/android/node/LocationCaptureManager.kt
CHERRY-PICK 32 apps/android/app/src/main/java/ai/openclaw/app/node/MotionHandler.kt apps/android/app/src/main/java/org/remoteclaw/android/node/MotionHandler.kt
CHERRY-PICK 31 apps/android/app/src/main/java/ai/openclaw/app/node/NodeUtils.kt apps/android/app/src/main/java/org/remoteclaw/android/node/NodeUtils.kt
CHERRY-PICK 15 apps/android/app/src/main/java/ai/openclaw/app/node/NotificationsHandler.kt apps/android/app/src/main/java/org/remoteclaw/android/node/NotificationsHandler.kt
CHERRY-PICK 83 apps/android/app/src/main/java/ai/openclaw/app/node/PhotosHandler.kt apps/android/app/src/main/java/org/remoteclaw/android/node/PhotosHandler.kt
CHERRY-PICK 99 apps/android/app/src/main/java/ai/openclaw/app/ui/PostOnboardingTabs.kt apps/android/app/src/main/java/org/remoteclaw/android/ui/PostOnboardingTabs.kt
CHERRY-PICK 70 apps/android/app/src/main/java/ai/openclaw/app/ui/VoiceTabScreen.kt apps/android/app/src/main/java/org/remoteclaw/android/ui/VoiceTabScreen.kt
CHERRY-PICK 2 apps/android/app/src/main/java/ai/openclaw/app/ui/chat/Base64ImageState.kt apps/android/app/src/main/java/org/remoteclaw/app/ui/chat/Base64ImageState.kt
CHERRY-PICK 68 apps/android/app/src/main/java/ai/openclaw/app/ui/chat/ChatMarkdown.kt apps/android/app/src/main/java/org/remoteclaw/android/ui/chat/ChatMarkdown.kt
CHERRY-PICK 23 apps/android/app/src/main/java/ai/openclaw/app/ui/chat/ChatMessageListCard.kt apps/android/app/src/main/java/org/remoteclaw/android/ui/chat/ChatMessageListCard.kt
CHERRY-PICK 49 apps/android/app/src/main/java/ai/openclaw/app/ui/chat/ChatMessageViews.kt apps/android/app/src/main/java/org/remoteclaw/android/ui/chat/ChatMessageViews.kt
CHERRY-PICK 8 apps/android/app/src/test/java/ai/openclaw/app/gateway/GatewaySessionInvokeTimeoutTest.kt apps/android/app/src/test/java/org/remoteclaw/android/gateway/GatewaySessionInvokeTimeoutTest.kt
CHERRY-PICK 8 apps/android/app/src/test/java/ai/openclaw/app/node/CalendarHandlerTest.kt apps/android/app/src/test/java/org/remoteclaw/android/node/CalendarHandlerTest.kt
CHERRY-PICK 8 apps/android/app/src/test/java/ai/openclaw/app/node/ContactsHandlerTest.kt apps/android/app/src/test/java/org/remoteclaw/android/node/ContactsHandlerTest.kt
CHERRY-PICK 8 apps/android/app/src/test/java/ai/openclaw/app/node/MotionHandlerTest.kt apps/android/app/src/test/java/org/remoteclaw/android/node/MotionHandlerTest.kt
CHERRY-PICK 2 apps/android/app/src/test/java/ai/openclaw/app/node/NodeHandlerRobolectricTest.kt apps/android/app/src/test/java/org/remoteclaw/app/node/NodeHandlerRobolectricTest.kt
CHERRY-PICK 8 apps/android/app/src/test/java/ai/openclaw/app/node/PhotosHandlerTest.kt apps/android/app/src/test/java/org/remoteclaw/android/node/PhotosHandlerTest.kt

How to verify

  • Per-file: git log -1 --format=%H -- {fork-equivalent-path} shows the cherry-pick (or trailer Cherry-picked-from: {upstream-sha})
  • Local Android Gradle build (fork CI does not build Android)
  • Local Android instrumentation/unit tests pass
  • Bulk: re-run audit against v2026.3.22 after PR merges; A1 cluster residual = 0
  • For EXCLUDE-DIVERGENT entries: disposition.tsv row exists with rationale referencing fork divergence commit

Acceptance criteria

  • Each of the 31 paths has either a cherry-picked upstream change (with rebrand transform) OR an EXCLUDE-DIVERGENT entry in hq/upstream/disposition.tsv
  • Local pnpm check (lint+typecheck) passes
  • Local Android Gradle build passes
  • No new CI failures
  • Bulk verification re-run shows A1 residual = 0

Out of scope

  • A2 (macOS, 35 files) — separate issue
  • A3 (Shared+iOS, 10 files) — separate issue
  • A0 (40 ALREADY-SYNCED, audit false positives) — needs audit-tooling enhancement; not in this issue
  • Backslash-dir bug (18 files in apps/android/app/src/main/java/org\ literal-backslash directory) — separate issue

Notes

  • Per-file dispositions in the file list above are proposals. Reviewer judgment on each file is required during execution; expect 5–10% reclassification (CHERRY-PICK → EXCLUDE-DIVERGENT) after code-context inspection.
  • Two largest CHERRY-PICK files (GatewaySession.kt 259 lines, CameraCaptureManager.kt 107 lines) may warrant their own commits within the cluster PR for review tractability.
  • Three of the 31 paths target org/remoteclaw/app/ (not org/remoteclaw/android/) — fork has inconsistent android-package naming. Address in the same PR (either consolidate or document the split).

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions