{
  "note": "Every default chance is a round placeholder, not a measurement of any real system. Replace them with numbers from your own logs.",
  "notice": "Mock run. This describes the assumptions in one file, not reality. It is not a prediction, a test of any real system, a safety assessment or advice. Use at your own risk.",
  "terms": "https://simulation.md/terms",
  "packs": [
    {
      "id": "money",
      "name": "Moving money or anything you cannot take back",
      "when": "Refunds, payouts, purchases, sends, deletes.",
      "faults": [
        {
          "id": "ghost_success",
          "name": "timed out, but it worked",
          "what": "The call times out, yet the effect happened. The caller cannot tell.",
          "default_chance": 0.02,
          "for": [
            "write"
          ],
          "error": "timeout"
        },
        {
          "id": "timeout",
          "name": "timed out, nothing happened",
          "what": "The call times out and nothing changed.",
          "default_chance": 0.02,
          "for": [
            "write",
            "read",
            "model"
          ],
          "error": "timeout"
        },
        {
          "id": "rate_limited",
          "name": "rate limited",
          "what": "The service refuses the call for now.",
          "default_chance": 0.05,
          "for": [
            "write",
            "read",
            "model"
          ],
          "error": "rate_limited"
        },
        {
          "id": "duplicate_delivery",
          "name": "delivered twice",
          "what": "One call takes effect twice and reports one success.",
          "default_chance": 0.01,
          "for": [
            "write",
            "event"
          ],
          "error": null
        },
        {
          "id": "server_error",
          "name": "server error",
          "what": "The service fails fast and nothing changed.",
          "default_chance": 0.02,
          "for": [
            "write",
            "read"
          ],
          "error": "server_error"
        }
      ]
    },
    {
      "id": "writes",
      "name": "Writing to another system",
      "when": "Updates, bulk edits, migrations, deploys.",
      "faults": [
        {
          "id": "ghost_success",
          "name": "timed out, but it worked",
          "what": "The call times out, yet the effect happened. The caller cannot tell.",
          "default_chance": 0.02,
          "for": [
            "write"
          ],
          "error": "timeout"
        },
        {
          "id": "partial_write",
          "name": "only part of it applied",
          "what": "Half the effect lands, and the call reports an error.",
          "default_chance": 0.01,
          "for": [
            "write"
          ],
          "error": "partial"
        },
        {
          "id": "timeout",
          "name": "timed out, nothing happened",
          "what": "The call times out and nothing changed.",
          "default_chance": 0.02,
          "for": [
            "write",
            "read",
            "model"
          ],
          "error": "timeout"
        },
        {
          "id": "auth_expired",
          "name": "login expired",
          "what": "The credential ran out in the middle of the job.",
          "default_chance": 0.005,
          "for": [
            "write",
            "read"
          ],
          "error": "auth_expired"
        },
        {
          "id": "server_error",
          "name": "server error",
          "what": "The service fails fast and nothing changed.",
          "default_chance": 0.02,
          "for": [
            "write",
            "read"
          ],
          "error": "server_error"
        }
      ]
    },
    {
      "id": "reads",
      "name": "Reading before you act",
      "when": "Lookups, status checks, lists, searches.",
      "faults": [
        {
          "id": "stale_read",
          "name": "stale read",
          "what": "The read returns an older value with no warning.",
          "default_chance": 0.05,
          "for": [
            "read"
          ],
          "error": null
        },
        {
          "id": "partial_page",
          "name": "short page, no error",
          "what": "The list stops early and reports success.",
          "default_chance": 0.02,
          "for": [
            "read"
          ],
          "error": null
        },
        {
          "id": "missing_field",
          "name": "a field is missing",
          "what": "The response comes back with an expected field empty.",
          "default_chance": 0.01,
          "for": [
            "read"
          ],
          "error": null
        },
        {
          "id": "timeout",
          "name": "timed out, nothing happened",
          "what": "The call times out and nothing changed.",
          "default_chance": 0.02,
          "for": [
            "write",
            "read",
            "model"
          ],
          "error": "timeout"
        },
        {
          "id": "rate_limited",
          "name": "rate limited",
          "what": "The service refuses the call for now.",
          "default_chance": 0.05,
          "for": [
            "write",
            "read",
            "model"
          ],
          "error": "rate_limited"
        }
      ]
    },
    {
      "id": "events",
      "name": "Events arriving late or twice",
      "when": "Webhooks, queues, callbacks.",
      "faults": [
        {
          "id": "duplicate_delivery",
          "name": "delivered twice",
          "what": "One call takes effect twice and reports one success.",
          "default_chance": 0.01,
          "for": [
            "write",
            "event"
          ],
          "error": null
        },
        {
          "id": "late_delivery",
          "name": "arrived much later",
          "what": "The result arrives long after it was expected, so later work may overtake it.",
          "default_chance": 0.03,
          "for": [
            "event",
            "write"
          ],
          "error": null
        }
      ]
    },
    {
      "id": "approvals",
      "name": "Waiting on a person",
      "when": "Sign-offs, confirmations, escalations.",
      "faults": [
        {
          "id": "slow_approval",
          "name": "approval takes hours",
          "what": "The person answers, much later.",
          "default_chance": 0.2,
          "for": [
            "approval"
          ],
          "error": null
        },
        {
          "id": "approval_denied",
          "name": "approval refused",
          "what": "The person says no.",
          "default_chance": 0.1,
          "for": [
            "approval"
          ],
          "error": "denied"
        },
        {
          "id": "no_answer",
          "name": "nobody answers",
          "what": "The person never replies before the deadline.",
          "default_chance": 0.05,
          "for": [
            "approval"
          ],
          "error": "no_answer"
        }
      ]
    },
    {
      "id": "content",
      "name": "Text from someone else",
      "when": "Email, documents, tickets, web pages, tool output.",
      "faults": [
        {
          "id": "planted_instruction",
          "name": "text tries to instruct the agent",
          "what": "Content the agent reads contains an instruction written by someone else.",
          "default_chance": 0.05,
          "for": [
            "read"
          ],
          "error": null
        },
        {
          "id": "missing_field",
          "name": "a field is missing",
          "what": "The response comes back with an expected field empty.",
          "default_chance": 0.01,
          "for": [
            "read"
          ],
          "error": null
        }
      ]
    },
    {
      "id": "model_api",
      "name": "Calling a model",
      "when": "Fan-outs, batch jobs, long runs.",
      "faults": [
        {
          "id": "rate_limited",
          "name": "rate limited",
          "what": "The service refuses the call for now.",
          "default_chance": 0.05,
          "for": [
            "write",
            "read",
            "model"
          ],
          "error": "rate_limited"
        },
        {
          "id": "billed_timeout",
          "name": "timed out, still billed",
          "what": "The model call times out and is charged anyway.",
          "default_chance": 0.02,
          "for": [
            "model"
          ],
          "error": "timeout"
        },
        {
          "id": "truncated_output",
          "name": "output cut off, still billed",
          "what": "The model stops early. The call looks fine and the work is incomplete.",
          "default_chance": 0.02,
          "for": [
            "model"
          ],
          "error": "truncated"
        }
      ]
    }
  ],
  "faults": [
    {
      "id": "ghost_success",
      "name": "timed out, but it worked",
      "what": "The call times out, yet the effect happened. The caller cannot tell.",
      "default_chance": 0.02,
      "for": [
        "write"
      ]
    },
    {
      "id": "timeout",
      "name": "timed out, nothing happened",
      "what": "The call times out and nothing changed.",
      "default_chance": 0.02,
      "for": [
        "write",
        "read",
        "model"
      ]
    },
    {
      "id": "rate_limited",
      "name": "rate limited",
      "what": "The service refuses the call for now.",
      "default_chance": 0.05,
      "for": [
        "write",
        "read",
        "model"
      ]
    },
    {
      "id": "server_error",
      "name": "server error",
      "what": "The service fails fast and nothing changed.",
      "default_chance": 0.02,
      "for": [
        "write",
        "read"
      ]
    },
    {
      "id": "auth_expired",
      "name": "login expired",
      "what": "The credential ran out in the middle of the job.",
      "default_chance": 0.005,
      "for": [
        "write",
        "read"
      ]
    },
    {
      "id": "duplicate_delivery",
      "name": "delivered twice",
      "what": "One call takes effect twice and reports one success.",
      "default_chance": 0.01,
      "for": [
        "write",
        "event"
      ]
    },
    {
      "id": "partial_write",
      "name": "only part of it applied",
      "what": "Half the effect lands, and the call reports an error.",
      "default_chance": 0.01,
      "for": [
        "write"
      ]
    },
    {
      "id": "late_delivery",
      "name": "arrived much later",
      "what": "The result arrives long after it was expected, so later work may overtake it.",
      "default_chance": 0.03,
      "for": [
        "event",
        "write"
      ]
    },
    {
      "id": "key_expired",
      "name": "idempotency key no longer honored",
      "what": "The service forgot the key, so a repeat applies again.",
      "default_chance": 0.001,
      "for": [
        "keyed"
      ]
    },
    {
      "id": "stale_read",
      "name": "stale read",
      "what": "The read returns an older value with no warning.",
      "default_chance": 0.05,
      "for": [
        "read"
      ]
    },
    {
      "id": "partial_page",
      "name": "short page, no error",
      "what": "The list stops early and reports success.",
      "default_chance": 0.02,
      "for": [
        "read"
      ]
    },
    {
      "id": "missing_field",
      "name": "a field is missing",
      "what": "The response comes back with an expected field empty.",
      "default_chance": 0.01,
      "for": [
        "read"
      ]
    },
    {
      "id": "planted_instruction",
      "name": "text tries to instruct the agent",
      "what": "Content the agent reads contains an instruction written by someone else.",
      "default_chance": 0.05,
      "for": [
        "read"
      ]
    },
    {
      "id": "slow_approval",
      "name": "approval takes hours",
      "what": "The person answers, much later.",
      "default_chance": 0.2,
      "for": [
        "approval"
      ]
    },
    {
      "id": "approval_denied",
      "name": "approval refused",
      "what": "The person says no.",
      "default_chance": 0.1,
      "for": [
        "approval"
      ]
    },
    {
      "id": "no_answer",
      "name": "nobody answers",
      "what": "The person never replies before the deadline.",
      "default_chance": 0.05,
      "for": [
        "approval"
      ]
    },
    {
      "id": "billed_timeout",
      "name": "timed out, still billed",
      "what": "The model call times out and is charged anyway.",
      "default_chance": 0.02,
      "for": [
        "model"
      ]
    },
    {
      "id": "truncated_output",
      "name": "output cut off, still billed",
      "what": "The model stops early. The call looks fine and the work is incomplete.",
      "default_chance": 0.02,
      "for": [
        "model"
      ]
    }
  ]
}
