diff --git a/CHANGELOG.md b/CHANGELOG.md index 00ea1fa9..efca7ca8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Added -- **Pull-based OTA firmware updates** (ADR-094) — +- **Pull-based OTA firmware updates** (ADR-095) — ESP32 sensing nodes now poll `GET /api/v1/firmware/latest` on a configurable interval (default 5 min) and self-upgrade when the server advertises a newer version. SHA-256 integrity is verified before writing the OTA partition; the @@ -18,7 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 tests). New server endpoints: `GET /api/v1/firmware/latest`, `GET /api/v1/firmware/download`, `POST /api/v1/firmware/upload`. Operators stage firmware via upload; nodes fetch updates without any - push-side connectivity to individual node IPs. See `docs/adr/ADR-094-pull-based-ota.md`. + push-side connectivity to individual node IPs. See `docs/adr/ADR-095-pull-based-ota.md`. - **`nvsim` crate — deterministic NV-diamond magnetometer pipeline simulator** (ADR-089) — New standalone leaf crate at `v2/crates/nvsim` modeling a forward-only diff --git a/docs/adr/ADR-094-pull-based-ota.md b/docs/adr/ADR-095-pull-based-ota.md similarity index 99% rename from docs/adr/ADR-094-pull-based-ota.md rename to docs/adr/ADR-095-pull-based-ota.md index 6a2979de..2b733cdd 100644 --- a/docs/adr/ADR-094-pull-based-ota.md +++ b/docs/adr/ADR-095-pull-based-ota.md @@ -1,4 +1,4 @@ -# ADR-094: Pull-based OTA Firmware Update +# ADR-095: Pull-based OTA Firmware Update ## Status diff --git a/v2/crates/wifi-densepose-sensing-server/Cargo.toml b/v2/crates/wifi-densepose-sensing-server/Cargo.toml index 475d4df5..f6b00bdf 100644 --- a/v2/crates/wifi-densepose-sensing-server/Cargo.toml +++ b/v2/crates/wifi-densepose-sensing-server/Cargo.toml @@ -50,7 +50,7 @@ wifi-densepose-wifiscan = { version = "0.3.0", path = "../wifi-densepose-wifisca # build without vcpkg/openblas (issue #366, #415). wifi-densepose-signal = { version = "0.3.0", path = "../wifi-densepose-signal", default-features = false } -# SHA-256 for firmware registry integrity verification (pull-based OTA, ADR-094) +# SHA-256 for firmware registry integrity verification (pull-based OTA, ADR-095) sha2 = { workspace = true } thiserror = { workspace = true } diff --git a/v2/crates/wifi-densepose-sensing-server/src/main.rs b/v2/crates/wifi-densepose-sensing-server/src/main.rs index 84f7dbb0..80d760a7 100644 --- a/v2/crates/wifi-densepose-sensing-server/src/main.rs +++ b/v2/crates/wifi-densepose-sensing-server/src/main.rs @@ -169,7 +169,7 @@ struct Args { #[arg(long)] calibrate: bool, - /// Directory holding ESP32 firmware binaries for pull-based OTA (ADR-094). + /// Directory holding ESP32 firmware binaries for pull-based OTA (ADR-095). /// On startup, the newest `.bin` file in this directory is registered /// as the current firmware. Operators upload new versions via /// `POST /api/v1/firmware/upload`. @@ -651,7 +651,7 @@ struct AppStateInner { multistatic_fuser: MultistaticFuser, /// SVD-based room field model for eigenvalue person counting (None until calibration). field_model: Option, - // ── Firmware registry (pull-based OTA, ADR-094) ────────────────────── + // ── Firmware registry (pull-based OTA, ADR-095) ────────────────────── /// In-memory registry of the currently-blessed ESP32 firmware binary. /// Nodes poll `GET /api/v1/firmware/latest` to learn the current version /// and download it via `GET /api/v1/firmware/download`. Operators upload @@ -3462,7 +3462,7 @@ async fn calibration_status(State(state): State) -> Json