# Lappy v0.2.0 — responsive saving and stream recovery

v0.2.0 removes the purple LAPPY and DEMO badges from Drag and Track headers, and improves how firmware handles storage delays, interrupted GPS streams and failed shutdown saves. V2 Rev1.1 only. The amber boot logo and all page layouts are preserved.

## Changes

- Remove both runtime badges, including Track course list/detail headers, without shifting labels, page dots or connection/GPS/SD indicators. The desktop app still identifies its synthetic input outside the instrument screen.
- Move remaining Track file reads/draft writes outside the engine lock. Cache bounded validated references so course selection requires no SD access; use generations to reject stale save/restore completions.
- Save preferences on a background writer with rapid-tap coalescing and generation acknowledgements. Apply settings immediately and await the latest save at shutdown. Validate stored preferences; retain pairing, brightness steps, NVS keys and PB migration.
- Replace indefinite telemetry/PB/storage shutdown waits with caller deadlines and serialized retries. Timed-out writers keep ownership; failed saves keep battery hold. A late completion cannot cut power independently. Existing SAVING/SAVED/SAVE FAILED presentation and controls remain.
- Keep capture ingress nonblocking during shutdown, drain admitted producers, stop repeated recording writes after media failure and retain dirty Track records in RAM. Retry transient Track saves with bounded backoff. No-SD operation remains supported; a failed recording is never reported saved.
- Process stream resets during total receiver silence, interrupt timing and clear stale display freshness without needing another packet. Capture bytes and the Drag/Track timing algorithms are unchanged.
- Add developer diagnostics for connection sessions, queue peaks, sample ages, save generations/durations, shutdown stages and retained crash-dump identity.
- Retain early bootloader blanking and the accepted 100 ms full-frame backlight guard. The brief initial PWR flash remains.

## Validation

The ESP-IDF V2 build, host ASan/UBSan regressions, ten production-service fault scenarios, bootloader/production flush checks, native simulator interaction tests and 148 screen renders pass. Against v0.1.5, 63 screens are identical, 84 change only within the removed badge rectangle and one changes only its version caption. All screen bodies and the boot logo are pixel-identical. Existing raw parser, Street speed filter and Drag/Track algorithm sources match v0.1.5.

Fault scenarios exercise blocked SD/NVS work, changes during a commit, failed/retried settings, corrupt stored preferences/PBs, stale draft completions, fragmented real-pipeline GPS with a silent disconnect, telemetry/storage deadlines, repeated shutdown requests, no SD, partial writes, sync failure and saved capture CRC readback. These are host-injected faults, not physical card/radio tests. Details: [implementation and test scope](IMPLEMENTATION_v0.2.0.md), [UI review](../design/DESIGN_REVIEW_v0.2.0.md), [pending hardware checks](HARDWARE_BENCH_v0.2.0.md).

## Install and limitations

Install the V2 package with its bootloader, partition table and application using the release's tools/flash.py. NVS/PHY/crash-partition offsets and saved data formats are unchanged from v0.1.5; no erase-all is needed. Retain the packaged lappy.elf for any v0.2.0 crash decoding.

This release has not been flashed during development. Real Dragy reconnect/soak testing and the original road-freeze confirmation remain pending. Maximum-catalog PSRAM usage needs hardware acceptance. SD hot-plug recovery, automatic USB-loss shutdown and a forced power-off after failed saves are not included. Existing China gates remain approximate and not field-qualified by Lappy.
