Tree-walk evaluator for CEL AST nodes.
Implements error-as-value semantics: errors propagate as {:cel_error, msg} tuples through expressions, but are absorbed by short-circuit operators.
Summary
Functions
@spec eval(Celixir.AST.expr(), Celixir.Environment.t()) :: {:ok, any()} | {:error, String.t()}