{
  "schema_version": 2,
  "generated_at": "2026-06-03T21:32:58.584Z",
  "mission": "Hermes is David's VPS-primary personal assistant and home-lab operations partner.",
  "public_safe": true,
  "refresh_interval_seconds": 30,
  "overall": "FAIL",
  "headline": "1 watched function(s) failed.",
  "summary": "Read-only Worker projection of voice, assistant, VPS, and command-center health.",
  "counts": {
    "ok": 4,
    "warn": 1,
    "fail": 1,
    "unknown": 0
  },
  "capability_counts": {
    "ok": 4,
    "warn": 3,
    "fail": 1,
    "unknown": 0
  },
  "layers": {
    "edge": {
      "ok": 1,
      "warn": 0,
      "fail": 0,
      "unknown": 0,
      "total": 1
    },
    "voice": {
      "ok": 2,
      "warn": 0,
      "fail": 0,
      "unknown": 0,
      "total": 2
    },
    "assistant": {
      "ok": 1,
      "warn": 0,
      "fail": 0,
      "unknown": 0,
      "total": 1
    },
    "vps": {
      "ok": 0,
      "warn": 0,
      "fail": 1,
      "unknown": 0,
      "total": 1
    },
    "ops": {
      "ok": 0,
      "warn": 1,
      "fail": 0,
      "unknown": 0,
      "total": 1
    }
  },
  "pending_approvals_count": 0,
  "signals": {
    "latency_ms_max": 339,
    "latency_budget_ms": 1500,
    "slow_functions_count": 0,
    "stale_functions_count": 0,
    "traffic": "watch-page-poll",
    "errors": 1,
    "saturation": "not-public"
  },
  "functions": [
    {
      "id": "worker-edge",
      "name": "Worker edge",
      "layer": "edge",
      "owner": "Cloudflare Worker",
      "role": "public facade and allowlist",
      "path": "/worker-healthz",
      "href": "/worker-healthz",
      "status": "ok",
      "severity_rank": 0,
      "http_status": 200,
      "latency_ms": 0,
      "response_budget_ms": 80,
      "budget_status": "ok",
      "detail": "edge local health",
      "checked_at": "2026-06-03T21:32:58.245Z",
      "source_updated_at": "2026-06-03T21:32:58.245Z",
      "source_age_seconds": 0,
      "stale": false,
      "stale_after_seconds": 90,
      "action": "No action required."
    },
    {
      "id": "voice-origin",
      "name": "Voice origin",
      "layer": "voice",
      "owner": "VPS voice service",
      "role": "iPhone voice web app",
      "path": "/ios-voice/healthz",
      "href": "/ios-voice/healthz",
      "status": "ok",
      "severity_rank": 0,
      "http_status": 200,
      "latency_ms": 306,
      "response_budget_ms": 1500,
      "budget_status": "ok",
      "detail": "healthz ok",
      "checked_at": "2026-06-03T21:32:58.245Z",
      "source_updated_at": "2026-06-03T21:32:58.245Z",
      "source_age_seconds": 0,
      "stale": false,
      "stale_after_seconds": 90,
      "action": "No action required.",
      "origin_retry_count": 0,
      "capabilities": []
    },
    {
      "id": "voice-api",
      "name": "Voice API bridge",
      "layer": "voice",
      "owner": "VPS voice API",
      "role": "voice bridge health",
      "path": "/ios-voice-api/healthz",
      "href": "/ios-voice-api/healthz",
      "status": "ok",
      "severity_rank": 0,
      "http_status": 200,
      "latency_ms": 305,
      "response_budget_ms": 1500,
      "budget_status": "ok",
      "detail": "hermes-ios-voice-bridge",
      "checked_at": "2026-06-03T21:32:58.245Z",
      "source_updated_at": "2026-06-03T21:32:58.245Z",
      "source_age_seconds": 0,
      "stale": false,
      "stale_after_seconds": 90,
      "action": "No action required.",
      "origin_retry_count": 0,
      "capabilities": []
    },
    {
      "id": "assistant-status",
      "name": "Assistant status",
      "layer": "assistant",
      "owner": "VPS assistant timer",
      "role": "public-safe assistant state",
      "path": "/ios-voice/assistant-status.json",
      "href": "/ios-voice/assistant-status.json",
      "status": "ok",
      "severity_rank": 0,
      "http_status": 200,
      "latency_ms": 306,
      "response_budget_ms": 1500,
      "budget_status": "ok",
      "detail": "0 approvals, 2 drafts, 8 capabilities",
      "checked_at": "2026-06-03T21:32:58.245Z",
      "source_updated_at": "2026-06-03T21:24:48Z",
      "source_age_seconds": 491,
      "stale": false,
      "stale_after_seconds": 1800,
      "action": "No action required.",
      "origin_retry_count": 0,
      "approvals_count": 0,
      "drafts_count": 2,
      "capabilities": [
        {
          "id": "plex",
          "label": "Plex",
          "status": "route_missing",
          "normalized_status": "warn",
          "detail": "Plex URL resolves to private LAN address 192.168.1.20/32; add a NetBird route or use a reachable Plex URL; URLError: <urlopen error timed out>",
          "owner": "vps",
          "live": false,
          "stale": false,
          "approval_required_for_writes": true
        },
        {
          "id": "home_assistant",
          "label": "Home Assistant",
          "status": "WARN",
          "normalized_status": "warn",
          "detail": "HA error via authenticated_ha_rest",
          "owner": "vps",
          "live": false,
          "stale": false,
          "approval_required_for_writes": true
        },
        {
          "id": "voice",
          "label": "iOS Voice",
          "status": "WARN",
          "normalized_status": "warn",
          "detail": "{\"last_error_message\": null, \"max_connections\": null, \"pending_update_count\": 0, \"url\": \"\"}",
          "owner": "vps",
          "approval_required_for_writes": true
        },
        {
          "id": "gateway",
          "label": "Gateway/Cron",
          "status": "FAIL",
          "normalized_status": "fail",
          "detail": "VPS green dashboard overall FAIL",
          "owner": "vps",
          "approval_required_for_writes": true
        },
        {
          "id": "telegram_alerts",
          "label": "Telegram Alerts",
          "status": "muted",
          "normalized_status": "ok",
          "detail": "scheduled Telegram/origin alerts muted",
          "owner": "vps",
          "approval_required_for_writes": true
        },
        {
          "id": "netbird",
          "label": "NetBird HA Route",
          "status": "OK",
          "normalized_status": "ok",
          "detail": "NetBird HA private route present",
          "owner": "netbird-admin",
          "approval_required_for_writes": true
        },
        {
          "id": "approvals",
          "label": "Approvals/Drafts",
          "status": "OK",
          "normalized_status": "ok",
          "detail": "0 pending, 2 drafts",
          "owner": "vps",
          "approval_required_for_writes": true
        },
        {
          "id": "honcho_seed",
          "label": "Honcho Seed",
          "status": "OK",
          "normalized_status": "ok",
          "detail": "seed readback ok",
          "owner": "vps",
          "approval_required_for_writes": true
        }
      ]
    },
    {
      "id": "vps-status",
      "name": "VPS command status",
      "layer": "vps",
      "owner": "VPS green dashboard",
      "role": "core service health",
      "path": "/vps-status.json",
      "href": "/vps-status.json",
      "status": "fail",
      "severity_rank": 3,
      "http_status": 200,
      "latency_ms": 305,
      "response_budget_ms": 1500,
      "budget_status": "ok",
      "detail": "overall FAIL",
      "checked_at": "2026-06-03T21:32:58.245Z",
      "source_updated_at": "2026-06-03T21:28:40+00:00",
      "source_age_seconds": 259,
      "stale": false,
      "stale_after_seconds": 600,
      "action": "Review VPS green dashboard warning rows.",
      "origin_retry_count": 0,
      "capabilities": []
    },
    {
      "id": "command-center",
      "name": "Voice command center",
      "layer": "ops",
      "owner": "VPS command-center timer",
      "role": "voice operations snapshot",
      "path": "/ios-voice/command-center.json",
      "href": "/ios-voice/command-center.json",
      "status": "warn",
      "severity_rank": 2,
      "http_status": 200,
      "latency_ms": 339,
      "response_budget_ms": 1500,
      "budget_status": "ok",
      "detail": "0 warnings, 2 attention",
      "checked_at": "2026-06-03T21:32:58.245Z",
      "source_updated_at": "2026-06-03T21:28:25Z",
      "source_age_seconds": 274,
      "stale": false,
      "stale_after_seconds": 600,
      "action": "Refresh command-center snapshot and inspect attention items.",
      "origin_retry_count": 0,
      "capabilities": []
    }
  ],
  "capabilities": [
    {
      "id": "plex",
      "label": "Plex",
      "status": "route_missing",
      "normalized_status": "warn",
      "detail": "Plex URL resolves to private LAN address 192.168.1.20/32; add a NetBird route or use a reachable Plex URL; URLError: <urlopen error timed out>",
      "owner": "vps",
      "live": false,
      "stale": false,
      "approval_required_for_writes": true
    },
    {
      "id": "home_assistant",
      "label": "Home Assistant",
      "status": "WARN",
      "normalized_status": "warn",
      "detail": "HA error via authenticated_ha_rest",
      "owner": "vps",
      "live": false,
      "stale": false,
      "approval_required_for_writes": true
    },
    {
      "id": "voice",
      "label": "iOS Voice",
      "status": "WARN",
      "normalized_status": "warn",
      "detail": "{\"last_error_message\": null, \"max_connections\": null, \"pending_update_count\": 0, \"url\": \"\"}",
      "owner": "vps",
      "approval_required_for_writes": true
    },
    {
      "id": "gateway",
      "label": "Gateway/Cron",
      "status": "FAIL",
      "normalized_status": "fail",
      "detail": "VPS green dashboard overall FAIL",
      "owner": "vps",
      "approval_required_for_writes": true
    },
    {
      "id": "telegram_alerts",
      "label": "Telegram Alerts",
      "status": "muted",
      "normalized_status": "ok",
      "detail": "scheduled Telegram/origin alerts muted",
      "owner": "vps",
      "approval_required_for_writes": true
    },
    {
      "id": "netbird",
      "label": "NetBird HA Route",
      "status": "OK",
      "normalized_status": "ok",
      "detail": "NetBird HA private route present",
      "owner": "netbird-admin",
      "approval_required_for_writes": true
    },
    {
      "id": "approvals",
      "label": "Approvals/Drafts",
      "status": "OK",
      "normalized_status": "ok",
      "detail": "0 pending, 2 drafts",
      "owner": "vps",
      "approval_required_for_writes": true
    },
    {
      "id": "honcho_seed",
      "label": "Honcho Seed",
      "status": "OK",
      "normalized_status": "ok",
      "detail": "seed readback ok",
      "owner": "vps",
      "approval_required_for_writes": true
    }
  ],
  "top_actions": [
    {
      "title": "Review non-OK Hermes function rows",
      "risk": "ops",
      "approval_required": false
    },
    {
      "title": "Use approval queue before account writes or device control",
      "risk": "account_write_possible",
      "approval_required": true
    }
  ]
}