- ajax/template_test.php: action=preview (render com sampleContext) e
action=dryrun (cria+apaga objeto de teste no Redmine, traduz erros 422
em dicas acionáveis; issue temporária para log_time/update_status)
- RedmineApi::rawRequest (código+corpo crus) e TemplateEngine::sampleContext
- UI: botão "Testar" + painel por card (preview sempre; teste real opt-in
com seletor de projeto alvo), via fetch com X-Glpi-Csrf-Token
- validado E2E por HTTP: preview, dry-run cria/deleta (204), render inválido
capturado, tradução de 422; sem resíduo de teste no Redmine
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>