[
  {
    "local_id": "C1",
    "type": "resource",
    "core": true,
    "statement": "The claim-ID test vectors in data/claim-id-vectors.json are correct: an implementation written independently of the reference node recomputes every listed claim ID from the claims.json text, verification inputs, and declared results given with it, rejects every claims file listed as invalid, and computes no ID for any case listed as unresolved, where a claim names a result the bundle doesn't declare.",
    "evidence": [
      {
        "result": "R1.mismatches",
        "produced_by": "code/check_vectors.py",
        "tolerance": 0
      },
      {
        "result": "R1.invalid_accepted",
        "produced_by": "code/check_vectors.py",
        "tolerance": 0
      },
      {
        "result": "R1.unresolved_accepted",
        "produced_by": "code/check_vectors.py",
        "tolerance": 0
      }
    ],
    "depends_on": [],
    "falsified_if": "Running code/check_vectors.py reports a claim-ID mismatch, accepts an invalid claims file, or computes an ID for an unresolved case, or an implementation that follows the protocol's identity rule computes a different ID for a listed claim.",
    "confidence": 0.99
  },
  {
    "local_id": "C2",
    "type": "resource",
    "core": true,
    "statement": "The bundle test vectors in data/bundle-vectors.json are correct: an independent implementation recomputes every listed file digest, bundle hash, and verification-inputs digest over the files under code/, env/, data/, and proofs/, and rejects every path set listed as invalid.",
    "evidence": [
      {
        "result": "R2.mismatches",
        "produced_by": "code/check_vectors.py",
        "tolerance": 0
      },
      {
        "result": "R2.invalid_accepted",
        "produced_by": "code/check_vectors.py",
        "tolerance": 0
      }
    ],
    "depends_on": [],
    "falsified_if": "Running code/check_vectors.py reports a bundle mismatch or accepts an invalid path set, or an implementation that follows the protocol's bundle rules computes a different digest for a listed bundle.",
    "confidence": 0.99
  },
  {
    "local_id": "C3",
    "type": "resource",
    "core": true,
    "statement": "The log test vectors in data/log-vectors.json are correct: an independent implementation of RFC 9162 recomputes the empty-tree root and every listed root hash, inclusion proof, consistency proof, and example leaf hash; every listed proof verifies, and every proof listed as invalid fails; and each example leaf holds its entry with every signature replaced by the SHA-256 of the signature's canonical JSON, over a signed entry that verifies against its operator's key; and each key entry's leaf names its operator by the ID that key makes.",
    "evidence": [
      {
        "result": "R3.mismatches",
        "produced_by": "code/check_vectors.py",
        "tolerance": 0
      },
      {
        "result": "R3.invalid_accepted",
        "produced_by": "code/check_vectors.py",
        "tolerance": 0
      }
    ],
    "depends_on": [],
    "falsified_if": "Running code/check_vectors.py reports a log mismatch or accepts an invalid proof, a listed proof fails RFC 9162 verification against its listed root, or an example leaf holds a signature other than by its digest.",
    "confidence": 0.99
  },
  {
    "local_id": "C4",
    "type": "resource",
    "core": true,
    "statement": "The signature test vectors in data/signature-vectors.json are correct: an independent implementation rebuilds every signing payload from canonical JSON, derives every listed hybrid Ed25519 and ML-DSA-44 public key and key digest from its seeds, reproduces every deterministic Ed25519 half byte for byte, verifies both halves of every listed signature and of a fresh ML-DSA-44 signature from the same key, and rejects every signature listed as invalid.",
    "evidence": [
      {
        "result": "R4.mismatches",
        "produced_by": "code/check_vectors.py",
        "tolerance": 0
      },
      {
        "result": "R4.invalid_accepted",
        "produced_by": "code/check_vectors.py",
        "tolerance": 0
      }
    ],
    "depends_on": [],
    "falsified_if": "Running code/check_vectors.py reports a signature mismatch or accepts an invalid signature, or a listed signature fails Ed25519 or ML-DSA-44 verification against its listed public key.",
    "confidence": 0.99
  },
  {
    "local_id": "C6",
    "type": "resource",
    "core": true,
    "statement": "The ID test vectors in data/id-vectors.json are correct: an independent implementation derives every listed operator ID as op: and the SHA-256 of the operator's first public key as written, and every volunteer ID as obs: and the SHA-256 of the first passkey as written; recomputes every entry's digest as signed and the leaf entry that holds its signatures by digest; confirms that the key rotation keeps the ID the operator's first key made; and rejects every ID listed as invalid.",
    "evidence": [
      {
        "result": "R6.mismatches",
        "produced_by": "code/check_vectors.py",
        "tolerance": 0
      },
      {
        "result": "R6.invalid_accepted",
        "produced_by": "code/check_vectors.py",
        "tolerance": 0
      }
    ],
    "depends_on": [],
    "falsified_if": "Running code/check_vectors.py reports an ID or entry-digest mismatch or accepts an invalid ID, or an implementation that follows the protocol's ID rule derives a different ID for a listed key or passkey.",
    "confidence": 0.99
  },
  {
    "local_id": "C5",
    "type": "methodological",
    "core": false,
    "statement": "Hashing Python's json.dumps output with sorted keys and compact separators gives wrong claim IDs for claims files in which Python wrote numbers such as 1.0, 1e-05, or 1e+16, because RFC 8785 formats numbers as ECMAScript does; formatting numbers that way gives the listed ID for every vector.",
    "evidence": [
      {
        "result": "R5.naive_mismatches",
        "produced_by": "code/check_vectors.py",
        "tolerance": 0
      },
      {
        "result": "R5.canonical_mismatches",
        "produced_by": "code/check_vectors.py",
        "tolerance": 0
      }
    ],
    "depends_on": [
      "C1"
    ],
    "falsified_if": "The json.dumps approach reproduces every listed claim ID, or ECMAScript-style number formatting misses one.",
    "confidence": 0.97
  }
]
