[ { "name": "c5-ungranted-l4-denied-even-when-it-would-close", "stages": [ { "tier": "l1", "closes": false }, { "tier": "l4", "closes": true } ], "granted_actions": ["l0", "l1", "l2", "l3"], "budget_uj": 1000000000000, "runs": 1, "expected": { "closing_tiers": [null], "spent_uj": 10, "verdicts": ["allow", "deny"], "deny_reasons": ["action-not-granted"] } }, { "name": "c5-granted-l4-closes-and-debits-its-class", "stages": [ { "tier": "l1", "closes": false }, { "tier": "l4", "closes": true } ], "granted_actions": ["l1", "l4"], "budget_uj": 20000000, "runs": 1, "expected": { "closing_tiers": ["l4"], "spent_uj": 10000010, "verdicts": ["allow", "allow"], "deny_reasons": [] } }, { "name": "c5-exhausted-budget-stops-the-escape-hatch-on-the-second-run", "stages": [ { "tier": "l1", "closes": false }, { "tier": "l4", "closes": true } ], "granted_actions": ["l1", "l4"], "budget_uj": 10000020, "runs": 2, "expected": { "closing_tiers": ["l4", null], "spent_uj": 10000020, "verdicts": ["allow", "allow", "allow", "deny"], "deny_reasons": ["budget-exceeded"] } }, { "name": "c5-earlier-close-means-later-tiers-are-never-consulted", "stages": [ { "tier": "l0", "closes": true }, { "tier": "l4", "closes": true } ], "granted_actions": ["l0", "l4"], "budget_uj": 20000000, "runs": 1, "expected": { "closing_tiers": ["l0"], "spent_uj": 1, "verdicts": ["allow"], "deny_reasons": [] } }, { "name": "c5-denied-probe-still-reaches-a-granted-deeper-tier", "stages": [ { "tier": "l2", "closes": false }, { "tier": "l3", "closes": true } ], "granted_actions": ["l3"], "budget_uj": 2000000, "runs": 1, "expected": { "closing_tiers": ["l3"], "spent_uj": 1000000, "verdicts": ["deny", "allow"], "deny_reasons": ["action-not-granted"] } }, { "name": "c5-repeated-cheap-closes-accumulate-exact-debits", "stages": [ { "tier": "l1", "closes": true } ], "granted_actions": ["l0", "l1"], "budget_uj": 1000, "runs": 3, "expected": { "closing_tiers": ["l1", "l1", "l1"], "spent_uj": 30, "verdicts": ["allow", "allow", "allow"], "deny_reasons": [] } } ]