docs: present Shacraft Core and its documentation in English

This commit is contained in:
Emil
2026-09-14 17:58:30 +03:00
parent b6ba064339
commit 26748912c6
18 changed files with 643 additions and 620 deletions
+19 -19
View File
@@ -1,37 +1,37 @@
# Решения и границы
# Decisions and boundaries
## D001. Независимый Rust workspace
## D001. Independent Rust workspace
Ядро — библиотека. Сервер, MCP и конвертер — отдельные исполняемые компоненты. Общий реестр, координаты и операции доступны через публичный API. Графика и внешние сервисы не загружаются сервером.
The core is a library. The server, MCP, and converter are separate executable components. The shared registry, coordinates, and operations are available through a public API. The server does not load graphics or external services.
## D002. Сначала хранение и сквозная проверка
## D002. Storage and end-to-end verification first
Начинаем с архитектуры памяти и долговечности; подключаем клиент до завершения полного каталога. Наличие небольшого работающего этапа не меняет конечных требований. Невыполненные пункты остаются в плане.
Start with memory architecture and durability; connect the client before completing the full catalog. A small working milestone does not change the final requirements. Unfinished items remain in the plan.
## D003. Первый тестовый клиент — браузерный
## D003. The first test client runs in the browser
Первый проверочный клиент использует собственный WebGL2-рендерер без готового игрового движка. Это ускоряет проверку двух подключений и MCP на локальной машине. Ядро и сервер остаются Rust. Нативный Rust-клиент не считается реализованным таким клиентом; для самостоятельного нативного выпуска и интеграции с Launcher потребуется отдельный шаг. Клиент не должен навязывать формат хранения серверу.
The first verification client uses a custom WebGL2 renderer without an existing game engine. This makes it quicker to test two connections and MCP on a local machine. The core and server remain in Rust. This client does not count as an implemented native Rust client; a standalone native release and Launcher integration require a separate step. The client must not dictate the server's storage format.
## D004. Серверу нельзя доверять заявлениям клиента о собственной целостности
## D004. The server cannot trust the client's claims about its own integrity
Манифесты/хеши проверяют совместимость и загруженные файлы. Сервер подтверждает игровые действия и передаёт только необходимые данные. Полный запрет модифицированных клиентов на контролируемом игроком устройстве не гарантируется протоколом самопроверки. Подписывание дистрибутива и интеграция лаунчера являются отдельными задачами.
Manifests and hashes verify compatibility and downloaded files. The server validates game actions and sends only the necessary data. A self-check protocol cannot guarantee a complete ban on modified clients running on devices controlled by players. Distribution signing and launcher integration are separate tasks.
## D005. Совместимость с Minecraft — адаптер
## D005. Minecraft compatibility is an adapter
Свой формат мира не является копией Anvil. Версия конвертера и профиля экспорта явная. Неподдерживаемые данные нельзя молча заменять воздухом. Каталог имён не эквивалентен реализации формы, коллизии, поведения и round-trip сохранения.
The native world format is not a copy of Anvil. Converter and export profile versions are explicit. Unsupported data must not be silently replaced with air. A catalog of names is not equivalent to implementing shapes, collisions, behavior, and round-trip preservation.
## D006. Безопасные локальные значения по умолчанию
## D006. Safe local defaults
Сервер слушает localhost. Управляющий API требует отдельный токен; обычный игровой клиент его не получает. Все очереди и объёмы запросов имеют предел. Собственные тестовые каталоги отделены от реальных миров.
The server listens on localhost. The control API requires a separate token that the ordinary game client never receives. All queues and request sizes have limits. Test data directories are separate from real worlds.
## D007. Версии и контракты пока рабочие
## D007. Versions and contracts are provisional
`CONTRACT.md` — начальная спецификация для параллельной разработки, не обещание стабильного публичного API. Изменения согласуются до зависимой реализации и отражаются в документации. Особенно важно проверить атомарность правок, фиксацию шаблонов, ограничения registry и сетевой синхронизации.
`CONTRACT.md` is an initial specification for parallel development, not a promise of a stable public API. Changes are agreed before dependent implementation and reflected in the documentation. Edit atomicity, pinned templates, registry limits, and network synchronization limits require particular attention.
## D008. Надёжное хранение на SQLite/WAL
## D008. Durable storage with SQLite/WAL
Для первой реализации выбираем SQLite с транзакциями, WAL и `synchronous=FULL`, ограниченным кэшем страниц и блокировкой второго писателя. Секции остаются собственными компактными бинарными данными; SQLite хранит ссылки, метаданные и историю. Это позволяет проверять игровой формат без одновременного изобретения механизма надёжных транзакций. Размер файла, объём WAL и собственная память SQLite учитываются отдельно.
The first implementation uses SQLite with transactions, WAL, `synchronous=FULL`, a bounded page cache, and a lock that prevents a second writer. Sections remain custom compact binary data; SQLite stores references, metadata, and history. This lets us verify the game format without also inventing a reliable transaction mechanism. File size, WAL size, and SQLite's own memory are accounted for separately.
## D009. Консервативная отмена в первом этапе
## D009. Conservative undo in the first milestone
Undo разрешён только для последней ревизии, созданной целевой правкой. Любая последующая операция, включая возврат блока к прежнему значению, запрещает такой undo. Это строже будущей избирательной отмены, зато не допускает потери последующих изменений. Ограничение явно указывается в API; сброс арены также является границей истории.
Undo is allowed only at the latest revision created by the target edit. Any subsequent operation, including returning a block to its previous value, prevents that undo. This is stricter than future selective undo, but prevents the loss of later changes. The API states this limitation explicitly; resetting an arena is also a history boundary.