diff --git a/CHANGELOG.md b/CHANGELOG.md index e3d1232..1ce4446 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,52 @@ All notable changes to seismo-relay are documented here. --- +## Unreleased + +### Added + +- **Diagnostics tab in the SFM standalone webapp.** Surfaces the device + endpoints that previously existed only as `curl`: `events/storage_range` and + `events/index` alongside `monitor/status`, then stop monitoring, disable ACH + (`rescue?erase=false`, so stored events survive), and erase. The wedged-unit + ladder — slow drip and blind stop — sits under its own heading pointing at + `docs/runbooks/wedged_unit_recovery.md`, with the reminder that `slow_drip`'s + success signal is `bytes_received > 0` and not a clean duration. Erase is + guarded by typing the unit's serial: auth answers *who*, not *did you mean + it*, and Swagger's try-it-out button on `/device/events/erase` is live on + `:8200/docs`. + +- **`docs/sfm_tool_status.md`** — an honest per-capability maturity assessment: + what is production-grade (the codec library, the data side), what is + emergency-grade (the device side), what is a research artifact, the + known-issues table, and the gap to a real tool. Also records the **5A + page-boundary bug** as known: `parse_strt_end_offset()` discards the key's + page byte, so once a unit has recorded more than 64 KB since its last erase, + an event spanning the boundary reads an `end_offset` *behind* its own start — + the chunk loop fetches nothing and TERM packs a negative `offset_word`, which + 500s. Reproduced on BE12599. Production is unaffected: it ingests complete + files via the watcher path and never runs this walk. + +### Changed + +- **Connecting to a unit no longer walks its event chain.** `/device/events` + reads every event header over the cellular link; on a unit with a large or + wrapped chain that takes minutes or fails outright, and it fired + automatically on every connect. Connect now uses only ~2 s probes — + `/device/info` (which already carried the compliance config the walk was + re-reading) plus `events/storage_range` — and the Device tab gains an Event + Chain card. The walk moved behind a **Load events** button in the Events + toolbar. Knowing whether a unit's ACH is on no longer requires reading every + event it has stored. + +### Migration + +**None.** Frontend and documentation only — no codec, waveform-store or DB +change, no schema change, and no `TOOL_VERSION` bump. The webapp is served +from the image, so the change appears after the next `sfm` rebuild. + +--- + ## v0.31.0 — 2026-09-18 **Report parity, and a second way to rescue a runaway unit.** Two threads.