c7d868c52e
- ApplyTemplatesAsync/PreviewAsync template lookups use a case-insensitive, never-throwing comparer (SQL Server collation); base template wins over derived. Base names are already unique case-insensitively via the filtered unique index on Template.Name, derived templates are not covered by it. - Preview reads database connections, notification lists and API methods with one GetAll query each instead of one by-name query per bundled row. - Component-TemplateEngine.md: the flattener does not call GetAllTemplatesAsync; it loads chains via GetTemplateWithChildrenAsync. Claude-Session: https://claude.ai/code/session_01GT67AEHd2Acv1YPwGfXEoV