# RULESET_NOT_FOUND

No stored ruleset or name binding matches the reference given. HTTP 404. Compile the source again, or load by the name it was saved under.

The `ruleset_hash` or name you referenced is not in the store this credential can see.

## The envelope

```json
{"ok": false,
 "error": {"code": "RULESET_NOT_FOUND",
           "message": "no ruleset with hash 7f3a... in this namespace",
           "docs": "https://docs.agents.jaxon.ai/errors/ruleset-not-found.md"},
 "versions": {"...": "..."}}
```

## Why it happens

- **The hash was never stored here.** A compile stores the source under its
  hash in the caller's namespace. A hash produced under a different credential,
  a different connector, or a different deployment is not visible to this one.
- **A hash remembered from earlier in a conversation has drifted.** The model
  re-typed it, or the source was edited and the hash it now holds belongs to
  the previous revision that was never saved.
- **A name that was never bound.** `dsail_load_ruleset(name)` needs a name that
  `dsail_save_ruleset` or an approval with `name` bound. `dsail_list_rulesets`
  shows what exists.
- **The evaluation credential expired.** Evaluation credentials expire; the
  store persists, the visibility does not.

## The fix

- Have the source? Compile it again — the payload is pure over the bytes, so
  the same source gives the same hash — or pass `source` to the check directly
  instead of a hash.
- Saved under a name? Load it by name and use the `ruleset_hash` the load
  returns, byte-for-byte.
- Need to share a ruleset across credentials? A full credential can be bound to
  the connector's namespace by Jaxon.

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