Update AGENTS.md and SKILL.md to refine testing policies and clarify project-specific test execution. Emphasized the importance of using filters for tests and avoiding full solution runs unless necessary. Adjusted descriptions in phase-work and side-work skills to align with the new testing guidelines.
ci / server (push) Failing after 3m46s
ci / client (push) Failing after 13s

This commit is contained in:
Leonid Pershin
2026-08-20 09:10:42 +03:00
parent 384f9d7273
commit f4a793aca4
5 changed files with 36 additions and 17 deletions
+3
View File
@@ -78,6 +78,9 @@ description: >-
другая ветка. Чистое `main` — можно в этом дереве;
- шаблон фазы не заполнять. Тест из файла бага — да, «Критерий готовности»
фазы — нет;
- тесты — только проект из Testing policy и `--filter` на новый тест. Полный
`dotnet test`, клиентский Vitest без правок клиента и повтор после слияния
статус-строки **не** наследовать из `/phase-work`;
- ✅ в индексе — последним коммитом ветки, в нём только строка статуса.
Слияние и замок `merge/lock` — как у `/phase-work`. Не пушь.
+7 -8
View File
@@ -100,15 +100,14 @@ description: Ревью срезов и фаз проекта h-school по их
- **Молча не меняй** версию протокола, форму сейва и публичное поведение API. Это отдельное
решение пользователя, даже когда оно очевидно правильное.
## Окружение
## Какие тесты гонять
```bash
dotnet test
```
```bash
npm --prefix src/HSchool.Client test
```
Сначала читай код и имена тестов — ревью это сверка обещаний, не ритуал прогона. Когда
дописал недостающий тест или починил найденное, гоняй **только проект среза** из Testing
policy в `AGENTS.md`, с `--filter` на новый класс. Клиентский Vitest — только если ревью
трогает `src/HSchool.Client`. `HSchool.AppHost.Tests` — только если срез про HTTP, сокет
или хост. Весь solution, парный `npm test` «для уверенности» и прогон в начале ревью —
не делать.
Чего ждать и что делать:
+14 -7
View File
@@ -92,8 +92,11 @@ git worktree add <путь-в-scratchpad>/wt-phase-25 phase/25-golden-fixtures
- меняется HTTP — `docs/protocol.md` тем же коммитом;
- решение разошлось с дизайн-доком — правится документ, и в отчёте это названо явно.
**5. Проверь то, что заявляешь.** Прогоняешь тесты своей фазы и полный прогон. Не «должно
работать», а «прогнал, вот результат».
**5. Проверь то, что заявляешь.** Гоняй только проект(ы) из Testing policy в `AGENTS.md`,
которые эта фаза трогает; пока пишешь — `--filter` на новый класс. Клиентский Vitest — только
если трогал `src/HSchool.Client`. `HSchool.AppHost.Tests` — только если трогал HTTP, сокет
или хост. Весь solution и «на всякий случай оба стека» не гонять. Не «должно работать», а
«прогнал вот этот проект, вот результат».
## Что считать сделанным
@@ -152,8 +155,10 @@ git -C <корень> merge --no-ff phase/25-golden-fixtures
которого тебе неясен, — `git merge --abort`, снять замок, оставить ветку и написать в отчёте, с
чем именно она не сходится.
**6. Перепрогони тесты на `main` после слияния.** Две зелёные ветки в сумме бывают красными:
каждая правила своё, а вместе получилось не то. Это единственный способ поймать такое.
**6. После слияния.** Конфликт только в строке статуса или в доке — тесты не гонять, ничего
не сошлось в коде. Был конфликт в коде — тот же узкий набор проектов, что в шаге 5, не
весь solution. Две зелёные ветки в сумме бывают красными; ловить это должен затронутый
проект, а не ритуал на восемь сборок.
Красно — откати слияние и оставь ветку жить:
@@ -214,8 +219,9 @@ git branch --merged main --list "phase/*" --format="%(refname:short)"
- **Состав школы зависит от её id**, пока не сделана фаза 26. Тест, требующий у первого ученика
двух родителей или конкретную фамилию, зелёный у тебя и красный в CI. Проверяй свойство, а не
совпадение.
- **Полный `dotnet test` изредка падает целиком** с нативной ошибкой в `Simulation.Tests`. Один раз
— перепрогони; повторяется — это находка для отчёта.
- **Не гоняй `dotnet test` на solution** «на всякий случай»: это восемь проектов и подъём
хоста. Если всё же гонял и упало целиком с нативной ошибкой в `Simulation.Tests` — один
повтор того же проекта; повторяется — в отчёт.
- **Dev-сервер не запускать.** Нужно посмотреть на UI — пользуйся уже запущенным приложением
пользователя.
@@ -233,7 +239,8 @@ git branch --merged main --list "phase/*" --format="%(refname:short)"
- какая фаза взята и на какой ветке лежит;
- что сделано — по пунктам задач, без пересказа кода;
- какие тесты добавлены, списком по одной строке;
- чем подтверждено: что прогнал и с каким результатом, числа замеров, если были;
- чем подтверждено: какой проект прогнал и с каким результатом, числа замеров, если были;
не «весь solution зелёный»;
- что осталось незакрытым и почему;
- что замечено за границами фазы;
- слита ли ветка в `main` и удалена ли — а если нет, то что помешало.
+1
View File
@@ -64,6 +64,7 @@ description: >-
Прочитай [phase-work](../phase-work/SKILL.md) и следуй ему.
Отличия: фазу ты завёл сам; заявка `git branch phase/<N>-<slug>` **до** кода;
тесты — как Testing policy в `AGENTS.md`, не весь solution;
новые файлы и 🔄 живут на этой ветке. Один цикл — одна фаза. «Сделай всё» —
по порядку, каждая своим циклом `/phase-work`. Три фазы в одну ветку не паковать.
+11 -2
View File
@@ -35,13 +35,16 @@ dotnet build h-school.sln
```
```bash
dotnet test
dotnet test tests/HSchool.People.Tests --filter FullyQualifiedName~YearlyIntake
```
```bash
npm --prefix src/HSchool.Client test
npm --prefix src/HSchool.Client test -- src/ui/peoplePanel.test.ts
```
Solution-wide `dotnet test` and a full client `npm test` are CI, or when the user asked. Agents
scope the run — Testing policy.
```bash
npm --prefix src/HSchool.Client run build
```
@@ -115,6 +118,12 @@ say so explicitly in the change description.
## Testing policy
**What to run.** One project from the list below, filtered to the new or changed class while
iterating. Client Vitest only if `src/HSchool.Client` changed. `HSchool.AppHost.Tests` only if
the change is HTTP, WebSocket, or host wiring — it boots a server. Do not `dotnet test` the
solution, do not run client and .NET together "to be sure", do not re-run after a merge that
only resolved a status line. Solution-wide is CI.
- Simulation changes need a `GameClock` or `SchoolRegistry` test. They are fast and need no host.
Putting a roster into `World` and ticking needs belongs there too.
- People generation belongs in `tests/HSchool.People.Tests`. Same seed, map, country and