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

15 KiB
Raw Blame History

CODE-REVIEW-681-r1

Issue: #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.


Материал раунда

  • Ветка: issue/681-hygiene-wave4, коммит 708ed850f3ba — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет.
  • Дерево материала: 6be376e127daef6302df7a245a48d51e875e12d5
    git log --all --format='%H %T' | grep 6be376e127da
    
  • Тело issue: dfbb1cd7358f3126f50fe5d03da58c207e0e2bdacefe736792772b891512dca8
  • Вердикт конвейера: green · High 0