Files
houseplan-card/docs/reviews/CODE-REVIEW-323-r1.md
T
2026-08-27 11:12:03 +00:00

13 KiB

CODE-REVIEW — issue #323, заход r2

Примечание о нумерации. Заголовок задачи, переданный конвейером, указывал «заход r1 · блокирующих циклов 0 из 2». Это не соответствует фактическому состоянию: в дереве уже лежит закоммиченный docs/reviews/CODE-REVIEW-323-r1.md (коммит 3b915bd0, класс C, трейлеры корректны), а в комментариях issue есть жёлтый вердикт заход r1 · блокирующих циклов 1/2, полученный на SHA 69facb99, и последующий комментарий владельца «r1 → r2: M1 закрыта» на HEAD fb8fdf47. Текущий разбор — фактически r2, бюджет циклов до этого раунда равен 1/2 (лимит короткого трека — 2, §5.1). Документ ниже назван и оформлен как r2; если шаг публикации всё же соберёт имя CODE-REVIEW-323-r1.md из переданного заголовка, он затрёт настоящий r1 — заголовок задачи нужно поправить на стороне конвейера.

SHA материала: fb8fdf479c503992667c45294b28aede2d5056c3 (git rev-parse HEAD непосредственно перед подведением итогов).

Трек: trivial (§5.1), лимит код-ревью — 2 цикла.

Класс изменения: C (документация). src/**, custom_components/**/*.py не тронуты ни в этом раунде, ни в r1.

Скоуп раунда — дельта r1 → r2

Предыдущий вердикт (r1, SHA 69facb99) — жёлтый, High: 0, Medium: 1 (M1, в скоупе). Дельта объявлена по git diff 69facb99..fb8fdf47:

docs/USER-GUIDE.md                | 6 +++---
docs/USER-GUIDE.ru.md              | 4 ++--
docs/reviews/CODE-REVIEW-323-r1.md | 176 ++++++++++++++++++++++ (публикация r1 конвейером)
3 files changed

Один продуктивный коммит: fb8fdf47 — «docs: both user guides install from the HACS default catalog too», трейлеры Issue: #323 / User-Visible: no, сообщение коммита прямо ссылается на CODE-REVIEW-323-r1 M1. Второй файл в дельте (docs/reviews/CODE-REVIEW-323-r1.md) — собственный doc-коммит публикации 3b915bd0, ожидаемый и не являющийся предметом ревью.

Дельта локальна: правка ограничена ровно теми двумя файлами, что назвала находка M1, ничего за пределами её формулировки не задето. Ребейза на ушедший вперёд dev не было (родословная fb8fdf47 — прямое продолжение 69facb99), контракт поведения не менялся, новая подсистема не задета, объём дельты (10 строк в двух markdown-файлах) многократно меньше исходной задачи. Полный разбор не требуется — работает сокращение по §2.10.

Закрытие раунда r1

Находка r1 Чем закрыта Где видно
M1 — docs/USER-GUIDE.md (82-83) и docs/USER-GUIDE.ru.md (82) учили добавлять custom-репозиторий вручную, противореча исправленному README Шаг 1 в обоих файлах переписан: поиск «House Plan» в HACS, явная фраза «no custom repository needed» / «пользовательский репозиторий добавлять не нужно» — по образцу формулировки README docs/USER-GUIDE.md:82-83 (diff 69facb99..fb8fdf47, коммит fb8fdf47); docs/USER-GUIDE.ru.md:82 (тот же коммит). Проверено чтением: sed -n '75,90p' docs/USER-GUIDE.md и docs/USER-GUIDE.ru.md после правки, сверено построчно с формулировкой README.md:88-91 / README.ru.md:91-95 — смысл идентичен (входит в default-каталог, custom repository не нужен), терминология «основной каталог HACS» совпадает между RU-README и RU-USER-GUIDE

Дополнительно перепроверено grep'ом по всему трекаемому дереву (не только .md, без исключений кроме CHANGELOG/reviews/specs, чтобы не полагаться на грепы r1 без проверки): git grep -rniE "custom.{0,25}repositor|HACS-Custom|пользовательск\S*\s+репозитор|custom.{0,15}Integration.{0,15}repositor" находит только четыре ожидаемых строки — по одной новой формулировке в каждом из четырёх файлов (README.md, README.ru.md, USER-GUIDE.md, USER-GUIDE.ru.md). Ни устаревших упоминаний, ни расхождений в custom_components/**, src/** или где-либо ещё не осталось. M1 закрыта полностью, новых мест с тем же дефектом дельта не оставила.

Унаследовано из r1

Без повторной проверки в этом раунде, ссылка — docs/reviews/CODE-REVIEW-323-r1.md на SHA 69facb99:

  • AC1 (бейдж HACS-Custom → HACS-Default в README.md/README.ru.md) — дельта r1→r2 не трогает README, доказательство r1 не устарело.
  • AC2 (секция установки README — поиск вместо custom repository, my-кнопка/ restart/add integration/YAML-ресурс сохранены) — та же причина, README не в дельте.
  • Правки docs/STATUS.md и docs/TESTING.md (коммит 69facb99) — вне дельты этого раунда, признаны корректными в r1.
  • Трейлеры Issue: #323 / User-Visible: no на коммитах r1 (343af61a, 69facb99) — проверены в r1, не переоценивались повторно.
  • Обоснование непрогона check-docs.mjs, инвариантов геометрии, смоков, golden:verify, backend-тестов и perf-профилей для диффа README/STATUS/TESTING (docs-only, src/** и геометрия не задеты) — рассуждение переносится и на делту r2, поскольку она тоже чисто текстовая и тоже не касается src/**.
  • Пункт «чего не проверял» из r1 (живой поиск в HACS UI, докс-скриншоты, отсутствие типа bug на трек trivial) — сохраняет силу, дельта этого раунда на эти пункты не влияет.

Гейты этого раунда

Дешёвые гейты прогнаны заново на fb8fdf47, как требует §2.10 (код/дерево изменились с r1, а стоят гейты минуты):

Гейт Команда Результат
Typecheck npx tsc --noEmit зелёный, без вывода, exit 0
Build npm run build зелёный, dist/houseplan-card.js собран за 11.9s
Синхронность копий бандла git status --short dist/ custom_components/houseplan/frontend/ demo/srv/assets/ + cmp dist/houseplan-card.js custom_components/houseplan/frontend/houseplan-card.js пусто / идентичны — класс D не менялся
Unit-тесты npm test зелёный: 1358 объявлено, 1357 pass, 1 skipped, 0 fail

Не прогонялись, причина не изменилась относительно r1 (дельта тоже docs-only, не касается src/**, геометрии, рендера, backend):

  • node scripts/check-docs.mjs — дельта не трогает src/**, отпечаток скриншотов не мог устареть от правки в двух markdown-файлах руководства.
  • npm run invariants -- --config … — geometry/layout/толщина стен/ marker.space/open_spans не задеты ни разу за оба раунда.
  • Браузерные смоки (demo/smoke_*.mjs) — изменённые символы это markdown-текст docs/USER-GUIDE*.md, не код/тест; smoke-select.mjs не запускал по той же причине, что и в r1 (инструмент ищет связи по изменённым символам кода/тестов, а не по тексту руководств вне demo/).
  • npm run golden:verify — рендер, геометрия, стили не менялись.
  • python -m pytest tests_backend -q — custom_components/**/*.py не тронут.
  • Perf-профили — не названы в AC, не задеты.

«Одно число — один источник»: дельта не вводит и не меняет пользовательских числовых величин; текстовая формулировка «в основном каталоге HACS, custom repository не нужен» теперь идентична между README и USER-GUIDE на обоих языках (см. таблицу закрытия M1 выше) — именно то расхождение, которое r1 поймал как Medium, теперь устранено единообразно.

Находки этого раунда

Нет. High: 0, Medium: 0, Low: 0. Дельта — точечный фикс, ничего нового не внесла и не задела соседнее поведение.

Проверено и корректно

  • M1 закрыта: оба полных руководства (EN/RU) больше не учат ручному добавлению custom-репозитория и текстуально согласованы с README.
  • Расширенный grep (не только .md, без предположения, что r1 нашёл всё) подтверждает отсутствие других мест с тем же устаревшим паттерном.
  • Коммит fb8fdf47 несёт корректные трейлеры (Issue: #323, User-Visible: no); User-Visible: no обоснован — поведение карточки/ интеграции не меняется, только текст документации, changelog-файлы не тронуты (согласуется).
  • Класс D (dist/**, custom_components/houseplan/frontend/**, demo/golden/baselines/**) не менялся ни в дельте, ни ранее.
  • Doc-коммит публикации r1 (3b915bd0) корректно трейлерован и не является предметом ревью — ожидаемый служебный коммит конвейера.

Чего не проверял

  • Живой поиск «House Plan» в интерфейсе HACS — недоступен в окружении ревьюера; унаследовано из r1 без повторной попытки.
  • Докс-скриншоты/фингерпринт — не проверялись, src/** не тронут, check-docs.mjs не применим ни в r1, ни в r2.
  • Отсутствие меты типа (bug/feature/tech-debt) на issue при наличии trivial — уже отмечено и принято в r1 как решение владельца, не предмет этого раунда.

Вердикт

High: 0. Medium: 0. M1 из r1 закрыта полностью и без побочных находок. Все AC (унаследованные из r1, дельта их не задевает) доказаны; дополнительная находка r1, из-за которой стоял жёлтый, устранена — задача теперь решает заявленный сценарий целиком: и README, и полное руководство на обоих языках согласованно говорят «House Plan уже в default-каталоге HACS, custom repository не нужен».

Вердикт: зелёный.