Files
houseplan-card/docs/reviews/CODE-REVIEW-681-r1.md
T
2026-09-27 19:11:36 +00:00

149 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CODE-REVIEW-681-r1
Issue: [#681](https://github.com/Matysh/houseplan-card/issues/681) — «Гигиена,
волна 4 — чек-листы testing-notes и дизайн-материалы выпущенных задач»
(эпик #674). Материал раунда: `708ed850f3ba5069d2507afcf066ae65939a5703`
(один коммит поверх `origin/dev` @ `c8fc8838`, слитого в #679). Заход r1,
блокирующих циклов израсходовано 0 из 4.
## Скоуп
Инфраструктурная задача (класс C — документация, плюс попутные правки в
`scripts/`, `test/`, `demo/`, `.github/workflows/**`, которые относятся к
классу B и покрыты тем же issue). Ни одного файла класса A с продуктовым
поведением: единственные касания `src/**` — комментарий в
`src/styles/form-kit.styles.ts` (ссылка на удалённый референс), без изменения
кода. Задача закрывает волну 4 эпика #674: убрать ручные чек-листы, которых
нет в `PROCESS.md` §2 (ни ручной фазы, ни одного отмеченного пункта за всё
время), и дизайн-материалы уже выпущенных задач (#505, #600), которые больше
не нужны в рабочем дереве. Прямая связь со SCOPE.md отсутствует, что и
ожидаемо для инфраструктурной гигиены — задача не добавляет продуктовое
поведение и не обязана называть Core user job; смотрю по PROCESS.md §8/§2.7
(соразмерность гейтов и полнота доказательств), а не по SCOPE.md.
Трейлеры коммита: `Issue: #681`, `User-Visible: no` — корректно, изменений в
пользовательском поведении нет, оба CHANGELOG (`docs/CHANGELOG.md`,
`docs/CHANGELOG.ru.md`) не тронуты, что и требуется при `no`.
## Как проверялось
Материал — ровно `708ed850`, `git fetch`/`checkout` не выполнялись. Дешёвые
гейты уже подтверждены зелёным Validate на этом SHA
(run 36341174458) — `npx tsc --noEmit`, `npm test`, `npm run build` +
сверка бандла не перегонялись повторно. Из моего бюджета:
- Прочитан весь диф (`git show --stat 708ed850`, полный `git diff
origin/dev...HEAD`, 84 файла, +245/−9902) и тело/комментарии issue —
сверены все восемь пунктов чек-листа «Объём» и раздел «Чем доказано».
- Точечно прогнаны два целевых теста, которые сам диф добавляет/меняет:
`node --test test/testing-doc.test.mjs` — 2/2 зелёные;
`node --test --test-name-pattern="issue 570|opening.*symbol|golden.*matrix" test/golden-matrix.test.mjs` — 7/7 зелёные.
- Проверена дисциплина «тест умеет падать» для нового мутанта
`testing-doc-drops-manual-section`: вручную применил его патч
(`## Чего не проверяет автоматика` → `## Ручные заметки` в `docs/TESTING.md`),
прогнал `node --test --test-name-pattern="#681 TESTING.md"
test/testing-doc.test.mjs` — тест покраснел, откатил файл, `git status`
чист.
- `git grep` по перечню удалённых путей (`testing-notes/{core-checklist,
decor-and-backdrop,devices,dialogs-and-forms,geometry,history,
infrastructure,live-and-integrations,README}`, `505-summary-panel`,
`600-settings-dialogs/{reference,screenshots,pairs}`,
`capture_summary_panel_505`, `README-ha-dialog-505`) вне `legacy/`,
`docs/reviews/`, `docs/specs/`, changelog — единственные совпадения на
`600-settings-dialogs` без под-путей `reference/screenshots/pairs`: два
прокомментированных упоминания (`src/styles/form-kit.styles.ts:142`,
`scripts/bundle-budget.mjs:554`), явно помеченные «с #681 — в истории git»,
и команда восстановления `git checkout f989fbfe -- .../reference` в самом
README папки — не битые ссылки, а осознанные указатели на git-историю.
Совпадений на реально удалённые пути не найдено.
- Прочитаны и сверены файл-за-файлом: `docs/TESTING.md` (711 строк, разделы
«Пустое совпадение `--test-name-pattern` (#650)» и «Чего не проверяет
автоматика»), `scripts/mutation-registry.mjs` (переименование мутанта и его
`because`), `test/golden-matrix.test.mjs:847-855` (67 id только из
`demo/golden/matrix.mjs`, без сверки с текстом доков), состав каталогов
`docs/testing-notes/` и `docs/design/`, `docs/design/600-settings-dialogs/`
(что осталось), `demo/helpers/README-ha-dialog.md`,
`.github/workflows/release-review.yml:210`, `demo/guard/README.md`,
`docs/DEVELOPMENT.md:744-746`, `docs/specs/505-summary-panel-design-parity.md`,
`scripts/check-inputs.mjs` (нет упоминаний удалённого
`capture_summary_panel_505.mjs` — правка там не нужна),
`demo/helpers/ha-dialog-fixture.mjs` (маршрут `/reference/` отсутствует),
`docs/design/649-25d-stage6` (диф пуст — пункт действительно не тронут).
## Находки
Нет. High: 0. Medium: 0. Low: 0.
## Что проверено и корректно
| Пункт «Объём» (issue) | Что сделано | Чем доказано | Проверка ревьюера |
|---|---|---|---|
| `docs/testing-notes/` | 9 файлов удалены (README-индекс + 8 чек-листов), правило #650 перенесено в `TESTING.md`, `[manual]`-пункты без автосвидетеля сведены в раздел «Чего не проверяет автоматика», реестр `mutation-browser-guards.md` (#659) сохранён | `test/testing-doc.test.mjs` (лимит 800 строк, точный состав каталога), `mutation-gate --check` (заявлено 200/200) | Каталог перечитан: единственный файл — `mutation-browser-guards.md`. Тест прогнан лично — зелёный, мутация красит его |
| `TESTING.md` | Приложения по issue (#197/#249/#272/#275/#288/#261, v1.43–1.44) сняты, ссылка на #650 работает | 800 → 711 строк | Строки посчитаны (`wc -l` → 711), разделы найдены на местах |
| Мутант `testing-notes-index-drops-section` → `testing-doc-drops-manual-section` | Патчит новый раздел `TESTING.md`, `because` объясняет риск («ручные проверки теряют дом») | `mutation-gate --id=…` заявлен пойманным 1/1 | Патч применён вручную, тест покраснел; старый id в реестре отсутствует (не задвоен) |
| `test/golden-matrix.test.mjs:847-855` | Копия 67 id снята из `geometry.md`, список и способ измерения — только в `demo/golden/matrix.mjs`; тест проверяет длину/уникальность/присутствие в матрице, без сверки с текстом доков | `golden-matrix` 52/52 | Целевой прогон лично — 7/7 в затронутой области |
| `docs/design/505-summary-panel` | Удалён вместе с `demo/capture_summary_panel_505.mjs` и маршрутом `/reference/` в `ha-dialog-fixture.mjs`; ссылка в `505-summary-panel-design-parity.md` заменена на указатель в git-историю (`git show f989fbfe:…`) | `check-inputs --coverage` чист | Каталог отсутствует, маршрут `/reference/` в фикстуре отсутствует, `check-inputs.mjs` не содержит упоминаний удалённого скрипта |
| `docs/design/600-settings-dialogs` | `reference/`, `screenshots/`, `pairs/`, `ARCHIVE-README`, `ISSUE-FORM`, `OPEN-POINTS` удалены; `SPEC`, `IMPLEMENTATION-GUIDE`, `field-maps/`, `ACCEPTANCE`, README (с командой восстановления) остались; вывод capture-скриптов перенесён в `artifacts/` | 68 файлов/4,08 МБ → 13/0,70 МБ | Состав каталога сверен, README содержит корректную команду восстановления и таблицу оставшегося; два комментария в `src/`/`scripts/` явно помечены как историческая ссылка |
| `docs/design/649-25d-stage6` | Не тронут (после стабильного v1.78.0) | — | `git diff` по каталогу пуст |
| `README-ha-dialog-505.md` → `README-ha-dialog.md` | Переименован и сокращён до фикстуры/#607/#609; путь в `release-review.yml:210` исправлен | `release-review.test.mjs` 7/7 (заявлено) | Файл существует под новым именем, старое имя нигде не встречается, строка 210 workflow ссылается на новое имя; workflow подтверждённо thin/`workflow_dispatch`-only — зеркало в `main` не требуется |
| `demo/guard/README.md:25-28` | «Запись здесь» заменена на явное указание — запись в `verify-guard.mjs` | — (документационная правка) | Прочитан текст — README прямо говорит «Этот README записи не заменяет» |
| `DEVELOPMENT.md:748` | Правило `[auto: …]` сужено до `TESTING.md`, упоминание `testing-notes/` снято | — | Диф прочитан, соответствует факту (каталог больше не хранит чек-листов) |
Трейлеры (`Issue:`, `User-Visible: no`), число видимое пользователю
отсутствует (задача не меняет ни одной пользовательской величины — единственные
числа в диффе — размеры документации, «одно число — один источник» не
применимо).
## Чего не проверял
- Полный `npm run gate:small`, `mutation-gate --check`, `check-docs.mjs`
заново не гонял — Validate зелёный на этом самом SHA (run 36341174458),
а диф не даёт оснований сомневаться в этих гейтах (никакого продуктового
кода, только документация/скрипты вокруг диагностик). Прогнал только два
точечных теста, которые новы/изменены этим диффом, плюс ручную мутацию
одного из них — этого достаточно для дисциплины «тест умеет падать» на
задеваемых AC.
- `node scripts/smoke-select.mjs --base <base> --head <head>` не запускал:
диф не касается `src/**` поведения, только один комментарий в
`form-kit.styles.ts`; браузерные смоки заявлены автором как не выбранные
(`smoke-select: прямых и зарегистрированных смоков 0`) и это согласуется с
характером изменений — правки не в рантайм-коде.
`demo/verify_ha_form_shell_609.mjs --capture` в песочнице не поднимается
(известный таймаут `__card`, не связанный с этой правкой) — автор сам
пометил это как неподтверждённое прогоном; правка там ограничена путём
вывода `--capture` (`artifacts/ha-form-shell-609/`), не логикой диагностики,
риск минимален.
- `golden:verify`, `pytest tests_backend`, `npm run invariants` — не
прогонял: диф не трогает `custom_components/**/*.py`, геометрию модели или
ссылки на неё, и ни один визуальный сценарий не меняется (только текст
документации о сценах, не сами сцены).
- Полный `mutation-gate --check` (весь реестр, не один мутант) не гонял —
дорогой прогон, автор привёл результат зелёного прогона на этом дереве;
целевая проверка одного нового мутанта показала, что дисциплина «мутация
красит тест» соблюдена.
- Размер дерева `docs/design/` до/после не пересчитывал независимо (доверился
`ls`/`git show --stat`, что согласуется с заявленным числом 68→13 файлов).
## Вердикт
Зелёный. Все восемь пунктов чек-листа «Объём» закрыты (кроме сознательно
отложенного `649-25d-stage6`, который сам чек-лист требует не трогать сейчас),
удаления не оставили висячих ссылок или сирот, оба заявленных теста
(`testing-doc.test.mjs`, целевая часть `golden-matrix.test.mjs`) зелёные и
проверены на способность падать, новый мутант ловит регресс. High: 0,
Medium: 0.
---
<!-- material-anchors: сгенерировано конвейером (#414) -->
## Материал раунда
- Ветка: `issue/681-hygiene-wave4`, коммит `708ed850f3ba` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет.
- Дерево материала: `6be376e127daef6302df7a245a48d51e875e12d5`
```
git log --all --format='%H %T' | grep 6be376e127da
```
- Тело issue: `dfbb1cd7358f3126f50fe5d03da58c207e0e2bdacefe736792772b891512dca8`
- Вердикт конвейера: `green` · High 0