Parent
#434
Source amendment: #434 (comment)
What to build
Add an operational release gate for board-independent Ride Recording. Verify REC/STOP behavior only from a development build rebuilt and installed from the feature worktree, with the active Metro workspace, branch, commit, package id, and loaded bundle identified before judging behavior.
The check must prove that REC availability follows native location-recording capability rather than Board selection or BLE connection. Launch and JS reload must hydrate the same native LiveState.recording state without a Board reconnect or JS-side coordinate replay. A manual boardless recording must remain active after JS refresh and intentional Board disconnect until native STOP closes it.
Treat stale Metro bundles and pre-installed release APKs as invalid test environments. Record Android and iOS process/force-quit limitations precisely in the implementation PR.
Likely files
src/modules/board/components/FloatingBar.tsx - current REC action and disabled state are gated by bleStatus.
src/modules/board/store/bleStore.ts - hydrates JS state from native getLiveState() and live-state events.
modules/vescape-core/src/index.ts - cross-platform LiveStateEvent and recording API contract.
modules/vescape-core/android/src/main/java/expo/modules/vescapecore/LiveStateMapper.kt - Android native LiveState payload mapping.
e2e/flows/ - Maestro flows and smoke checks.
e2e/README.md - device/E2E environment and native-vs-fake-state guidance.
docs/connectionState.md - recording ownership and LiveState restoration contract.
docs/native-api.md - native recording API and platform behavior.
Implementation hints
- Remove
bleStatus as the authority for REC availability. Native location permission/provider state must provide any disabled reason.
- Capture an observable native LiveState event or log in the smoke evidence. A disabled REC must correspond to an explicit location permission/provider error, never
bleStatus != connected.
- Before device evidence, record the feature worktree path, Git branch and commit, Metro project root, package id, and whether the installed app is a development build consuming the current bundle.
- A phone refresh alone is insufficient evidence: it can reload a bundle from another worktree.
- Do not claim uninterrupted recording after Android force-stop or iOS force-quit. State only the platform-supported foreground-service/process-restoration and background-location guarantees.
- Follow the repository device-verification rule: rebuild and reinstall before using an installed release APK to assess JS/TypeScript changes.
Acceptance criteria
Blocked by
Related
None
Parent
#434
Source amendment: #434 (comment)
What to build
Add an operational release gate for board-independent Ride Recording. Verify REC/STOP behavior only from a development build rebuilt and installed from the feature worktree, with the active Metro workspace, branch, commit, package id, and loaded bundle identified before judging behavior.
The check must prove that REC availability follows native location-recording capability rather than Board selection or BLE connection. Launch and JS reload must hydrate the same native
LiveState.recordingstate without a Board reconnect or JS-side coordinate replay. A manual boardless recording must remain active after JS refresh and intentional Board disconnect until native STOP closes it.Treat stale Metro bundles and pre-installed release APKs as invalid test environments. Record Android and iOS process/force-quit limitations precisely in the implementation PR.
Likely files
src/modules/board/components/FloatingBar.tsx- current REC action and disabled state are gated bybleStatus.src/modules/board/store/bleStore.ts- hydrates JS state from nativegetLiveState()and live-state events.modules/vescape-core/src/index.ts- cross-platformLiveStateEventand recording API contract.modules/vescape-core/android/src/main/java/expo/modules/vescapecore/LiveStateMapper.kt- Android native LiveState payload mapping.e2e/flows/- Maestro flows and smoke checks.e2e/README.md- device/E2E environment and native-vs-fake-state guidance.docs/connectionState.md- recording ownership and LiveState restoration contract.docs/native-api.md- native recording API and platform behavior.Implementation hints
bleStatusas the authority for REC availability. Native location permission/provider state must provide any disabled reason.bleStatus != connected.Acceptance criteria
bleStatus == connected.LiveState.recordingwithout Board reconnect or JS-side coordinate replay.Blocked by
Related
None