| 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 |
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 athq/upstream/pending-sync-review/2026-04-24-cat-a-clusters.tsv.Disposition summary
Cluster scope (per fork path prefix):
apps/android/app/src/main/java/org/remoteclaw/{android,app}/**— 25 main src filesapps/android/app/src/test/java/org/remoteclaw/{android,app}/**— 6 test filesScope
For each of the 31 files:
v2026.3.22to 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.hq/upstream/disposition.tsvwith rationale citing the fork commit (gut/fork-divergent) that intentionally caused divergence.File list
apps/android/app/src/main/java/ai/openclaw/app/LocationMode.ktapps/android/app/src/main/java/org/remoteclaw/android/LocationMode.ktapps/android/app/src/main/java/ai/openclaw/app/NodeForegroundService.ktapps/android/app/src/main/java/org/remoteclaw/android/NodeForegroundService.ktapps/android/app/src/main/java/ai/openclaw/app/chat/ChatController.ktapps/android/app/src/main/java/org/remoteclaw/android/chat/ChatController.ktapps/android/app/src/main/java/ai/openclaw/app/chat/ChatModels.ktapps/android/app/src/main/java/org/remoteclaw/android/chat/ChatModels.ktapps/android/app/src/main/java/ai/openclaw/app/gateway/DeviceAuthStore.ktapps/android/app/src/main/java/org/remoteclaw/android/gateway/DeviceAuthStore.ktapps/android/app/src/main/java/ai/openclaw/app/gateway/GatewayDiscovery.ktapps/android/app/src/main/java/org/remoteclaw/android/gateway/GatewayDiscovery.ktapps/android/app/src/main/java/ai/openclaw/app/gateway/GatewaySession.ktapps/android/app/src/main/java/org/remoteclaw/android/gateway/GatewaySession.ktapps/android/app/src/main/java/ai/openclaw/app/node/A2UIHandler.ktapps/android/app/src/main/java/org/remoteclaw/android/node/A2UIHandler.ktapps/android/app/src/main/java/ai/openclaw/app/node/CameraCaptureManager.ktapps/android/app/src/main/java/org/remoteclaw/android/node/CameraCaptureManager.ktapps/android/app/src/main/java/ai/openclaw/app/node/CameraHandler.ktapps/android/app/src/main/java/org/remoteclaw/android/node/CameraHandler.ktapps/android/app/src/main/java/ai/openclaw/app/node/CanvasController.ktapps/android/app/src/main/java/org/remoteclaw/android/node/CanvasController.ktapps/android/app/src/main/java/ai/openclaw/app/node/ConnectionManager.ktapps/android/app/src/main/java/org/remoteclaw/android/node/ConnectionManager.ktapps/android/app/src/main/java/ai/openclaw/app/node/ContactsHandler.ktapps/android/app/src/main/java/org/remoteclaw/android/node/ContactsHandler.ktapps/android/app/src/main/java/ai/openclaw/app/node/DeviceHandler.ktapps/android/app/src/main/java/org/remoteclaw/android/node/DeviceHandler.ktapps/android/app/src/main/java/ai/openclaw/app/node/LocationCaptureManager.ktapps/android/app/src/main/java/org/remoteclaw/android/node/LocationCaptureManager.ktapps/android/app/src/main/java/ai/openclaw/app/node/MotionHandler.ktapps/android/app/src/main/java/org/remoteclaw/android/node/MotionHandler.ktapps/android/app/src/main/java/ai/openclaw/app/node/NodeUtils.ktapps/android/app/src/main/java/org/remoteclaw/android/node/NodeUtils.ktapps/android/app/src/main/java/ai/openclaw/app/node/NotificationsHandler.ktapps/android/app/src/main/java/org/remoteclaw/android/node/NotificationsHandler.ktapps/android/app/src/main/java/ai/openclaw/app/node/PhotosHandler.ktapps/android/app/src/main/java/org/remoteclaw/android/node/PhotosHandler.ktapps/android/app/src/main/java/ai/openclaw/app/ui/PostOnboardingTabs.ktapps/android/app/src/main/java/org/remoteclaw/android/ui/PostOnboardingTabs.ktapps/android/app/src/main/java/ai/openclaw/app/ui/VoiceTabScreen.ktapps/android/app/src/main/java/org/remoteclaw/android/ui/VoiceTabScreen.ktapps/android/app/src/main/java/ai/openclaw/app/ui/chat/Base64ImageState.ktapps/android/app/src/main/java/org/remoteclaw/app/ui/chat/Base64ImageState.ktapps/android/app/src/main/java/ai/openclaw/app/ui/chat/ChatMarkdown.ktapps/android/app/src/main/java/org/remoteclaw/android/ui/chat/ChatMarkdown.ktapps/android/app/src/main/java/ai/openclaw/app/ui/chat/ChatMessageListCard.ktapps/android/app/src/main/java/org/remoteclaw/android/ui/chat/ChatMessageListCard.ktapps/android/app/src/main/java/ai/openclaw/app/ui/chat/ChatMessageViews.ktapps/android/app/src/main/java/org/remoteclaw/android/ui/chat/ChatMessageViews.ktapps/android/app/src/test/java/ai/openclaw/app/gateway/GatewaySessionInvokeTimeoutTest.ktapps/android/app/src/test/java/org/remoteclaw/android/gateway/GatewaySessionInvokeTimeoutTest.ktapps/android/app/src/test/java/ai/openclaw/app/node/CalendarHandlerTest.ktapps/android/app/src/test/java/org/remoteclaw/android/node/CalendarHandlerTest.ktapps/android/app/src/test/java/ai/openclaw/app/node/ContactsHandlerTest.ktapps/android/app/src/test/java/org/remoteclaw/android/node/ContactsHandlerTest.ktapps/android/app/src/test/java/ai/openclaw/app/node/MotionHandlerTest.ktapps/android/app/src/test/java/org/remoteclaw/android/node/MotionHandlerTest.ktapps/android/app/src/test/java/ai/openclaw/app/node/NodeHandlerRobolectricTest.ktapps/android/app/src/test/java/org/remoteclaw/app/node/NodeHandlerRobolectricTest.ktapps/android/app/src/test/java/ai/openclaw/app/node/PhotosHandlerTest.ktapps/android/app/src/test/java/org/remoteclaw/android/node/PhotosHandlerTest.ktHow to verify
git log -1 --format=%H -- {fork-equivalent-path}shows the cherry-pick (or trailerCherry-picked-from: {upstream-sha})v2026.3.22after PR merges; A1 cluster residual = 0disposition.tsvrow exists with rationale referencing fork divergence commitAcceptance criteria
hq/upstream/disposition.tsvpnpm check(lint+typecheck) passesOut of scope
apps/android/app/src/main/java/org\literal-backslash directory) — separate issueNotes
GatewaySession.kt259 lines,CameraCaptureManager.kt107 lines) may warrant their own commits within the cluster PR for review tractability.org/remoteclaw/app/(notorg/remoteclaw/android/) — fork has inconsistent android-package naming. Address in the same PR (either consolidate or document the split).