feat: OTA control plane (signed firmware releases, update scheduling, TLS, admin UI) #8
Loading…
Reference in a new issue
No description provided.
Delete branch "devel"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
OTA control plane (crew)
Implements the crew side of the Starfleet OTA design
(
docs/specs/2026-09-10-ota-design.md, spec + plan docs in this PR):crew/firmware.py(new): strictMAJOR.MINOR.PATCHversion parsing,manifest validation, Ed25519 signature verification (new
cryptographydep).firmware_releases+firmware_updatestables (FK'd),devices.last_firmware_versionwith legacy-DB migration.PUT /firmware/{version}(multipart image+manifest+signature;strict validation pipeline; DB row rolled back on file-write failure),
GET /firmware, the open-on-LAN download surface (latest.json,manifest.json,manifest.sig,image.bin),PUT/DELETE /devices/{id}/firmware-update,GET /devices/{id}/firmware-pending, andfirmware fields on
GET /devicesrows (derived pending/applied status).api.tls_cert/api.tls_keyare configured.screenshots.
Tests: 190 passing; ruff + mypy clean. Admin UI verified in a live browser
session (all badge states, schedule/cancel round-trips).
Follow-up plans (same spec, separate PRs): ② computer (
server.ota.schedulerelay, wss migration, conformance) ③ communicator-esp32 (A/B partitions,
ota module) ④ communicator-sailfish (wss migration).