Brian asked for one standard across the three repos. seismo-relay and
Terra-View already had the pattern in their history; SLMM did not — earlier
releases used ad-hoc commits like "chore: version bump" with no [Unreleased]
section. So this introduces the practice here rather than documenting it, and
says so.
The rule: write the entry in the same commit as the work under [Unreleased],
cut the version on dev in a dedicated chore(release) commit, never touch the
changelog at a merge boundary. No preamble under [Unreleased] — the themed
paragraph gets written at release time when the whole release is visible.
The operational consequence is mandatory, including when it is "none". For
SLMM that is two things: whether a root-level migrate_*.py script is needed
and whether it is safe to re-run, and whether the change bounces the meter
connection — the NL-43 has a single TCP slot, so that is an operational event
rather than just a code change.
Version lives in app/main.py, the FastAPI version= argument.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qcu9ByJfuKBQxmrWb8rSrN
Split out of the shared ~/CLAUDE.md, which had drifted badly — it described
SLMM at v0.1.0/v0.2.1 with none of the v0.4.0 design in it.
Written from the changelog and the actual tree. Leads with the three things
that define the current architecture: the fan-out monitor (the NL-43 has ONE
TCP control connection, which is the constraint the whole design works
around), the alert engine that pins the monitor on so rules evaluate 24/7,
and the nl43_readings history trail for live-chart backfill.
Defers to CHANGELOG.md for history rather than duplicating a version list.
Stack-level context lives in ../terra-view/docs/tmi-stack.md, loaded as
~/CLAUDE.md.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HgTe8CamXAHcAmaQ6QNcog