- Revised `AGENTS.md` to specify that the same seed, map, name set, and native language must produce the same roster in tests. - Updated `protocol.md` to clarify that everyone in the school is generated with the selected native language, and related languages may appear at a low skill. - Enhanced `ai.md` to explain skill growth mechanics based on state and the introduction of minimum ranges for skills not yet acquired. - Improved `people.md` to detail the generation of skills and traits, emphasizing that not every person receives every skill and the implications of body attributes on skill acquisition. - Adjusted `projects.md` to reflect the inclusion of native language in roster generation, ensuring comprehensive documentation of project components.
62 lines
5.2 KiB
Markdown
62 lines
5.2 KiB
Markdown
# Нарезка проектов (целевая)
|
||
|
||
Сейчас в коде: `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).
|