Skip to content

[Watch] 7 - Control Board Move #490

Description

@KacperKozak

What to build

Relay wrist hold/release intent to existing native iOS Board Move actions. The phone owns strength, link checks, firmware constraints and a dead-man timeout.

Source: docs/watchos.md and the approved watchOS parity plan. Execution: AFK, with integrated hardware validation in slice 8.

Likely files

  • watch/wearos/src/main/java/app/vescape/wear/MoveScreen.kt — existing Wear OS behavior or wire-contract peer.
  • watch/wearos/src/main/java/app/vescape/wear/WatchCommand.kt — existing Wear OS behavior or wire-contract peer.
  • modules/vescape-core/android/src/main/java/expo/modules/vescapecore/watch/WatchMoveRelay.kt — existing Android phone-side parity peer.
  • modules/vescape-core/ios/BoardMoveController.swift — existing native iOS integration or test starting point.
  • modules/vescape-core/ios/BoardMoveControllerTests.swift — existing native iOS integration or test starting point.
  • modules/vescape-core/ios/connection/BoardSessionController.swift — existing native iOS integration or test starting point.

Implementation hints

Read current Android code, not historical alert-forwarding docs. Keep native phone truth and actions in vescape-core; do not make live wrist behavior depend on JS. Add bidirectional @parity links for equivalent contracts/logic and document verified platform differences in docs/watchos.md. New durable watch source belongs under watch/watchos/, not generated ios/. The local planning document will be included in the draft watchOS feature PR; this issue includes its relevant requirements independently.

Acceptance criteria

  • Match Android direction-only commands, 300 ms hold ticks and 900 ms phone-side timeout, with immediate stop on release.
  • Lost release, app exit, watch death and connectivity loss stop movement through the phone-side timeout.
  • Do not queue stale holds through deferred background transfer; stop supersedes pending holds and reconnect never resumes an old hold.
  • Move is unavailable on stale/missing telemetry; phone-configured strength and existing Board Move safety gates remain authoritative.
  • Test delayed/lost/reordered delivery and timeout using deterministic fixtures before any motor movement.

Blocked by

Related

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:iosiOS-only work: platform port and iOS-specific native code. Not cross-platform work that touches iOSarea:nativeTouches native side (modules/vesc-ble, Swift/Kotlin)area:watchWatch Mirror: wrist telemetry + alert playback (Wear OS / watchOS companions)complexity:highCritical paths, subtle correctness, native pipelines. Use opus.enhancementNew feature or requestready-for-agentFully specified, ready for an AFK agent

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions