Update design documentation to clarify the structure and relationships of game elements. Enhance the definitions of TerritoryDef, BuildingDef, and FloorDef, and introduce new concepts like Patch for modifying definitions. Revise the near-term design to outline the UI structure and interactions, ensuring a clear framework for future development phases.
ci / server (push) Failing after 3m37s
ci / client (push) Successful in 16s

This commit is contained in:
Leonid Pershin
2026-08-18 13:41:35 +03:00
parent d96b420133
commit bc9a33e67f
9 changed files with 337 additions and 105 deletions
+34
View File
@@ -0,0 +1,34 @@
# Фаза 3. Каталог def и карта
## Зависимости
- [Фаза 2](02-school-worker.md) — каталог и раскладка живут у работника школы
## Зачем
Типы в JSONC, инстанс карты в школе, валидация связности. Без этого нечему редактировать в create.
## Задачи
- [ ] Проект `HSchool.Content` (+ тесты): JSONC, defs, локали, граф карты, валидация. Не Arch, не ASP.NET
- [ ] Загрузчик пачки документов (сервер потом подставит папки `mods/`)
- [ ] `core` всегда первый; дальше моды по списку; повтор `defName` / ключа локали — последний победил, warning в лог
- [ ] Резолв ссылок `ThingDef.actions`, слотов RoomDef после чтения всего набора
- [ ] Карта-инстанс: двор (TerritoryDef) всегда есть; здания (BuildingDef), этажи (FloorDef + id), помещения, двусторонние рёбра
- [ ] Валидация: неизвестный def, ребро в никуда, несвязный граф, изолированный узел
- [ ] Пустая комната допустима; должности для панели — из def узла, если они там есть
- [ ] Каталог замораживается на работнике при create/load; сейв хранит id модов и раскладку, не развёрнутый каталог
- [ ] Нет папки мода из сейва — школу не стартовать, файл не удалять, в лог
- [ ] Обновить ориентир в `AGENTS.md` (куда класть defs)
- [ ] Наследование: `parent`, `abstract`, замена полей, запрет цикла и чужого вида, abstract нельзя на карту
- [ ] Патчи из `patches/`: add / replace / remove по JSON Pointer; неизвестный op или нет target — ошибка каталога
- [ ] Тесты Content: фикстуры JSONC, last-wins, parent/abstract, патч add в actions, связность, пустая комната, одна комната без двора — отказ
## Критерий готовности
- `dotnet test` покрывает загрузчик и валидацию без хоста (`HSchool.Content.Tests`)
- Ванильная раскладка `mods/core/maps/default.jsonc` проходит валидацию
## Стоп
Не UI редактора. Не исполнение ActionDef. Не xpath и не новые op сверх add/replace/remove.