A-active devices receive slot B; B-active devices receive slot A.
Validation
Evidence before applause.
The final story is backed by board-level tests, negative security tests, reset persistence, fallback recovery, and a release tool that makes the process repeatable.
Bad manifest fails at check; bad payload fails during install.
Final signed OTA remains active after software reboot and hardware reset.
The GUI generates, signs, uploads, and verifies release output.
Version: V1.0.26
Evidence: Full OTA video shows install, reboot, and hardware RST persistence.
Why it matters: Proves the final release path works beyond hand-built manifests.
UART visibility, ToF bring-up, and the first usable distance logs made the board observable.
Range status, zero readings, and 8190 mm failures became filtered sensor semantics.
FreeRTOS, CPU/GDB inspection, boot-chain visibility, and task-level debugging came online.
XSHUT sequencing and I2C address control turned two same-address sensors into a usable platform.
HX8357D moved from white/black screens and bus timing failures into real UI graphics.
Dead ADC values became mapped touch input through bench tests, voltage checks, and coordinate modeling.
The screen became an input surface with drawing, palette tests, erase behavior, and UI feedback.
The project became a door-side reminder device with weather context, presence sensing, and hook LEDs.
Drivers, screens, services, managers, storage, and UI boundaries replaced one-off demo wiring.
Wi-Fi, Node-RED time/weather/reminders, location, and NVM3 memory formed the connected path.
Sleep/wake, brightness, distance behavior, settings, and recovery from display artifacts improved the product feel.
Build, flash, GDB, serial, testbed, backup, and artifact workflows became repeatable.
V1.0.6 and V1.0.12 exposed manifest paths, upload directories, reboot timing, and release-state problems.
Recovery moved from cloud-side old packages toward real local A/B trial and confirmed-slot behavior.
Active-slot detection, target inactive slot selection, and reboot persistence became the central reliability story.
Fallback and bad-package tests proved that the system had to reject failure, not only celebrate success.
Ed25519 signed manifests and payload SHA-256 binding added a real release security boundary.
The public story became one complete embedded product: sensing, UI, LEDs, OTA, fallback, security, and tooling.
A stable A-slot baseline combined stack, Wi-Fi, presence, and touch-reboot fixes for OTA validation.
The board validated inactive-slot installation from A into slot B after the reboot-touch path was fixed.
The second direction proved the release path was not hardcoded to one slot or one version pair.
Dedicated negative releases demonstrated local fallback and bad-package refusal on real hardware.
A valid signed release installed and survived reset; a bad-signature manifest failed during check.
Firmware verified the staged payload SHA-256 against the signed manifest, then passed a positive board test.
A validly signed manifest with modified payload bytes passed check but failed install with checksum error.
The GUI/tool flow joined A/B package generation, signing, upload, and endpoint verification.
The install path paused hook LED I2S refresh during flash operations, keeping LED-on without destabilizing OTA.
The final stable engineering baseline froze LED-on behavior, A/B OTA, fallback, signed manifests, and release tooling.
The release tool generated and uploaded A/B artifacts, and the device stayed on the signed OTA after RST.
Fallback, bad package, bad signature, and LED behavior were recorded as presentation-ready validation media.
Protocol
A release has to pass the whole chain.
The validation story is deliberately staged. A bad manifest should never reach install; a bad payload should never become a trial image; a bad trial should recover.
Evidence board
Every critical release path has a witness.
The validation set covers the normal OTA path, policy rejection, payload rejection, fallback recovery, release-tool output, and the LED behavior that had to survive the final install path.
V1.0.26
Successful signed OTA
Installed and survived RSTThis is the hero proof slot for the final baseline: tool-generated signed release, confirmed after reboot and RST.
Local check, install screen, full OTA video, and hardware RST persistence.
1027 negative test
Bad release rejection
Signature path refusedKeeps the security story visible: bad release metadata is not treated as a normal upgrade.
The device shows the negative signed-release path instead of accepting unsafe update policy.
1027 negative test
Bad payload rejection
Install failedProves the signed SHA256 field binds the manifest to exact RPS bytes and stops a bad package before trial boot.
Bad-package video showing check success followed by automatic install refusal.
1027 fallback
Fallback recovery
Returned to confirmed slotDemonstrates that a bad trial image does not brick the device and that confirmed firmware remains recoverable.
Full fallback video returning from trial V1.0.27 to confirmed V1.0.26.
V1.0.26
Release tool output
A/B packages and signed manifestsConnects the polished product story to the repeatable developer workflow.
Generate, upload, and WinSCP remote file proof for both A and B release artifacts.
1024-1025
LED behavior retained
Hook LEDs work after OTA fixHighlights the final engineering fix: OTA install pauses I2S LED refresh, then resumes product behavior.
OTA install pauses I2S LED refresh during flash operations, then resumes the product LED behavior.