# Lappy v0.2.3 — stationary Drag display and confirmed launches

V2 Rev1.1 only. Drag displays zero at a confirmed stop and waits for sustained raw GPS movement before publishing a standing-start run. Confirmed runs retain their original zero-speed onset estimate and all raw distance accumulated during confirmation. UI layout, raw captures, Track, Street calculations, BLE and the accepted startup sequence are preserved.

## Changes

- Reuse the existing stationary hold for Drag's Live speed value in km/h and mph. Its normal settling/release behavior and stale/no-fix handling remain. The raw Sample is never zeroed. The Street filter itself is unchanged.
- Keep the original standing launch prerequisite (with integer-unit acceleration comparison avoiding floating-point endpoint rejection): one second at <=0.3 m/s, followed by crossing 0.5 m/s with the existing acceleration and extrapolation bounds. Stage that candidate privately.
- Confirm speed >=max(1.389 m/s, three times the worst speed uncertainty in the candidate) for 300 ms of both receiver and host time. A candidate expires after three seconds, drops when speed falls to <=0.5 m/s, and is discarded on continuity/quality interruptions. Below confirmation speed, stalled growth is rejected after 300 ms using the existing 0.5 m/s² launch slope with a 0.1 m/s tolerance. This prevents an earlier low-speed plateau from becoming the timestamp of a later launch.
- Keep original candidate time, calendar metadata, raw trapezoidal distance, sample count and worst quality. Confirmation publishes the accumulated prefix; it introduces no rollout or artificial subtraction from the measured time. Unconfirmed candidates create no result/PB. The UI remains ARMED until confirmation, then its timer catches up to the retained onset.
- Apply confirmation to 0–100, quarter-mile and half-mile starts. Rolling acceleration endpoints and braking calculations stay unchanged. All seven fixed tests and quality thresholds remain.

## Verification

The portable tests include new launch-noise, creep, stalled-prefix, uncertainty, host-time, duplicate-epoch and interruption cases. Analytic 5/10/25 Hz tests verify retained start times and distance, including GPS week rollover and calendar edits during confirmation. Ten encoded/fragmented GPS scenarios include stationary spikes, unconfirmed creep and a real launch after noise. Curved-profile refinements and the existing Track, BLE, storage/shutdown and startup regressions also run.

Native simulator interactions verify stationary zero in both unit systems, preserved raw samples, movement release and missing readings on no fix. Render comparison against v0.2.2 permits only the stationary Drag speed value and Settings version caption; all Track and Street artboards retain their pixels. Source checks protect Track, raw transport/capture, Street calculations, BLE and startup code.

Private road captures are replayed locally and excluded from distribution. The two recorded 0–100 start estimates/results are retained exactly, as are their distance-run results. Rejected short candidates in an artificially armed replay are software regression evidence; the captures do not prove whether every low-speed excursion was drift or physical movement.

See [implementation and verification](IMPLEMENTATION_v0.2.3.md) and the packaged reports for measured results. This binary has not been flashed or tested with a physical receiver for this release. v0.2.2's physical BLE acceptance belongs to that older binary. GPS-only launch detection remains experimental; simulation does not establish physical timing accuracy.

## Installation

Use the complete V2 package with `tools/flash.py --revision v2 --port <current-port>`. It contains application, bootloader, partition table, matching ELF files, checksums and source. No erase-all, pairing reset, PB migration or course migration is needed. Existing versioned archives remain unchanged. The brief initial battery PWR flash remains.
