diff --git a/docs/design/01-shell/projects.md b/docs/design/01-shell/projects.md index 79dbe0d..91a3063 100644 --- a/docs/design/01-shell/projects.md +++ b/docs/design/01-shell/projects.md @@ -11,7 +11,7 @@ Content — ни на Protocol, ни на Simulation, ни на ASP.NE People → Content (defs, карта, склонения; без Arch и хоста) Schedule → Content (раскладка уроков; без Arch и хоста) Ai → Content, People, Schedule (маршруты и решения; без Arch и хоста) -Simulation → Ai, People, Content (ростер в World; без HTTP) +Simulation → Ai, People, Content, Schedule (ростер в World; без HTTP) Server → Protocol, Simulation, People, Content Client — своя сторона Protocol (TS) + HTTP ``` diff --git a/docs/phases/10-craft/reviewed.md b/docs/phases/10-craft/reviewed.md index 6a8d2c8..76d3dd1 100644 --- a/docs/phases/10-craft/reviewed.md +++ b/docs/phases/10-craft/reviewed.md @@ -2,43 +2,40 @@ Сводка: [`../reviewed.md`](../reviewed.md). Индекс среза: [`README.md`](README.md). -## Срез 10. Этап A — страховка +## Срез 10. Этап A — страховка (перепроверка) - **Фазы:** 56–57 -- **Проверен на:** `e2e7d30`, 2026-08-20 -- **Пути:** `tests/HSchool.Architecture.Tests`, `src/HSchool.Client/package.json`, `src/HSchool.Client/scripts`, `AGENTS.md`, `README.md` -- **Итог:** обещания 56–57 на месте; дописаны проверки графа из `projects.md` и запрет AppHost/NetArchTest в csproj; README приведён к `tsc`+vitest. Этап B (58) в работе на момент проверки; 59 в этот проход не входила. -- **В работе на момент проверки:** фаза 58 (этап B). +- **Проверен на:** `PLACEHOLDER`, 2026-08-20 +- **Пути:** `tests/HSchool.Architecture.Tests`, `src/HSchool.Client/package.json`, `src/HSchool.Client/scripts`, `AGENTS.md`, `README.md`, `docs/design/01-shell/projects.md` +- **Итог:** перепроверка после `e2e7d30`: `git log e2e7d30..HEAD` по путям этапа A был пуст — код 56–57 не дрейфовал. Обещания на месте. Дописаны запреты People↛Schedule/Ai, Schedule↛People/Ai, Simulation↛Protocol; в `projects.md` у Simulation добавлен прямой `Schedule` (как в csproj). Этап B–C в этот проход не входил. +- **Первая проверка:** `e2e7d30`, 2026-08-20. ### 56. Слои одной пачкой -Все шесть пунктов «тестов, без которых фаза не закрыта» есть в `LayerBoundaryTests` и проходят (`dotnet test tests/HSchool.Architecture.Tests --filter FullyQualifiedName~LayerBoundaryTests`: 9 зелёных). Копипасты `Assembly_DoesNotReference*` / `Sources_DoNotUseWallClock` из People/Ai/Schedule/Simulation.Tests уехали. NetArchTest в solution нет; проект не ссылается на Server/AppHost. README больше не называет школу пустой, `MaxSchools` — слоты игрока. Testing policy в `AGENTS.md` указывает на `HSchool.Architecture.Tests`. +Все шесть пунктов «тестов, без которых фаза не закрыта» есть в `LayerBoundaryTests`. Копипасты `Assembly_DoesNotReference*` / `Sources_DoNotUseWallClock` из People/Ai/Schedule/Simulation.Tests по-прежнему отсутствуют. NetArchTest в solution нет; csproj не ссылается на Server/AppHost. README не называет школу пустой, `MaxSchools` — слоты игрока. Testing policy в `AGENTS.md` указывает на `HSchool.Architecture.Tests`. -Дописано: +`dotnet test tests/HSchool.Architecture.Tests --filter FullyQualifiedName~LayerBoundaryTests`: 11 зелёных (было 9; плюс People↛Schedule/Ai и Schedule↛People/Ai; Simulation дополнительно без Protocol). -- Content не ссылается на People, Schedule, Ai (таблица `craft.md` их не требовала; граф `projects.md` — да) -- People/Schedule/Ai не ссылаются на Protocol и Simulation -- csproj Architecture.Tests не содержит Server, AppHost, NetArchTest +Инвариант 4 и запрет `DateTime.Now` / `UtcNow` в шести библиотеках держатся; исходники ловят неиспользованный `using System.Net.Http`. `DateTime.UtcNow` есть в `HSchool.Server` (SwarmUI health) — хост, не слой. -Инвариант 4 (Simulation без ASP.NET/сокетов) и запрет `DateTime.Now` / `UtcNow` в шести библиотеках держатся; исходники дополнительно ловят неиспользованный `using System.Net.Http`. +Дописано на перепроверке: + +- People не ссылается на Schedule и Ai +- Schedule не ссылается на People и Ai +- Simulation не ссылается на Protocol +- `projects.md`: `Simulation → Ai, People, Content, Schedule` — граф отставал от csproj; запрет Simulation↛Schedule был бы красным и ложным ### 57. tsc в npm test -`package.json` → `"test": "node ./scripts/run-test.mjs"` гоняет `tsc -b`, потом vitest, и не глотает код выхода typecheck на Windows. `"hschool-client": "file:"` в зависимостях нет. `test:watch` — только vitest. `AGENTS.md` это описывает. +`package.json` → `"test": "node ./scripts/run-test.mjs"` по-прежнему гоняет `tsc -b`, потом vitest, и не глотает код выхода typecheck на Windows. `"hschool-client": "file:"` в зависимостях нет. `test:watch` — только vitest. `AGENTS.md` это описывает. Скрипт `build` = `tsc -b && vite build`. -`npm --prefix src/HSchool.Client test -- scripts/npm-test.test.ts` на текущем дереве: tsc молча зелёный, 5 vitest зелёных (включая дубликат ключа в копии `strings.ts` → TS1117/TS2300 без `vite build`). - -Дописано: - -- скрипт `build` по-прежнему `tsc -b && vite build` (сам `vite build` не гонялся) - -README теперь говорит, что `npm test` = tsc + Vitest. Оговорка в сводке «vitest зелёный при красном tsc» снята: её закрыла эта фаза. +Клиентские пути с `e2e7d30` не менялись; `src/HSchool.Client` в этом проходе не правился, `npm test` по Testing policy не гонялся. ### Открытое - `README.md` «What is deliberately missing» всё ещё пишет «No authentication» и что диалог создания не выбирает моды — ложь срезов 8 и 1, не этого этапа. - Дубликат ключа проверяется изолированным `tsc -p`, не `tsc -b` живого клиента; проводка `run-test.mjs` покрыта отдельно. -- Фаза 58 (этап B) в работе — не проверялась. Фаза 59 (этап C) в этот проход не входила. +- Этап B–C (58–59) — соседний проход, здесь не перепроверялся. ## Срез 10. Этапы B–C — работник, карточка и дамп diff --git a/docs/phases/reviewed.md b/docs/phases/reviewed.md index 46c3664..9585232 100644 --- a/docs/phases/reviewed.md +++ b/docs/phases/reviewed.md @@ -31,7 +31,7 @@ | Срез 8. Сессия и темп | `7100065` | [08-session](08-session/reviewed.md) | | Срез 9. Этапы A–B — мнения и разговоры | `b38d0bb` | [09-social](09-social/reviewed.md) | | Срез 9. Этапы C–D — конфликт, присутствие, речь и romance | `19554d4` | [09-social](09-social/reviewed.md) | -| Срез 10. Этап A — страховка | `e2e7d30` | [10-craft](10-craft/reviewed.md) | +| Срез 10. Этап A — страховка | `PLACEHOLDER` | [10-craft](10-craft/reviewed.md) | | Срез 10. Этапы B–C — работник, карточка и дамп | `f4f726a` | [10-craft](10-craft/reviewed.md) | | Портреты (вне очереди) 60–61 | `5e23d1f` | [off-queue](off-queue/reviewed.md) | | Портреты (вне очереди) 62 | `d093ea3` | [off-queue](off-queue/reviewed.md) | diff --git a/tests/HSchool.Architecture.Tests/LayerBoundaryTests.cs b/tests/HSchool.Architecture.Tests/LayerBoundaryTests.cs index f7b1ba9..03f9ffd 100644 --- a/tests/HSchool.Architecture.Tests/LayerBoundaryTests.cs +++ b/tests/HSchool.Architecture.Tests/LayerBoundaryTests.cs @@ -64,11 +64,28 @@ public class LayerBoundaryTests } [Fact] - public void Simulation_DoesNotReferenceAspNetOrSockets() + public void People_DoesNotReferenceScheduleOrAi() + { + var names = References(typeof(RosterGenerator)); + Assert.DoesNotContain("HSchool.Schedule", names, StringComparer.Ordinal); + Assert.DoesNotContain("HSchool.Ai", names, StringComparer.Ordinal); + } + + [Fact] + public void Schedule_DoesNotReferencePeopleOrAi() + { + var names = References(typeof(TimetablePlanner)); + Assert.DoesNotContain("HSchool.People", names, StringComparer.Ordinal); + Assert.DoesNotContain("HSchool.Ai", names, StringComparer.Ordinal); + } + + [Fact] + public void Simulation_DoesNotReferenceAspNetSocketsOrProtocol() { var names = References(typeof(School)); Assert.DoesNotContain(names, name => name.Contains("AspNet", StringComparison.OrdinalIgnoreCase)); Assert.DoesNotContain(names, name => name.Contains("Sockets", StringComparison.OrdinalIgnoreCase)); + Assert.DoesNotContain("HSchool.Protocol", names, StringComparer.Ordinal); } [Fact]