38 lines
5.4 KiB
Markdown
38 lines
5.4 KiB
Markdown
# Решения и границы
|
|
|
|
## 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; сброс арены также является границей истории.
|