{
  "entry": {
    "seq": 9892,
    "at": "2026-11-04T18:46:55.686Z",
    "type": "safety.rating",
    "subject": "skill:developers-cloudflare-com-changelog-post-2026-11-02-bill-9fba025080",
    "payload": {
      "as_of": "2026-11-04T02:57:53.531Z",
      "band": "Good public signals",
      "check_version": "rs-safety-checks-2.0",
      "evidence_sha256": "df9e3fa096b68a89b46b48e214ac31d41e5a501fe2fad55ca56d49aebd828785",
      "id": "developers-cloudflare-com-changelog-post-2026-11-02-bill-9fba025080",
      "kind": "skill",
      "rating_sha256": "c6144493312b545284ba7a3a3cb14560ddd0c55efcadb2f4a14ce33ba7960b6d",
      "score": 71,
      "stream": "safety_ratings"
    },
    "payload_hash": "933de3204fd8301688c9e7d2de58ce1a6626e3ce11f52e9a92f493a25f154007",
    "leaf_hash": "631bfe0ed4c12f87d59f243728547146fc79dc1ba36376b980ef44ff8438e50f",
    "block_height": 3357,
    "texts": {},
    "data": {
      "as_of": "2026-11-04T02:57:53.531Z",
      "band": "Good public signals",
      "check_version": "rs-safety-checks-2.0",
      "evidence_sha256": "df9e3fa096b68a89b46b48e214ac31d41e5a501fe2fad55ca56d49aebd828785",
      "id": "developers-cloudflare-com-changelog-post-2026-11-02-bill-9fba025080",
      "kind": "skill",
      "rating_sha256": "c6144493312b545284ba7a3a3cb14560ddd0c55efcadb2f4a14ce33ba7960b6d",
      "score": 71,
      "stream": "safety_ratings"
    }
  },
  "status": "sealed",
  "block": {
    "v": 1,
    "height": 3357,
    "prev_hash": "de166fbba1b83540f01238f73694cfe585b314a6b8b9bbda21d4c7a3fa58d51f",
    "merkle_root": "1b22d85dacfe0d2af48a956d056bf5202994dbd133d2553b26aacfe2fc361ad7",
    "first_seq": 9889,
    "last_seq": 9900,
    "entry_count": 12,
    "at": "2026-11-04T18:46:55.810Z",
    "key_id": "key_41eb7b6d1b11968a",
    "block_hash": "b8be1e7f2547b4d05273458ad978ecf6a938d556aea6b39bcaa1779db2d183bd",
    "signature": "WhlY8WkUz5iYG16QNBtp1QBw2ZSMvB1l6FaSiZGpUD56UJ3bQaesa7c9YremcVGdRADBap5QU8ChhhEzFhoeDQ==",
    "public_key_pem": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAEYWJAvPDwdwiByA4ucuPBAV0jLWwXGgtbZqbyrLNMiM=\n-----END PUBLIC KEY-----\n"
  },
  "proof": {
    "leaf_hash": "631bfe0ed4c12f87d59f243728547146fc79dc1ba36376b980ef44ff8438e50f",
    "index": 3,
    "path": [
      {
        "side": "L",
        "hash": "ef4022761d96e5ba5b1e566d14270ee8e102a55e6c74b33d8f9fd71035f63026"
      },
      {
        "side": "L",
        "hash": "d9484d0ecb74014606de891eb269477049de2856fe13373e826d8a66eeb04565"
      },
      {
        "side": "R",
        "hash": "76d1580e0376ee5a54c6bdc11e9e4c0e14fd3982102268fe431436f5232304f6"
      },
      {
        "side": "R",
        "hash": "1a7dc8efc73a4de109e9191ca5a439956f8f8d3927aa9f9ff8440e05c450efbc"
      }
    ],
    "merkle_root": "1b22d85dacfe0d2af48a956d056bf5202994dbd133d2553b26aacfe2fc361ad7",
    "how_to_verify": "payload_hash = sha256(canonical(payload)); leaf = sha256('leaf:' + canonical({seq, at, type, subject, payload_hash})); fold the path (R: sha256('node:' + acc + hash), L: sha256('node:' + hash + acc)) to merkle_root; verify the Ed25519 signature over canonical(block header)."
  },
  "finality": {
    "state": "bitcoin-anchored",
    "final": false,
    "witnesses": 0,
    "witnesses_confirmed_unaffiliated": 0,
    "witnesses_total": 0,
    "required": 2,
    "finalized_through": null,
    "bitcoin": {
      "anchored": true,
      "block_height": 974567,
      "confirmed_through": 6047
    },
    "states": [
      "recorded",
      "sealed",
      "bitcoin-anchored",
      "witness-quorum",
      "final"
    ],
    "rule": "States climb recorded -> sealed -> bitcoin-anchored -> witness-quorum -> final. A block is final only once its hash is confirmed in Bitcoin AND 2 confirmed-unaffiliated witnesses on distinct registrable domains with distinct keys have cosigned it or any later block; each header commits to every earlier block. Cosignatures from affiliated, unconfirmed, pending or challenged witnesses are public evidence but never count toward quorum. The quorum steps up on a published schedule as confirmed-unaffiliated witnesses grow: 2 required while fewer than 5 are confirmed, 3 at 5, 4 at 10, 6 at 20, 8 at 40. Every tier's requirement sits well below the count that triggers it, so churn is weather, not a freeze; the requirement is recomputed from the live count on every read."
  }
}