Files
h-school/docs/design/projects.md
T
Leonid Pershin c16c34a83c Refactor project structure and enhance AI and simulation components
- Updated project roles to include a new `HSchool.Ai` component, detailing its responsibilities in routing and decision-making.
- Revised the `HSchool.Simulation` component to integrate with the new AI functionalities, improving the interaction between simulation and AI.
- Expanded documentation to reflect the changes in project roles and the introduction of AI features.
- Added tests for the new AI functionalities, ensuring robust pathfinding and decision-making capabilities.
- Updated phase documentation to outline the new stages of school life, focusing on presence and behavior.
2026-08-19 15:57:12 +03:00

62 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Нарезка проектов (целевая)
Сейчас в коде: `Protocol ← Server → Simulation → People → 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).