{
  "checked_at_utc": "2026-10-21T16:49:43Z",
  "does_not_say": "It does not say how any other agent, site or party performs, and it does not promise future availability. A window longer than GAIP's record so far covers only the days stated.",
  "incidents": [
    {
      "end_utc": "2026-10-10T00:51:44Z",
      "kind": "WWW_CHECK_FAILED",
      "ongoing": false,
      "source": "service_status (GAIP's hourly www check)",
      "start_utc": "2026-10-09T23:48:47Z",
      "what": "www.gaipagents.com did not answer 1 hourly check(s) from GAIP's Railway runtime (FETCH_FAILED:TimeoutError)."
    },
    {
      "end_utc": "2026-10-09T17:32:32Z",
      "kind": "COLLECTION_GAP",
      "ongoing": false,
      "source": "collection ledger",
      "start_utc": "2026-10-09T16:34:12Z",
      "what": "No Observatory tick started for 58 min: nothing was collected in that time."
    },
    {
      "end_utc": "2026-10-03T17:14:00Z",
      "fix_pr": null,
      "kind": "KNOWN_GAP",
      "ongoing": false,
      "source": "known gaps register (config/known_gaps_v1.json)",
      "start_utc": "2026-10-03T16:55:00Z",
      "times_partly_estimated": true,
      "what": "One Observatory tick observed nothing: the tick right after the data5 deploy ended with DatabaseError. Cause: Deploy overlap during the PR #843 deploy (as recorded in the handover); no code fix was needed, the next tick was clean."
    },
    {
      "end_utc": "2026-10-03T07:52:15Z",
      "fix_pr": "#824",
      "kind": "KNOWN_GAP",
      "ongoing": false,
      "source": "known gaps register (config/known_gaps_v1.json)",
      "start_utc": "2026-10-02T23:16:00Z",
      "times_partly_estimated": true,
      "what": "Observatory observations: every tick claimed and observed 0 targets (tick lines showed budget_exhausted or TimeoutError), so no status observations, manifest changes or capability records were written. Cause: Registry walks read up to 20 pages from one host while the outbound gate allows 10 requests a minute per host; the 11th page raised _BudgetExhausted out of the walk, the cursor was never saved and the cycle returned before observing, on every tick (the refresh livelock)."
    },
    {
      "end_utc": "2026-10-03T10:02:34Z",
      "fix_pr": "#826",
      "kind": "KNOWN_GAP",
      "ongoing": false,
      "source": "known gaps register (config/known_gaps_v1.json)",
      "start_utc": "2026-10-01T21:09:04Z",
      "times_partly_estimated": true,
      "what": "About 75% (estimate) of shop-host AI-permission facts (ai_permissions dataset, shop hosts) were evicted from an in-memory queue before they were written; the rest were written. Cause: The in-memory buffer evicted entries waiting for an extra read before they were written; the shop panel did not read tdmrep.json itself."
    },
    {
      "end_utc": "2026-10-01T19:30:20Z",
      "fix_pr": null,
      "kind": "KNOWN_GAP",
      "ongoing": false,
      "source": "known gaps register (config/known_gaps_v1.json)",
      "start_utc": "2026-09-28T00:00:00Z",
      "times_partly_estimated": true,
      "what": "No independent daily timestamp (Sigstore/Rekor anchor) of the history log's chain head was kept for 28, 29 and 30 Sep 2026 or the morning of 1 Oct. The history log itself kept every entry; the 1 Oct anchor's chain head covers every entry before it, so those entries are dated no later than 1 Oct by an outside witness, not day by day. Cause: The anchor workflow's runs on 28 Sep failed twice and were then cancelled; it ran on GitHub Actions only on a push or by hand until the COO schedule dispatcher began running it daily on 1 Oct 2026 (moat moves), and dated anchor files began the same day (record durability)."
    }
  ],
  "links": {
    "collection_ledger": "https://www.gaipagents.com/data/collection-ledger.json",
    "collection_status": "https://www.gaipagents.com/v1/free/collection-status",
    "known_gaps_method": "https://www.gaipagents.com/observatory#2s-collection-ledger-and-known-gaps",
    "page": "https://www.gaipagents.com/status",
    "record_card": "https://www.gaipagents.com/.well-known/gaip-record.json",
    "security": "https://www.gaipagents.com/security"
  },
  "meaning": "Whether GAIP's public site answered GAIP's own hourly check from its other runtime, whether its collection ran (the share of 15-minute windows with an Observatory tick), over the last 7, 30 and 90 days, and a dated log of every gap and failed check GAIP knows of. Facts about GAIP's own service, at the stated times.",
  "now": {
    "collectors_checked": 18,
    "collectors_late_or_stopped": [],
    "collectors_not_read": [],
    "collectors_running": 18,
    "this_answer_served": true,
    "www_last_check_answered": true,
    "www_last_checked_from_railway_utc": "2026-10-21T16:01:05Z"
  },
  "price_gbp": 0,
  "records_begin": "2026-09-28",
  "schema_version": "gaip.status.v1",
  "uptime": {
    "collection": {
      "30": {
        "covers_since": "the collection ledger began on 2026-10-04",
        "days_covered": 17,
        "days_fully_covered": 15,
        "from_day": "2026-10-04",
        "partial": true,
        "requested_days": 30,
        "share": 0.9875,
        "to_day": "2026-10-20",
        "windows_possible": 1598,
        "windows_with_a_tick": 1578
      },
      "7": {
        "covers_since": "the collection ledger began on 2026-10-04",
        "days_covered": 7,
        "days_fully_covered": 7,
        "from_day": "2026-10-14",
        "partial": false,
        "requested_days": 7,
        "share": 0.9926,
        "to_day": "2026-10-20",
        "windows_possible": 672,
        "windows_with_a_tick": 667
      },
      "90": {
        "covers_since": "the collection ledger began on 2026-10-04",
        "days_covered": 17,
        "days_fully_covered": 15,
        "from_day": "2026-10-04",
        "partial": true,
        "requested_days": 90,
        "share": 0.9875,
        "to_day": "2026-10-20",
        "windows_possible": 1598,
        "windows_with_a_tick": 1578
      }
    },
    "measures": {
      "collection": "Share of 15-minute UTC windows in which an Observatory tick started (the collection ledger; completed days only).",
      "www": "Share of GAIP's hourly checks from its Railway runtime that www.gaipagents.com answered (HTTP 200 from /v1/free/collection-status in its own schema)."
    },
    "windows_rule": "Each window counts completed UTC days back from yesterday and starts no earlier than the source began; days_covered below requested_days means the window is partial.",
    "www": {
      "30": {
        "answered": 237,
        "checks": 238,
        "covers_since": "GAIP's hourly www check began on 2026-10-09",
        "days_covered": 12,
        "from_day": "2026-10-09",
        "partial": true,
        "requested_days": 30,
        "share": 0.9958,
        "to_day": "2026-10-20"
      },
      "7": {
        "answered": 151,
        "checks": 151,
        "covers_since": "GAIP's hourly www check began on 2026-10-09",
        "days_covered": 7,
        "from_day": "2026-10-14",
        "partial": false,
        "requested_days": 7,
        "share": 1.0,
        "to_day": "2026-10-20"
      },
      "90": {
        "answered": 237,
        "checks": 238,
        "covers_since": "GAIP's hourly www check began on 2026-10-09",
        "days_covered": 12,
        "from_day": "2026-10-09",
        "partial": true,
        "requested_days": 90,
        "share": 0.9958,
        "to_day": "2026-10-20"
      }
    },
    "www_today_so_far": {
      "answered": 14,
      "checks": 14,
      "day": "2026-10-21"
    }
  },
  "view": {
    "age_seconds": 198,
    "meaning": "STORED: built by the Observatory runtime at stored_at_utc and served from the database (figures are as of that time). stale is true when the stored copy is older than 1800 seconds (two Observatory cycles).",
    "source": "STORED",
    "stale": false,
    "stale_after_seconds": 1800,
    "stored_at_utc": "2026-10-21T16:46:25Z"
  },
  "watchdog": {
    "collectors_checked": 18,
    "late_or_stopped": [],
    "not_read": [],
    "records_not_running": [],
    "running": 18,
    "status": "https://www.gaipagents.com/v1/free/collection-status"
  }
}