mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-30 11:49:16 +00:00
@@ -0,0 +1,159 @@
|
||||
# CODE-REVIEW-709-r2
|
||||
|
||||
Материал раунда: `git log --oneline origin/dev..HEAD` = три коммита поверх
|
||||
`dev`@`18c9f8e7`:
|
||||
|
||||
```
|
||||
09d35c8d docs(testing): the manual pre-push run lists no mutants (#709 r1)
|
||||
920e6269 docs: review document for #709
|
||||
a8321e32 process: mutants run only in the nightly full registry; speed rules for ship/show (#709)
|
||||
```
|
||||
|
||||
Заход r2, трек `show`, блокирующих циклов израсходовано 1 из 2 (r1 —
|
||||
жёлтый, Medium в скоупе, цикл не открывал по счётчику до r1, но возвратил
|
||||
автору; см. заголовок задачи «блокирующих циклов израсходовано 1 из 2» —
|
||||
использую как есть).
|
||||
|
||||
## Скоуп
|
||||
|
||||
Дельта этого раунда — ровно один коммит `09d35c8d` (докстрока
|
||||
`docs(testing): the manual pre-push run lists no mutants (#709 r1)`), диффом
|
||||
трогающий только `docs/TESTING.md` (13 строк) плюс публикацию документа
|
||||
предыдущего раунда `docs/reviews/CODE-REVIEW-709-r1.md` коммитом `920e6269`
|
||||
(шаг конвейера, не автор). Класс C (документация) — трейлеры не обязательны
|
||||
(§3 п.10), но коммит их всё равно несёт (`Issue: #709`, `User-Visible: no`) —
|
||||
корректно, поведение продукта не меняется.
|
||||
|
||||
Единственная цель дельты — закрыть Medium из r1: `docs/TESTING.md`
|
||||
противоречил сам себе в разделе «Локальный набор перед пушем» (одна строка
|
||||
говорила «мутантов в ручном pre-push-gate нет», а пример команд и абзац «Что
|
||||
прогоняется» двумя абзацами ниже всё ещё описывали `--no-mutants`/
|
||||
`--max-mutants` и мутанты по диффу как часть прогона).
|
||||
|
||||
## Как проверялось
|
||||
|
||||
Разбор по дельте (§2.10) — предмет один Medium, дельта локальна (13 строк в
|
||||
одном файле, тот же файл и тот же раздел, который правил r1), новых AC не
|
||||
добавлено, контракт не менялся, ребейза на ушедший вперёд `dev` не было
|
||||
(`dev` тот же `18c9f8e7`, что и в r1). Полный повторный разбор AC1–AC3 не
|
||||
требуется: они уже доказаны в r1 и эта дельта их не задевает.
|
||||
|
||||
### Закрытие раунда r1
|
||||
|
||||
| Находка | Чем закрыта | Где это видно |
|
||||
|---|---|---|
|
||||
| Medium: `docs/TESTING.md` противоречит себе — заявляет «мутантов в ручном режиме нет» и тут же показывает `--no-mutants --max-mutants=1` в примерах, а «Что прогоняется» называет мутанты по диффу частью ручного набора | Коммит `09d35c8d`: примеры команд (было `docs/TESTING.md:276–277`) больше не содержат `--no-mutants`/`--max-mutants`; абзац «Что прогоняется» (было `:280–282`) больше не упоминает мутанты, вместо этого одним предложением поясняет, что оба флага приняты для совместимости и ничего не меняют | `git diff a8321e32..09d35c8d -- docs/TESTING.md`, строки 273–286 (сейчас); проверено дополнительно кодом: `scripts/pre-push-gate.mjs:193-199` — парсер флагов `flag()`/`intArg()` работает через `argv.includes(...)`, неизвестные/устаревшие флаги молча игнорируются, ошибки не бросает — заявление «ничего не меняют» не расходится с реализацией |
|
||||
|
||||
Проверено и то, что автор не тронул вслепую: заново прочитан весь файл
|
||||
`docs/TESTING.md` (не только изменённые строки) на предмет других мест,
|
||||
где могло остаться расхождение — их нет. Формулировка на строках 67–68
|
||||
(«Для разбора ночного сбоя (не гейт задачи, #709) —
|
||||
`mutation-gate.mjs --changed`») согласована с формулировкой на строках
|
||||
114–119 («`--id` и `--changed` остаются инструментами разбора ночного сбоя,
|
||||
а не гейтом задачи») — та часть файла, которую r1 не касался, уже была
|
||||
написана в этом ключе и осталась без противоречий.
|
||||
|
||||
### Гейты — что прогнано и что нет
|
||||
|
||||
| Гейт | Прогнан | Результат |
|
||||
|---|---|---|
|
||||
| Validate на `09d35c8d` (workflow_dispatch, run 36625652363) | зелёный прогон уже есть на этом SHA, не переисполнял (§8, #343) | success, 2 мин 53 с |
|
||||
| `node --test test/process-digests.test.mjs` | да | 5/5 зелёные |
|
||||
| `node scripts/mutation-gate.mjs --check` | да | 0 FAIL, 3 предсуществующих WARN (#650, вне скоупа — не задеты диффом) |
|
||||
| Чтение всего `docs/TESTING.md` и кода `scripts/pre-push-gate.mjs` (парсинг флагов) | да | расхождений не найдено; поведение флагов соответствует новому тексту |
|
||||
| `npx tsc --noEmit`, полный `npm test`, `npm run build` + сверка бандла | нет | дифф раунда — только `docs/TESTING.md`, класс C; зелёный Validate на этом SHA уже подтверждает (#343); класс A/B файлов в дельте r1→r2 нет |
|
||||
| Смоки/golden/`pytest tests_backend`/инварианты модели/performance/`smoke-select.mjs` | нет | дельта не содержит `src/**`, Python, `demo/golden/**` или геометрии — неприменимо по диффу и по AC; тело issue не называет смоук |
|
||||
| `actionlint`, `process-gate --range` | нет | дельта — документация, не workflow/скрипты; неприменимо |
|
||||
|
||||
## Находки
|
||||
|
||||
Нет. Medium из r1 закрыт точным патчем той же строки, которую он называл;
|
||||
других расхождений в перечитанном файле не найдено. High не заводился ни в
|
||||
r1, ни здесь.
|
||||
|
||||
## Что проверено и корректно
|
||||
|
||||
- AC1–AC3 остаются доказанными выводами r1 (см. раздел «Унаследовано»
|
||||
ниже) — дельта их не касается.
|
||||
- `docs/TESTING.md`, раздел «Локальный набор перед пушем»: текст теперь
|
||||
внутренне непротиворечив — «мутантов нет» (строка ~267), пример команд без
|
||||
`--no-mutants`/`--max-mutants` (~276–277), «Что прогоняется» без мутантов и
|
||||
с явным пояснением про no-op флаги (~280–283).
|
||||
- Попутная правка той же задачи (не требовалась Medium из r1, но в тему):
|
||||
строки 67–68 сменили формулировку с «Локально для дельты задачи —
|
||||
`mutation-gate --changed`» на «Для разбора ночного сбоя (не гейт задачи,
|
||||
#709) — …» — устраняет ещё одно потенциальное место, где читатель мог
|
||||
принять `--changed` за обязательный локальный гейт. Корректно и не выходит
|
||||
за рамки AC2 (тот же файл, та же тема — согласованность канона).
|
||||
- Код `scripts/pre-push-gate.mjs` не менялся в этой дельте (сравнение
|
||||
`git diff a8321e32..HEAD -- scripts/pre-push-gate.mjs` — пусто), значит
|
||||
поведение, которое описывает новый текст, — то самое поведение, которое
|
||||
проверил r1 (секция мутантов убрана из `manualGate`, флаги не влияют ни на
|
||||
что). Документация просто наконец описывает код верно.
|
||||
- Трейлеры коммита `09d35c8d`: `Issue: #709`, `User-Visible: no` — верно,
|
||||
документ не меняет наблюдаемое поведение продукта, changelog не тронут и
|
||||
не должен быть тронут.
|
||||
- Ни одного числа/значения, видимого пользователю, дельта не вводит — это
|
||||
README/тестовая документация процесса, не UI и не API.
|
||||
|
||||
## Чего не проверял
|
||||
|
||||
- Полный `npx tsc --noEmit`, `npm test`, `npm run build` + троекратную
|
||||
сверку бандла — дельта раунда не содержит класса A/B, зелёный Validate на
|
||||
этом же SHA (`09d35c8d`, run 36625652363) уже подтверждён (#343).
|
||||
- `actionlint`, `process-gate --range` — дельта не workflow/скрипты,
|
||||
неприменимо.
|
||||
- Смоки, golden, `pytest tests_backend`, инварианты модели, performance —
|
||||
неприменимо: диффа в `src/**`, Python, `demo/golden/**` и геометрии нет ни
|
||||
в этом раунде, ни накопительно с r1.
|
||||
- Не перепроверял то, что уже доказано в r1 полным разбором (AC1, AC3
|
||||
полностью; AC2 — вся часть, кроме закрытого Medium) — см. раздел
|
||||
«Унаследовано» и сам документ r1.
|
||||
|
||||
## Унаследовано из r1
|
||||
|
||||
Документ: `docs/reviews/CODE-REVIEW-709-r1.md`, материал —
|
||||
`a8321e32cc8299a521657b71aba6c43f41d93e6b` (дерево `f1cb9e76e348…`).
|
||||
|
||||
Принято без повторной проверки в этом раунде:
|
||||
|
||||
- **AC1** — доказан юнитами `process-track`/`classify-changes` (39/39),
|
||||
подтверждён мутантами реестра (`dev-mutants-requested-again`,
|
||||
`track-pays-for-mutants-again`), статически сверен `mutation-gate --check`
|
||||
(0 FAIL). Дельта r1→r2 файлов AC1 (`scripts/process-track.mjs`,
|
||||
`scripts/classify-changes.mjs`, `.github/workflows/*`) не касается —
|
||||
подтверждено `git diff a8321e32..HEAD --stat` (только `docs/TESTING.md` и
|
||||
сам документ ревью r1).
|
||||
- **AC2** (кроме закрытого Medium) — согласованность `PROCESS.md`,
|
||||
`docs/process/AUTHOR.md`, `docs/process/REVIEWER.md`, `AGENTS.md` между
|
||||
собой; снятие `ci:mutants` из таблиц меток — не перечитывал заново, эти
|
||||
файлы в дельте r1→r2 не менялись (`git diff --stat` выше это подтверждает
|
||||
списком затронутых путей).
|
||||
- **AC3** — правила скорости `ship`/`show` в `PROCESS.md` §8, флаг
|
||||
`--smokes` (`scripts/gate-small.mjs:34`) реальный — не перечитывал заново,
|
||||
файлы не менялись в этой дельте.
|
||||
- Наблюдение r1 «метка `ci:mutants` не удалена из GitHub, оставлена
|
||||
`Retired`, решение за владельцем — соответствует AC2» остаётся в силе, вне
|
||||
репозитория ничего не изменилось.
|
||||
|
||||
## Вердикт
|
||||
|
||||
Единственная находка предыдущего раунда закрыта точно тем патчем, который
|
||||
она требовала; новых находок в дельте нет. AC1–AC3 доказаны (частично — в
|
||||
r1, точечно — довешено здесь). **Зелёный.**
|
||||
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
<!-- material-anchors: сгенерировано конвейером (#414) -->
|
||||
|
||||
## Материал раунда
|
||||
|
||||
- Ветка: `issue/709-mutants-nightly-only`, коммит `09d35c8d2c11` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет.
|
||||
- Дерево материала: `6f511338537bb2dd6eaac4bda778618d95705ecc`
|
||||
```
|
||||
git log --all --format='%H %T' | grep 6f511338537b
|
||||
```
|
||||
- Тело issue: `914787f126c442dc2e4cacb96385538eb2f0e315dbaa828e3e0241a2a9ba81e5`
|
||||
- Вердикт конвейера: `green` · High 0
|
||||
Reference in New Issue
Block a user