# ENGINE_ERROR

The compiler or solver failed in a way that is not a fault in the request. HTTP 500. Retry once; if it persists, report the versions block.

Something inside the service failed — the compiler or the solver raised where it should have answered. This is not a fault in your source or your claim dictionary; a fault there is `COMPILE_FAILED` or `VALIDATION_REJECTED`.

## The envelope

```json
{"ok": false,
 "error": {"code": "ENGINE_ERROR",
           "message": "solver did not answer within the time allowed",
           "docs": "https://docs.agents.jaxon.ai/errors/engine-error.md"},
 "versions": {"service_version": "...", "engine_version": "...", "wire_version": "..."}}
```

## What to do

1. **Retry once.** A transient solver timeout under load clears.
2. **Do not change the source or the claims to work around it.** A ruleset that
   compiled clean and a claim dictionary that validated are correct as they
   are; altering them to dodge a service fault trades a visible error for a
   silent wrong answer.
3. **If it persists, report it** with the `versions` block and the `message`.
   The service logs record the failure without your policy text — document
   content and extracted values never reach a log at any level — so the report
   is what lets Jaxon correlate it.

`UNKNOWN` is never an `ENGINE_ERROR` in disguise: an unbound program and a
broken engine both answer `UNKNOWN`, which is why the service's health check
requires a bound program to answer `TRUE`.

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