Тест: create_landing_page

Дата: 2026-05-22
Harness: hermes-agent/docs/landing-iterate.sh (одна итерация) и landing-iterate-v4.sh (multi-step flow)
Модель: gpt-5.5
Метрика: N FAIL / 10 формальных чеков

Сценарий

Промпт пользователя: «Сделай лендинг для iiminion агента по созвонам. Слаг agent_calls. Стиль тёмная тема + #c8ff5a. CTA Telegram @iiminion».

Чек-лист

  1. <slug>.md создан
  2. Frontmatter содержит layout:, slug:, title:
  3. Есть CTA на @iiminion / t.me/iiminion
  4. Минимум 5 секций
  5. <slug>_report.md создан
  6. В репорте есть секция «Проверено агентом» (✅)
  7. В репорте есть секция «Проверяется человеком» (👤)
  8. landing_pages.md обновлён

Было (Iteration 1)

Базовый skill docker/skills/create-landing-page.md — обычная пошаговая инструкция без явной связи со школой и без жёстких структурных требований.

Результат: 4 FAIL из 10.

Что упало:

  • Репорт-файл не создан вообще
  • Школьные инструкции (landing_brief, landing_checklist) проигнорированы
  • Brief-вопросы не заданы

Лендинг сам по себе вышел приличный — 6 секций, фронтматтер, два CTA. Но без репорта и проверок.

Iteration 2

Изменения в скиле:

  • Добавлена явная ссылка на школьные инструкции с требованием «школа главнее»
  • Добавлен раздел с обязательным _report.md шаблоном (шаг 6)
  • Усилены формулировки: «НИКОГДА не пропускай»

Результат: 3 FAIL из 10.

Что улучшилось:

  • Slug корректный (underscore, не дефис)
  • Кастомный HTML+CSS с тёмной темой и акцентом
  • Дизайн-блок имитирует пример из эталона
  • Создал директорию design/reports/ (агент явно понял идею)

Что осталось:

  • Сам файл _report.md всё равно не создан, хотя директория есть
  • Стабильная ошибка: репорт буквально пропускается, не случайно

Iteration 3

Главное изменение: репорт перенесён в шаг 3 как «Файл B» — одна и та же фраза «создай два файла в одном tool call подряд». Добавлено явное условие брака: «если только Файл A без Файла B — возврат к шагу 3».

Результат: 0 FAIL из 10.

Что в репорте:

  • Агент сам прошёл чек-лист, отметил ✅/❌
  • Честно написал «sync FAIL — no trip2g credentials» (в test-окружении так и должно быть)
  • Честно написал «renderlayout: not run»
  • Обе секции (агент + человек) на месте

Iteration 4 (multi-step)

Расширили сценарий: после первой сборки эмулируем фидбек пользователя «нравится hero, problem_cards, steps, final_cta» и запускаем [[instructions/extract_components]].

Результат: 0 FAIL из 10 на новом наборе чеков.

Что создалось:

_layouts/v1/
├── tokens.md
└── components/
    ├── _index.md
    ├── hero.md
    ├── problem_cards.md
    ├── steps.md
    └── final_cta.md

4 компонента + tokens + index. Структура совпала с тем, что описано в extract_components.

Стало (резюме)

Итерация FAIL/10 Главный сдвиг
1 4 базовый скил
2 3 + ссылки на школу + явные требования
3 0 репорт в один tool call с основным файлом
4 0 multi-step с извлечением компонентов

Главный вывод

Структурные правки скила работают, текстовые усиления — нет. Перепись «обязательно» жирнее не помогла. Помог только перенос репорта в тот же шаг, что и сам лендинг, с явным условием брака.

Это мап на case-009 из journal Николая — изоляция шагов в инструкции = потеря контекста, объединение связанных действий = надёжное выполнение.

Что меняли в инструкциях по итогам

  • instructions/create_landing_page — стал явным оркестратором, фазы 1–5, после Phase 2 (библиотека) проверяет существующие темы
  • instructions/landing_brief — добавлен обязательный шаг определения стиля даже если пользователю «всё равно»
  • instructions/landing_checklist — введено правило «на каждый лендинг — _report.md, иначе незавершённый»
  • instructions/landing_lead_form — добавлено указание на готовый пример HTML/JS в docs/_layouts/forms/example.html
  • Создана новая instructions/extract_components — bottom-up дизайн-система с версионированием v1/v2

Артефакты

В рабочей машине: /tmp/landing-iterations/

  • landing-N.md — что создал агент
  • report-N.md — репорт агента
  • issues-N.txt — список fail-чеков
  • response-N.json — полный ответ API

Открытые вопросы

  • Проверка sync не работает в test-окружении (нет credentials). Нужно либо мок-sync, либо подменять /opt/data/sync на bash-stub возвращающий success
  • renderlayout не запускается в test-окружении. Аналогично — нужен stub или реальный trip2g endpoint
  • Не проверяем визуальное качество — только структуру. Можно добавить шаг «оценщик читает страницу через headless browser и оценивает по чеклисту Unbounce»