Beryl::Apply::Template
Substitution scalaire minimale {{ var }} (décision de design :
pas de logique conditionnelle, pas de Jinja/ERB — si une recette a
besoin de logique, c'est une recette à part entière).
Seules les valeurs string d'un step sont interpolées ; une clé
{{ var }} inconnue lève UnknownVariable (échec explicite plutôt
qu'une substitution silencieuse par chaîne vide).
Constants
PLACEHOLDER = /\{\{\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*\}\}/