fix: dashboard — coverage pillar, active alerts env fallback

- Add coverage pillar to /api/health response and _serialize_health_score
- Add coverage to MeshHealth.pillars TypeScript interface
- Add Coverage PillarBar between Utilization and Behavior
- Active Alerts panel: show high-severity env events (immediate/priority)
  as fallback when mesh alerts are empty, with ENV badge

Issues 3 (Live Event Feed) and 4 (RF Propagation): diagnosed as
env feed configuration — SWPC adapter disabled, only ducting feed
loaded, /api/env/active returns 0 events. Not a code bug.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Matt Johnson (via Claude) 2026-06-10 03:56:12 +00:00
commit 15f2b6c89a
6 changed files with 108 additions and 68 deletions

View file

@ -15,6 +15,7 @@ def _serialize_health_score(score) -> dict:
"tier": score.tier,
"infrastructure": round(score.infrastructure, 1),
"utilization": round(score.utilization, 1),
"coverage": round(score.coverage, 1),
"behavior": round(score.behavior, 1),
"power": round(score.power, 1),
"infra_online": score.infra_online,
@ -73,6 +74,7 @@ async def get_health(request: Request):
"pillars": {
"infrastructure": round(score.infrastructure, 1),
"utilization": round(score.utilization, 1),
"coverage": round(score.coverage, 1),
"behavior": round(score.behavior, 1),
"power": round(score.power, 1),
},

View file

@ -8,8 +8,8 @@
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet">
<script type="module" crossorigin src="/assets/index-CM6OazXs.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-Dp9XCfH-.css">
<script type="module" crossorigin src="/assets/index-BCcZxs_h.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-BEgceSNC.css">
</head>
<body>
<div id="root"></div>