Remove off-queue.md and add new design documentation files including README.md, defs.md, near-term.md, projects.md, runtime.md, people.md, staffing.md, and schedule.md to outline the structure and agreements for the game's design phases.
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# Нарезка проектов (целевая)
|
||||
|
||||
Сейчас в коде: `Protocol ← Server → Simulation → Ai → People / Schedule → Content`. Каталог не в Simulation (рядом с Arch)
|
||||
и не в Server (рядом с Kestrel) — парсер JSONC и проверка графа не знают, что такое tick.
|
||||
|
||||
## Зависимости
|
||||
|
||||
```
|
||||
Protocol — ни на кого из игровых проектов (только байты)
|
||||
Content — ни на Protocol, ни на Simulation, ни на ASP.NET
|
||||
People → Content (defs, карта, склонения; без Arch и хоста)
|
||||
Schedule → Content (раскладка уроков; без Arch и хоста)
|
||||
Ai → Content, People, Schedule (маршруты и решения; без Arch и хоста)
|
||||
Simulation → Ai, People, Content (ростер в World; без HTTP)
|
||||
Server → Protocol, Simulation, People, Content
|
||||
Client — своя сторона Protocol (TS) + HTTP
|
||||
```
|
||||
|
||||
Клиент по-прежнему не ссылается на C#-проекты.
|
||||
|
||||
## Кто чем владеет
|
||||
|
||||
| Проект | Да | Нет |
|
||||
| --- | --- | --- |
|
||||
| **HSchool.Content** | Типы def, JSONC-загрузчик, наследование, патчи, слияние локалей, граф карты, валидация связности | Arch, часы, HTTP, потоки, пути `mods/` с диска хоста |
|
||||
| **HSchool.People** | Генерация ростера: семьи, классы, тело/навыки/черты из каталога, сида и родного языка школы | Arch, ASP.NET, сокеты, `DateTime.Now`, файлы сейва |
|
||||
| **HSchool.Schedule** | Раскладка учебного плана в таблицу уроков вокруг закреплённых правок | Arch, ASP.NET, сокеты, `DateTime.Now`, файлы сейва |
|
||||
| **HSchool.Ai** | Маршруты по графу карты, план дня человека, выбор цели и действия, продвижение плана во времени | Arch, ASP.NET, сокеты, `DateTime.Now`, файлы сейва |
|
||||
| **HSchool.Simulation** | `School`, `GameClock`, Arch `World`, тик, применение раскладки к миру, адаптер к `Ai` | Kestrel, сокеты, `Directory.Enumerate`, сейв-файлы |
|
||||
| **HSchool.Server** | Хост, супервизор, работник-поток, `mods/` и `saves/` из конфига, HTTP/WS, DTO запросов | Правила «комната должна быть связана», схема Chair |
|
||||
| **HSchool.Protocol** | Кадры сокета, в том числе снимок карты и locale в Hello | Имена комнат, JSONC |
|
||||
| **HSchool.Client** | DOM, `t()` для хрома, рисует снимок | Файлы модов, симуляция |
|
||||
|
||||
Content принимает уже открытые потоки или список документов (сервер прочитал папки и отдал
|
||||
байты/пути через узкий порт вроде «вот корневые каталоги этих id»). Тогда тесты Content кормят
|
||||
фикстурами из `tests/`, без `appsettings`.
|
||||
|
||||
Сейв: **форма** (часы + id модов + раскладка) собирается из типов Simulation/Content; **запись
|
||||
файла** — Server, и только с потока работника.
|
||||
|
||||
## Зачем не сваливать в Simulation
|
||||
|
||||
Arch и фиксированный тик — про живую школу. Парсер JSONC, `defName` и проверка графа не знают,
|
||||
что такое tick. Их гоняют сотни раз в юните без мира. Если загрузчик сидит в Simulation, любой
|
||||
тест каталога тащит ECS и наоборот.
|
||||
|
||||
## Зачем не сваливать в Server
|
||||
|
||||
Иначе связность карты и last-wins нельзя проверить без Aspire. Хост должен быть тонким:
|
||||
найти папки, сериализовать HTTP, крутить потоки.
|
||||
|
||||
## Тесты
|
||||
|
||||
- `tests/HSchool.Content.Tests` — фикстуры JSONC, коллизии имён, дырявый граф, двор обязателен.
|
||||
- `tests/HSchool.People.Tests` — тот же сид даёт тот же ростер; места и должности заполнены.
|
||||
- `tests/HSchool.Schedule.Tests` — тот же штат и карта дают ту же таблицу; четыре запрета.
|
||||
- `tests/HSchool.Ai.Tests` — путь между комнатами и его цена; те же входы дают то же решение.
|
||||
- `HSchool.Simulation.Tests` — часы, тик, «школа с таким каталогом живёт».
|
||||
- `HSchool.AppHost.Tests` — create с картой, рестарт, сейв на диске.
|
||||
|
||||
Ориентир в `AGENTS.md` обновить в фазе, которая заводит проект (сейчас это фаза 3).
|
||||
Reference in New Issue
Block a user