# Lappy v0.1.4 — early bootloader backlight blanking

This release packages the working v0.1.3 application behavior with the early backlight-blanking bootloader tested on the owner's V2 Rev1.1. The owner confirmed normal logo/UI startup on both USB and battery after rollback of a separate failed LCD experiment. Early blanking substantially shortened the noise; very brief flashes immediately after PWR and just before the logo remain accepted for this release.

## Changes

- A second-stage bootloader hook preloads the active-low backlight GPIO HIGH before enabling its output, before normal ESP-IDF bootloader initialization. It reasserts the off state and logs the output latch/enable state after initialization. V2 uses GPIO42; V1 uses GPIO8.
- The hardware-profile Kconfig option is shared by bootloader and application. Release packaging verifies that both profiles agree and that the actual compiled bootloader contains the strong hook overrides. The package includes bootloader and application ELFs, per-segment hashes, and reproducible source.
- The original working LCD initialization, first-complete-frame backlight reveal, amber LAPPY logo and saved brightness behavior are retained. The display-off / delayed display-on experiment that failed battery startup is reverted and excluded.
- Version identifiers become 0.1.4. Street, Drag, Track, Settings, fonts, icons, positions, page dots, gestures, and timing/BLE/power policies are unchanged. The Settings version caption is the only intended pixel difference from v0.1.3.

## Validation

Both V1 and V2 firmware builds pass on pinned ESP-IDF v5.4.2. Host regression suites, the actual bootloader hook tests for both GPIO profiles, all 148 UI renders and the native simulator interaction test pass. Against a freshly rendered baseline from the archived v0.1.3 UI source, 147 screens are pixel-identical; only the Settings version string differs. The working `main/board.c`, UI sources, fonts/assets and timing/BLE engine sources match the original v0.1.3 release.

The matching startup behavior was physically checked using the original v0.1.3 application plus this hook, with verified flash segments, advancing display/touch counters and the owner's USB/battery startup confirmation. The version-stamped v0.1.4 binaries are **not flashed or physically tested in this packaging task**. V1 hardware and real Dragy radio/GPS operation remain untested here. The original road-freeze root cause is not claimed resolved. See [startup validation and limits](HARDWARE_BENCH_v0.1.4.md), [UI review](../design/DESIGN_REVIEW_v0.1.4.md) and [the prior BLE patch](RELEASE_NOTES_v0.1.3.md).

## Flashing

Use `tools/flash.py --revision v2 --port PORT` from the release source tree with its documented Python environment. Select V1 only for confirmed V1 hardware. The normal checksummed workflow backs up flash, then writes the bootloader at `0x0`, partition table at `0x8000`, and application at `0x10000`. An application-only update from stock v0.1.3 does **not** install early bootloader blanking. NVS offsets and the 0x410000 crash partition are unchanged from v0.1.3. No erase-all or settings reset is required.

Use this release's `lappy.elf` for new crash decoding after installing v0.1.4. Historical release ZIPs remain unchanged.

## Known startup limitation and separate research

The flash-loaded bootloader cannot control the display during the preceding power-rise/ROM interval. v0.1.4 reduces the flashes; it does not eliminate them. A separate [hardware investigation and permanent-fix plan](BOOT_FLASH_PERMANENT_FIX.md) examines a backlight circuit that defaults off until the first frame is ready. No hardware rework or further startup experiment is included in this release.
