# Lappy v0.2.2 — real Dragy reception and setup stability

V2 Rev1.1 only. Fixes the confirmed v0.2.1 receiver-setup stack overflow and the original zero-GPS-packet failure. The UI, Street filter, Drag/Track timing engines and thresholds, raw sample values, settings/storage formats and accepted startup sequence are unchanged. The brief initial battery PWR flash remains.

## Changes

- Replace full application snapshots in the BLE worker with a 40-byte connection snapshot. Compiled worker/helper frames shrink from 10,352 to 496 bytes while retaining the 12,288-byte task allocation. Enforce a 1 KB per-function frame limit and report measured stack headroom.
- Compile the pinned SDK's incoming ATT handlers. With GATT server support disabled, it discarded/leaked an MTU request and notifications until all 24 receive buffers were exhausted, blocking the controller and later disconnects. Enable the required library roles without creating an application server or starting advertising. Add a configuration guard and an actual linked-dispatch regression check.
- Answer Dragy's own MTU negotiation instead of initiating a duplicate exchange that the pinned wrapper reports as a connection failure. Preserve MTU preference 247, the original challenge/response/subscription/readback sequence and immediate optional FD04 status read. In-place repair preserves discovered characteristic/callback objects.
- Print complete USB RAW records under one stdout lock so simultaneous status/diagnostic output cannot split their hex payload. This affects console formatting only; capture bytes and timing inputs are unchanged. A concurrent-writer stress test checks every byte.
- Add nonblocking host-notification/callback counters, opt-in USB transport-event capture and a length-aware check for truncated crash ELF identities. Preserve historical crash data. No vendor/managed SDK source is edited.

## Verification

The full portable tests, 34 production-worker fault scenarios, storage/shutdown tests, target build, linked-dispatch and stack-budget checks pass. Both known-bad v0.2.1 target checks are required negative controls. Native simulator interactions pass; 147/148 rendered screens are identical to v0.2.1, with only the Settings version caption changing, and all 98 protected files match the archived source.

Physical acceptance and measured reconnect results are recorded in [the hardware bench](HARDWARE_BENCH_v0.2.2.md). See [the confirmed diagnosis](BLE_RADIO_REVIEW_v0.2.2.md), [implementation/test boundaries](IMPLEMENTATION_v0.2.2.md) and [UI review](../design/DESIGN_REVIEW_v0.2.2.md). Simulation does not establish road radio reliability or physical timing accuracy.

## Installation

Use the complete V2 package and tools/flash.py with --revision v2 and the current serial port. Bootloader, partition table and application are SHA256 recorded; retain the matching ELF files. No erase-all, preference reset, new pairing or PB/course migration is required. Earlier versioned archives remain unchanged. Private receiver/USB/debugger captures are not included in the ZIP.

A fresh no-fix GPS stream correctly displays “Waiting for GPS”; packet arrival and satellite lock are separate. The existing longer startup grace and paced recovery remain. Field driving, poor-signal/out-of-range behavior, physical timing accuracy and SD logging with the card reinserted still require their own acceptance; this bench must not be treated as those tests.
