WatchBridge
Versioned live WatchConnectivity relay, owned by workstream B. Integration prerequisites are now available; live WCSession behavior is still to be implemented.
- Shared DTOs, RelayJSON and PhoneCommandCoordinating:
Packages/WristivoKit/Sources/RemoteCore/WatchSession.swift. - Adjacent Swift package:
Adapters/WatchBridge/Package.swift. - Common source/test target:
Sources/CommonandTests/Common. - Phone source/test target:
Sources/iPhoneandTests/iPhone. - Watch source/test target:
Sources/WatchandTests/Watch. - Xcode links WatchBridgePhone only to iPhone and WatchBridgeWatch only to watchOS; both depend on WatchBridgeCommon. Source files added under these package paths need no project regeneration.
Run bash Scripts/check.sh from the repository root for both packages' fake-driven tests; add --apps for unsigned native compilation. These are SwiftPM test targets, not hosted app UI tests. Adding actual WCSession code requires conditional imports/platform boundaries so fake-driven package tests continue to run on macOS. WCSession cannot run there as a substitute for iPhone/watch hardware.
Implement against an injected fake phone actor now; A's live transport is not a prerequisite for B's unit implementation. Keep one consuming CommandAdmission gate in A's phone actor. Use WatchPeerGeneration as a local activation epoch so stale callbacks cannot invalidate the current session. Read docs/CONTRACTS.md and docs/agents/WATCH-RELAY-HANDOFF.md before coding. No live connection is injected into the demo apps by this integration change.