# `GEPA.Strategies.Acceptance`
[🔗](https://github.com/nshkrdotcom/gepa_ex/blob/v0.3.0/lib/gepa/strategies/acceptance.ex#L1)

Acceptance criteria for proposed GEPA candidates.

Reflective mutations use a pluggable acceptance criterion. Merge proposals are
intentionally accepted with the official merge rule: the merged program's
subsample score sum must be at least the better parent sum. That rule is not
user-overridable in the Python engine and is kept separate here as well.

# `criterion`

```elixir
@type criterion() ::
  :strict_improvement
  | :improvement_or_equal
  | module()
  | struct()
  | (GEPA.CandidateProposal.t(), GEPA.State.t() | nil -&gt; boolean())
```

# `should_accept`

```elixir
@callback should_accept(GEPA.CandidateProposal.t(), GEPA.State.t() | nil) :: boolean()
```

# `normalize`

```elixir
@spec normalize(criterion() | nil) :: criterion()
```

# `should_accept?`

```elixir
@spec should_accept?(
  GEPA.CandidateProposal.t(),
  criterion() | nil,
  GEPA.State.t() | nil
) :: boolean()
```

---

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