2.7 KiB
2.7 KiB
Step 6 Audit Round 1 (P0/P1)
Coverage
- Reviewed high-risk auth/session/network/watch files:
iphone/Werkout_ios/UserStore.swiftiphone/Werkout_ios/Network/Network.swiftiphone/Werkout_ios/BridgeModule+Watch.swiftiphone/Werkout_watch Watch App/WatchMainViewModel.swiftiphone/Werkout_watch Watch App/WatchMainViewModel+WCSessionDelegate.swiftiphone/Werkout_ios/HealthKitHelper.swiftiphone/Werkout_ios/CurrentWorkoutInfo.swift
- Ran:
./scripts/smoke/smoke_all.sh
- Added/ran regression tests in
SharedCorefor token lifecycle and watch payload validation.
Findings And Fixes
-
P1Watch command loss during activation- Evidence:
iphone/Werkout_watch Watch App/WatchMainViewModel+WCSessionDelegate.swift:40 - Problem: payloads were dropped when
WCSessionwas not activated. - Fix: added bounded queue (
maxQueuedPayloads), enqueue on inactive session, flush on activation.
- Evidence:
-
P1Silent/unsafe watch payload decode failures- Evidence:
iphone/Werkout_ios/BridgeModule+Watch.swift:73 - Evidence:
iphone/Werkout_watch Watch App/WatchMainViewModel.swift:74 - Problem:
try?decode silently ignored malformed payloads. - Fix: added shared
WatchPayloadValidationwith size checks and structured decode failures; both decode paths now reject+log bad payloads.
- Evidence:
-
P1Auth token normalization gap for prefixed tokens- Evidence:
SharedCore/Sources/SharedCore/TokenSecurity.swift:24 - Problem:
"Token ..."/"Bearer ..."values were not normalized. - Fix: normalize known auth prefixes and reject bare prefix-only strings.
- Evidence:
-
P1Network reliability/threading risk- Evidence:
iphone/Werkout_ios/Network/Network.swift:12 - Problem: infinite request timeouts and completion handlers returning on background threads.
- Fix: finite timeout (
30s) and centralized main-thread completion delivery.
- Evidence:
-
P1HealthKit helper shared mutable-state race- Evidence:
iphone/Werkout_ios/HealthKitHelper.swift:20 - Problem: mutable cross-request state (
completion, counters, shared result object) could race and mis-route results. - Fix: per-request aggregation via
DispatchGroup, single UUID query (limit: 1), thread-safe aggregation queue, structured runtime logging.
- Evidence:
-
P2Workout order inconsistency across helpers- Evidence:
iphone/Werkout_ios/CurrentWorkoutInfo.swift:24 - Problem: some paths used unsorted
workout.supersetswhile others used sorted supersets. - Fix: unified core navigation/lookup paths on sorted
supersetaccessor and corrected bounds check.
- Evidence:
Validation
- Smoke suite passed after fixes:
- token scan
- SharedCore tests (including new regression tests)
- iOS/watchOS/tvOS builds