Да, теперь промт уже пригоден для отправки Claude Pro: структура однозначная, геометрия задана формулами, запрещены плоские линии, предусмотрены проверки и обязательные рендеры.
Но я бы внёс две последние правки, чтобы Claude не ушёл в огромную переделку всего рендера.
1. Ограничить глобальную сортировку
Сейчас требование сортировать балки вместе со всей сценой может заставить Claude переписать стены, колонны, блоки и анимационный движок. Это противоречит исходному ограничению «менять только генерацию балок».
Замени начало пункта 5 на:
5. Сортировка граней.
Сначала изучить существующий порядок рендера сцены. Запрещено заранее переписывать весь render pipeline стен, колонн, блоков и остальных стадий.
Обязательный минимум:
- все грани ВСЕХ четырёх балок собираются в единый массив beamRenderFaces;
- грани разных стержней и разных балок сортируются совместно far→near;
- балки не сортируются отдельными замкнутыми beamG-группами;
- весь слой балок сохраняет прежнее место относительно слоёв стен, колонн, блоков и пола.
Расширять общую сортировку на геометрию стен, колонн или блоков разрешено ТОЛЬКО если после правильной совместной сортировки всех граней балок на контрольных скриншотах остаётся доказанная ошибка перекрытия с конкретным объектом сцены.
Не проводить масштабный рефакторинг всей сцены без визуально подтверждённой необходимости.
А требование requestAnimationFrame лучше ослабить:
Во время .drop все грани одной балки получают один и тот же transform и движутся как единое целое.
Пересчёт depthKey через requestAnimationFrame добавлять только в том случае, если контрольные кадры 25/50/75% доказывают, что порядок перекрытия действительно меняется во время падения. Не создавать новый покадровый render loop заранее.
Так Claude сначала решит саму балку, а не потратит весь контекст на новый графический движок.
2. Не придумывать beamRevealAbove
Сейчас написано:
blockTopZ = wallTop + beamH − beamRevealAbove
Если beamRevealAbove отсутствует в исходнике, Claude может создать новое число и подогнать результат.
Замени на:
blockTopZ вычислять из ФАКТИЧЕСКИХ мировых вершин существующей геометрии блока:
blockTopZ = max(worldZ всех верхних вершин блока).
Не вводить новую константу beamRevealAbove, если её уже нет в исходном коде.
Ассерт:
trussTopZ > blockTopZ + eps.
Это намного надёжнее.
Вердикт
После этих двух замен — отправляй. Больше расширять промт не стоит: он уже очень подробный. Дальнейшие добавления могут не улучшить результат, а заставить Claude распыляться.
Самое важное теперь зафиксировано:
одна функция generateBeam;
локальные координаты;
два нижних и один верхний пояс;
две синхронные плоскости зигзагов;
объёмные восьмигранные прутки;
одинаковый шаг без обрезанной последней панели;
никакой связи между соседними балками;
обязательная изолированная проверка;
три финальных скриншота;
запрет сдавать работу без визуального соответствия.