{
  "entry": {
    "seq": 12153,
    "at": "2026-11-05T09:31:15.678Z",
    "type": "safety.rating",
    "subject": "skill:github-com-modelcontextprotocol-typescript-sdk-f7fb7d70e0",
    "payload": {
      "as_of": "2026-11-05T02:57:01.125Z",
      "band": "Good public signals",
      "check_version": "rs-safety-checks-2.0",
      "evidence_sha256": "637f1be720081af04e51ef4078b76015a38fbb0dea1bd264d4604ca722feedcc",
      "id": "github-com-modelcontextprotocol-typescript-sdk-f7fb7d70e0",
      "kind": "skill",
      "rating_sha256": "4aa66a28f1fe7f9444f24159c5241de7e28ba3c86e9c43e2840df16e74313835",
      "score": 78,
      "stream": "safety_ratings"
    },
    "payload_hash": "82dca4ba1bcc81b5597792e27a3db6add283a6453b62ca4d7511c0ee0bc18e4b",
    "leaf_hash": "c47ee928590ea9b8610b4c2225766594212a198182a4ba493ad6f6e406d4757a",
    "block_height": 3585,
    "texts": {},
    "data": {
      "as_of": "2026-11-05T02:57:01.125Z",
      "band": "Good public signals",
      "check_version": "rs-safety-checks-2.0",
      "evidence_sha256": "637f1be720081af04e51ef4078b76015a38fbb0dea1bd264d4604ca722feedcc",
      "id": "github-com-modelcontextprotocol-typescript-sdk-f7fb7d70e0",
      "kind": "skill",
      "rating_sha256": "4aa66a28f1fe7f9444f24159c5241de7e28ba3c86e9c43e2840df16e74313835",
      "score": 78,
      "stream": "safety_ratings"
    }
  },
  "status": "sealed",
  "block": {
    "v": 1,
    "height": 3585,
    "prev_hash": "b30094e70ebe2126c8d47dde6d25a3fdd49c950bcbfb6728866044468978314a",
    "merkle_root": "2f48fa14ec9f929cada06c055dd3b8ddba89b183a13eb5722e46fdab621ee0df",
    "first_seq": 12153,
    "last_seq": 12158,
    "entry_count": 6,
    "at": "2026-11-05T09:31:15.751Z",
    "key_id": "key_41eb7b6d1b11968a",
    "block_hash": "ac846c685ef2a1f4f26c746a8e99259e064888f9f3cb9c8ed1bd160e9fdc0f20",
    "signature": "88wtuPwUNqCanwt/lVmH+q/9/TrNdbzRTA9JtG3G6sdUjyUtZW69NYqqiO+/FeA7PpCv9x9rkv+zCkFnpUysBw==",
    "public_key_pem": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAEYWJAvPDwdwiByA4ucuPBAV0jLWwXGgtbZqbyrLNMiM=\n-----END PUBLIC KEY-----\n"
  },
  "proof": {
    "leaf_hash": "c47ee928590ea9b8610b4c2225766594212a198182a4ba493ad6f6e406d4757a",
    "index": 0,
    "path": [
      {
        "side": "R",
        "hash": "5a88882b8fb05a22df06c3b141a62989796355b9f3e701b97b79e1e58b2e5ff4"
      },
      {
        "side": "R",
        "hash": "54c825e5e2e772595dc01522c343e799b2be272d70b69624331461d97ce33407"
      },
      {
        "side": "R",
        "hash": "77017bbc249593fe12374dc5a52fada0387fae9c1f6db45f101002f06d6c9eaa"
      }
    ],
    "merkle_root": "2f48fa14ec9f929cada06c055dd3b8ddba89b183a13eb5722e46fdab621ee0df",
    "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": 974660,
      "confirmed_through": 6032
    },
    "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."
  }
}