research: mobile spike 1 device results (REST+WS+reconnect+permission prompt all green on device)#1195
Conversation
Architect ReviewLow-risk, docs-only (one research file, +38/-13). The device-phase results close spike 1 completely: REST, WS bus end-to-end, AppState reconnect, and the real local-network permission prompt, all on physical hardware. Two things this doc does especially well: it records the deviations from the planned procedure with their trade-offs stated honestly (userland relay instead of BRIDGE_MODE, so BRIDGE_MODE itself is explicitly still untested and deferred to PoC; Expo Go abandoned for the dev build with the reasons), and the network-diagnosis section (silent-hang signature of dropped LAN packets on iOS, relay-as-diagnostic method) is exactly the kind of hard-won operational knowledge a PIR builder would otherwise rediscover expensively. The new in-app connection-doctor requirement is well-motivated and correctly routed to the PoC spec rather than scope-crept here. Good to merge. Architect review |
Records the 2026-07-18 device-verification half of the Expo LAN spike in
codev/research/mobile/spikes/expo-lan-reachability-2026-07.md. Spike 1 is now fully complete.Verified on a physical iPhone 14 Pro Max (iOS 26.5.2) against the live Tower v3.2.3: REST probes (health/version/overview with live builder list), the
/ws/messagesbus end-to-end (frame fromafx sendappeared in-app within a second), background/foreground WS reconnect via AppState, and the real iOS local-network permission prompt showing the configuredNSLocalNetworkUsageDescriptiontext on first launch.Also records the working method and gotchas: userland TCP relay instead of a BRIDGE_MODE Tower restart (zero agent disruption; BRIDGE_MODE itself deferred to PoC), Expo Go abandoned for a dev build (SDK mismatch;
eas godoes not exist), xctrace-vs-devicectl UDID namespaces, headless xcodebuild signing (DEVELOPMENT_TEAMfrom the cert OU), cable-free devicectl install/launch over Wi-Fi pairing, the baked-IP rebuild-on-network-change gotcha, and the silent-hang signature of cross-subnet/client-isolation failures — which surfaces one new PoC requirement: an in-app connection doctor.Related: #1147 (scope-lock context), #1189 (codev-sdk; seams re-confirmed from device).