5.4 KiB
Решения и границы
D001. Независимый Rust workspace
Ядро — библиотека. Сервер, MCP и конвертер — отдельные исполняемые компоненты. Общий реестр, координаты и операции доступны через публичный API. Графика и внешние сервисы не загружаются сервером.
D002. Сначала хранение и сквозная проверка
Начинаем с архитектуры памяти и долговечности; подключаем клиент до завершения полного каталога. Наличие небольшого работающего этапа не меняет конечных требований. Невыполненные пункты остаются в плане.
D003. Первый тестовый клиент — браузерный
Первый проверочный клиент использует собственный WebGL2-рендерер без готового игрового движка. Это ускоряет проверку двух подключений и MCP на локальной машине. Ядро и сервер остаются Rust. Нативный Rust-клиент не считается реализованным таким клиентом; для самостоятельного нативного выпуска и интеграции с Launcher потребуется отдельный шаг. Клиент не должен навязывать формат хранения серверу.
D004. Серверу нельзя доверять заявлениям клиента о собственной целостности
Манифесты/хеши проверяют совместимость и загруженные файлы. Сервер подтверждает игровые действия и передаёт только необходимые данные. Полный запрет модифицированных клиентов на контролируемом игроком устройстве не гарантируется протоколом самопроверки. Подписывание дистрибутива и интеграция лаунчера являются отдельными задачами.
D005. Совместимость с Minecraft — адаптер
Свой формат мира не является копией Anvil. Версия конвертера и профиля экспорта явная. Неподдерживаемые данные нельзя молча заменять воздухом. Каталог имён не эквивалентен реализации формы, коллизии, поведения и round-trip сохранения.
D006. Безопасные локальные значения по умолчанию
Сервер слушает localhost. Управляющий API требует отдельный токен; обычный игровой клиент его не получает. Все очереди и объёмы запросов имеют предел. Собственные тестовые каталоги отделены от реальных миров.
D007. Версии и контракты пока рабочие
CONTRACT.md — начальная спецификация для параллельной разработки, не обещание стабильного публичного API. Изменения согласуются до зависимой реализации и отражаются в документации. Особенно важно проверить атомарность правок, фиксацию шаблонов, ограничения registry и сетевой синхронизации.
D008. Надёжное хранение на SQLite/WAL
Для первой реализации выбираем SQLite с транзакциями, WAL и synchronous=FULL, ограниченным кэшем страниц и блокировкой второго писателя. Секции остаются собственными компактными бинарными данными; SQLite хранит ссылки, метаданные и историю. Это позволяет проверять игровой формат без одновременного изобретения механизма надёжных транзакций. Размер файла, объём WAL и собственная память SQLite учитываются отдельно.
D009. Консервативная отмена в первом этапе
Undo разрешён только для последней ревизии, созданной целевой правкой. Любая последующая операция, включая возврат блока к прежнему значению, запрещает такой undo. Это строже будущей избирательной отмены, зато не допускает потери последующих изменений. Ограничение явно указывается в API; сброс арены также является границей истории.