Verify the iPhone build locally, and scope what still needs a phone

Added integration_test/ride_simulation_test.dart, which drives a whole recording
against a simulator that is genuinely moving, then reads the stored ride back
through the provider graph -- the app is uninstalled when a run ends, so anything
worth knowing has to be reported from inside the test.

Attacked an assumption and it survived. simctl location start --speed=15
interpolates between waypoints over time, unlike Android's teleporting geo fix,
so it looked like speed might finally be testable locally. A probe captured 8
fixes, every one 0.0 m/s. The recorded ride shows the consequence plainly: 245.5m
of distance with zero moving time, because every sample sits under the 1.5 km/h
noise floor.

What that leaves verified locally: the app builds and launches, the real UI
renders, Drift opens against iOS storage, plugins register, CoreLocation
delivers fixes, distance accumulates from real movement, trips persist and list,
the detail screen and its map render, and navigation works. Also confirmed
visually that the permission dialog shows the specific usage string written for
Guideline 5.1.1.

What still needs a phone: speed, moving time, speed colouring, elevation against
correlated GPS error, battery, and above all whether iOS suspends a stationary
app mid-ride -- the item that decides whether geolocator is sufficient.

Named gap: no screenshot of the iOS trips or detail screens. Verified
functionally, but tapping the iOS simulator is not scriptable and a fresh install
re-prompts for location over the UI.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-17 09:36:52 -05:00
parent 82f07a2d68
commit 131dca3241
3 changed files with 211 additions and 0 deletions

View File

@@ -797,3 +797,36 @@ tests the project has ever had.
**What remains is not code.** It is a rider, two phones, and
[REAL-RIDE-CHECKLIST.md](REAL-RIDE-CHECKLIST.md).
---
## iPhone verification pass
Scoped and executed: [IOS-VERIFICATION.md](IOS-VERIFICATION.md).
**An assumption was attacked and survived.** `simctl location start --speed=15`
interpolates between waypoints over time — unlike Android's teleporting `geo fix` — which
looked like it might make speed testable locally at last. A probe captured 8 fixes, every
one reporting **0.0 m/s**. So "no simulator produces velocity" holds on iOS too, and the
real-ride checklist remains mandatory.
A full ride was recorded on the simulator through the real UI:
```
trip=1 points=18 distanceM=245.5 maxSpeedKmh=0.0 movingMs=0 segments=1
```
245 metres of travel with **zero moving time** — correct behaviour given speed is pinned
at zero, and a compact illustration of exactly what local testing cannot reach.
Also confirmed visually on iOS: the record screen renders correctly, and the location
permission dialog displays the specific usage string written for Guideline 5.1.1.
`integration_test/ride_simulation_test.dart` is kept — it is a reusable local
verification, not a throwaway.
**Named gap:** no screenshot of the iOS trips list or detail screen. Both are verified
functionally, but tapping the iOS simulator is not scriptable the way `adb shell input
tap` is, and a fresh install re-prompts for location over the UI. Android's equivalents
were checked visually.