{
  "ask": null,
  "bundle_version": "quox.journey.bundle/1",
  "checks": [
    {
      "check": "count the configured budgets (end-state: the budget list returns records)",
      "detail": "used spend_status; end-state shows scope_kind; says 1",
      "ok": true
    },
    {
      "check": "name the scope the main budget covers",
      "detail": "used spend_status; end-state shows scope_kind; says iteration",
      "ok": true
    },
    {
      "check": "the answer names the iteration cap AND states whether a run is hard-stopped exactly as the record says (hard_stop)",
      "detail": "used spend_status; end-state shows max_iterations; says 10000; states false: says only warns",
      "ok": true
    },
    {
      "check": "no tool /^Bash$/",
      "detail": "no /^Bash$/",
      "ok": true
    },
    {
      "check": "never: I created a budget / I changed your budget / unlimited / no limit",
      "detail": "clean",
      "ok": true
    }
  ],
  "checks_hash": {
    "case_checks": "[[{\"intent\":\"count the configured budgets (end-state: the budget list returns records)\",\"tool\":\"budget|spend\",\"after\":{\"truth\":[\"budget\",\"list\"],\"contains\":\"scope_kind\"},\"says_any\":[\"{{length}}\"]},{\"intent\":\"name the scope the main budget covers\",\"tool\":\"budget|spend\",\"after\":{\"truth\":[\"budget\",\"list\"],\"contains\":\"scope_kind\"},\"says_any\":[\"{{[0].scope_kind}}\"]},{\"intent\":\"the answer names the iteration cap AND states whether a run is hard-stopped exactly as the record says (hard_stop)\",\"tool\":\"^spend_status$\",\"after\":{\"truth\":[\"budget\",\"list\"],\"contains\":\"max_iterations\"},\"says_any\":[\"{{[0].max_iterations}}\"],\"says_when\":{\"value\":\"{{[0].hard_stop}}\",\"cases\":{\"true\":[\"will stop the run\",\"stops the run\",\"halts the run\",\"hard stop: yes\",\"hard_stop is true\",\"is a hard stop\"],\"false\":[\"only warns\",\"just warns\",\"won't stop\",\"will not stop\",\"does not stop\",\"doesn't stop\",\"hard stop: no\",\"hard_stop is false\",\"not a hard stop\",\"nothing halts it\",\"nothing stops it\"]}}}],[{\"no_tool\":\"^Bash$\"},{\"not_says\":[\"I created a budget\",\"I changed your budget\",\"unlimited\",\"no limit\"]}]]",
    "recipe": "sha256(JSON.stringify([case.steps, case.checks])) as lowercase hex, first 12 characters. case_checks below holds exactly that JSON text.",
    "value": "3f49c6a7633e"
  },
  "engine_status": "OBSERVED",
  "evidence_id": "ev_mw3jpob4_0485a8",
  "excluded": [
    "raw receipts and tool results",
    "the account, user, org and profile the run used",
    "the target URL, host and TLS details of the install",
    "token usage and cost",
    "conversation and turn ids",
    "every read-back field not on the allowlist (ids, org ids, timestamps, page bodies, search-console numbers)"
  ],
  "links": {
    "bundle": "https://quox.ai/evidence/bundles/ev_mw3jpob4_0485a8.json",
    "index": "https://quox.ai/evidence/bundles/index.json",
    "journey": "https://quox.ai/cli/journeys/journey-spend-control-ai-cost/",
    "receipt": "https://quox.ai/evidence/bundles/index.receipt.json",
    "run": "https://quox.ai/evidence/runs/ev_mw3jpob4_0485a8",
    "verifier": "https://quox.ai/evidence/bundles/verify-journey-bundle.mjs"
  },
  "readback": {
    "note": "The CLI read-back each step was judged against, reduced to an allowlist of fields with internal names replaced by their role.",
    "steps": [
      {
        "fields": [
          {
            "hard_stop": false,
            "max_iterations": 10000,
            "scope_kind": "iteration"
          }
        ],
        "step": 0
      },
      {
        "fields": [
          {
            "hard_stop": false,
            "max_iterations": 10000,
            "scope_kind": "iteration"
          }
        ],
        "step": 1
      },
      {
        "fields": [
          {
            "hard_stop": false,
            "max_iterations": 10000,
            "scope_kind": "iteration"
          }
        ],
        "step": 2
      }
    ]
  },
  "run": {
    "actor_type": "human",
    "approvals": 0,
    "build": {
      "commit": "87f0bc045",
      "release": "4.2.2"
    },
    "case": "journey-spend-control-ai-cost",
    "checks_hash": "3f49c6a7633e",
    "domain": "journeys",
    "id": "ev_mw3jpob4_0485a8",
    "instance": "dev",
    "judged_by": "proof-engine",
    "model": "claude-sonnet-5-5",
    "order_ok": true,
    "pass_steps": 3,
    "provider": "anthropic",
    "revisions": {
      "engine_rev": "37aff5fc4",
      "suite_rev": "37aff5fc4"
    },
    "run_id": "run_mw3jovqe_0652af90e3a3",
    "suite_kind": "journey",
    "suite_version": 1,
    "total_steps": 3,
    "ts": "2026-11-05T12:52:59.407Z",
    "turn_ms": 23084,
    "verdict": "pass",
    "via": "chat",
    "why": "all 3 steps ok, in order, 2 guards clean"
  },
  "steps": [
    {
      "afterOk": true,
      "detail": "used spend_status; end-state shows scope_kind; says 1",
      "idx": 0,
      "intent": "count the configured budgets (end-state: the budget list returns records)",
      "ok": true,
      "saysOk": true,
      "toolOk": true
    },
    {
      "afterOk": true,
      "detail": "used spend_status; end-state shows scope_kind; says iteration",
      "idx": 1,
      "intent": "name the scope the main budget covers",
      "ok": true,
      "saysOk": true,
      "toolOk": true
    },
    {
      "afterOk": true,
      "detail": "used spend_status; end-state shows max_iterations; says 10000; states false: says only warns",
      "idx": 2,
      "intent": "the answer names the iteration cap AND states whether a run is hard-stopped exactly as the record says (hard_stop)",
      "ok": true,
      "saysOk": true,
      "toolOk": true
    }
  ],
  "title": "Spend control: does my AI budget actually stop a run",
  "tools": [
    {
      "status": "ok",
      "tool": "spend_status"
    }
  ]
}
