From ada5bc2a824ada4fc2ee49fe8d7f198def9056ef Mon Sep 17 00:00:00 2001 From: serversdown Date: Sun, 20 Sep 2026 17:06:29 +0000 Subject: [PATCH] =?UTF-8?q?docs(changelog):=20Unreleased=20=E2=80=94=20che?= =?UTF-8?q?ap=20connect,=20Diagnostics=20tab,=20tool=20status?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Written on dev as part of finishing the merge, per the convention adopted 2026-09-18: feature branches do not touch CHANGELOG.md, and the entry describes what actually landed rather than what a branch intended. First time through the new way rather than discovering the conflict afterward — the merge was clean. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01Qcu9ByJfuKBQxmrWb8rSrN --- CHANGELOG.md | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) 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.