Krikri::UndefinedVariableError
Raised only from #substitute's strict: path (module-arg/param
finalization - see #substitute_task_params) when a {{ }} span whose
ENTIRE content is a plain variable reference (foo, foo.bar,
foo['bar'][0] - no filters/operators/function calls) resolves to
nothing. Real Ansible's Jinja2 templating is strict-undefined by
default for module-arg rendering and raises in exactly this shape of
case ("'foo' is undefined"); this engine otherwise renders a missing
lookup as the literal string "undefined" and continues (a deliberate,
pervasive leniency used throughout the rest of the templating/
conditional-evaluation code, see ConditionalEvaluator's own comments -
NOT changed here). Deliberately narrow: only a bare reference is
checked here, not any expression using a filter/function/operator -
those still go through the lenient evaluator regardless of strict:,
since this hand-rolled evaluator's own known syntax-coverage gaps
(documented throughout expression_evaluator.cr) already fall back to
the same "undefined" sentinel for reasons that have nothing to do
with the variable genuinely being undefined, and conflating the two
would turn an evaluator limitation into a spurious task failure.