[
 {
  "name": "fail-anchor-proof-graft",
  "verdict": "fail",
  "note": "a packed anchor whose cosig cannot reach the anchor's signed head — a claimed anchor is either verifiable or a lie; every verifier fails closed"
 },
 {
  "name": "fail-bool-leaf-index",
  "verdict": "fail",
  "note": "leaf_index true — bool is an int subclass in Python but not an integer in JSON; Number.isInteger parity rejects it"
 },
 {
  "name": "fail-chain-dup-size",
  "verdict": "fail",
  "note": "two issuer-signed heads at one tree size inside a single document is a fork claim the reconcile cannot read honestly — the pack refuses it at verification time"
 },
 {
  "name": "fail-chain-foreign-member",
  "verdict": "fail",
  "note": "a chain member signed by a foreign key — the walk could never trust a bridge it names, so the pack fails closed"
 },
 {
  "name": "fail-chain-nonhex-root",
  "verdict": "fail",
  "note": "a 64-char non-hex member root — the strictest spelling wins on every surface, so the pack fails closed at intake instead of diverging mid-walk"
 },
 {
  "name": "fail-doctored-verifier",
  "verdict": "fail",
  "note": "a post-export edit to verify_case.py — membership checks names, only the signed pin checks the bytes"
 },
 {
  "name": "fail-embedded-foreign-receipt",
  "verdict": "fail",
  "note": "an embedded receipt signed outside the issuer lineage — embedded evidence must bind the pack's issuer or it is grafted testimony"
 },
 {
  "name": "fail-embedded-tampered-receipt",
  "verdict": "fail",
  "note": "an embedded receipt's payload flipped — payload hash and signature both fail; a doctored observation can never ride the signed head"
 },
 {
  "name": "fail-foreign-pin",
  "verdict": "fail",
  "note": "a valid pin receipt under an untrusted key — signature integrity is not issuer authority"
 },
 {
  "name": "fail-forged-verifier-tool",
  "verdict": "fail",
  "note": "a modified verify_bundle.py fails its own signed pin — membership whitelists names, only the manifest pins bytes"
 },
 {
  "name": "fail-fractional-leaf-index",
  "verdict": "fail",
  "note": "leaf_index 5.5 — non-integral indices are not integers on any surface; Python must not silently truncate where JS rejects"
 },
 {
  "name": "fail-grafted-log-proof",
  "verdict": "fail",
  "note": "another receipt's audit path grafted on — the Merkle math catches what a presence check never would"
 },
 {
  "name": "fail-grafted-pin",
  "verdict": "fail",
  "note": "a verifier_manifest signed for another pack cannot pin this one — the scope binding stops the replay"
 },
 {
  "name": "fail-media-mismatch",
  "verdict": "fail",
  "note": "media bytes that don't hash to the signed digest are caught"
 },
 {
  "name": "fail-missing-listed",
  "verdict": "fail",
  "note": "a bundle the signed manifest lists but the zip lacks fails"
 },
 {
  "name": "fail-missing-log-proof",
  "verdict": "fail",
  "note": "a pack receipt silently dropped from log_checkpoint.json — the pack cannot claim log membership it does not prove"
 },
 {
  "name": "fail-missing-pinned-tool",
  "verdict": "fail",
  "note": "a tool the signed pin names but the pack lacks fails — the pin binds both directions"
 },
 {
  "name": "fail-negative-leaf-index",
  "verdict": "fail",
  "note": "leaf_index -1 — Number.isInteger(-1) is TRUE, so this isolates the explicit index<0 range guard every surface must carry beyond the type check"
 },
 {
  "name": "fail-negative-tree-size",
  "verdict": "fail",
  "note": "a properly SIGNED head claiming tree_size -1 — Number.isInteger(-1) is TRUE, so this isolates the size<1 range guard: a log with negative size is a malformed head everywhere"
 },
 {
  "name": "fail-orphan-rotation",
  "verdict": "fail",
  "note": "a rotation the successor never countersigned cannot pivot trust"
 },
 {
  "name": "fail-oversize-tree-size",
  "verdict": "fail",
  "note": "a properly SIGNED head claiming tree_size 2^40 — valid signature, impossible size: JS bitwise ops die past 2^31, so every surface rejects it rather than diverging"
 },
 {
  "name": "fail-payload-tamper",
  "verdict": "fail",
  "note": "a flipped payload field breaks the signed hash"
 },
 {
  "name": "fail-signature-tamper",
  "verdict": "fail",
  "note": "a corrupted signature must never verify"
 },
 {
  "name": "fail-smuggled-member",
  "verdict": "fail",
  "note": "a member the pack format doesn't name fails closed"
 },
 {
  "name": "fail-spaced-hex-proof",
  "verdict": "fail",
  "note": "a proof node spelled with spaces between byte pairs — Python bytes.fromhex tolerates whitespace where strict hex rejects; every surface now fails closed identically"
 },
 {
  "name": "fail-string-leaf-index",
  "verdict": "fail",
  "note": "leaf_index as a quoted string — JSON-typed fields must not pass through Python's permissive int() where JS === rejects"
 },
 {
  "name": "fail-unreferenced-junk-proof",
  "verdict": "fail",
  "note": "a proof entry referencing nothing and reaching nothing — every proofs entry must verify; unexplained material is a lie, not decoration"
 },
 {
  "name": "fail-wrong-pin",
  "verdict": "fail",
  "note": "pinning an unrelated key must not bless the pack",
  "pin_required": true
 },
 {
  "name": "ok-chain-case-roots",
  "verdict": "ok",
  "note": "two members carry the SAME head at one size, spelled upper- and lower-case — one head, not a collision; every surface dedupes on the decoded root"
 },
 {
  "name": "ok-chain-quoted-bridge",
  "verdict": "ok",
  "note": "a member's signed extends.first spelled as a digit string — signed material is evaluated with JS-mirrored coercion, so the quoted hop is legal on every surface"
 },
 {
  "name": "ok-checkpoint-chain",
  "verdict": "ok",
  "note": "the pack embeds prior signed checkpoint heads — each verified under the issuer lineage so two exports can reconcile non-adjacent heads offline, hop-by-hop"
 },
 {
  "name": "ok-clean-bundle",
  "verdict": "ok",
  "note": "one visit, one key, media digests all present — the baseline"
 },
 {
  "name": "ok-decoy-successor-order",
  "verdict": "ok",
  "note": "a consented decoy successor listed FIRST in key_rotations.json — only the highest-sequence consented pivot (K_A->K_B) may inherit trust; a first-match-in-pool verifier would pick the attacker and fail this pack"
 },
 {
  "name": "ok-embedded-monitor-trail",
  "verdict": "ok",
  "note": "monitor_observation receipts embedded in the checkpoint doc — each verified under the issuer lineage and proven inside the signed head, so the watch trail travels with the pack"
 },
 {
  "name": "ok-float-leaf-index",
  "verdict": "ok",
  "note": "leaf_index spelled 5.0 — JSON keeps no int/float distinction, so Number.isInteger parity means every verifier accepts integral floats identically"
 },
 {
  "name": "ok-float-tree-size",
  "verdict": "ok",
  "note": "a properly SIGNED head claiming tree_size 5.0 — the signature verifies on the literal bytes, and Number.isInteger parity means integral floats verify identically everywhere"
 },
 {
  "name": "ok-forged-cosig-ignored",
  "verdict": "ok",
  "note": "a cosig attesting a DIFFERENT head (or one whose signature fails after the edit) counts as absent — the pack still verifies on its own proofs; auxiliary attestations report honestly, never gate"
 },
 {
  "name": "ok-grafted-revocation",
  "verdict": "ok",
  "note": "a self-signed key_revocation grafted into key_rotations.json is inert twice over — it can't join the signed trust walk, and foreign-signed receipts owe no log proof so the graft can't kill the pack either"
 },
 {
  "name": "ok-legacy-no-manifest",
  "verdict": "ok",
  "note": "a pre-pin pack still verifies — the manifest is optional when absent, mandatory when present"
 },
 {
  "name": "ok-redacted-media",
  "verdict": "ok",
  "note": "media bytes withheld by redaction; signed digests still verify"
 },
 {
  "name": "ok-revoked-case",
  "verdict": "ok",
  "note": "revocation annotates: records + the pivot receipt itself sit in the suspect window"
 },
 {
  "name": "ok-rotated-case",
  "verdict": "ok",
  "note": "case pack spanning a signed rotation — predecessor pin verifies both eras"
 },
 {
  "name": "ok-witness-anchored",
  "verdict": "ok",
  "note": "the witness's attestation is itself committed to the witness's own transparency log — the pack proves the cosignature was published, not just signed and handed over"
 },
 {
  "name": "ok-witness-cosigned",
  "verdict": "ok",
  "note": "an independent witness's counter-signature rides the checkpoint doc — verified under its own key, reported as an auxiliary attestation, never a gate"
 }
]
