# `Concord.Validation`
[🔗](https://github.com/gsmlg-dev/concord/blob/main/lib/concord/validation.ex#L1)

Recursive validation for Raft command safety.

Walks any Elixir term to ensure it contains no anonymous functions, PIDs,
ports, or references — values that break Raft determinism and serialization.
Also enforces depth and size limits.

# `validate_term`

```elixir
@spec validate_term(term(), non_neg_integer()) :: :ok | {:error, atom()}
```

Walks a term recursively, rejecting non-serializable values.

Returns `:ok` or `{:error, reason}`.

# `validate_txn_spec`

```elixir
@spec validate_txn_spec(map()) :: :ok | {:error, {:invalid_txn, atom()}}
```

Validates a transaction spec before Raft submission.

Checks structural correctness, limit compliance, and recursive safety.

