Files
h-school/docs/design/projects.md
T

4.1 KiB
Raw Blame History

Нарезка проектов (целевая)

Сейчас в коде: Protocol ← Server → Simulation → People → Content. Каталог не в Simulation (рядом с Arch) и не в Server (рядом с Kestrel) — парсер JSONC и проверка графа не знают, что такое tick.

Зависимости

Protocol          — ни на кого из игровых проектов (только байты)
Content           — ни на Protocol, ни на Simulation, ни на ASP.NET
People            → Content          (defs, карта, склонения; без Arch и хоста)
Simulation        → 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.Simulation School, GameClock, Arch World, тик, применение раскладки к миру 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 — тот же сид даёт тот же ростер; места и должности заполнены.
  • HSchool.Simulation.Tests — часы, тик, «школа с таким каталогом живёт».
  • HSchool.AppHost.Tests — create с картой, рестарт, сейв на диске.

Ориентир в AGENTS.md обновить в фазе, которая заводит проект (сейчас это фаза 3).