mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
@@ -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 <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
|
||||
Reference in New Issue
Block a user