review.md: записан промах — гейт после интеграции проверял пустой дифф

- на master после ff-слияния база диффа равна HEAD, все go-шаги пропускаются,
  и вакуумный прогон выглядит зелёным
- тот же прогон с явной базой нашёл красный lint
This commit is contained in:
av
2026-08-04 11:19:14 +03:00
parent 9f77e56d37
commit 95377f54cd
+25
View File
@@ -474,3 +474,28 @@
повторился дважды; и «оракул сходимости называет свою посылку рядом с собой». повторился дважды; и «оракул сходимости называет свою посылку рядом с собой».
Третий случай одного класса за три дня — это уже не совпадение, и в Третий случай одного класса за три дня — это уже не совпадение, и в
`docs/conventions/testing.md` он теперь правило, а не запись в журнале. `docs/conventions/testing.md` он теперь правило, а не запись в журнале.
## 2026-08-04 — гейт после интеграции пропустил все go-шаги и объявил себя зелёным [пойман]
- **Где:** конвейер, а не код — `Taskfile.yml`, шаг `gate`, и правило батча
«после каждой интеграции — гейт на основной ветке»
- **Симптом:** после `git merge --ff-only` ветки задачи `task gate` без
аргументов напечатал «код не менялся — go-шаги пропускаются» и вышел с нулём.
Сборка, тесты, гонки, покрытие диффа и миграции **не гонялись вовсе**, а исход
выглядел как зелёный прогон.
- **Причина:** база диффа по умолчанию — `git merge-base HEAD master`. На самой
ветке `master` после ff-слияния это сам `HEAD`, дифф пуст, и все шаги,
привязанные к изменённым файлам, честно пропускаются. Пропуск по пустому
диффу — правильное поведение шага; неправильно то, что **правило интеграции
на него опирается**: батч вливает ветку и проверяет результат прогоном,
который в этот момент проверить ничего не может.
- **Чем воспроизведён:** `task gate` — 0, все go-шаги SKIP. `task gate
BASE=<коммит до слияния>` на том же дереве — 45 изменённых файлов, 13 шагов,
и **красный** `lint`.
- **Что изменено:** `.golangci.yml` — `./tmp` исключён из проверок
(`9f77e56`): `CLAUDE.md` велит держать черновое в `./tmp`, а линтер про это не
знал, и туда попадали и worktree батча, и диагностические программы. Краснота
по причине, не связанной с изменением, приучает не читать красноту.
- **Что осталось незакрытым:** гейт после интеграции обязан звать `BASE`
вершиной **до** слияния. Сейчас это знание живёт только в этой записи —
ни `Taskfile.yml`, ни скилл батча его не несут.