# `ExDatalog.Constraint.Context`
[🔗](https://github.com/thanos/ex_datalog/blob/v0.5.0/lib/ex_datalog/constraint/context.ex#L1)

Evaluation context passed to constraint implementations.

The context carries metadata about the current evaluation environment,
including backend capabilities and provenance tracking settings.

## Threading

The `Constraint.Context` is constructed by `Engine.Naive` from the storage
backend's capabilities and passed through `Evaluator` → `ConstraintEval`
→ `Constraint.evaluate/3`. Constraint implementations receive it as the
third argument, enabling them to inspect storage capabilities if needed
(e.g., a future Z3 backend checking `external_execution`).

For v0.2.0, no constraint implementation reads from the context, but the
plumbing is complete and the context carries real backend capabilities.

# `t`

```elixir
@type t() :: %ExDatalog.Constraint.Context{
  capabilities: ExDatalog.Capabilities.t(),
  opts: keyword(),
  provenance: boolean()
}
```

# `new`

```elixir
@spec new() :: t()
```

Creates a new context with default capabilities.

## Examples

    iex> ctx = ExDatalog.Constraint.Context.new()
    iex> ctx.capabilities.storage_type
    :map
    iex> ctx.provenance
    false

# `new`

```elixir
@spec new(ExDatalog.Capabilities.t()) :: t()
```

Creates a new context with the given capabilities.

## Examples

    iex> caps = %ExDatalog.Capabilities{storage_type: :ets, indexed_lookup: true}
    iex> ctx = ExDatalog.Constraint.Context.new(caps)
    iex> ctx.capabilities.storage_type
    :ets
    iex> ctx.provenance
    false

# `new`

```elixir
@spec new(ExDatalog.Capabilities.t(), boolean()) :: t()
```

Creates a new context with the given capabilities and provenance flag.

## Examples

    iex> caps = %ExDatalog.Capabilities{storage_type: :ets}
    iex> ctx = ExDatalog.Constraint.Context.new(caps, true)
    iex> ctx.provenance
    true

---

*Consult [api-reference.md](api-reference.md) for complete listing*
