# BUDGET_EXCEEDED

A per-request complexity budget was exceeded before any solving started. HTTP 413. Split the ruleset or the claim dictionary.

The request is larger than one call may be. It was refused **before** any solver work started, so an oversized ruleset costs a structured 413 rather than a tied-up worker.

## The envelope

```json
{"ok": false,
 "error": {"code": "BUDGET_EXCEEDED",
           "message": "source_bytes budget exceeded: limit 65536, submitted 91204",
           "docs": "https://docs.agents.jaxon.ai/errors/budget-exceeded.md",
           "budget": "source_bytes", "limit": 65536, "actual": 91204},
 "versions": {"...": "..."}}
```

`budget` names which limit — source size, declaration count, assertion count,
claim count, or nesting depth — and `limit` and `actual` say by how much.

## The fix

- **Split the policy.** One ruleset per policy area compiles, reviews and
  approves more cleanly than one ruleset for everything. A person signing off
  on forty assertions is signing off on nothing.
- **Remove what the check does not need.** Prose belongs in `@ask` and
  `@context` annotations, briefly; the ruleset is not the place for the policy's
  preamble.
- **Trim the claim dictionary** to the declared claims. Extra keys are refused
  by validation anyway.

The budgets are not client-tunable. If a legitimately sized ruleset trips one,
that is a finding worth reporting to Jaxon rather than working around.

See also: [Error codes](../reference/errors.md).
