Every way an over-the-air update can fail
Interrupted, broken, malicious, incompatible with stored data, bad across the fleet, or failing with no evidence. Each failure has its own defence, and an update system needs them all.
Name the failure, then reach for its defence. None of them replaces another.
- The download or the write is interrupted (power cut, lost link) → A/B app slots, so the running image is never overwritten, and atomic writes for anything stored.
- The new image is broken (it crashes, hangs, or can't connect) → a trial boot with a health gate and a deadline, and the watchdog; the bootloader rolls back.
- The image is malicious or old → a signature checked before it's accepted, and an anti-rollback counter against downgrades.
- The image is fine but its data isn't (settings or messages in a new shape) → numbered settings migrations and expand-and-contract, so a rollback still finds what it needs.
- It works on the bench and fails on 10 % of the fleet → a staged rollout with halt conditions written in advance.
- It fails and you can't tell why → crash reports, breadcrumbs and the version in every status message.
The whole picture
Section
Why OTA, and how it fails
The failure list this cluster organises.
Term
bricked
Interrupted mid-update
Section
Partition tables and A/B slots
Term
A/B update
Section
Power failure and corruption
Term
torn write
A broken image
Section
Rollback and recovery
The image proves itself before it's kept; the core's default marks it valid before setup().
Term
trial boot
Term
health gate
Term
rollback
A malicious or outdated image
Section
Signing and verifying firmware
Data the new image can't share
Bad across the fleet
Section
Staged rollouts
Four clean canaries pass a bug that breaks 1 device in 10 two times in three.
Failing with no evidence
Section
Crash diagnostics
Term
breadcrumb
Section
Versioning and releases
The version in the image and in every status message, so "which version is it running?" has an answer.