{
  "schemaVersion": "rnn.operations-proof.v1",
  "generatedAt": "2026-05-25T20:40:29.488Z",
  "currentEditionGeneratedAt": "2026-05-25T20:36:03.089Z",
  "ok": true,
  "checks": {
    "sourceRefreshFresh": true,
    "enoughPackets": true,
    "enoughFeedsLive": true,
    "currentEditionDate": true,
    "noCriticalTransportFailures": true,
    "crawlerVisibleHtml": true,
    "machineRoutesAvailable": true,
    "eventRecordsAvailable": true
  },
  "observed": {
    "packets": 1000,
    "events": 96,
    "feeds": 1029,
    "sourceQualityRisks": 7,
    "sourcesOnline": 1029,
    "sourceTotal": 1029,
    "activeSources": 1029,
    "sourceTarget": 1000
  },
  "autoRefresh": {
    "enabled": true,
    "intervalMs": 300000,
    "sourcePollIntervalMs": 300000,
    "targetSourceCount": 1000,
    "activeSourceCount": 1029,
    "fetchConcurrency": 12,
    "startupMode": "stale",
    "running": false,
    "runCount": 15,
    "lastReason": "interval",
    "lastStartedAt": "2026-05-25T20:35:28.900Z",
    "lastFinishedAt": "2026-05-25T20:36:07.389Z",
    "lastGeneratedAt": "2026-05-25T20:36:03.089Z",
    "lastStatus": "ok",
    "lastError": null,
    "nextRunAt": "2026-05-25T20:41:08.092Z",
    "llmEditor": {
      "enabled": true,
      "intervalMs": 3600000,
      "running": true,
      "runCount": 1,
      "lastReason": "hourly-llm-editor",
      "lastStartedAt": "2026-05-25T20:17:04.198Z",
      "lastFinishedAt": "2026-05-25T19:19:38.196Z",
      "lastGeneratedAt": "2026-05-25T19:19:33.392Z",
      "lastStatus": "running",
      "lastError": null,
      "nextRunAt": null,
      "configured": false,
      "gate": "OPENAI_API_KEY + OPENAI_MODEL + RNN_ALLOW_AI_QUERY=1"
    }
  },
  "monitor": {
    "ok": true,
    "schemaVersion": "rnn.monitor.daily-refresh.v1",
    "checkedAt": "2026-05-25T20:40:25.899Z",
    "expectedEditionId": "2026-05-25",
    "latestEditionId": "2026-05-25",
    "generatedAt": "2026-05-25T20:36:03.089Z",
    "ageHours": 0.07,
    "staleAfter": "2026-05-25T20:46:03.089Z",
    "thresholds": {
      "maxAgeHours": 0.35,
      "minPackets": 40,
      "minLiveFeeds": 515,
      "configuredMinLiveFeeds": 515
    },
    "observed": {
      "packets": 1000,
      "liveFeeds": 1029,
      "totalFeeds": 1029,
      "configuredFeeds": 1029,
      "criticalOffline": [],
      "criticalStale": [],
      "source": "public-edition-cache"
    },
    "autoRefresh": {
      "enabled": true,
      "intervalMs": 300000,
      "sourcePollIntervalMs": 300000,
      "targetSourceCount": 1000,
      "activeSourceCount": 1029,
      "fetchConcurrency": 12,
      "startupMode": "stale",
      "running": false,
      "runCount": 15,
      "lastReason": "interval",
      "lastStartedAt": "2026-05-25T20:35:28.900Z",
      "lastFinishedAt": "2026-05-25T20:36:07.389Z",
      "lastGeneratedAt": "2026-05-25T20:36:03.089Z",
      "lastStatus": "ok",
      "lastError": null,
      "nextRunAt": "2026-05-25T20:41:08.092Z",
      "llmEditor": {
        "enabled": true,
        "intervalMs": 3600000,
        "running": true,
        "runCount": 1,
        "lastReason": "hourly-llm-editor",
        "lastStartedAt": "2026-05-25T20:17:04.198Z",
        "lastFinishedAt": "2026-05-25T19:19:38.196Z",
        "lastGeneratedAt": "2026-05-25T19:19:33.392Z",
        "lastStatus": "running",
        "lastError": null,
        "nextRunAt": null,
        "configured": false,
        "gate": "OPENAI_API_KEY + OPENAI_MODEL + RNN_ALLOW_AI_QUERY=1"
      }
    },
    "checks": {
      "hasStoredEdition": true,
      "dataWritable": true,
      "generatedRecently": true,
      "enoughPackets": true,
      "enoughFeedsLive": true,
      "currentEditionDate": true,
      "noCriticalTransportFailures": true
    },
    "monitoringMode": "continuous-source-refresh",
    "sourceRefreshPath": "/api/monitoring/source-refresh",
    "compatibilityPath": "/api/monitoring/daily-refresh",
    "advice": "Latest source refresh is fresh enough for public serving."
  },
  "crawlerAcceptance": [
    "GET / must include real story article markup without JavaScript.",
    "GET /status must expose JSON when Accept is application/json.",
    "GET /llms.txt, /robots.txt, /sitemap.xml, /feed.xml, /.well-known/agent.json must return non-empty public files.",
    "GET /api/v1/events must return source-backed event records with evidence boundaries."
  ],
  "endpoints": {
    "status": "/status",
    "monitor": "/api/monitoring/source-refresh",
    "readiness": "/api/readiness",
    "launchCheck": "scripts/launch-check.mjs https://robotnewsnetwork.com --strict",
    "events": "/api/v1/events"
  }
}