HERON

Роль для ИИ-агентов

Роль: Сборщик

Собрать сайт по структуре контента, проверить его и выложить. Если тема и страницы ещё не готовы, сборщик ведёт работу дизайнера и контента сам, по их чек-листам. Общие правила — на странице Инструкция для ИИ-агентов.

Команды — через образ. Без Docker то же самое делает heron с той же командой из pip-пакета.

Простыми словами

Сборщик — прораб на стройке. Он берёт план, тему и страницы, снова и снова запускает сборку, пока она не станет чистой, упаковывает сайт, проверяет, что он открывается, и пишет короткий отчёт: что сделано и чего ещё не хватает.

Пример. Строгая сборка останавливается: «E005 content/ru/Ремонт Крыши.md: недопустимое имя файла». Сборщик переименовывает файл в roof-repair.md, запускает сборку снова и повторяет, пока она не станет чистой. Потом делает образ, запускает дымовую проверку и публикует.

Эта страница нужна, когда агенту (или вам) нужно превратить готовую структуру в сайт в интернете. Если вы только меняете тексты, хватит роли контента.

Вход и выход

На входе: документ со структурой сайта (по форме templates/structure.md), иногда — тексты и картинки.

На выходе: папка сайта, которая собирается build --env prod --strict без ошибок; при необходимости — образ; отчёт.

H="docker run --rm -v $PWD:/site -w /site --user $(id -u):$(id -g) ghcr.io/fmstm/heron:prod"

Путь к сайту — относительно текущей папки: контейнер видит только её. . — если вы в папке сайта.

Документация этой версии HERON — $H docs (оглавление), $H docs TOPIC, $H docs --search TEXT.

1. Создать папку

У агента нет терминала, поэтому new вопросов не задаёт — всё флагами:

$H new мой-сайт --notes ru --name "Название" --domain example.com --lang en,ru -y
  • --lang — языки через запятую, первый — основной; --domain без схемы. Не знаете домена — не передавайте: останется заглушка NAME.example, и это строка в отчёте;
  • --notes ru|en — язык комментариев во всех файлах и сообщений на экране; по умолчанию en, запоминается в build.notes;
  • папка под git (.git, .gitignore, README) годится: $H new . …;
  • результат — site.yaml, тема, главная и 404 на каждом языке с SEO-блоком, записки по папкам. Стартовый сайт собирается --env prod --strict без предупреждений.

Папка с контентом уже есть — не new, а $H init мой-сайт: дописывает недостающее и ничего не перезаписывает.

2. Заполнить site.yaml

Образец всех ключей — templates/site.yaml. Минимум:

heron: ">=0.1,<0.2"
site:
  domain: example.com
  theme: main
  default_lang: en                 # из корня: /about/
  languages: [en, ru]              # русский — под /ru/
  name: Daybreak
  name_ru: Рассвет                 # если отличается
seo:
  title_suffix: " — Daybreak"
  title_suffix_ru: " — Рассвет"
nav:
  main: ["/", about, services, contacts]   # ключи страниц

Затем достроить папки под языки:

$H init мой-сайт          # content/LANG/index.md и 404.md, theme/i18n/LANG.yaml

Чего не делать: не писать домен, телефон, счётчики «примерные» — пусто лучше выдуманного. Не класть в папку Dockerfile, compose, .env.

3. Тема

types и links в theme/theme.yaml — из структуры; шаблон на каждый тип, модуль на каждую форму. Как — на странице Дизайнер.

4. Контент

Файл на каждую страницу структуры; имя файла = ключ, одинаковое во всех языках. Новая страница — $H page TYPE NAME мой-сайт. Как писать SEO-блок и секции — на странице Контент и SEO.

5. Цикл проверки

$H check мой-сайт                     # отчёт без сборки
$H build мой-сайт                     # дев-сборка в мой-сайт/dist
$H build мой-сайт --env prod --strict # как прод: предупреждения — ошибки

Читайте отчёт целиком. Ошибки (E0xx) останавливают сборку — исправить. Предупреждения сгруппированы: картинки, связи, ссылки, меню, переводы, языки, контент, прочее; полный список — .heron-cache/warnings.txt рядом со сборкой. Сводка «Не заполнено» — долги контента, их — в отчёт.

Частые ошибки:

Код Что значит Что делать
E002 нет title/h1/description или поле не того типа дописать; даты — ГГГГ-ММ-ДД
E004 два файла дают один адрес разные slug
E005 имя файла или slug не латиница-цифры-дефис переименовать
E006 связь на страницу, которой нет имя файла без расширения, не адрес
E007 файла из media/ нет на диске путь от корня сайта
E008 у типа нет шаблона theme/templates/TYPE.html
E009 redirect_from совпал с адресом страницы или ведёт в два места убрать дубль
E011 site.yaml не прошёл проверку или тема требует пустой ключ смотреть сообщение
E012 версия HERON не из диапазона heron: в site.yaml другой тег образа или диапазон
E020 разметка: нет объявленного типа, пустой адрес в сквозном узле, цены schema в site.yaml; цены — seo.allow_prices
E021 прод, а основной язык пуст заполнить или сменить default_lang
E022 gone закрывает страницу или пересекается с redirect_from выбрать одно

Полный список — сборка, §11.

6. Что проверить в собранном сайте

  • главные страницы каждого языка открываются; в заголовке страницы (head) — title с суффиксом, canonical, hreflang (на многоязычном сайте);
  • dist/sitemap.xml перечисляет все индексируемые страницы (на многоязычном — через файлы по языкам, например sitemap-ru.xml); 404 и noindex там нет;
  • dist/404.html и страницы 404 языков, например dist/ru/404/index.html, на месте;
  • dist/llms.txt — описание и перечень (или оглавление языков);
  • dist/redirects.map и dist/gone.map — то, что ожидалось по таблице переноса;
  • в разметке (блок script с типом application/ld+json) — нужные типы; отчёт считает страницы по типам.

7. Выкладка

Папка dist/ — на любой хостинг статики, с .heron-nginx.conf для своего nginx. Образ и проверка ответов сервера — из клона репозитория HERON:

./scripts/site.sh SITE build prod
./scripts/site.sh SITE image prod
./scripts/site.sh SITE smoke prod      # 200, 404, каждый 301 и каждый 410
./scripts/site.sh SITE push prod

Сайт в своём репозитории без клона HERON — переиспользуемый workflow FMSTM/HERON/.github/workflows/site-image.yml: собирает, упаковывает, проверяет и отправляет образ, свой Dockerfile не нужен.

Подробно — гайд Сборка и выкладка.

8. Отчёт

Что сделано; какие страницы созданы; какие секции не заполнены (сводка долгов); какие факты не подтверждены (вопросы заказчику); какие предупреждения оставлены и почему; расхождения документации с поведением HERON, если были.

Чек-лист

  • site.yaml: heron:, домен, языки, название, меню; нет выдуманных фактов
  • у каждого типа из структуры — шаблон; у каждой страницы — файл
  • build --env prod --strict без ошибок
  • карты 301/410 совпадают с таблицей переноса; smoke prod зелёный
  • отчёт: долги, вопросы, оставленные предупреждения

Источник

Эта страница повторяет файл docs/agents/builder.md из ветки prod. Репозиторий обновляется первым: builder.md на GitHub.