Files
h-school/docs/phases/25-golden-fixtures.md
T
Leonid Pershin c27d43f66a
ci / server (push) Failing after 3m39s
ci / client (push) Successful in 14s
Add foundational phase documentation for mod development
2026-08-19 23:35:30 +03:00

44 lines
3.3 KiB
Markdown

# Фаза 25. Золотые файлы и мелкие долги
## Зависимости
Нет. Можно вести параллельно с 22–24.
## Зачем
Две регрессии сейчас ловятся только глазами: молчаливая смена генерации людей и сейв, который
перестал грузиться после нового поля. Обе дешёвы в защите и дороги в разборе постфактум.
## Задачи
- [ ] Отпечаток ростера файлом в фикстурах: фиксированные сид, карта, набор имён и родной язык
- [ ] Тест печатает **первую** несовпавшую строку, а не «строки различаются»
- [ ] Правило записано рядом с фикстурой: отпечаток обновляется в том же коммите, что и генерация,
и коммит объясняет, что поменялось
- [ ] Файл сейва текущего формата в фикстурах хоста; тест поднимает из него школу
- [ ] Рядом с ним — файл сейва **без** новых полей, чтобы «отсутствующее поле имеет разумное
значение» проверялось, а не подразумевалось
- [ ] Форма голодного дня закрепляется тестом: приходят сытыми, к своей смене около 0.4, уходят
голодными, к утру снова полны. Числа подобраны замером и сейчас ничем не защищены
- [ ] `uncovered` в staffing говорит, скольких учителей не хватает предмету
- [ ] Клиент показывает это число в списке непокрытых, через `t(...)`
## Тесты, без которых фаза не закрыта
- [ ] Отпечаток ростера совпадает с файлом
- [ ] Школа поднимается из сохранённого файла: те же люди, то же время, тот же штат
- [ ] Сейв без поля родного языка грузится и не перетасовывает набор
- [ ] Кривая голода за учебный день держится в заявленных границах
- [ ] `PrimarySchool` на ванильной карте требует трёх учителей, и ответ это говорит
- [ ] Назначение второго учителя уменьшает нехватку, но не закрывает её
## Критерий готовности
- Изменить порядок бросков в генераторе — золотой тест краснеет
- Добавить поле в сейв — старый файл по-прежнему грузится
- `dotnet test` и клиентские `npm test` / `run build` проходят
## Стоп
Не превращать золотой файл в снимок всего мира: отпечаток должен читаться человеком.