{
  "tool_id": "art-620-summa-mst-inclusion-checker",
  "note": "golden_hash values computed via buildArtifact()'s executionHash() at build time (SUMMA-MST-K-1). The 2-leaf tree (leaf A id=aa11 balance=100, sibling leaf B id=bb22 balance=200, sibling on the right) was constructed by running the kernel's own compute() with an empty path against each leaf independently to obtain leaf A/B's {hash,sum}, then combining per spec §2 (side='right' means sibling B sits on the right of the path, so hash = H(sum, current, sibling)). Root: hash=5d967f108c4cc8e9ea17607ac5d0454655967e2657ad77cefc295903e0aae551, sum=300. Vectors below exercise: the happy path, each of the spec §3 hazard rejections (negative leaf, negative sibling, over-MAX_BALANCE), the two independent-derivation mismatches (hash-only and sum-only, proving neither check alone is sufficient — spec §3 item3), and a malformed-path-step rejection.",
  "vectors": [
    {
      "name": "verified-2-leaf-inclusion",
      "policy_parameters": {
        "root": { "hash": "5d967f108c4cc8e9ea17607ac5d0454655967e2657ad77cefc295903e0aae551", "sum": "300" },
        "max_balance": "1000000000000000000",
        "proof": {
          "leaf": { "id": "aa11", "balance": "100" },
          "path": [ { "side": "right", "sibling_hash": "3a0a2ec5cce1770bde00fe2db329d42aaa99b8ee041692a8e40a897586ad1f0b", "sibling_sum": "200" } ]
        }
      },
      "output_payload": {
        "verdict": "VERIFIED",
        "reason": null,
        "computed_root": { "hash": "5d967f108c4cc8e9ea17607ac5d0454655967e2657ad77cefc295903e0aae551", "sum": "300" },
        "declared_root": { "hash": "5d967f108c4cc8e9ea17607ac5d0454655967e2657ad77cefc295903e0aae551", "sum": "300" },
        "leaf": { "id": "aa11", "balance": "100" },
        "path_length": 1,
        "max_balance_used": "1000000000000000000",
        "residual_limitation_note": "This checks inclusion and local range-consistency of the ONE leaf and its proof path only. It does not and cannot prove every other leaf in the tree obeyed the same range check — only the tree operator's own construction process (or a full ZK proof over the whole tree, which this tool does not implement) can guarantee that globally. This is never a statement that the reserve is solvent.",
        "verify_only_note": "Verify-only: this tool reports \"this leaf's inclusion in the published tree is verified\" or \"verification failed: <reason>\" — never \"reserves are sufficient\", \"solvent\", or an audit opinion."
      },
      "golden_hash": "4b681c97e065c330a3982dd9999eb786f334d957916ef7f3dc6644ca81dd1a7e"
    },
    {
      "name": "hash-mismatch-tampered-root-hash",
      "policy_parameters": {
        "root": { "hash": "deadbeef", "sum": "300" },
        "max_balance": "1000000000000000000",
        "proof": {
          "leaf": { "id": "aa11", "balance": "100" },
          "path": [ { "side": "right", "sibling_hash": "3a0a2ec5cce1770bde00fe2db329d42aaa99b8ee041692a8e40a897586ad1f0b", "sibling_sum": "200" } ]
        }
      },
      "output_payload": {
        "verdict": "NOT_VERIFIED",
        "reason": "hash_mismatch",
        "computed_root": { "hash": "5d967f108c4cc8e9ea17607ac5d0454655967e2657ad77cefc295903e0aae551", "sum": "300" },
        "declared_root": { "hash": "deadbeef", "sum": "300" },
        "leaf": { "id": "aa11", "balance": "100" },
        "path_length": 1,
        "max_balance_used": "1000000000000000000",
        "residual_limitation_note": "This checks inclusion and local range-consistency of the ONE leaf and its proof path only. It does not and cannot prove every other leaf in the tree obeyed the same range check — only the tree operator's own construction process (or a full ZK proof over the whole tree, which this tool does not implement) can guarantee that globally. This is never a statement that the reserve is solvent.",
        "verify_only_note": "Verify-only: this tool reports \"this leaf's inclusion in the published tree is verified\" or \"verification failed: <reason>\" — never \"reserves are sufficient\", \"solvent\", or an audit opinion."
      },
      "golden_hash": "5582d3e06b38f493c7c4deb3120bb6ba3c0fa754b5335620fd04a18e5f3fd4d4"
    },
    {
      "name": "sum-mismatch-tampered-root-sum",
      "policy_parameters": {
        "root": { "hash": "5d967f108c4cc8e9ea17607ac5d0454655967e2657ad77cefc295903e0aae551", "sum": "301" },
        "max_balance": "1000000000000000000",
        "proof": {
          "leaf": { "id": "aa11", "balance": "100" },
          "path": [ { "side": "right", "sibling_hash": "3a0a2ec5cce1770bde00fe2db329d42aaa99b8ee041692a8e40a897586ad1f0b", "sibling_sum": "200" } ]
        }
      },
      "output_payload": {
        "verdict": "NOT_VERIFIED",
        "reason": "sum_mismatch",
        "computed_root": { "hash": "5d967f108c4cc8e9ea17607ac5d0454655967e2657ad77cefc295903e0aae551", "sum": "300" },
        "declared_root": { "hash": "5d967f108c4cc8e9ea17607ac5d0454655967e2657ad77cefc295903e0aae551", "sum": "301" },
        "leaf": { "id": "aa11", "balance": "100" },
        "path_length": 1,
        "max_balance_used": "1000000000000000000",
        "residual_limitation_note": "This checks inclusion and local range-consistency of the ONE leaf and its proof path only. It does not and cannot prove every other leaf in the tree obeyed the same range check — only the tree operator's own construction process (or a full ZK proof over the whole tree, which this tool does not implement) can guarantee that globally. This is never a statement that the reserve is solvent.",
        "verify_only_note": "Verify-only: this tool reports \"this leaf's inclusion in the published tree is verified\" or \"verification failed: <reason>\" — never \"reserves are sufficient\", \"solvent\", or an audit opinion."
      },
      "golden_hash": "76ad5a006161870b52760730bc5f7bef1230fd5cc1fcbed2683860ae8a49484e"
    },
    {
      "name": "hazard-negative-sibling-sum-rejected",
      "policy_parameters": {
        "root": { "hash": "5d967f108c4cc8e9ea17607ac5d0454655967e2657ad77cefc295903e0aae551", "sum": "300" },
        "max_balance": "1000000000000000000",
        "proof": {
          "leaf": { "id": "aa11", "balance": "100" },
          "path": [ { "side": "right", "sibling_hash": "3a0a2ec5cce1770bde00fe2db329d42aaa99b8ee041692a8e40a897586ad1f0b", "sibling_sum": "-200" } ]
        }
      },
      "output_payload": {
        "verdict": "NOT_VERIFIED",
        "reason": "negative_balance_at_path_index_1",
        "computed_root": null,
        "declared_root": { "hash": "5d967f108c4cc8e9ea17607ac5d0454655967e2657ad77cefc295903e0aae551", "sum": "300" },
        "leaf": { "id": "aa11", "balance": "100" },
        "path_length": 1,
        "max_balance_used": "1000000000000000000",
        "residual_limitation_note": "This checks inclusion and local range-consistency of the ONE leaf and its proof path only. It does not and cannot prove every other leaf in the tree obeyed the same range check — only the tree operator's own construction process (or a full ZK proof over the whole tree, which this tool does not implement) can guarantee that globally. This is never a statement that the reserve is solvent.",
        "verify_only_note": "Verify-only: this tool reports \"this leaf's inclusion in the published tree is verified\" or \"verification failed: <reason>\" — never \"reserves are sufficient\", \"solvent\", or an audit opinion."
      },
      "golden_hash": "a8e64472baac302fc2246b7201ef54a3fa85116f028b5756d5fbc10d9c3af22c"
    },
    {
      "name": "hazard-negative-leaf-balance-rejected",
      "policy_parameters": {
        "root": { "hash": "5d967f108c4cc8e9ea17607ac5d0454655967e2657ad77cefc295903e0aae551", "sum": "300" },
        "max_balance": "1000000000000000000",
        "proof": {
          "leaf": { "id": "aa11", "balance": "-100" },
          "path": [ { "side": "right", "sibling_hash": "3a0a2ec5cce1770bde00fe2db329d42aaa99b8ee041692a8e40a897586ad1f0b", "sibling_sum": "200" } ]
        }
      },
      "output_payload": {
        "verdict": "NOT_VERIFIED",
        "reason": "negative_balance_at_path_index_0",
        "computed_root": null,
        "declared_root": { "hash": "5d967f108c4cc8e9ea17607ac5d0454655967e2657ad77cefc295903e0aae551", "sum": "300" },
        "leaf": { "id": "aa11", "balance": "-100" },
        "path_length": 1,
        "max_balance_used": "1000000000000000000",
        "residual_limitation_note": "This checks inclusion and local range-consistency of the ONE leaf and its proof path only. It does not and cannot prove every other leaf in the tree obeyed the same range check — only the tree operator's own construction process (or a full ZK proof over the whole tree, which this tool does not implement) can guarantee that globally. This is never a statement that the reserve is solvent.",
        "verify_only_note": "Verify-only: this tool reports \"this leaf's inclusion in the published tree is verified\" or \"verification failed: <reason>\" — never \"reserves are sufficient\", \"solvent\", or an audit opinion."
      },
      "golden_hash": "a47af1ad60319aeffbbf59794b3b3d5c1b98bcd79de7dca9b40ee969594fa3f1"
    },
    {
      "name": "hazard-over-max-balance-rejected",
      "policy_parameters": {
        "root": { "hash": "5d967f108c4cc8e9ea17607ac5d0454655967e2657ad77cefc295903e0aae551", "sum": "300" },
        "max_balance": "150",
        "proof": {
          "leaf": { "id": "aa11", "balance": "100" },
          "path": [ { "side": "right", "sibling_hash": "3a0a2ec5cce1770bde00fe2db329d42aaa99b8ee041692a8e40a897586ad1f0b", "sibling_sum": "200" } ]
        }
      },
      "output_payload": {
        "verdict": "NOT_VERIFIED",
        "reason": "balance_exceeds_max_balance_at_path_index_1",
        "computed_root": null,
        "declared_root": { "hash": "5d967f108c4cc8e9ea17607ac5d0454655967e2657ad77cefc295903e0aae551", "sum": "300" },
        "leaf": { "id": "aa11", "balance": "100" },
        "path_length": 1,
        "max_balance_used": "150",
        "residual_limitation_note": "This checks inclusion and local range-consistency of the ONE leaf and its proof path only. It does not and cannot prove every other leaf in the tree obeyed the same range check — only the tree operator's own construction process (or a full ZK proof over the whole tree, which this tool does not implement) can guarantee that globally. This is never a statement that the reserve is solvent.",
        "verify_only_note": "Verify-only: this tool reports \"this leaf's inclusion in the published tree is verified\" or \"verification failed: <reason>\" — never \"reserves are sufficient\", \"solvent\", or an audit opinion."
      },
      "golden_hash": "4ddfc40a49cee6f0cb8ae4d2dbc490fe1d1d5ce28fc76975c0b9122e09f52c97"
    },
    {
      "name": "malformed-path-step-bad-side",
      "policy_parameters": {
        "root": { "hash": "5d967f108c4cc8e9ea17607ac5d0454655967e2657ad77cefc295903e0aae551", "sum": "300" },
        "max_balance": "1000000000000000000",
        "proof": {
          "leaf": { "id": "aa11", "balance": "100" },
          "path": [ { "side": "up", "sibling_hash": "3a0a2ec5cce1770bde00fe2db329d42aaa99b8ee041692a8e40a897586ad1f0b", "sibling_sum": "200" } ]
        }
      },
      "output_payload": {
        "verdict": "NOT_VERIFIED",
        "reason": "malformed_proof: path step missing a valid side (left|right)",
        "computed_root": null,
        "declared_root": { "hash": "5d967f108c4cc8e9ea17607ac5d0454655967e2657ad77cefc295903e0aae551", "sum": "300" },
        "leaf": { "id": "aa11", "balance": "100" },
        "path_length": 1,
        "max_balance_used": "1000000000000000000",
        "residual_limitation_note": "This checks inclusion and local range-consistency of the ONE leaf and its proof path only. It does not and cannot prove every other leaf in the tree obeyed the same range check — only the tree operator's own construction process (or a full ZK proof over the whole tree, which this tool does not implement) can guarantee that globally. This is never a statement that the reserve is solvent.",
        "verify_only_note": "Verify-only: this tool reports \"this leaf's inclusion in the published tree is verified\" or \"verification failed: <reason>\" — never \"reserves are sufficient\", \"solvent\", or an audit opinion."
      },
      "golden_hash": "aba798a60fbd5e0ee32ecf7a50fc37ccc44af78cb0eeea45c1ccd02589ee388d"
    }
  ]
}
