From ea174f18d65f50dbb1f13c97b4eda6e0fad28299 Mon Sep 17 00:00:00 2001 From: Matt Johnson Date: Thu, 16 Jul 2026 21:01:46 +0000 Subject: [PATCH] fix(config): remove phantom config.example.yaml keys, add missing live ones The new unknown-key warning (previous commit) caught config.example.yaml loading with SEVEN warnings, all real drift -- none were false positives of the warning itself: mesh_intelligence block shipped three keys with no MeshIntelligenceConfig field and no implementation anywhere (git log -S confirms they were never built, not leftovers from a removal): - region_radius_miles, infra_overrides, region_labels These only made sense under an older auto-clustering design; what actually exists is explicit region anchors (regions: list[RegionAnchor]). Deleted from both the live block and the commented-out example above it, and added the four fields that DO exist and are live but were missing from the example: regions, critical_nodes, alert_channel, alert_rules. Also fixed the now-misleading comment at dashboard/api/mesh_routes.py:281, which referenced region_labels -- comment only, no code change. notifications block shipped a whole quiet-hours subsystem that was deliberately ripped out (commit b948ed77, "silent is better than ugly") and never implemented as override_quiet -- confirmed by zero readers and zero dataclass fields anywhere in meshai/: - quiet_hours_enabled, quiet_hours_start, quiet_hours_end - override_quiet (on 4 rule entries, including "Emergency Broadcast", which falsely implied emergency alerts bypass quiet hours) Deleted; no quiet-hours feature implemented (out of scope -- product decision for the owner). config.example.yaml now loads with exactly zero warnings: the loader and the example finally agree. --- work/config.example.yaml | 36 +++++++++++++----------- work/meshai/dashboard/api/mesh_routes.py | 2 +- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/work/config.example.yaml b/work/config.example.yaml index e55f5fc..76f9024 100644 --- a/work/config.example.yaml +++ b/work/config.example.yaml @@ -114,22 +114,31 @@ mesh_sources: [] # # mesh_intelligence: # enabled: true -# region_radius_miles: 40.0 # Radius for region clustering -# locality_radius_miles: 8.0 # Radius for locality clustering -# offline_threshold_hours: 2 # Hours before node considered offline -# packet_threshold: 500 # Non-text packets per 24h to flag -# battery_warning_percent: 30 # Battery level for warnings -# infra_overrides: [] # Node IDs to exclude from infrastructure -# region_labels: {} # Override auto-names: {"Twin Falls": "Magic Valley"} +# regions: # Fixed region anchors (explicit, not auto-clustered) +# - name: "magic_valley" +# lat: 42.56 +# lon: -114.47 +# local_name: "Magic Valley" +# description: "Twin Falls, Burley, Jerome along I-84/US-93" +# aliases: ["southern Idaho"] +# cities: ["Twin Falls", "Burley", "Jerome"] +# locality_radius_miles: 8.0 # Radius for locality clustering within regions +# offline_threshold_hours: 2 # Hours before node considered offline +# packet_threshold: 500 # Non-text packets per 24h to flag +# battery_warning_percent: 30 # Battery level for warnings +# critical_nodes: [] # Short names of critical nodes (e.g., ["MHR", "HPR"]) +# alert_channel: -1 # Channel to broadcast alerts on. -1 = disabled, 0+ = channel index +# alert_rules: {} # Per-condition alert toggles/thresholds (see AlertRulesConfig) mesh_intelligence: enabled: false - region_radius_miles: 40.0 + regions: [] locality_radius_miles: 8.0 offline_threshold_hours: 2 packet_threshold: 500 battery_warning_percent: 30 - infra_overrides: [] - region_labels: {} + critical_nodes: [] + alert_channel: -1 + alert_rules: {} # === ENVIRONMENTAL FEEDS === # Live situational awareness from NWS, NOAA Space Weather, and Open-Meteo. @@ -223,9 +232,6 @@ environmental: # Categories match alert types from alert_engine.py. notifications: enabled: false - quiet_hours_enabled: true # Master toggle for quiet hours feature - quiet_hours_start: "22:00" # Suppress non-emergency alerts during quiet hours - quiet_hours_end: "06:00" # Digest scheduler settings # The digest collects priority/routine events and delivers a summary @@ -250,7 +256,6 @@ notifications: delivery_type: mesh_broadcast broadcast_channel: 0 cooldown_minutes: 5 - override_quiet: true # Send even during quiet hours # Infrastructure Down - critical node and infrastructure offline alerts - name: "Infrastructure Down" @@ -261,7 +266,6 @@ notifications: delivery_type: mesh_broadcast broadcast_channel: 0 cooldown_minutes: 30 - override_quiet: false # Fire Alert - wildfire proximity and new ignition - name: "Fire Alert" @@ -272,7 +276,6 @@ notifications: delivery_type: mesh_broadcast broadcast_channel: 0 cooldown_minutes: 60 - override_quiet: false # Severe Weather - weather warnings - name: "Severe Weather" @@ -283,7 +286,6 @@ notifications: delivery_type: mesh_broadcast broadcast_channel: 0 cooldown_minutes: 30 - override_quiet: false # Example: Morning Digest -> mesh broadcast # Delivers the accumulated digest at the configured schedule time diff --git a/work/meshai/dashboard/api/mesh_routes.py b/work/meshai/dashboard/api/mesh_routes.py index 7e3c2c9..1829d59 100644 --- a/work/meshai/dashboard/api/mesh_routes.py +++ b/work/meshai/dashboard/api/mesh_routes.py @@ -278,7 +278,7 @@ async def get_regions(request: Request): regions.append({ "name": region.name, - "local_name": region.name, # Could be overridden by region_labels + "local_name": region.name, # TODO: surface region.local_name (real field, unused here) "node_count": len(region.node_ids), "infra_count": infra_total, "infra_online": infra_online,