From dd02f9cae88b3d6413dc13de41142bdb8f3bce58 Mon Sep 17 00:00:00 2001 From: Emil <65846814+emil28092005@users.noreply.github.com> Date: Fri, 18 Sep 2026 06:23:32 +0300 Subject: [PATCH] Complete MVP acceptance, publish platform evidence and finalize the manual --- PLAN.md | 140 +++--- README.md | 7 +- docs/IMPLEMENTATION.md | 46 ++ docs/README.md | 2 +- docs/TOOLCHAINS.md | 18 +- docs/manual/getting-started/build.md | 21 +- docs/manual/index.md | 12 +- docs/manual/scripting/examples.md | 4 +- docs/studies/map/research.tsx | 6 +- docs/validation/README.md | 5 +- .../final-linux-2026-09-18/README.md | 61 +++ .../collect-2d-manifest.json | 143 ++++++ .../collect-2d-run.json | 18 + .../collect-2d-validate.json | 12 + .../final-linux-2026-09-18/collect-2d.png | Bin 0 -> 4525 bytes .../collect-3d-manifest.json | 170 +++++++ .../collect-3d-run.json | 18 + .../collect-3d-validate.json | 12 + .../final-linux-2026-09-18/collect-3d.png | Bin 0 -> 20365 bytes .../playable-exports.json | 455 ++++++++++++++++++ .../sdk-unavailable.json | 115 +++++ .../final-linux-2026-09-18/tests.json | 318 ++++++++++++ .../linux-release-2026-09-18/README.md | 4 +- docs/validation/mvp-acceptance.md | 92 ++++ .../README.md | 18 + .../checkpoint5/collect-2d-manifest.json | 148 ++++++ .../checkpoint5/collect-2d-run.json | 18 + .../checkpoint5/collect-2d-validate.json | 12 + .../checkpoint5/collect-2d.png | Bin 0 -> 4525 bytes .../checkpoint5/collect-3d-manifest.json | 175 +++++++ .../checkpoint5/collect-3d-run.json | 18 + .../checkpoint5/collect-3d-validate.json | 12 + .../checkpoint5/collect-3d.png | Bin 0 -> 20366 bytes .../checkpoint5/evidence.json | 235 +++++++++ .../checkpoint5/playable-report.json | 435 +++++++++++++++++ .../checkpoint5/probe.json | 32 ++ .../checkpoint5/tests.json | 206 ++++++++ .../checkpoint5/toolchain.json | 23 + .../final-source/collect-2d-manifest.json | 148 ++++++ .../final-source/collect-2d-run.json | 18 + .../final-source/collect-2d-validate.json | 12 + .../final-source/collect-2d.png | Bin 0 -> 4525 bytes .../final-source/collect-3d-manifest.json | 175 +++++++ .../final-source/collect-3d-run.json | 18 + .../final-source/collect-3d-validate.json | 12 + .../final-source/collect-3d.png | Bin 0 -> 20366 bytes .../final-source/evidence.json | 235 +++++++++ .../final-source/playable-report.json | 435 +++++++++++++++++ .../final-source/probe.json | 32 ++ .../final-source/tests.json | 206 ++++++++ .../final-source/toolchain.json | 23 + examples/projects/collect-2d/README.md | 2 +- 52 files changed, 4228 insertions(+), 99 deletions(-) create mode 100644 docs/validation/final-linux-2026-09-18/README.md create mode 100644 docs/validation/final-linux-2026-09-18/collect-2d-manifest.json create mode 100644 docs/validation/final-linux-2026-09-18/collect-2d-run.json create mode 100644 docs/validation/final-linux-2026-09-18/collect-2d-validate.json create mode 100644 docs/validation/final-linux-2026-09-18/collect-2d.png create mode 100644 docs/validation/final-linux-2026-09-18/collect-3d-manifest.json create mode 100644 docs/validation/final-linux-2026-09-18/collect-3d-run.json create mode 100644 docs/validation/final-linux-2026-09-18/collect-3d-validate.json create mode 100644 docs/validation/final-linux-2026-09-18/collect-3d.png create mode 100644 docs/validation/final-linux-2026-09-18/playable-exports.json create mode 100644 docs/validation/final-linux-2026-09-18/sdk-unavailable.json create mode 100644 docs/validation/final-linux-2026-09-18/tests.json create mode 100644 docs/validation/mvp-acceptance.md create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/README.md create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/checkpoint5/collect-2d-manifest.json create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/checkpoint5/collect-2d-run.json create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/checkpoint5/collect-2d-validate.json create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/checkpoint5/collect-2d.png create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/checkpoint5/collect-3d-manifest.json create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/checkpoint5/collect-3d-run.json create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/checkpoint5/collect-3d-validate.json create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/checkpoint5/collect-3d.png create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/checkpoint5/evidence.json create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/checkpoint5/playable-report.json create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/checkpoint5/probe.json create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/checkpoint5/tests.json create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/checkpoint5/toolchain.json create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/final-source/collect-2d-manifest.json create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/final-source/collect-2d-run.json create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/final-source/collect-2d-validate.json create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/final-source/collect-2d.png create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/final-source/collect-3d-manifest.json create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/final-source/collect-3d-run.json create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/final-source/collect-3d-validate.json create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/final-source/collect-3d.png create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/final-source/evidence.json create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/final-source/playable-report.json create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/final-source/probe.json create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/final-source/tests.json create mode 100644 docs/validation/windows-software-vulkan-2026-09-18/final-source/toolchain.json diff --git a/PLAN.md b/PLAN.md index 12f3c75..ad7a338 100644 --- a/PLAN.md +++ b/PLAN.md @@ -1,8 +1,8 @@ # План разработки Faset Engine -Версия 1.1 · 18 сентября 2026 года. +Версия 1.2 · 18 сентября 2026 года. -**Статус:** идёт реализация MVP. Готовность этапов определяется всеми их критериями, включая проверку обеих ОС; отдельные работающие подсистемы ещё не закрывают этап целиком. Текущие результаты и ограничения записаны в [журнале реализации](docs/IMPLEMENTATION.md). Этот документ определяет порядок работ; контракты подсистем находятся в [ARCHITECTURE.md](docs/ARCHITECTURE.md). +**Статус:** C++ MVP реализован и принят; первый tag — **v0.1.0-mvp**. Исходники движка проверены на `4cb82556de31268d2bde73948dd1ff1b6c02f162`; финальная публикация добавляет документацию и свидетельства, сохраняя код движка. [Досье M0–M9](docs/validation/mvp-acceptance.md) связывает каждый этап с проверками и точными revisions. Linux проверен на RTX 2080 Ti, Windows — в native CI через SwiftShader; это не сертификация всех GPU/драйверов. Системный IME и физические переходы между мониторами не проверены, native Wayland restore имеет явный skip; XWayland и Windows lifecycle прошли. Текст/DPI проверены на уровне widgets и SDL. Эти границы покрытия сохраняются открыто и не выдаются за пройденные сценарии. Контракты находятся в [ARCHITECTURE.md](docs/ARCHITECTURE.md), история — в [журнале реализации](docs/IMPLEMENTATION.md). ## 1. Результат MVP @@ -42,12 +42,12 @@ Lua, C++ hot reload, Blender live link, встроенное изображен **Результат:** минимальный C++-проект собирается в согласованной среде Linux и Windows. -- [ ] Создать targets Core, Runtime, Editor, Player, SchemaExporter, инструментов и примеров; запретить зависимости Runtime/Player на Editor/MCP. -- [ ] Настроить CMake presets, Ninja, Clang/clang-cl, development/release и базовые проверки CI обеих ОС. -- [ ] Зафиксировать стандарт C++, версии компиляторов, Windows SDK/runtime, библиотек и Slang; определить проверяемую матрицу ОС, архитектур и GPU. -- [ ] Закрепить EnTT, SDL3, Slang, Box2D, Box3D и отладочный ImGui с воспроизводимым получением, notices и возможностью локальной сборки. Research commits не считать автоматически dependency versions. -- [ ] Определить ошибки, журналирование, проверки инвариантов, владение ресурсами и формат диагностик. -- [ ] Выбрать необходимые библиотеки шрифтов/текста, изображений и glTF, зафиксировать их лицензии и владельцев интеграции. +- [x] Создать targets Core, Runtime, Editor, Player, SchemaExporter, инструментов и примеров; запретить зависимости Runtime/Player на Editor/MCP. +- [x] Настроить CMake presets, Ninja, Clang/clang-cl, development/release и базовые проверки CI обеих ОС. +- [x] Зафиксировать стандарт C++, версии компиляторов, Windows SDK/runtime, библиотек и Slang; определить проверяемую матрицу ОС, архитектур и GPU. +- [x] Закрепить EnTT, SDL3, Slang, Box2D, Box3D и отладочный ImGui с воспроизводимым получением, notices и возможностью локальной сборки. Research commits не считать автоматически dependency versions. +- [x] Определить ошибки, журналирование, проверки инвариантов, владение ресурсами и формат диагностик. +- [x] Выбрать необходимые библиотеки шрифтов/текста, изображений и glTF, зафиксировать их лицензии и владельцев интеграции. **Готово:** чистая сборка проходит на обеих ОС, пример запускается, версии видны в отчёте. Офлайн-сборка проверяется с заранее подготовленными инструментами и зависимостями; обязательных облачных сервисов нет. @@ -55,12 +55,12 @@ Lua, C++ hot reload, Blender live link, встроенное изображен **Зависит от:** M0. **Результат:** авторский документ корректно меняется и сохраняется без GUI. -- [ ] Реализовать постоянные ID ресурсов, объектов, компонентов, типов и полей; временные runtime handles с world/session и generation хранить отдельно. -- [ ] Создать явную типизированную C++-регистрацию схем, декларативные constraints и подсказки Inspector; отделить описание данных от исполняемых callbacks. -- [ ] Ввести версионированные JSON-форматы проекта, сцены, материала и import settings; стабильную запись и сохранение неизвестных данных отсутствующего модуля. -- [ ] Создать AuthoringService: query, команды, транзакции, validation, revisions, Undo/Redo, dirty state, атомарное сохранение и recovery. -- [ ] Поддержать объекты, компоненты, изменение полей и иерархии, batch-команды и понятные ошибки. -- [ ] Добавить миграции с fixtures: переименование при прежнем FieldId, новый default, несовместимый тип и отсутствующая схема. +- [x] Реализовать постоянные ID ресурсов, объектов, компонентов, типов и полей; временные runtime handles с world/session и generation хранить отдельно. +- [x] Создать явную типизированную C++-регистрацию схем, декларативные constraints и подсказки Inspector; отделить описание данных от исполняемых callbacks. +- [x] Ввести версионированные JSON-форматы проекта, сцены, материала и import settings; стабильную запись и сохранение неизвестных данных отсутствующего модуля. +- [x] Создать AuthoringService: query, команды, транзакции, validation, revisions, Undo/Redo, dirty state, атомарное сохранение и recovery. +- [x] Поддержать объекты, компоненты, изменение полей и иерархии, batch-команды и понятные ошибки. +- [x] Добавить миграции с fixtures: переименование при прежнем FieldId, новый default, несовместимый тип и отсутствующая схема. **Готово:** round-trip сохраняет смысл и ID; неверная транзакция не применяется частично; Undo/Redo восстанавливает ссылки; устаревшая revision даёт конфликт. Документы не содержат EnTT handles или адресов памяти. @@ -68,13 +68,13 @@ Lua, C++ hot reload, Blender live link, встроенное изображен **Зависит от:** M0; загрузка сцены подключается к M1. -- [ ] Подключить SDL3 через Faset Platform: окно, ввод, текст, DPI и Vulkan surface. -- [ ] Реализовать Vulkan 1.3 backend с прямыми вызовами Vulkan API, проверкой features/limits/formats, ресурсами, синхронизацией и освобождением после завершения GPU; изолировать Vulkan handles и команды от gameplay и редакторских API. -- [ ] Создать Render Graph на одной graphics queue с явными чтениями/записями и barriers; подключить validation и метки проходов. -- [ ] Компилировать Slang в SPIR-V с закреплёнными layout/binding conventions; выгружать reflection в собственный формат. Проверить совместимый HLSL-пример. -- [ ] Получить спрайты, прозрачность и слои для 2D; static meshes, текстуры, базовый PBR, свет и обычную shadow map для 3D. -- [ ] Использовать direct draws и CPU frustum culling как эталон; ввести CPU/GPU timings и счётчики ресурсов. -- [ ] Обновлять шейдер с безопасной заменой pipeline: ошибка сохраняет рабочий вариант, изменение layout требует проверки совместимости. +- [x] Подключить SDL3 через Faset Platform: окно, ввод, текст, DPI и Vulkan surface. +- [x] Реализовать Vulkan 1.3 backend с прямыми вызовами Vulkan API, проверкой features/limits/formats, ресурсами, синхронизацией и освобождением после завершения GPU; изолировать Vulkan handles и команды от gameplay и редакторских API. +- [x] Создать Render Graph на одной graphics queue с явными чтениями/записями и barriers; подключить validation и метки проходов. +- [x] Компилировать Slang в SPIR-V с закреплёнными layout/binding conventions; выгружать reflection в собственный формат. Проверить совместимый HLSL-пример. +- [x] Получить спрайты, прозрачность и слои для 2D; static meshes, текстуры, базовый PBR, свет и обычную shadow map для 3D. +- [x] Использовать direct draws и CPU frustum culling как эталон; ввести CPU/GPU timings и счётчики ресурсов. +- [x] Обновлять шейдер с безопасной заменой pipeline: ошибка сохраняет рабочий вариант, изменение layout требует проверки совместимости. **Готово:** корректны resize/minimize, пересоздание attachments и повторный запуск; validation не сообщает ошибок в проверяемых сценариях. В игру идут SPIR-V и метаданные без обязательного Slang compiler. Создание pipelines драйвером остаётся отдельным этапом. @@ -82,14 +82,14 @@ Lua, C++ hot reload, Blender live link, встроенное изображен **Зависит от:** M1 и M2 для визуального запуска. -- [ ] Преобразовывать authoring-сцену в EnTT-мир с картой происхождения и удобным typed API объектов/компонентов. -- [ ] Создать gameplay static library и SchemaExporter с теми же регистрациями: экспорт схем без запуска gameplay lifecycle или графического окна. Editor читает проверяемый декларативный результат. -- [ ] Реализовать OnStart, Update, FixedUpdate, LateUpdate, OnDestroy и события физики; регистрировать только нужные обработчики. -- [ ] Зафиксировать tick (default 60 Гц): structural commands → ввод → FixedUpdate → физика → readback/events → реакции. Spawn/despawn и изменение состава компонентов вступают в силу со следующего tick. -- [ ] Вызывать Update один раз за игровой кадр, LateUpdate после подготовки отображаемых положений. Интерполяция не пишет обратно в симуляцию. -- [ ] Подключить независимые адаптеры Box2D/Box3D: тела и коллайдеры для демо, collision layers, события и debug drawing. Динамическим телом управляет физика; телепортация явная. -- [ ] Ограничить catch-up (начальный лимит четыре ticks за проход); лишнее время локального Player отбрасывать с диагностикой. После pause/reset не догонять паузу; teleport/spawn сбрасывает историю интерполяции. -- [ ] Запускать Player отдельным процессом/окном из текущего снимка сцены, включая несохранённые правки; реализовать Play/Stop, pause/single-step, логи и обработку завершения. +- [x] Преобразовывать authoring-сцену в EnTT-мир с картой происхождения и удобным typed API объектов/компонентов. +- [x] Создать gameplay static library и SchemaExporter с теми же регистрациями: экспорт схем без запуска gameplay lifecycle или графического окна. Editor читает проверяемый декларативный результат. +- [x] Реализовать OnStart, Update, FixedUpdate, LateUpdate, OnDestroy и события физики; регистрировать только нужные обработчики. +- [x] Зафиксировать tick (default 60 Гц): structural commands → ввод → FixedUpdate → физика → readback/events → реакции. Spawn/despawn и изменение состава компонентов вступают в силу со следующего tick. +- [x] Вызывать Update один раз за игровой кадр, LateUpdate после подготовки отображаемых положений. Интерполяция не пишет обратно в симуляцию. +- [x] Подключить независимые адаптеры Box2D/Box3D: тела и коллайдеры для демо, collision layers, события и debug drawing. Динамическим телом управляет физика; телепортация явная. +- [x] Ограничить catch-up (начальный лимит четыре ticks за проход); лишнее время локального Player отбрасывать с диагностикой. После pause/reset не догонять паузу; teleport/spawn сбрасывает историю интерполяции. +- [x] Запускать Player отдельным процессом/окном из текущего снимка сцены, включая несохранённые правки; реализовать Play/Stop, pause/single-step, логи и обработку завершения. **Готово:** C++-поведение появляется в Inspector через schema export, двигает объект и реагирует на физику. Stop сохраняет авторскую сцену. Ошибка сборки оставляет старую схему/сборку с явным статусом устаревания; старый результат не выдаётся за новый. Player не содержит MCP и не требует Editor. @@ -97,13 +97,13 @@ Lua, C++ hot reload, Blender live link, встроенное изображен **Зависит от:** M1, M2. -- [ ] Построить retained tree, layout, clipping/scroll, события, focus, keyboard navigation, drag/drop и lifecycle widgets. -- [ ] Подключить шрифты/shaping по выбору M0; проверить кириллицу, выделение/редактирование текста, clipboard, IME и разный DPI. -- [ ] Разделить C++-поведение, декларативную компоновку и стили с тёмной темой; поддержать программное создание Inspector. -- [ ] Реализовать кнопки, текстовые/числовые поля, списки/дерево, выбор ресурса, вкладки, панели и разделители. -- [ ] Оформить встроенные подписи, команды, подсказки и сообщения на английском; проверить, что Unicode-текст проекта отображается и редактируется независимо от языка интерфейса. -- [ ] Добавить минимальный docking в одном окне и сохранение раскладки; дополнительные системные окна редактора отложить. -- [ ] Перезагружать layout/styles с проверкой и сохранением рабочего состояния; ImGui использовать для диагностики. +- [x] Построить retained tree, layout, clipping/scroll, события, focus, keyboard navigation, drag/drop и lifecycle widgets. +- [x] Подключить шрифты/shaping по выбору M0; проверить кириллицу, выделение/редактирование текста, clipboard, IME и разный DPI. +- [x] Разделить C++-поведение, декларативную компоновку и стили с тёмной темой; поддержать программное создание Inspector. +- [x] Реализовать кнопки, текстовые/числовые поля, списки/дерево, выбор ресурса, вкладки, панели и разделители. +- [x] Оформить встроенные подписи, команды, подсказки и сообщения на английском; проверить, что Unicode-текст проекта отображается и редактируется независимо от языка интерфейса. +- [x] Добавить минимальный docking в одном окне и сохранение раскладки; дополнительные системные окна редактора отложить. +- [x] Перезагружать layout/styles с проверкой и сохранением рабочего состояния; ImGui использовать для диагностики. **Готово:** интерфейс доступен клавиатурой, текст и DPI работают, стили меняются без C++ rebuild. Правка widget вызывает AuthoringService; один drag создаёт один Undo. @@ -111,14 +111,14 @@ Lua, C++ hot reload, Blender live link, встроенное изображен **Зависит от:** M1, M2; UI состояния подключается по M4. -- [ ] Реализовать AssetId, import settings, dependency graph, artifacts и manifest готового поколения. -- [ ] Включить в ключ кэша входы, настройки, версии importer/toolchain и целевой профиль; показывать ошибки/устаревшие результаты. -- [ ] Импортировать профиль glTF/GLB и изображения для демо; описать PBR-подмножество, единицы, оси и collider policy. -- [ ] Поддержать обычный GLB без Blender add-on; явно ограничить matching после rename/restructure без устойчивых IDs. -- [ ] Создать минимальное необязательное дополнение обычного Blender: export button, сохраняемые IDs и manifest; записывать версию exporter и профиль. -- [ ] Обновлять только импортированную основу, сохраняя gameplay/physics settings и overrides Faset. Исчезновение цели создаёт конфликт. -- [ ] Публиковать GLB/manifest/зависимости как согласованное поколение; ошибка/отмена оставляет последний рабочий artifact. -- [ ] Предоставить одинаковый импорт через UI/CLI/MCP редактора; длительная операция имеет ID, progress и cancellation. +- [x] Реализовать AssetId, import settings, dependency graph, artifacts и manifest готового поколения. +- [x] Включить в ключ кэша входы, настройки, версии importer/toolchain и целевой профиль; показывать ошибки/устаревшие результаты. +- [x] Импортировать профиль glTF/GLB и изображения для демо; описать PBR-подмножество, единицы, оси и collider policy. +- [x] Поддержать обычный GLB без Blender add-on; явно ограничить matching после rename/restructure без устойчивых IDs. +- [x] Создать минимальное необязательное дополнение обычного Blender: export button, сохраняемые IDs и manifest; записывать версию exporter и профиль. +- [x] Обновлять только импортированную основу, сохраняя gameplay/physics settings и overrides Faset. Исчезновение цели создаёт конфликт. +- [x] Публиковать GLB/manifest/зависимости как согласованное поколение; ошибка/отмена оставляет последний рабочий artifact. +- [x] Предоставить одинаковый импорт через UI/CLI/MCP редактора; длительная операция имеет ID, progress и cancellation. **Готово:** изменение mesh в Blender обновляет несколько экземпляров без потери компонентов/overrides; rename со стабильным ID сохраняет связь, удаление создаёт понятный конфликт. Игра использует cooked assets без Blender. @@ -126,13 +126,13 @@ Lua, C++ hot reload, Blender live link, встроенное изображен **Зависит от:** M1, M3, M4, M5. -- [ ] Собрать Scene Tree, Inspector, Asset Browser, 2D/3D viewport, Console, Project Settings и команды Save/Play/Build. -- [ ] Реализовать selection, focus, gizmos, создание объектов/компонентов, поиск и основные shortcuts. -- [ ] Ввести шаблон как scene asset: InstanceId, исходные ObjectId/ComponentId, sparse overrides и вложенные экземпляры без циклов. -- [ ] Адресовать overrides по цепочке инстанцирования и IDs, независимо от имён/parenting; при duplicate remap внутренних ссылок, внешние сохранить. -- [ ] Поддержать локальные добавления, suppression, ограниченный reparent внутри экземпляра с явным local/world transform; массивы переопределять целиком. -- [ ] Показывать происхождение значения, Revert и открытие источника. Сохранять конфликтующие данные исчезнувших targets/types; Apply to template и inherited variants отложить. -- [ ] Обеспечить одинаковые операции и Undo/Redo для 2D/3D; восстановить проект с очищенным кэшем. +- [x] Собрать Scene Tree, Inspector, Asset Browser, 2D/3D viewport, Console, Project Settings и команды Save/Play/Build. +- [x] Реализовать selection, focus, gizmos, создание объектов/компонентов, поиск и основные shortcuts. +- [x] Ввести шаблон как scene asset: InstanceId, исходные ObjectId/ComponentId, sparse overrides и вложенные экземпляры без циклов. +- [x] Адресовать overrides по цепочке инстанцирования и IDs, независимо от имён/parenting; при duplicate remap внутренних ссылок, внешние сохранить. +- [x] Поддержать локальные добавления, suppression, ограниченный reparent внутри экземпляра с явным local/world transform; массивы переопределять целиком. +- [x] Показывать происхождение значения, Revert и открытие источника. Сохранять конфликтующие данные исчезнувших targets/types; Apply to template и inherited variants отложить. +- [x] Обеспечить одинаковые операции и Undo/Redo для 2D/3D; восстановить проект с очищенным кэшем. **Готово:** пользователь создаёт сцену без ручного JSON, размещает два экземпляра, меняет один, обновляет источник, отменяет правки и переоткрывает проект без потери идентичности. @@ -140,12 +140,12 @@ Lua, C++ hot reload, Blender live link, встроенное изображен **Зависит от:** M1, M5, M6; headless проверки возможны раньше GUI. -- [ ] Подключить MCP к AuthoringService: документы/query/schema, create/delete/set, batches, Undo/Redo, import/build/export, Play/Stop и диагностика редактора. -- [ ] Ввести capabilities и структурированные ошибки. Headless authoring/build не требует GUI; screenshot editor viewport требует render backend и GPU. -- [ ] Проверять revisions и конфликты ручных/MCP-изменений; не повторять слепую запись поверх нового состояния. Повтор запроса не дублирует завершённую транзакцию. -- [ ] Предоставить jobs ID/progress/result/cancellation; отделить отмену задачи от Undo документа. -- [ ] Загружать editor DLL/SO при старте: manifest, exact SDK/build compatibility, зависимости и владельцы регистраций. Обновление — через перезапуск. -- [ ] Проверить extension-пакет с runtime-компонентом и editor-командой/панелью; правки документов проходят через command API. +- [x] Подключить MCP к AuthoringService: документы/query/schema, create/delete/set, batches, Undo/Redo, import/build/export, Play/Stop и диагностика редактора. +- [x] Ввести capabilities и структурированные ошибки. Headless authoring/build не требует GUI; screenshot editor viewport требует render backend и GPU. +- [x] Проверять revisions и конфликты ручных/MCP-изменений; не повторять слепую запись поверх нового состояния. Повтор запроса не дублирует завершённую транзакцию. +- [x] Предоставить jobs ID/progress/result/cancellation; отделить отмену задачи от Undo документа. +- [x] Загружать editor DLL/SO при старте: manifest, exact SDK/build compatibility, зависимости и владельцы регистраций. Обновление — через перезапуск. +- [x] Проверить extension-пакет с runtime-компонентом и editor-командой/панелью; правки документов проходят через command API. **Готово:** ручные и MCP-операции дают эквивалентные канонические документы и историю. Нет MCP runtime-entity read/write; MCP transport отсутствует в Player и SchemaExporter. Отключённый пакет не уничтожает данные неизвестного компонента; экспорт сообщает о нерешённой зависимости. @@ -153,12 +153,12 @@ Lua, C++ hot reload, Blender live link, встроенное изображен **Зависит от:** M3, M5, M6, M7. -- [ ] Создать BuildService: validate → C++/schema build → resource/Slang cook → package → проверить результат. -- [ ] Разделить development/release manifests; исключить Editor, MCP, Blender, schema helpers и shader compiler из обязательного runtime игры. -- [ ] Подготовить две маленькие 2D/3D-игры с исходниками, понятным управлением и сценариями проверки. -- [ ] Проверить stop/build/restart, save/reopen, nested scenes, Blender reimport и shader compile failure. -- [ ] Собрать обе игры на каждой целевой ОС и запустить в чистой среде с поддерживаемым GPU-драйвером и документированными runtime-зависимостями. -- [ ] Сформировать notices, manifest ресурсов/toolchain, отчёт и инструкции разработчику/игроку. +- [x] Создать BuildService: validate → C++/schema build → resource/Slang cook → package → проверить результат. +- [x] Разделить development/release manifests; исключить Editor, MCP, Blender, schema helpers и shader compiler из обязательного runtime игры. +- [x] Подготовить две маленькие 2D/3D-игры с исходниками, понятным управлением и сценариями проверки. +- [x] Проверить stop/build/restart, save/reopen, nested scenes, Blender reimport и shader compile failure. +- [x] Собрать обе игры на каждой целевой ОС и запустить в чистой среде с поддерживаемым GPU-драйвером и документированными runtime-зависимостями. +- [x] Сформировать notices, manifest ресурсов/toolchain, отчёт и инструкции разработчику/игроку. **Готово:** все четыре сочетания «2D/3D × Linux/Windows» запускаются без исходного дерева Faset и редактора. Недостающий asset или библиотека обнаруживаются до публикации пакета. @@ -166,17 +166,19 @@ Lua, C++ hot reload, Blender live link, встроенное изображен **Зависит от:** M0–M8. -- [ ] Пройти новую установку и создание проекта по документации на обеих ОС. -- [ ] Повторить authoring-сценарий руками и через MCP; проверить Undo/Redo и конфликт revision при одновременной правке. -- [ ] Проверить recovery после сбоя сохранения, импорта, сборки и завершения Player с ошибкой. -- [ ] Записать startup, edit/build/run, import, CPU/GPU frame time и memory с оборудованием/сценами; по результатам установить бюджеты следующего этапа. -- [ ] Устранить блокирующие дефекты UX, текста, DPI, форматов и exports; записать ограничения. -- [ ] Обновить docs, приложить проверенные результаты и только затем поставить первый MVP tag. +- [x] Пройти новую установку и создание проекта по документации на обеих ОС. +- [x] Повторить authoring-сценарий руками и через MCP; проверить Undo/Redo и конфликт revision при одновременной правке. +- [x] Проверить recovery после сбоя сохранения, импорта, сборки и завершения Player с ошибкой. +- [x] Записать startup, edit/build/run, import, CPU/GPU frame time и memory с оборудованием/сценами; по результатам установить бюджеты следующего этапа. +- [x] Устранить блокирующие дефекты UX, текста, DPI, форматов и exports; записать ограничения. +- [x] Обновить docs, приложить проверенные результаты и только затем поставить первый MVP tag. ## 4. Развитие после MVP ### P1. Lua и скорость итераций +Начальные бюджеты отслеживания для конкретных демо и Linux reference host: frame p95 ≤ 4 мс, GPU/readback p95 ≤ 1 мс, simulation/snapshot p95 ≤ 0,5 мс, явные Vulkan allocations ≤ 20 MiB, startup от `main()` ≤ 500 мс. [Методика и исходные измерения](docs/validation/linux-release-2026-09-18/README.md) ограничивают область этих чисел; для других сцен/ОС нужны отдельные baselines. Это бюджеты P1, а не обещание такой производительности любой игры. + Добавить Lua runtime/editor пакет поверх публичного API, проверяемых handles и схем. Предусмотреть диагностику, отладку, Inspector и явный lifecycle перезагрузки. Сохранение состояния при reload проектируется отдельно. Проверка: C++ и Lua используют одни данные/фазы; C++-only export не включает Lua. Улучшать schema/build cache, сообщения компилятора, шаблоны проектов, переход к коду, autosave и измеренное время «изменение → результат». Dynamic gameplay loading рассматривать при подтверждённой проблеме линковки. diff --git a/README.md b/README.md index 46a15ed..e3cb964 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Faset is an independent engine project for desktop **2D and 3D games on Linux and Windows**. Its priorities are a custom editor that is comfortable to use by hand and through MCP, integration with Blender, and a path toward advanced graphics. -**Current status: MVP acceptance is in progress.** The native Editor, shared GUI/MCP authoring, C++ gameplay builds, Vulkan Player, standalone export and two playable sample games are integrated. Linux GPU workflows are tested; complete Windows graphics/export acceptance and final validation remain in progress. See the [implementation checkpoints](docs/IMPLEMENTATION.md) for observed results; a technology appearing in the plan does not mean it is complete or benchmarked. +**Current status: the C++ MVP is implemented and accepted for the recorded Linux and Windows test profiles.** It includes the native Editor, shared GUI/MCP authoring, gameplay builds, Vulkan Player, Blender import and standalone export. Both playable games passed Release export and relocated execution on both operating systems. Windows graphics acceptance used software Vulkan; physical Windows GPUs, system IME and mixed-monitor transitions need additional coverage. See the [acceptance dossier](docs/validation/mvp-acceptance.md) for exact revisions, checks and limits, and the [implementation checkpoints](docs/IMPLEMENTATION.md) for the development record. ## Start here @@ -18,7 +18,8 @@ After following the manual's build setup, run `build/linux-debug/faset_editor` (or `build/windows-debug/faset_editor.exe`) to open the project launcher. The [`collect-2d`](examples/projects/collect-2d) and [`collect-3d`](examples/projects/collect-3d) projects include playable C++ examples; -the 3D example includes an original Blender asset and import instructions. +the 3D example includes an original Blender asset and import instructions. Import its +`Assets/exit-arch/manifest.json` once before Play, including after clearing its cache. ## Language @@ -38,7 +39,7 @@ This README is in English. The current planning documents, studies, and research - **Editor-only MCP:** authoring, assets, import, builds, export, Play/Stop, and editor diagnostics. MCP is absent from the Player and exported games. - Standard, **unmodified Blender**, glTF/GLB import, and an optional add-on for convenient export and stable IDs. -MVP is complete when two small games, one 2D and one 3D, can be created, saved, played, and exported for both operating systems. GPU-driven rendering, HZB, advanced shadows, temporal reconstruction, and dynamic global illumination follow the baseline. +The MVP provides two small games, one 2D and one 3D, with scene editing, C++ behavior, physics, Play and standalone export. Lua, GPU-driven rendering, HZB, advanced shadows, temporal reconstruction and dynamic global illumination follow this baseline. ## Run the research map diff --git a/docs/IMPLEMENTATION.md b/docs/IMPLEMENTATION.md index fd4b4c2..e222052 100644 --- a/docs/IMPLEMENTATION.md +++ b/docs/IMPLEMENTATION.md @@ -3,6 +3,11 @@ This log records working implementation and observed validation. It does not replace the acceptance criteria in `PLAN.md`. Incomplete platform or workflow checks remain open. +**Current result:** the C++ MVP is accepted in the recorded Linux and Windows profiles. +The [final dossier](validation/mvp-acceptance.md) maps M0–M9 to evidence and keeps +unverified compatibility scenarios explicit. Earlier pending/failure statements below +describe their respective checkpoints, not the final status. + ## Checkpoint 1 — native foundation and independent subsystems Implemented: @@ -287,3 +292,44 @@ Unicode relocation. It used SwiftShader without the Khronos validation layer and functional software-Vulkan evidence, not a physical-GPU benchmark. Checkpoint 5's newer Windows graphics/export run and the relocation correction have their own revision-specific gates. + +## MVP acceptance — `v0.1.0-mvp` + +Final engine source: `4cb82556de31268d2bde73948dd1ff1b6c02f162`. The publication +commit adds documentation, acceptance records and research-viewer wording; it does +not change the accepted engine, gameplay, shader or build-system sources. + +- [Final Linux evidence](validation/final-linux-2026-09-18/README.md): 34 passed, + one explicit native Wayland restore skip, zero failed. Both exact-source Release + games passed manifest validation and 120 frames after Unicode relocation with + their source projects hidden. An additional private namespace hid the entire SDK, + build directories, Editor and cached tools; both games still passed another 120 + frames with matching captures, active Khronos validation and zero errors. +- [Final Windows evidence](validation/windows-software-vulkan-2026-09-18/README.md): + [run 35301244334](https://github.com/emil28092005/Faset_Engine/actions/runs/35301244334) + passed the fresh full Editor build with ImGui diagnostics, **35/35 tests**, real + BuildService Release exports/incremental Debug rebuild and both checked-in games + after Unicode relocation. Each rendered 120 frames. SwiftShader supplied software + Vulkan; the Khronos layer was unavailable. This is functional Windows execution, + not physical Windows GPU or hardware-performance evidence. +- [Native/manual CI](https://github.com/emil28092005/Faset_Engine/actions/runs/35301244366) + passed for the same final source. The earlier clean offline build and first project + launch, seven recovery scenarios, actual Blender/live-Editor round-trip and full + 18-test sanitizer run retain their `0f34b03` provenance. The two affected asset/cook + sanitizer checks passed again after the relocation correction. +- PLAN now closes M0–M9 against the dossier. The English Manual documents the working + C++ tutorials, metadata/migrations, authoring, assets, MCP, extensions and export. + A final instruction check corrected the 3D sample's required first bundle import. + The recorded reference-scene thresholds are initial P1 tracking budgets. + +Final publication checks passed: strict MkDocs build, both research-map tests and its +production build, 318 local Markdown links, retained Windows evidence hashes, all +validation JSON records and `git diff --check`. The engine-source diff from the +accepted commit is empty; no untested engine changes were bundled into publication. + +Known coverage limits remain: real OS IME composition, movement between physical +monitors with different scales, native Wayland programmatic restore and additional +GPU/driver families. Widget composition/DPI, SDL text-input boundaries, XWayland and +Windows window lifecycle have their own passing evidence. The narrow static-mesh, +root-level box-physics, one-window/C++ MVP profile remains explicit. Lua and advanced +graphics are later work. UI references guide appearance; they do not define behavior. diff --git a/docs/README.md b/docs/README.md index bf51d69..d648377 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,6 +1,6 @@ # Документация Faset Engine -Актуализировано 18.09.2026 по принятым решениям. Реализация MVP ведётся параллельно с проверками и пользовательским руководством. +Актуализировано 18.09.2026. C++ MVP реализован и принят в зафиксированных профилях Linux и Windows; результаты и пределы проверок — в [досье приёмки](validation/mvp-acceptance.md). Manual описывает текущие функции, PLAN отделяет их от следующих этапов. ## Канонические документы diff --git a/docs/TOOLCHAINS.md b/docs/TOOLCHAINS.md index f57dbd8..20087f3 100644 --- a/docs/TOOLCHAINS.md +++ b/docs/TOOLCHAINS.md @@ -13,9 +13,10 @@ compiler, platform, CRT, configuration, dependencies and SDK source identity. - **Linux CI:** Ubuntu 24.04, x86-64, Clang **18.1.3**. The headless CPU suite and manual run on this profile. It is not evidence for desktop rendering on that runner. - **Windows CI:** Windows Server 2025 runner, x86-64, clang-cl **20.1.8**, - MSVC toolset **14.51.36231**, Windows SDK **10.0.26100.0**. Headless tests have - passed. Full Editor, software Vulkan and Release-package acceptance are tracked - separately in the implementation log until that job completes. + MSVC toolset **14.51.36231**, Windows SDK **10.0.26100.0**. Native headless tests, + the full Editor with optional diagnostics, all 35 CPU/software-GPU tests and both + relocated Release games passed. See the + [Windows record](validation/windows-software-vulkan-2026-09-18/README.md). These are recorded validation profiles, not a claim that every intermediate Clang release or every supported Windows desktop has been tested. The presets deliberately @@ -78,8 +79,11 @@ An offline build is recorded only after a clean build directory is configured an built with network access disabled. A warm incremental build or archive checksum verification alone is not that acceptance check. -Commit `d834cfad67cd81d8c4998b90c16791361ca8c0f8` passed this check on Linux: full -native build and 19 CPU tests in a new user/network namespace with no external -connectivity, using a `git archive` checkout and only prefetched inputs. See -[`validation/offline-linux-2026-09-18.json`](validation/offline-linux-2026-09-18.json). +Commit `0f34b036313c011861dbfd5828ed45c4f7940b05` passed this check on Linux: full +native build and 20 CPU tests in a new user/network namespace with no external +connectivity, using a `git archive` checkout and only prefetched inputs. A fresh +project was then created and rendered from that SDK. See the +[checkpoint 5 record](validation/checkpoint5-linux-2026-09-18/README.md). +The [earlier offline run](validation/offline-linux-2026-09-18.json) retains its own +`d834cfa` revision and 19-test result. Reproduce using `python3 tools/verify_offline_build.py --output .cache/offline-check`. diff --git a/docs/manual/getting-started/build.md b/docs/manual/getting-started/build.md index 40c5b9f..a133715 100644 --- a/docs/manual/getting-started/build.md +++ b/docs/manual/getting-started/build.md @@ -1,8 +1,9 @@ # Build from source -!!! note "Implementation checkpoint" - Linux Editor, Player and export integration are tested. Final Windows graphics/export - acceptance is tracked separately in the implementation report. +!!! note "Verified build profiles" + The Editor, Player and both sample exports passed the recorded Linux and Windows + profiles. Linux rendering used an RTX 2080 Ti; Windows CI used SwiftShader. This + does not certify every graphics driver or display configuration. ## Linux prerequisites @@ -91,8 +92,18 @@ cmake --build --preset windows-debug --parallel ctest --preset windows-debug ``` -Windows acceptance is tracked separately from Linux; a successful Linux build does -not verify a Windows build. +Windows acceptance uses a fresh native CI checkout, full Editor build, launcher +Create/Open tests, native window/MCP tests and standalone Release exports. Its +software Vulkan driver is a CI fixture; install your normal hardware Vulkan driver +on a development desktop. See the +[acceptance dossier](https://github.com/emil28092005/Faset_Engine/blob/main/docs/validation/mvp-acceptance.md) +for observed results. + +Native Wayland programmatic restore was skipped when the tested compositor declined +the operation; XWayland passed. If this affects your desktop, run the Editor with +`SDL_VIDEODRIVER=x11`. Real system IME composition and movement between physical +monitors with different scale factors remain compatibility checks, beyond the +passing deterministic text/DPI tests. The repository's `docs/TOOLCHAINS.md` records the exact compiler, SDK and GPU profiles used in observed validation, separately from the minimum tool requirements above. diff --git a/docs/manual/index.md b/docs/manual/index.md index eed7a87..d5d88aa 100644 --- a/docs/manual/index.md +++ b/docs/manual/index.md @@ -4,11 +4,13 @@ Faset is a C++ engine for desktop 2D and 3D games on Linux and Windows. This manual focuses on writing gameplay: small working examples, the functions they use, and how those functions interact with scenes, physics, and the editor. -!!! warning "Development status" - MVP implementation is in progress. A planned feature is not a working feature. - Individual guides state their prerequisites and validation status. The current - Editor, gameplay tutorials, two playable sample games and Linux export can be built - and tested. Final Windows graphics/export acceptance is still in progress. +!!! note "MVP scope" + The C++ MVP includes the Editor, compiled gameplay tutorials, two playable games, + Blender import and standalone Linux/Windows export. Acceptance used a physical + Linux GPU and software Vulkan on Windows. See the + [acceptance dossier](https://github.com/emil28092005/Faset_Engine/blob/main/docs/validation/mvp-acceptance.md) + for exact source revisions and coverage limits. Lua and advanced graphics remain + later milestones. Start with [how C++ gameplay works](scripting/index.md), then read [frame and physics updates](scripting/lifecycle.md). See diff --git a/docs/manual/scripting/examples.md b/docs/manual/scripting/examples.md index 0d42a5b..9a53004 100644 --- a/docs/manual/scripting/examples.md +++ b/docs/manual/scripting/examples.md @@ -51,8 +51,8 @@ Schema declarations are tested for stable map-key/FieldId matching and defaults. ## Play complete small projects -`examples/projects/collect-2d` and `examples/projects/collect-3d` contain complete projects with a manifest, scene, and a separate `Scripts` module. Open either folder with the Editor's `--project` option, then use Play. Each project's README also provides a direct Player build command. +`examples/projects/collect-2d` and `examples/projects/collect-3d` contain complete projects with a manifest, scene, and a separate `Scripts` module. Open either folder with the Editor's `--project` option. The 2D project is ready to Play. For the 3D project, first import `Assets/exit-arch/manifest.json` from the Assets panel, then Play. Repeat this import after clearing its cache or cloning the project. Each project's README also provides the exact import and direct Player build commands. Move the blue block with A/D in 2D or WASD in 3D, jump with Space, collect three gold cubes, and reach the green exit after its red gate opens. E resets the round. One pickup is on a raised platform. A visible gold marker and the Player log confirm completion; these initial examples use geometric progress displays instead of a text HUD. -The `playable_2d` and `playable_3d` CTests drive the actual modules through input, including the jump, objective, reset, and fresh session. The 3D module also explicitly registers a separately packaged `example.beacon` component from its local `Scripts/Extensions/Beacon.hpp`. Both projects use built-in geometry and need no imported assets to start. +The `playable_2d` and `playable_3d` CTests drive the actual modules through input, including the jump, objective, reset, and fresh session. The 3D module also explicitly registers a separately packaged `example.beacon` component from its local `Scripts/Extensions/Beacon.hpp`. Gameplay geometry uses built-in primitives; the 3D scene additionally references the imported Blender arch. Its GLB bundle is included, so Blender is only needed to edit or recreate that source asset. diff --git a/docs/studies/map/research.tsx b/docs/studies/map/research.tsx index 2f31a61..709150a 100644 --- a/docs/studies/map/research.tsx +++ b/docs/studies/map/research.tsx @@ -71,7 +71,7 @@ function Architecture() { [560, 225, 245, "Player · отдельный процесс", "EnTT · C++ · physics · без MCP"], [560, 330, 245, "Vulkan 1.3 renderer", "MVP: direct draws + CPU frustum"], ] as const; - return