diff --git a/docs/plan.md b/docs/plan.md index 4122a5c..768d521 100644 --- a/docs/plan.md +++ b/docs/plan.md @@ -4,7 +4,7 @@ задачи и проработка крупных направлений. Срез-статус архитектуры — `docs/demo.md` (дорожная карта там — историческая, актуальный план здесь). -Дата ревизии: 2026-09-08. +Дата ревизии: 2026-09-09. **Статус проекта (2026-09-06): техно-демка движка.** Основные силы — движок (`packages/engine`); игра — витрина и полигон проверки API. Приоритет решений: @@ -492,4 +492,48 @@ - Модели с некоммерческими весами в основном пайплайне (DreamLite CC BY-NC — только эксперименты); веса без лицензии (PixelGPT) — то же. - Дообучение моделей под конкретную игру. -- TTS-голоса персонажей — вне среза, кандидат на будущее: Kokoro-82M (CPU). \ No newline at end of file +- TTS-голоса персонажей — вне среза, кандидат на будущее: Kokoro-82M (CPU). +--- + +## Уроки черновика → видение движка v2 (черновик, 2026-09-09) + +Решение (2026-09-09): текущий движок считается **черновиком (v1)** — он +остаётся рабочим витринным движком, чиним и допиливаем его без больших +рефакторингов; накопленные уроки формируют видение **v2**. Этот раздел — +живой: пользователь и агент пополняют его по мере осознания. + +### Что в v1 удалось (в v2 сохранить как принципы) + +- **Фиксированный шаг и детерминизм** (`GameLoop` 60 Гц + `stepTicks`, + ручной шаг без рендера) — основа воспроизводимости и агентного моста. +- **Разделение «чистая математика / вьюхи»**: `lightSim`, `shadowSim`, + `postSim`, `particleSim`, `fxSim` — без Pixi, тестируются в Vitest без + браузера. Лучшее решение проекта: баги ловятся тестами до запуска игры. +- **Агентный мост с первого дня**: `window.__agent`, снапшоты-слои, + инварианты, CLI-сценарии проверок, `practices.md`. Состояние читается + снапшотом, скриншот — только для визуальных вопросов. +- **Жёсткая граница движок/игра** с автоматическим гвардом. +- **Инъекция зависимостей** (`StorageLike` и другие) — тесты без DOM. +- **Доки — точка входа**: `llms.txt`, доки движка по модулям, «грабли». + +### Что v1 показал болью (в v2 переделать) + +1. **Координатные пространства** — главный источник багов: виртуальные px, + CSS-px, мировые юниты, тайловые `{x,y}`, offset `worldRoot` смешивались + в сигнатурах и головах; направление тени считалось прямо в экранных + координатах (баг «летающих» объектов). В v2: все направления/позиции — + в одном мировом пространстве, проекция — единственная точка на границе + рендера; типы различают пространства (юниты ≠ px ≠ тайлы). +2. **«Сделано» ≠ «видно»**: RT-тьма запекалась, но не выводилась — + снапшот-пробы зелёные, визуально подсистема мёртвая. В v2: визуальная + подсистема считается готовой только со скриншот-гейтом, а не только + снапшот-ассертами. +3. **Сцена-оркестратор** (`LocationScene` ~900 строк) разрезалась вручную + и всё равно разрастается. В v2: декларативная композиция сцены из + систем с явным порядком тика (карта → свет → тени → постэффекты). +4. **Pixi протекает в API** (`Renderer` в сигнатурах хелперов). В v2: + рендер-бэкенд за узким интерфейсом, ядро движка его не знает. +5. **Ручные пулы вьюх** (`toneFree/holeFree/...`) — многословно и + ошибкоёмко. В v2: декларативные слои с авторазмещением по ключу. +6. **Мёртвый код переживает проверки** — нужен принцип: не оставлять + подключённый, но неиспользуемый путь; удалять или связывать сразу.