From bdb1253fdbd23ae026eb55113a369727aa070140 Mon Sep 17 00:00:00 2001 From: Leonid Pershin Date: Thu, 20 Aug 2026 01:58:37 +0300 Subject: [PATCH] Fix duplicate field in School interface and update event panel description in design documentation. Adjusted reviewed phase details for clarity and accuracy. --- docs/design/near-term.md | 2 +- docs/phases/reviewed.md | 27 ++++++++++++++++++++++++++- src/HSchool.Client/src/net/api.ts | 1 - 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/docs/design/near-term.md b/docs/design/near-term.md index af38cde..494064e 100644 --- a/docs/design/near-term.md +++ b/docs/design/near-term.md @@ -63,7 +63,7 @@ QSP: не «полотно текста + список действий», а п | Моды | `core` всегда; остальные — выбор при создании; поздний мод побеждает при споре имён | | Поток школы | Основа среза: один поток и один ECS world на школу, см. [`runtime.md`](runtime.md) | | Сохранения | На диск; часы не писать на каждом тике | -| События | Панель есть, лента пустая | +| События | Отдельной панели нет; место отдано вкладкам «Карта» и «Люди». Появится лента — вернётся и панель | | Локация | Одни секции для двора, корпуса, этажа и комнаты | | Двор | TerritoryDef, узел графа и корень дерева | | Язык модов | HTTP `?lang=`, то же в Hello; не Accept-Language | diff --git a/docs/phases/reviewed.md b/docs/phases/reviewed.md index 3dade4b..0781953 100644 --- a/docs/phases/reviewed.md +++ b/docs/phases/reviewed.md @@ -9,7 +9,7 @@ ## Срез 1. Оболочка и карта - **Фазы:** 0–4 -- **Проверен на:** `5a00ad7`, 2026-08-19 (первичная проверка — `b135a9c`) +- **Проверен на:** `418a4ea`, 2026-08-20 (первичная проверка — `b135a9c`; предыдущая перепроверка — `5a00ad7`) - **Пути:** `src/HSchool.Client`, `src/HSchool.Protocol`, `src/HSchool.Content`, `src/HSchool.Server/Game`, `src/HSchool.Server/Api/ModEndpoints.cs`, `src/HSchool.Server/Api/SchoolEndpoints.cs`, `src/HSchool.Server/Net`, @@ -114,6 +114,31 @@ закрывает всю таблицу `Pick`: старый сейв берёт первый язык, новая школа бросает кубик и бросок стабилен по сиду, сохранённый выбор уважается, чужой id даёт `null`, из которого создание школы делает `400`. + +### Перепроверка на `418a4ea`, 2026-08-20 + +Дрейф после `5a00ad7` — это срез 6 (пакеты, сид, формат сейва, тесты экранов) плюс раздельные обеды. +Обещания фаз 0–4 целы; протокол остался v7 в трёх местах, `ProtocolCodec` / `protocol.ts` не трогались. + +Что подтверждено повторно: + +- **Фаза 0.** `pixi.js` нет; `npm run build` проходит (после правки ниже). +- **Фаза 1.** Дерево, пять секций локации, клиентский фильтр, `localize()`. Отказ от панели событий записан в фазе 1 и в нарративе `design/near-term.md`; в таблице «Что уже зафиксировано» строка всё ещё говорила «панель есть» — поправлена. +- **Фаза 2.** `LongRunning`, аккумулятор с потолком 5, супервизор не трогает `World`, `WorkerFailed` снимает школу с таблицы и не удаляет файл. `ReloadFromDisk_RestoresAPausedClock` и `PausingOneSchool_DoesNotStopAnother` зелёные. +- **Фаза 3.** Все восемь тестов списка на месте в `HSchool.Content.Tests` (86/86). Ванильная карта валидна. +- **Фаза 4.** `GET /api/mods` (core обязателен), каталог, create с картой и отказ на дырявый граф, снимок при OpenSchool, reload раскладки — зелёные. `core` в диалоге создания нельзя снять — теперь ещё и клиентским тестом (`keeps core checked and disabled`, фаза 28). +- **Инварианты и «Things that will bite you».** `Content` без ASP.NET; `DateTime.Now` в симуляции нет; `modal.ts` резолвит явно; `.dialog--screen` — `height: fit-content`; `DefaultStartDate` UTC; `MapSnapshotSize` от сообщения; outbox `DropOldest`; `WaitToReadAsync` переносится; меню патчит `card.update`. + +Исправлено: + +- `School` в `src/HSchool.Client/src/net/api.ts` содержал два поля `speedIndex` подряд — артефакт мержа фазы 26 (`edd3d35`). `npm test` (vitest) это не ловит, `npm run build` падал с TS2300. Дубликат убран; поле как было одно. +- В таблице `design/near-term.md` «События | Панель есть, лента пустая» расходилась с решением фазы 8, которое журнал уже считал закрытым. Строка приведена к вкладочной оболочке. + +Замечено рядом (за границами среза): + +- `GameSocketTests.OpeningASchoolDuringAMathLesson_...` теперь падает **и в полном прогоне, и в одиночку** (40 кадров присутствия после снятия паузы, `People.Count == 0`). Раньше это был флак под нагрузкой, и тест ослабили до «люди вообще едут». После среза 6 никто не появляется: планы дня собраны для пустого штата, найм в 10:20 на паузе пересобирает таблицу, но явка завязана на `AppearAt` утреннего прихода. Чинить в срезе 5, не здесь. +- `npm test` в клиенте не гоняет `tsc`. Дубликат поля и любой другой TS2300 зелёный в vitest и красный на `build`. Это фаза 28. + ## Срез 2. Люди - **Фазы:** 5–9 diff --git a/src/HSchool.Client/src/net/api.ts b/src/HSchool.Client/src/net/api.ts index d30e0a8..265cf50 100644 --- a/src/HSchool.Client/src/net/api.ts +++ b/src/HSchool.Client/src/net/api.ts @@ -10,7 +10,6 @@ export interface School { readonly gameTime: string; readonly running: boolean; readonly speedIndex: number; - readonly speedIndex: number; readonly modIds?: readonly string[]; /** Roster generator seed. Independent of `id`; share it to recreate the same people. */ readonly seed: number;