Спинтакс, который знает про данные — приложение к статье на форуме ZennoLab (конкурс Master 9).
Автор — Divisor. Лицензия MIT. Движок открыт: github.com/investblog/spintax-dotnet (NuGet Spintax.Core).

Что в архиве
------------
lib\                     Spintax.Zenno.dll + Spintax.Core.dll — сборка net472 (та, что ставится в ZennoPoster)
template-1-author\       проект «автор»: ИИ Агент пишет шаблон, движок проверяет (Validate),
                         рендерит 20 вариантов (RenderMany) и линтует 50 документов (Lint).
                         template-1-author.zp, тела кубиков 10..70-*.cs, prompts\ (системные
                         промпты по локалям), out\ (шаблон и варианты боевого прогона), README.md
template-2-production\   проект «прод»: таблица товаров → Protect → Render(seed = артикул:витрина)
                         → Restore → файл на строку. Без модели. template-2-production.zp,
                         10-render-table.cs, card-ru.spintax, products.csv, out\site-a\ (20 файлов,
                         записанных ZennoPoster Pro 7.9.1.0), README.md
demo\                    демо-шаблон карточки, таблица на 20 товаров, README с числами и тем, как они
                         посчитаны; native-spin-count.cs — кубик замера родного спина

Установка
---------
1. Обе dll из lib\ — в Progs\ExternalAssemblies папки ZennoPoster.
2. В проекте: «Свой код → Ссылки из GAC» → одна ссылка, на Spintax.Zenno.dll (Spintax.Core.dll
   подтягивается из ExternalAssemblies сама).
3. Перед заменой dll закройте ProjectMaker и ZennoPoster — сборка кешируется.
4. Бриф, язык, переменные и папки задаются в форме «Входные настройки» проекта (двойной клик
   по проекту в ZennoPoster), не в панели переменных: панель сбрасывается при запуске.

Проверено на ZennoPoster Pro 7.9.1.0. Шаблону 1 нужен кубик «ИИ Агент» (7.9+), шаблону 2
хватает «C# код», таблицы и входных настроек. Ключи ИИ-сервисов — в настройках программы, в
проектах их нет. Подробности — README.md внутри каждой папки и статья.
