diff --git a/docs/reviews/CODE-REVIEW-681-r1.md b/docs/reviews/CODE-REVIEW-681-r1.md new file mode 100644 index 00000000..1a21292e --- /dev/null +++ b/docs/reviews/CODE-REVIEW-681-r1.md @@ -0,0 +1,148 @@ +# 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 --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. + +--- + + + +## Материал раунда + +- Ветка: `issue/681-hygiene-wave4`, коммит `708ed850f3ba` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет. +- Дерево материала: `6be376e127daef6302df7a245a48d51e875e12d5` + ``` + git log --all --format='%H %T' | grep 6be376e127da + ``` +- Тело issue: `dfbb1cd7358f3126f50fe5d03da58c207e0e2bdacefe736792772b891512dca8` +- Вердикт конвейера: `green` · High 0