{
  "version": 1,
  "seed": 42,
  "run": {
    "deadline_ms": 30000,
    "maximum_model_turns": 8,
    "maximum_tool_attempts": 3
  },
  "tools": {
    "wallet.debit": {
      "idempotency_key_field": "operation_key",
      "reconciliation_tool": "operation.lookup"
    },
    "notification.enqueue": {
      "idempotency_key_field": "event_id",
      "delivery": "at_least_once"
    }
  },
  "faults": [
    {
      "id": "crash-after-debit",
      "match": {
        "phase": "tool.after_effect_before_result",
        "tool": "wallet.debit",
        "attempt": 1
      },
      "action": {
        "type": "crash"
      }
    },
    {
      "id": "duplicate-notification",
      "match": {
        "phase": "outbox.after_publish_before_ack",
        "tool": "notification.enqueue",
        "attempt": 1
      },
      "action": {
        "type": "duplicate_delivery",
        "count": 2
      }
    }
  ],
  "assertions": [
    {
      "name": "one-debit-effect",
      "expression": "business_effects.wallet_debit == 1"
    },
    {
      "name": "retry-occurred",
      "expression": "attempts.wallet_debit >= 2"
    },
    {
      "name": "no-unresolved-required-calls",
      "expression": "required_calls.unknown == 0"
    }
  ]
}
