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.
This commit is contained in:
@@ -78,6 +78,9 @@ description: >-
|
|||||||
другая ветка. Чистое `main` — можно в этом дереве;
|
другая ветка. Чистое `main` — можно в этом дереве;
|
||||||
- шаблон фазы не заполнять. Тест из файла бага — да, «Критерий готовности»
|
- шаблон фазы не заполнять. Тест из файла бага — да, «Критерий готовности»
|
||||||
фазы — нет;
|
фазы — нет;
|
||||||
|
- тесты — только проект из Testing policy и `--filter` на новый тест. Полный
|
||||||
|
`dotnet test`, клиентский Vitest без правок клиента и повтор после слияния
|
||||||
|
статус-строки **не** наследовать из `/phase-work`;
|
||||||
- ✅ в индексе — последним коммитом ветки, в нём только строка статуса.
|
- ✅ в индексе — последним коммитом ветки, в нём только строка статуса.
|
||||||
|
|
||||||
Слияние и замок `merge/lock` — как у `/phase-work`. Не пушь.
|
Слияние и замок `merge/lock` — как у `/phase-work`. Не пушь.
|
||||||
|
|||||||
@@ -100,15 +100,14 @@ description: Ревью срезов и фаз проекта h-school по их
|
|||||||
- **Молча не меняй** версию протокола, форму сейва и публичное поведение API. Это отдельное
|
- **Молча не меняй** версию протокола, форму сейва и публичное поведение API. Это отдельное
|
||||||
решение пользователя, даже когда оно очевидно правильное.
|
решение пользователя, даже когда оно очевидно правильное.
|
||||||
|
|
||||||
## Окружение
|
## Какие тесты гонять
|
||||||
|
|
||||||
```bash
|
Сначала читай код и имена тестов — ревью это сверка обещаний, не ритуал прогона. Когда
|
||||||
dotnet test
|
дописал недостающий тест или починил найденное, гоняй **только проект среза** из Testing
|
||||||
```
|
policy в `AGENTS.md`, с `--filter` на новый класс. Клиентский Vitest — только если ревью
|
||||||
|
трогает `src/HSchool.Client`. `HSchool.AppHost.Tests` — только если срез про HTTP, сокет
|
||||||
```bash
|
или хост. Весь solution, парный `npm test` «для уверенности» и прогон в начале ревью —
|
||||||
npm --prefix src/HSchool.Client test
|
не делать.
|
||||||
```
|
|
||||||
|
|
||||||
Чего ждать и что делать:
|
Чего ждать и что делать:
|
||||||
|
|
||||||
|
|||||||
@@ -92,8 +92,11 @@ git worktree add <путь-в-scratchpad>/wt-phase-25 phase/25-golden-fixtures
|
|||||||
- меняется HTTP — `docs/protocol.md` тем же коммитом;
|
- меняется 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`, снять замок, оставить ветку и написать в отчёте, с
|
которого тебе неясен, — `git merge --abort`, снять замок, оставить ветку и написать в отчёте, с
|
||||||
чем именно она не сходится.
|
чем именно она не сходится.
|
||||||
|
|
||||||
**6. Перепрогони тесты на `main` после слияния.** Две зелёные ветки в сумме бывают красными:
|
**6. После слияния.** Конфликт только в строке статуса или в доке — тесты не гонять, ничего
|
||||||
каждая правила своё, а вместе получилось не то. Это единственный способ поймать такое.
|
не сошлось в коде. Был конфликт в коде — тот же узкий набор проектов, что в шаге 5, не
|
||||||
|
весь solution. Две зелёные ветки в сумме бывают красными; ловить это должен затронутый
|
||||||
|
проект, а не ритуал на восемь сборок.
|
||||||
|
|
||||||
Красно — откати слияние и оставь ветку жить:
|
Красно — откати слияние и оставь ветку жить:
|
||||||
|
|
||||||
@@ -214,8 +219,9 @@ git branch --merged main --list "phase/*" --format="%(refname:short)"
|
|||||||
- **Состав школы зависит от её id**, пока не сделана фаза 26. Тест, требующий у первого ученика
|
- **Состав школы зависит от её id**, пока не сделана фаза 26. Тест, требующий у первого ученика
|
||||||
двух родителей или конкретную фамилию, зелёный у тебя и красный в CI. Проверяй свойство, а не
|
двух родителей или конкретную фамилию, зелёный у тебя и красный в CI. Проверяй свойство, а не
|
||||||
совпадение.
|
совпадение.
|
||||||
- **Полный `dotnet test` изредка падает целиком** с нативной ошибкой в `Simulation.Tests`. Один раз
|
- **Не гоняй `dotnet test` на solution** «на всякий случай»: это восемь проектов и подъём
|
||||||
— перепрогони; повторяется — это находка для отчёта.
|
хоста. Если всё же гонял и упало целиком с нативной ошибкой в `Simulation.Tests` — один
|
||||||
|
повтор того же проекта; повторяется — в отчёт.
|
||||||
- **Dev-сервер не запускать.** Нужно посмотреть на UI — пользуйся уже запущенным приложением
|
- **Dev-сервер не запускать.** Нужно посмотреть на UI — пользуйся уже запущенным приложением
|
||||||
пользователя.
|
пользователя.
|
||||||
|
|
||||||
@@ -233,7 +239,8 @@ git branch --merged main --list "phase/*" --format="%(refname:short)"
|
|||||||
- какая фаза взята и на какой ветке лежит;
|
- какая фаза взята и на какой ветке лежит;
|
||||||
- что сделано — по пунктам задач, без пересказа кода;
|
- что сделано — по пунктам задач, без пересказа кода;
|
||||||
- какие тесты добавлены, списком по одной строке;
|
- какие тесты добавлены, списком по одной строке;
|
||||||
- чем подтверждено: что прогнал и с каким результатом, числа замеров, если были;
|
- чем подтверждено: какой проект прогнал и с каким результатом, числа замеров, если были;
|
||||||
|
не «весь solution зелёный»;
|
||||||
- что осталось незакрытым и почему;
|
- что осталось незакрытым и почему;
|
||||||
- что замечено за границами фазы;
|
- что замечено за границами фазы;
|
||||||
- слита ли ветка в `main` и удалена ли — а если нет, то что помешало.
|
- слита ли ветка в `main` и удалена ли — а если нет, то что помешало.
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ description: >-
|
|||||||
Прочитай [phase-work](../phase-work/SKILL.md) и следуй ему.
|
Прочитай [phase-work](../phase-work/SKILL.md) и следуй ему.
|
||||||
|
|
||||||
Отличия: фазу ты завёл сам; заявка `git branch phase/<N>-<slug>` **до** кода;
|
Отличия: фазу ты завёл сам; заявка `git branch phase/<N>-<slug>` **до** кода;
|
||||||
|
тесты — как Testing policy в `AGENTS.md`, не весь solution;
|
||||||
новые файлы и 🔄 живут на этой ветке. Один цикл — одна фаза. «Сделай всё» —
|
новые файлы и 🔄 живут на этой ветке. Один цикл — одна фаза. «Сделай всё» —
|
||||||
по порядку, каждая своим циклом `/phase-work`. Три фазы в одну ветку не паковать.
|
по порядку, каждая своим циклом `/phase-work`. Три фазы в одну ветку не паковать.
|
||||||
|
|
||||||
|
|||||||
@@ -35,13 +35,16 @@ dotnet build h-school.sln
|
|||||||
```
|
```
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
dotnet test
|
dotnet test tests/HSchool.People.Tests --filter FullyQualifiedName~YearlyIntake
|
||||||
```
|
```
|
||||||
|
|
||||||
```bash
|
```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
|
```bash
|
||||||
npm --prefix src/HSchool.Client run build
|
npm --prefix src/HSchool.Client run build
|
||||||
```
|
```
|
||||||
@@ -115,6 +118,12 @@ say so explicitly in the change description.
|
|||||||
|
|
||||||
## Testing policy
|
## 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.
|
- 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.
|
Putting a roster into `World` and ticking needs belongs there too.
|
||||||
- People generation belongs in `tests/HSchool.People.Tests`. Same seed, map, country and
|
- People generation belongs in `tests/HSchool.People.Tests`. Same seed, map, country and
|
||||||
|
|||||||
Reference in New Issue
Block a user