Generalize the single system monitoring bbox into a named list of areas with
set-union semantics: an event is kept by the archive (and at publish time) if
its geometry intersects ANY configured area. No-geometry events are always
kept; an empty list keeps everything (the pre-feature default).
- Migration 042: new config.monitoring_areas table (name UNIQUE, north/south/
east/west, CHECK ordering); seeds 'default' from config.system.monitor_* so
current bounds (N=49.0 S=41.8 E=-111.0 W=-117.5) are preserved. Old columns
left in place for v0.14.0 (drop in v0.14.1).
- monitoring_area.py: classify_geom_areas + load_monitoring_areas; single-area
classify_geom / load_monitoring_area kept as back-compat shims.
- archive + supervisor consumers load and apply the area list (set-union);
_monitoring_area kept as a back-compat property over the internal list.
- GUI /monitoring-area: list+create+update+delete (server-rendered forms),
shared Leaflet map with per-name golden-angle colored rectangles, add/edit
via leaflet.draw corner handles, empty-state banner, auto-fit to all areas.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>