План: обновление сайта (октябрь 2026)
Координатор: dp-coordinator. Рабочая копия ~/deltaplan-site, ветка site/update-oct (от main 3cc039e). В main не вливается — отчёт главной сессии. Журнал — site_update_progress.md.
Цель (задачи пользователя)
- Новые скриншоты сайта — графика поменялась (48 крыльев, новые модели), пересняты готовыми инструментами
tools/shots. - Модель воздуха на сайте — из «плана» в «сделано»: что умеет, на чём основано (Perdigão, Askervein и др.), границы модели и известные расхождения. Язык — для пилотов, числа — только из репозитория.
- Новый раздел «Модели аппаратов» — подстраницы по группам (советские, учебные, мачтовые, безмачтовые), на каждое крыло — рендер модели из Blender (единый ракурс и фон), известные данные с источником и отметкой «паспорт / оценка». Таблицы и страницы — генерирует скрипт из данных репозитория. Ссылка на благодарность DHV.
Правила — .claude/workflow.md, «Общие правила». Hugo собирается без ошибок и предупреждений. Картинки — jpg разумного размера (рендер крыла 40–250 КБ).
Задачи
| Задача | Исполнитель | Скоуп | Условия приёмки |
|---|---|---|---|
| SU-1 скриншоты | dp-mechanic | tools/shots/gameplay.sh, e2e.sh, itch_shot → C3 | все файлы C3 на месте, проходит check_contracts.py; кадры без ошибок рендера (крыло в кадре, не чёрные, без интерфейса в itch-кадрах); превью в build/screenshots/site/SU-1/ |
| SU-2 модель воздуха | dp-writer | site/content/mechanics/air-model.md (+ согласование slope-wind.md, thermals.md, weather.md, строка на главной) | страница описывает сделанное, без «план/в работе»; каждое число есть в репозитории (ссылка на документ); разделы «что умеет», «на чём основано», «границы», «известные расхождения»; hugo чистый |
| SU-3 рендеры крыльев | dp-mechanic | tools/blender/render_wings_site.sh (+ обрезка/сжатие) → C1 | 48 рендеров по C1, check_contracts.py — C1 зелёный; лист-контакт в build/screenshots/site/SU-3/ |
| SU-4 генератор страниц | dp-engineer | tools/site/gen_wings.py → C2; site/content/wings/** | все 48 крыльев, у каждого числа — отметка происхождения и источник; gen_wings.py --check зелёный; hugo чистый; скриншоты страницы крыла и группы в build/screenshots/site/SU-4/ |
| SU-5 тексты раздела и замена картинок | dp-writer | тексты вне сгенерированных блоков site/content/wings/**/_index.md; главная, mechanics/flight.md и др. — новые кадры C3 и рендеры C1, ссылки на «Модели аппаратов» | hugo чистый; скриншоты собранных страниц в build/screenshots/site/SU-5/ |
Волна 1: SU-1, SU-2, SU-3, SU-4 (параллельно; SU-4 работает против C1 без рендеров — --check до SU-3 красный только по рендерам). Волна 2: SU-5 (после SU-1, SU-3, SU-4).
Контракты (версия 1)
Контрактный тест: uv run -q --with pillow python tools/site/check_contracts.py (из корня копии) — проверяет C1 и C3, для C2 вызывает tools/site/gen_wings.py --check, если генератор уже есть. Менять интерфейс — только через координатора (версия +1, потребители уведомлены).
C1. Рендер крыла (владелец SU-3; потребители SU-4, SU-5) — v1
- Файл:
docs/models/screenshots/glider_<id>/iso45.jpg, где<id>— имяconfigs/wings/<id>.json(все 48, ни одного лишнего не требуется). - Источник: модель
assets/models/glider_<id>.glb(экспорт исходникаassets/source/glider_<id>.blend— то же, что видит игра), видiso45скриптаtools/blender/render_views.py: одинаковые направление камеры, свет и фон (0.80, 0.81, 0.83) для всех. - Формат: JPEG, 1280×720, качество 85, sRGB; крыло обрезано по содержимому и отцентровано с полем ≈ 5 % (досыпано цветом фона), масштаб — вписать в кадр (размеры крыла — в таблице, не на картинке).
- Размер: 40–250 КБ каждый; все 48 вместе — не больше 8 МБ.
- Нет файла → генератор строит страницу без картинки,
--checkпадает.
C2. Страницы «Модели аппаратов» (владелец SU-4; потребитель SU-5) — v1
- Генератор:
tools/site/gen_wings.py(Python 3, только стандартная библиотека), запуск из корня копии;--check— ничего не пишет, код 1, если сгенерированное расходится с файлами или чего-то не хватает (рендера, обязательного поля). - Входные данные (только чтение):
configs/wings/*.json(поля и_doc),configs/wing_groups.json(группы и их порядок),locale/ui.csv(названия: ключnameкрыла, русский столбец; названия групп),tools/research/data/wing_passports/(wings_merged.json,out/wings3d_spec.json,wings3d_overrides/, источники),docs/research/wings_config_sources.md,docs/research/glider_3d_tz.md. - Файлы:
site/content/wings/_index.md— раздел «Модели аппаратов»: сводная таблица всех крыльев по группам;site/content/wings/<group>/_index.md— группа (<group>— id изconfigs/wing_groups.json, вес = порядок в массиве): таблица крыльев группы;site/content/wings/<group>/<id>.md— страница крыла, адрес/wings/<group>/<id>/; порядок в группе — как в меню игры (reference.best_glide, при равенствеwind_max_ms;scripts/game/wing_catalog.gd) →weight.
- Владение текстом: страницы крыльев генерируются целиком. В
_index.mdгенератор меняет только блок между строками<!-- gen:begin tools/site/gen_wings.py -->и<!-- gen:end -->; остальное (шапка, вступление, пояснения) — ручной текст (SU-5), генератор его сохраняет; нет файла — создаёт с шапкой по умолчанию и пустым ручным текстом. - Страница крыла: название (из
locale/ui.csv), прототип и годы, группа, мачтовое/безмачтовое, рендер (C1, путь/docs/models/screenshots/glider_<id>/iso45.jpg), таблица данных: размах, площадь, масса крыла, диапазон пилота, доля двойной обшивки, класс/сертификат DHV (или HGMA), годы, скорости (DHV Vmin/Vmax — если есть; скорости модели игры — трим, полностью на себя — с пометкой «модель игры»), качество модели. У каждого значения — отметка происхождения: паспорт (со ссылкой на источник: карточка DHV, страница/PDF производителя), аналог (паспорт близкой модели — какой), оценка (не из паспорта: подобие от базы, ТЗ, координатор). Числа — как в конфиге (то, что в игре); если паспорт расходится с конфигом — показать оба. Внизу — ссылки на конфиг и раздел ТЗ в репозитории, ссылка на благодарность DHV на главной. - Ссылки — только на существующие страницы/файлы (Hugo падает на битых) и внешние адреса источников, найденные в данных репозитория (не выдумывать).
C3. Скриншоты сайта (владелец SU-1; потребитель SU-5) — v1
- Обновить на месте, те же имена:
docs/screenshots/gameplay/{cockpit,chase,free}.jpg(tools/shots/gameplay.sh),docs/screenshots/e2e/<место>_{flight,result}.jpgпо всемconfigs/locations/*.json(tools/shots/e2e.shпишет png → перевести в jpg q85, png не коммитить). - Новые:
docs/screenshots/site/NN_<русское_имя>.jpg— JPEG q85, 1600×900, ≤ 350 КБ каждый; список — в задании SU-1 и вdocs/screenshots/site/README.md(команда съёмки на каждый кадр). - Godot — только с
XDG_DATA_HOME=$(mktemp -d).
Решения пользователя (не обсуждаются)
- Задание главной сессии 2026-10-01: три задачи выше; в
mainне вливать; исполнители — Sonnet для текстов, Haiku для съёмки по готовому скрипту, Opus для сложного.