80 lines
11 KiB
Markdown
80 lines
11 KiB
Markdown
# План разработки
|
||
|
||
План составлен до реализации. Каждый этап заканчивается воспроизводимым результатом в локальном репозитории. `docs/STATUS.md` обновляется после проверок. Пункт не считается выполненным по наличию интерфейса, заглушки, каталога имён или успешной компиляции.
|
||
|
||
## Этап 0. Сохранить контекст и проверить проектирование
|
||
|
||
- Записать исходные требования, решения, контракты и критерии приёмки.
|
||
- Зафиксировать источники данных совместимости и ограничения лицензий.
|
||
- Разделить компоненты так, чтобы можно было независимо разрабатывать хранение, совместимость, сетевой сервер и клиент.
|
||
- Согласовать обработку ошибок, координаты, ревизии, ограничения операций и формат диагностики.
|
||
|
||
Выход: документы в `docs/`; список решений без молчаливого сокращения объёма.
|
||
|
||
## Этап 1. Ядро и доказуемое управление памятью
|
||
|
||
- Rust workspace; координаты с корректными отрицательными значениями; реестр канонических состояний блоков.
|
||
- Секции 16×16×16: единообразное состояние или палитра и упакованные индексы. Отсутствие отдельного объекта на каждый блок.
|
||
- Собственный версионированный формат хранения, ограниченный кэш, выгрузка на диск; операции чтения не изменяют мир.
|
||
- Независимые экземпляры общей карты. Изменение/сброс одного экземпляра не влияет на другие; снимок основы имеет чёткую семантику.
|
||
- Атомарные правки с журналом восстановления, ревизиями и идемпотентностью. История и undo хранятся на диске с ограниченным потреблением RAM.
|
||
- Проверки границ секций, упаковки, изоляции миров, повторов, конфликтов, сохранения и восстановления после сбоя. Измерение хранения общей карты против копий.
|
||
|
||
Выход: самостоятельная библиотека и воспроизводимые тесты/измерения. Это ещё не весь MVP.
|
||
|
||
## Этап 2. Сервер и минимальный клиент — сквозной сценарий
|
||
|
||
- Сервер владеет миром и симуляцией; фиксированный тик, серверные движение/столкновения и проверка взаимодействий.
|
||
- Версионированный протокол: подключение, начальный снимок, изменения блоков, игроки, переход между мирами, ошибки и восстановление подключения.
|
||
- Лимиты числа игроков, радиуса мира, сообщений, частоты действий и очередей. Медленный клиент не увеличивает память сервера без ограничения.
|
||
- Тестовый клиент: собственный рендерер, камера, управление, блоки, простые сущности, состояния соединения. Сервер остаётся без графики.
|
||
- Два независимых клиента видят одинаковые изменения. Перезапуск сохраняет мир. Подключение и выход не оставляют сущности и фоновые задачи.
|
||
|
||
Выход: запускаемая локальная сетевая песочница. На первом проходе допустим небольшой набор материалов; это не выполнение требования полного каталога.
|
||
|
||
## Этап 3. Control API и собственный MCP
|
||
|
||
- Общий API чтения, редактирования, истории и диагностики; MCP — отдельный процесс с stdio.
|
||
- Поиск материалов, чтение ограниченной области, пакетное строительство и шаблоны, preview/commit, undo с защитой от чужих изменений.
|
||
- Ресурсы с системой координат и возможностями; структурированные ответы и понятные ошибки.
|
||
- Визуальная обратная связь: снимок с явно указанными типом отображения и ревизией; топографический preview не объявляется снимком игрового клиента.
|
||
- Тестовые миры, сущности, управление аренами и метрики. Авторизация управляющего API; токен не попадает в клиентский код и журнал.
|
||
- Реальная MCP-сессия: initialize → list → build → inspect/capture → undo; параллельный клиент видит результат.
|
||
|
||
Выход: законченный цикл автоматизированного строительства с проверкой результата.
|
||
|
||
## Этап 4. Контент и двусторонняя совместимость
|
||
|
||
- Проверить полный источник каталога именно Java 26.2; генерировать воспроизводимо, хранить происхождение и версию данных.
|
||
- Реализовать формы, коллизии и отображение семейств блоков; отдельно учитывать неподдерживаемые особенности. Базовые определения сущностей и сохраняемые свойства.
|
||
- Импорт Anvil/NBT по частям с ограниченным бюджетом памяти; обработка измерений и дополнительного NBT.
|
||
- Экспорт мира в целевую версию; режим точности и явных замен, sidecar для неподдерживаемых данных, корректное инвалидирование происхождения после правок.
|
||
- `.schem` import/export; тестовые fixtures; повторное открытие экспортированных данных независимым читателем и, при доступности целевой игры, самой игрой.
|
||
|
||
Выход: проверенный обмен заявленными данными с отчётом покрытия. Полный каталог имён без форм/данных не закрывает этот этап.
|
||
|
||
## Этап 5. Единые пакеты и законченная миниигра
|
||
|
||
- Версионированный манифест с зависимостями, клиентскими/серверными частями, размерами, хешами, лицензиями и возможностями.
|
||
- Небольшой собственный базовый набор ассетов. Проверяемая загрузка клиентских ресурсов и кэш; обязательные ресурсы отделены от необязательного качества.
|
||
- Первое расширение через единый формат, работающий клиентский и серверный сценарий. Декларативная конфигурация не называется полноценной средой произвольных модулей.
|
||
- Spleef: ожидание → отсчёт → игра → выбывание → победитель → сброс. Несколько независимых арен используют общую карту.
|
||
- Повторные матчи, отключения, вход во время игры, переход в лобби, сохранение настроек после перезапуска.
|
||
|
||
Выход: друзья могут сыграть законченный матч, а другой разработчик — добавить документированное расширение.
|
||
|
||
## Этап 6. Приёмка, измерения и поставка
|
||
|
||
- Проверить все критерии `ACCEPTANCE.md`; отдельный список фактического покрытия и ограничений.
|
||
- Измерить RSS/пик памяти, хранение секций, кэши, сетевые очереди, p95/p99 тика, поведение после многократных матчей и перезапуска.
|
||
- Сравнение с Paper проводить только при доступном сопоставимом стенде. До этого публиковать собственные числа без заявлений о кратности выигрыша.
|
||
- Инструкции запуска, конфигурация MCP, описание API/формата пакетов, лицензии, контрольная сумма исходного архива, Git-коммит.
|
||
- Продакшен-публикация и изменение лаунчера — отдельная интеграционная работа после локальной проверки.
|
||
|
||
Выход: воспроизводимый локальный релиз MVP с честным отчётом, исходным архивом и известными ограничениями.
|
||
|
||
## Рабочий порядок после планирования
|
||
|
||
Сначала этап 1. Параллельно с ним можно готовить протокол и клиент по согласованному контракту, изучать каталог/конвертер. Подключение этих частей, изменения общих интерфейсов и проверки выполняются последовательно. После каждого этапа — сохранить результат; не оставлять единственную копию в одноразовой среде.
|
||
|