# Lappy v0.1.5 — V2 startup backlight guard

v0.1.5 promotes the owner's successful backlight-reveal trial into the normal V2 firmware. After the full logo frame has finished transferring, Lappy keeps the backlight dark for an additional 100 ms before applying the saved brightness. The owner reported the second flash before the logo was gone or reduced, with normal logo/UI startup. The initial PWR flash remains a known limitation.

## Changes

- V2 Rev1.1 is the only build, flash and release target. The package contains only the V2 firmware profile; historical archives remain unchanged.
- Keep the early GPIO42 bootloader blanking introduced in v0.1.4. Add the accepted 100 ms first-frame illumination guard as normal behavior, with no experimental configuration flag needed.
- Apply the guard once, after all ten DMA chunk completions and before BL_EN/saved brightness are enabled. Later UI frames have no extra delay. The logo's minimum visible duration remains 600 ms; total startup is approximately 100 ms longer.
- Preserve the working LCD initialization commands and reset sequence. This change delays only illumination; it does not repeat the failed display-off / late-display-on experiment.
- Remove the ineffective expander latch trial and its bench-only adapter from active code. Its historical evidence remains in the experiment records.
- Street, Drag, Track, Settings, layout, fonts, icons, colors, controls, gestures, timing engines, BLE behavior and saved settings are unchanged. Only the Settings version caption changes to 0.1.5.

## Validation

The V2 firmware build, host regression suites, bootloader-hook checks, production first-frame DMA/illumination ordering test, 148 UI renders and native simulator interaction test pass. Against a freshly rendered baseline from archived v0.1.4 UI source, 147 screens are pixel-identical; only the Settings version caption differs. Compiled bootloader hooks and board profile are checked during packaging; all flash segments have SHA256 checksums.

The matching reveal-only trial was flashed and verified on the owner's V2. A USB capture logged early blanking at 28 ms and first-frame illumination at 1698 ms, with advancing display/touch counters and zero touch errors/recoveries during the limited capture. The owner then reported “Second flash gone or reduced; logo/UI normal” after the requested USB/battery startup check. This establishes a limited positive visual result, not proof of zero flashes across all power cycles. See [startup validation](HARDWARE_BENCH_v0.1.5.md) and [UI preservation](../design/DESIGN_REVIEW_v0.1.5.md).

The newly version-stamped v0.1.5 package is not flashed during this packaging task. The connected unit retains its accepted reveal trial. No new Dragy radio/GPS, driving accuracy, extended battery soak or electrical/optical scope testing is claimed.

## Install and recover

From the release source tree, use the pinned Python environment with `tools/flash.py --port PORT`. V2 is the default and only accepted revision. The tool verifies file hashes, backs up flash, then writes the bootloader at `0x0`, partition table at `0x8000` and application at `0x10000`. Install all three segments when coming from firmware that lacks the early blanking bootloader or flash crash partition. NVS, PHY and crash-partition offsets are unchanged from v0.1.4; no erase-all or settings reset is required.

Use this package's `lappy.elf` for crash decoding after installing v0.1.5. The separately retained v0.1.4 reveal trial has a different ELF despite the related behavior. Historical release archives and their rollback files remain unchanged.

## Initial PWR flash

The first-stage startup executes in immutable ESP32 ROM before our flash-loaded bootloader runs. Firmware therefore cannot guarantee that a power-on backlight transient is suppressed before that point. This is why the immediate PWR flash is harder than the later logo reveal. [Espressif startup flow](https://docs.espressif.com/projects/esp-idf/en/v5.4.2/esp32s3/api-guides/startup.html).

The exact electrical timing of the remaining flash has not been measured. Reliable elimination may require a backlight circuit that defaults off until a valid frame is ready; that hardware proposal is documented separately in [the investigation](BOOT_FLASH_PERMANENT_FIX.md). v0.1.5 retains the accepted software improvement and makes no hardware/eFuse changes.
