{
  "tool_id": "art-492-classify-settlement-finality",
  "note": "Vectors computed directly from the shipped kernel. Each settlement model is exercised on its own ladder; the ladders are never merged.",
  "vectors": [
    {
      "name": "optimistic-window-open-false-final-claim",
      "description": "Optimistic challenge model with the window still open while a counterparty asserts final. Exercises challengeable, the FALSE_FINALITY_CLAIM flag and the below-cutoff escalation.",
      "policy_parameters": {
        "settlement_model": "optimistic_challenge",
        "as_of_ts": 1753000000,
        "assertion_created_at": 1752800000,
        "challenge_window_seconds": 604800,
        "batch_posted": true,
        "required_tier": "final",
        "claimed_tier": "final",
        "chain_label": "example optimistic rollup"
      },
      "output_payload": {
        "settlement_model": "optimistic_challenge",
        "finality_tier": "challengeable",
        "tier_rank": 2,
        "tier_ladder": [
          "soft",
          "posted",
          "challengeable",
          "final"
        ],
        "earliest_final_at": 1753404800,
        "reorg_exposure": "low",
        "required_tier": "final",
        "meets_required_tier": false,
        "claimed_tier": "final",
        "claim_verdict": "claim_overstated",
        "chain_label": "example optimistic rollup",
        "as_of_ts": 1753000000,
        "draft_pinned": false,
        "rationale": [
          "The challenge window is still open until 1753404800. Settlement inside an open window is optimistic, not final.",
          "A counterparty asserted final while the evaluated position is challengeable. The claim is overstated."
        ]
      },
      "compliance_flags": [
        "FINALITY_CLASSIFIED",
        "FINALITY_BELOW_CUTOFF",
        "ESCALATION_RAISED",
        "FALSE_FINALITY_CLAIM"
      ],
      "golden_hash": "392c4635561196d9803397f7afefa6dc15b461cfc35dd8780b433eaf29aee7bd"
    },
    {
      "name": "validity-proven-unfinalized",
      "description": "Validity proof accepted but the settlement-layer block is not yet finalised. Exercises the proven_unfinalized tier that a three-state model cannot express.",
      "policy_parameters": {
        "settlement_model": "validity_proof",
        "as_of_ts": 1753000000,
        "batch_committed_at": 1752999000,
        "proof_submitted_at": 1752999400,
        "proof_accepted": true,
        "l1_finalized": false,
        "l1_finality_seconds": 768,
        "required_tier": "final",
        "chain_label": "example validity rollup"
      },
      "output_payload": {
        "settlement_model": "validity_proof",
        "finality_tier": "proven_unfinalized",
        "tier_rank": 2,
        "tier_ladder": [
          "soft",
          "committed",
          "proven_unfinalized",
          "final"
        ],
        "earliest_final_at": 1753000168,
        "reorg_exposure": "low",
        "required_tier": "final",
        "meets_required_tier": false,
        "claimed_tier": null,
        "claim_verdict": "no_claim",
        "chain_label": "example validity rollup",
        "as_of_ts": 1753000000,
        "draft_pinned": false,
        "rationale": [
          "The validity proof is accepted but the settlement-layer block carrying it is not finalised. State correctness is established and settlement-layer finality is not. These are two separate gates and both are required."
        ]
      },
      "compliance_flags": [
        "FINALITY_CLASSIFIED",
        "FINALITY_BELOW_CUTOFF",
        "ESCALATION_RAISED"
      ],
      "golden_hash": "0a9c7ab62ae658f05da72eeadc2996b3c7c42b49d11de160307b6dcedac3bd33"
    },
    {
      "name": "validity-committed-awaiting-proof",
      "description": "Data committed to the settlement layer with no accepted proof, with a stated proof cadence driving the projection only.",
      "policy_parameters": {
        "settlement_model": "validity_proof",
        "as_of_ts": 1753000000,
        "batch_committed_at": 1752999000,
        "proof_accepted": false,
        "l1_finalized": false,
        "l1_finality_seconds": 768,
        "expected_proof_cadence_seconds": 3600,
        "required_tier": "proven_unfinalized"
      },
      "output_payload": {
        "settlement_model": "validity_proof",
        "finality_tier": "committed",
        "tier_rank": 1,
        "tier_ladder": [
          "soft",
          "committed",
          "proven_unfinalized",
          "final"
        ],
        "earliest_final_at": null,
        "reorg_exposure": "high",
        "required_tier": "proven_unfinalized",
        "meets_required_tier": false,
        "claimed_tier": null,
        "claim_verdict": "no_claim",
        "chain_label": null,
        "as_of_ts": 1753000000,
        "draft_pinned": false,
        "rationale": [
          "Data is committed to the settlement layer but no validity proof has been accepted, so state correctness is not yet established.",
          "At the stated proof cadence of 3600 seconds, a proof would be expected within that interval of the commitment. This is a projection, not a guarantee."
        ]
      },
      "compliance_flags": [
        "FINALITY_CLASSIFIED",
        "FINALITY_BELOW_CUTOFF",
        "ESCALATION_RAISED"
      ],
      "golden_hash": "5669475427c95fd2ef29f406c30cfdfcdbe811e0882f28378bf642dfef34a788"
    },
    {
      "name": "bft-final-risk-relocated",
      "description": "Single-slot BFT chain, included and quorum committed. Exercises the two-rung ladder, zero reorg exposure and the FINALITY_RISK_MOVED_OFFCHAIN flag.",
      "policy_parameters": {
        "settlement_model": "single_slot_bft",
        "as_of_ts": 1753000000,
        "included_in_block": true,
        "quorum_committed": true,
        "quorum_pct_of_stake": 82,
        "required_tier": "final",
        "claimed_tier": "final",
        "chain_label": "example bft chain"
      },
      "output_payload": {
        "settlement_model": "single_slot_bft",
        "finality_tier": "final",
        "tier_rank": 1,
        "tier_ladder": [
          "soft",
          "final"
        ],
        "earliest_final_at": null,
        "reorg_exposure": "none",
        "required_tier": "final",
        "meets_required_tier": true,
        "claimed_tier": "final",
        "claim_verdict": "claim_supported",
        "chain_label": "example bft chain",
        "as_of_ts": 1753000000,
        "draft_pinned": false,
        "rationale": [
          "The transaction is included and a quorum has committed, so the block is final on this chain. There is no challenge window and no reorg tier.",
          "Declared quorum stake share: 82 percent.",
          "Sub-second consensus finality removes reorg exposure. It does not remove settlement risk, it relocates it to cross-chain message trust and to validator-set governance, neither of which this classification covers."
        ]
      },
      "compliance_flags": [
        "FINALITY_CLASSIFIED",
        "FINALITY_RISK_MOVED_OFFCHAIN",
        "FINALITY_MEETS_CUTOFF"
      ],
      "golden_hash": "d8d062f1fbb57f9b59b2dd6a92ffa4900fecea80c50793e3ffef2cdb855ff85d"
    },
    {
      "name": "empty-input-defaults",
      "description": "Empty policy parameters. Exercises the finite gate and the model default: every numeric output stays finite and a defined tier is returned.",
      "policy_parameters": {},
      "output_payload": {
        "settlement_model": "optimistic_challenge",
        "finality_tier": "soft",
        "tier_rank": 0,
        "tier_ladder": [
          "soft",
          "posted",
          "challengeable",
          "final"
        ],
        "earliest_final_at": null,
        "reorg_exposure": "high",
        "required_tier": "final",
        "meets_required_tier": false,
        "claimed_tier": null,
        "claim_verdict": "no_claim",
        "chain_label": null,
        "as_of_ts": 0,
        "draft_pinned": true,
        "rationale": [
          "No recognised settlement_model was supplied, so the optimistic challenge model was assumed. Supply settlement_model to remove this assumption.",
          "No challenge_window_seconds was supplied, so a 604800 second window was assumed. The real window is a property of the deployment and should be supplied.",
          "The batch has not been posted to the settlement layer, so the position is a sequencer promise only.",
          "No required_tier valid for this model was supplied, so the top tier of the model ladder was applied as the cutoff."
        ]
      },
      "compliance_flags": [
        "FINALITY_CLASSIFIED",
        "FINALITY_MODEL_DEFAULTED",
        "FINALITY_BELOW_CUTOFF",
        "ESCALATION_RAISED"
      ],
      "golden_hash": "fe5f8b57c083a8b01526af8a974609c6df839d7c330a3b0a79f0067cdfde2935"
    }
  ]
}
