# `Reach.Effects.Classification`
[🔗](https://github.com/elixir-vibe/reach/blob/v2.8.4/lib/reach/effects/classification.ex#L1)

Explains an effect classification and where it came from.

`Reach.Effects.classify/2` remains the compact atom-returning API. Use
`Reach.Effects.classify_with_provenance/2` when callers need to distinguish
explicit semantics from typespec or project-local inference.

# `confidence`

```elixir
@type confidence() :: :high | :medium | :low
```

# `reason`

```elixir
@type reason() ::
  :dynamic_dispatch
  | :unresolved_local
  | :unresolved_module
  | :insufficient_semantics
  | :unsupported_call
  | :unsupported_node
```

# `source`

```elixir
@type source() ::
  :intrinsic
  | :plugin
  | :local_inference
  | :dependency_inference
  | :builtin
  | :typespec
  | :inferred_type
  | :unknown
```

# `t`

```elixir
@type t() :: %Reach.Effects.Classification{
  classifier: module() | nil,
  confidence: confidence(),
  effect: Reach.Effects.effect(),
  reason: reason() | nil,
  source: source()
}
```

# `new`

```elixir
@spec new(Reach.Effects.effect(), source(), confidence(), keyword()) :: t()
```

---

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