{
 "dataset": "chain-liveness",
 "title": "Chain liveness and halt history",
 "note": "`lag_seconds` is the CHAIN's — how far behind its own head was when we read it. `observation_age_seconds` is OURS — how long ago we read it. They are never added together: we poll every six minutes, so against Sui's 0.3-second checkpoints a single number would read `lagging` on a permanently healthy chain. `status: unwatched` with a non-empty `why` is a chain nobody here is watching, not a chain that is down.",
 "integrity": {
  "dataset": "chain-liveness",
  "window_days": 14,
  "scope": "One row per chain we watch, as it stands now. The coverage windows below are our own: while we were not looking, a halt could have started and ended without ever reaching this record.",
  "rows_window": {},
  "rows_window_says": "",
  "coverage": {
   "ledgers": [
    "onchain"
   ],
   "gap_rows": 1,
   "not_looking_minutes": 3.0,
   "complete": false,
   "windows": [
    {
     "who": "Chain slowdowns and recoveries",
     "from": "2026-10-05T06:10:29.648417+00:00",
     "to": "2026-10-05T06:13:29.648417+00:00",
     "minutes": 3.0,
     "rows": 1,
     "who_said": "Chain slowdowns and recoveries",
     "why": "we were not reading this while the window was open"
    }
   ]
  },
  "density": {
   "per_day": null,
   "expected_per_day": null,
   "expected_from": "not a continuous record — a day with no rows in it is a quiet day in the world, not a gap in ours",
   "mean_per_day": null,
   "thin_days": [],
   "empty_days": []
  },
  "provenance": [
   {
    "name": "bitcoin",
    "rows": 1,
    "note": "https://mempool.space/api"
   },
   {
    "name": "ethereum",
    "rows": 1,
    "note": "https://ethereum-rpc.publicnode.com"
   },
   {
    "name": "solana",
    "rows": 1,
    "note": "https://api.mainnet-beta.solana.com"
   },
   {
    "name": "xrp",
    "rows": 1,
    "note": "https://xrplcluster.com/"
   },
   {
    "name": "avalanche",
    "rows": 1,
    "note": "https://api.avax.network/ext/bc/C/rpc"
   },
   {
    "name": "near",
    "rows": 1,
    "note": "https://free.rpc.fastnear.com — not currently watched"
   },
   {
    "name": "sui",
    "rows": 1,
    "note": "https://graphql.mainnet.sui.io/graphql"
   }
  ],
  "provider_fallbacks": [],
  "corrections": [],
  "our_downtime": [
   {
    "id": "2026-10-07-unexplained-0239",
    "date": "2026-10-07",
    "minutes": 38,
    "severity": "degraded",
    "title": "The wire wrote no ledger row for 38 minutes (stage 'budget')",
    "explained": false
   },
   {
    "id": "2026-10-06-unexplained-0757",
    "date": "2026-10-06",
    "minutes": 44,
    "severity": "degraded",
    "title": "The wire wrote no ledger row for 44 minutes (stage 'budget')",
    "explained": false
   },
   {
    "id": "2026-10-06-unexplained-1006",
    "date": "2026-10-06",
    "minutes": 107,
    "severity": "degraded",
    "title": "The wire wrote no ledger row for 107 minutes (stage 'budget')",
    "explained": false
   },
   {
    "id": "2026-10-06-unexplained-1856",
    "date": "2026-10-06",
    "minutes": 47,
    "severity": "degraded",
    "title": "The wire wrote no ledger row for 47 minutes (stage 'budget')",
    "explained": false
   },
   {
    "id": "2026-10-03-unexplained-1956",
    "date": "2026-10-03",
    "minutes": 39,
    "severity": "degraded",
    "title": "The wire wrote no ledger row for 39 minutes (stage 'budget')",
    "explained": false
   },
   {
    "id": "2026-10-03-unexplained-2103",
    "date": "2026-10-03",
    "minutes": 46,
    "severity": "degraded",
    "title": "The wire wrote no ledger row for 46 minutes (stage 'budget')",
    "explained": false
   },
   {
    "id": "2026-10-02-unexplained-0213",
    "date": "2026-10-02",
    "minutes": 65,
    "severity": "degraded",
    "title": "The wire wrote no ledger row for 65 minutes (stage 'budget')",
    "explained": false
   },
   {
    "id": "2026-09-29-unexplained-1011",
    "date": "2026-09-29",
    "minutes": 57,
    "severity": "degraded",
    "title": "The wire wrote no ledger row for 57 minutes (stage 'budget')",
    "explained": false
   },
   {
    "id": "2026-09-28-unexplained-0915",
    "date": "2026-09-28",
    "minutes": 44,
    "severity": "degraded",
    "title": "The wire wrote no ledger row for 44 minutes (stage 'budget')",
    "explained": false
   },
   {
    "id": "2026-09-28-unexplained-1229",
    "date": "2026-09-28",
    "minutes": 39,
    "severity": "degraded",
    "title": "The wire wrote no ledger row for 39 minutes (stage 'budget')",
    "explained": false
   },
   {
    "id": "2026-09-28-unexplained-1322",
    "date": "2026-09-28",
    "minutes": 37,
    "severity": "degraded",
    "title": "The wire wrote no ledger row for 37 minutes (stage 'budget')",
    "explained": false
   },
   {
    "id": "2026-09-28-unexplained-1906",
    "date": "2026-09-28",
    "minutes": 31,
    "severity": "degraded",
    "title": "The wire wrote no ledger row for 31 minutes (stage 'budget')",
    "explained": false
   },
   {
    "id": "2026-09-25-unexplained-1850",
    "date": "2026-09-25",
    "minutes": 31,
    "severity": "degraded",
    "title": "The wire wrote no ledger row for 31 minutes (stage 'budget')",
    "explained": false
   },
   {
    "id": "2026-09-24-unexplained-1211",
    "date": "2026-09-24",
    "minutes": 31,
    "severity": "degraded",
    "title": "The wire wrote no ledger row for 31 minutes (stage 'budget')",
    "explained": false
   }
  ],
  "not_checked": {
   "at": "2026-08-31",
   "checks": 2710,
   "failed": 5,
   "failures": [
    "…and the tape carries PLAIN-TEXT rows as well as linked ones — a row with nothing behind it has no `href` at all, so the two states are distinguishable in the markup and not only in the styling (batch L §9), and a page where every row linked would not be exercising that rule",
    "every recorded incident carries a written post-mortem",
    "…and the timeline shows we were first",
    "…which keeps the permalink, grows the timeline, and records the event that ended it",
    "…and the measured row is 46px on a phone and 42px above 620 — the heights §1 asked for, read off the rendered page"
   ],
   "passed": 2705,
   "raises": 0,
   "skipped": 4,
   "skips": [
    [
     "digest-2026-08-09-pm: its links resolve to published posts and to pages on disk (3 checks)",
     "published before the wrap became a linked recap — the stored post is the audit trail and is never rewritten"
    ],
    [
     "the display rung (44) is asserted on the lead card's figure",
     "the figure is the hero number INSIDE the card graphic — SVG user units in an 800x450 viewBox — so its rendered size is `units x (card width / 800)` and no one value makes it 44px on the front page, an article page and a share kit at once. Measured: 126px before this batch and 68.7px after, at 1440x900, because §6 put the lead in a 1/3 column. Reaching 44 means re-composing the card graphic, which is a batch and not a line — see docs/BATCH-K-REPORT.md"
    ]
   ]
  },
  "not_checked_excluded": false
 },
 "columns": [
  "id",
  "name",
  "symbol",
  "status",
  "height",
  "at",
  "lag_seconds",
  "observation_age_seconds",
  "normal_seconds",
  "halt_count",
  "halt_minutes",
  "rate_limit",
  "why"
 ],
 "count": 7,
 "rows": [
  {
   "id": "bitcoin",
   "name": "Bitcoin",
   "symbol": "BTC",
   "status": "producing",
   "height": 970391,
   "at": "2026-10-07T20:44:24+00:00",
   "lag_seconds": 353,
   "observation_age_seconds": 111,
   "normal_seconds": 600.0,
   "halt_count": 0,
   "halt_minutes": 0,
   "rate_limit": "no published limit (mempool.space, blockchain.info)",
   "why": ""
  },
  {
   "id": "ethereum",
   "name": "Ethereum",
   "symbol": "ETH",
   "status": "producing",
   "height": 26143009,
   "at": "2026-10-07T20:50:11+00:00",
   "lag_seconds": 6,
   "observation_age_seconds": 111,
   "normal_seconds": 12.0,
   "halt_count": 0,
   "halt_minutes": 0,
   "rate_limit": "publicnode publishes no numeric limit; fair-use",
   "why": ""
  },
  {
   "id": "solana",
   "name": "Solana",
   "symbol": "SOL",
   "status": "producing",
   "height": 454334715,
   "at": "2026-10-07T20:50:11+00:00",
   "lag_seconds": 6,
   "observation_age_seconds": 111,
   "normal_seconds": 1.0,
   "halt_count": 0,
   "halt_minutes": 0,
   "rate_limit": "100 req/10s per IP, 40 req/10s per method (documented)",
   "why": ""
  },
  {
   "id": "xrp",
   "name": "XRP Ledger",
   "symbol": "XRP",
   "status": "producing",
   "height": 107501927,
   "at": "2026-10-07T20:50:12+00:00",
   "lag_seconds": 5,
   "observation_age_seconds": 111,
   "normal_seconds": 4.0,
   "halt_count": 0,
   "halt_minutes": 0,
   "rate_limit": "no published numeric limit (xrplcluster, s1.ripple.com)",
   "why": ""
  },
  {
   "id": "avalanche",
   "name": "Avalanche C-Chain",
   "symbol": "AVAX",
   "status": "producing",
   "height": 96982896,
   "at": "2026-10-07T20:50:19+00:00",
   "lag_seconds": 0,
   "observation_age_seconds": 111,
   "normal_seconds": 2.0,
   "halt_count": 0,
   "halt_minutes": 0,
   "rate_limit": "50 req/s per IP (documented, api.avax.network)",
   "why": ""
  },
  {
   "id": "near",
   "name": "NEAR Protocol",
   "symbol": "NEAR",
   "status": "unwatched",
   "height": null,
   "at": "",
   "lag_seconds": 0,
   "observation_age_seconds": 0,
   "normal_seconds": 1.2,
   "halt_count": 0,
   "halt_minutes": 0,
   "rate_limit": "fastnear: no published numeric limit; rpc.mainnet.near.org: DEPRECATED, 429s",
   "why": "not currently watched, so a halt on this chain would not be detected here"
  },
  {
   "id": "sui",
   "name": "Sui",
   "symbol": "SUI",
   "status": "producing",
   "height": 331439336,
   "at": "2026-10-07T20:50:18.697000+00:00",
   "lag_seconds": 0,
   "observation_age_seconds": 111,
   "normal_seconds": 1.0,
   "halt_count": 0,
   "halt_minutes": 0,
   "rate_limit": "no published numeric limit; query-complexity capped (documented)",
   "why": ""
  }
 ]
}
