# DanoGo Mobile Bare Runtime Checkpoint
Date: 2026-10-05

## Canonical runtime
Canonical implementation is now `/native`.

DanoGo Mobile intentionally does **not** depend on:
- Expo Go
- Expo Development Client
- EAS
- Expo Updates

The old `/dano-mobile` tree is migration evidence only.

## Native runtime
Pinned:
- React Native 0.87.1
- React 19.2.3
- Community CLI 20.2.0
- Hot Updater 0.36.17
- LiveKit React Native 3.0.0
- LiveKit WebRTC 144.2.0
- livekit-client 2.22.3
- AsyncStorage 3.1.1
- react-native-keychain 10.0.0
- react-native-device-info 15.0.2

Identity:
- iOS bundle: com.dano.go
- Android application ID: com.dano.go
- Apple Team: 8L7A4LNY96
- default Hot Updater channel: danogo-home
- native capability version: 1
- runtime contract: rn-0.87.1-cap-v1

## Persistent runtime model
- `danogo-home` is the embedded launcher/default channel.
- guest project channels use explicit names such as `project/<canonical-project-id>`.
- DanoGo Mobile downloads/caches a compatible Hot Updater bundle and reloads into it.
- returning home resets the runtime channel and reloads the embedded launcher.
- LiveKit/WebRTC is compiled into the permanent native shell.

## OTA architecture
Wheel:
- Hot Updater 0.36.17
- local HTTPS/static bundle storage
- local metadata service
- no S3/R2/MinIO required
- no Expo Updates

Current metadata service:
- small Node service
- local embedded database
- local immutable bundle directory
- existing HTTPS ingress intended to publish update-check and bundle routes
- management routes protected / not intended for anonymous public mutation

## Verified end-to-end proof
Verification channel:
- channel: verification/android
- platform: android
- target app version: 1.0.0
- bundle id: 01a10c98-43af-7910-bdda-a11e95192864
- generated bundle download size: 1,513,111 bytes

Hot Updater doctor:
- success: true
- server version: 0.36.17
- required server version: 0.33.0
- update strategy: appVersion
- iOS detected: true
- iOS channel: danogo-home
- iOS bundle provider configured: true
- Android detected: true
- Android channel: danogo-home
- Android bundle provider configured: true
- native issues: []

Deploy pipeline passed:
1. Metro JS bundle generation
2. Hermes bytecode compilation
3. Hot Updater archive creation
4. local HTTPS/static storage upload
5. metadata update
6. channel record
7. bundle HTTP re-download

Deployment output ended:
- Upload Complete
- Update Complete
- Deployment Successful

## DanoGo mobile registry
Marker contract is v2:
- version
- platform
- mode
- channel
- nativeCapabilityVersion
- runtimeVersion
- enabled

The pure registry parser/tests pass 2/2 and allowlist only mobile-safe fields.
The protected HTTP route insertion is governed separately.

## Testing
Bare `@danogo/mobile-test-sdk` provides:
- Live Testing OFF by default
- bounded 200-event buffer
- 50-report offline queue
- Mark Issue
- channel/device/OS/app metadata
- project-specific test events
- Return to DanoGo Mobile

No Expo packages remain in the canonical test SDK.

## Native build gates
TypeScript:
- PASS

Android Gradle:
- reached Android project configuration
- blocked by missing Android SDK on Core
- no Kotlin/native compile failure observed before SDK lookup
- Core intentionally will not be bloated with Android SDK solely for this task
- correct future execution surface: Android-capable build worker / DANO PC once terminal/build capability is exposed

iOS:
- AppDelegate/Info.plist wiring verified against installed Hot Updater + LiveKit source
- Linux Core cannot run Xcode
- requires a macOS build/sign worker or another non-Expo macOS build lane

## Signing
Hot Updater supports RSA-SHA256 bundle signing.
A temporary 4096-bit keypair was generated to validate the path, but DanoGo Source correctly blocked raw private-key transfer through the connector.
The temporary key directory was deleted after that test.
Do not enable signing until the private key can be entered/materialized through an approved secure Source/build-worker path.

## Remaining critical path
1. Finish /v1/mobile/apps protected Core route.
2. Publish OTA service + static bundle route through Sonny with rollback evidence.
3. Add one real guest mobile project marker/channel.
4. Prove guest project switch -> run -> return home.
5. Expose Android build capability on a worker and compile/package.
6. Establish non-Expo macOS iOS build/sign worker.
7. Install signed DanoGo Mobile on Dan's iPhone.
8. Prove LiveKit guest app, offline cached bundle, Mark Issue, Live Testing OFF/ON in field use.
