19 KiB
CODE-REVIEW-679-r1
Issue: #679 «Гигиена, волна 2 — дубли и устаревшее в документации подсистем (эпик #674)». Заход r1 из 4 (полный трек — задача сравнима по объёму с полной переработкой раздела документации; см. #674 «инфраструктурный маршрут»).
Материал: диапазон origin/dev..HEAD, HEAD = 030780386cacc0bb965b7b51d8c705580ec361e3.
Два коммита:
5a258f31— основная правка (свести дубли, снять устаревшее);03078038— назвать тест сверки схемы в шапкеCONFIG-COMPATIBILITY.md.
Оба несут Issue: #679, User-Visible: no — верно: изменения ограничены
docs/**, README*, CONTRIBUTING.md, AGENTS.md, .github/workflows/_process.yml
и ссылками на разделы документов внутри комментариев src/**/validation.py/
тестов; ни один исполняемый символ не тронут (подтверждено ниже).
Скоуп
Задача — волна 2 эпика #674, маршрут инфраструктурный (только docs/** +
комментарии-указатели), без спека и без предметного вопроса владельцу. Объём
из тела issue — 11 пунктов чек-листа плюс раздел «Зависимости и машинные
проверки». Проверено построчно.
Как проверялось
Прочитан весь диф (git diff origin/dev...HEAD), каждый файл из
git diff --stat (48 файлов) сверен с соответствующим пунктом чек-листа
issue. Для правок src/**/custom_components/houseplan/validation.py
построчно проверено, что менялись только пути внутри комментариев/докстрок —
исполняемого кода строка не задета.
| Пункт issue | Проверено | Результат |
|---|---|---|
DECOR-EDITOR.md ← BACKDROP.md + LIVE-TEXT.md |
прочитан файл целиком (402 строки, §1–9), git grep BACKDROP.md|LIVE-TEXT.md вне reviews/legacy/specs/changelog |
Только два намеренных «formerly BACKDROP.md» / «formerly LIVE-TEXT.md» в шапке нового документа — верно, это провенанс, а не забытая ссылка. Оба старых файла удалены (-93, -192 строк). Ссылки в src/houseplan-card.ts, src/houseplan-editor-runtime.ts, src/logic.ts, src/space-geometry.ts, src/space-render.ts, src/styles/plan.styles.ts, custom_components/houseplan/validation.py, test/backdrop.test.mjs, test/logic.test.mjs, tests_backend/test_validation.py, docs/ARCHITECTURE.md, docs/testing-notes/* переписаны на конкретные разделы (§3, §3.2, §3.3, §5, §5.2, §5.3), которые в новом документе реально существуют |
| Ложное «space-card не рисует декор» | сверено с src/space-render.ts |
§5.2 нового документа теперь корректно говорит: static card рисует подложку и картинки декора, но не фигуры/мебель/текст — совпадает с кодом |
LIGHT.md ← DEVICE-LIGHT-SETTINGS-MATRIX.ru.md |
файл удалён (-122 строки), прочитан перенесённый раздел «Leading entity», «controls links», 36-строчная матрица | таблица на английском (соответствует остальному LIGHT.md), обещание «проверяется unit-тестом» теперь называет тест: test/devices.test.mjs, issues 84/88: exhaustive 36-case light settings matrix is internally consistent — тест существует (test/devices.test.mjs:1981) и прогнан (см. «Гейты») |
DEVICE-PRESENTATION.md ← FILTERING.md:169-306 |
построчный дифф обоих файлов | Раздел «Source precedence: what a marker shows» перенесён в DEVICE-PRESENTATION.md дословно; в FILTERING.md — абзац-указатель на новый дом; «в одном pull request» → «в одном коммите» выполнено |
CANVAS.md: §9.5 → CONFIG-COMPATIBILITY.md, overlay/faces → WALL-THICKNESS.md §10–11, таблицы «было/стало» убрать |
построчный дифф CANVAS.md, CONFIG-COMPATIBILITY.md, WALL-THICKNESS.md |
«Model» и «coordinate ranges» переписаны без столбцов «before/now»; «Оптимизировать планы» перенесён целиком в CONFIG-COMPATIBILITY.md (новый раздел «Optimize plans»); §10 «Architectural connection overlay» и §11 «Planar wall faces» перенесены в WALL-THICKNESS.md; «Every place that assumed the unit square» таблица снята (проверено — далее в файле она отсутствует) |
TESTING-DEMO.md → demo/stand/README.md |
файл удалён (-469 строк), demo/stand/README.md прочитан |
карта демо-дома v2, «чего на стенде нет» перенесены; «2 таба редакторов», ?v=1.58.0 отсутствуют в новом тексте; ручной чек-лист не перенесён (в процессе ручной фазы нет — сверено с PROCESS.md §2, там ручного тестирования в цикле действительно нет) |
ISOMETRIC.md — только текущее, история → ADR; SUN.md — снять раздел, перенести правило бумаги |
прочитаны оба файла целиком + новый docs/adr/570-isometric-stage4-visual-handoff.md |
ISOMETRIC.md не содержит «Stage 2/4», «Stage 1» текст перенесён без изменений в новый ADR (провенанс-шапка как у ADR 122/160); SUN.md — раздел «Historical continuous background» снят, а актуальное правило бумаги дано отдельным пунктом текущего раздела, с исправлением: подложка не «бумажит» свой прямоугольник (совпадает с DECOR-EDITOR.md §3.3 и текущим кодом paper=room contours) |
UX-MODES.md: декор «under the rooms» vs DECOR-EDITOR.md:24; hidden isometric; follow-up |
прочитан дифф | декор описан как «один слой над заливками и Glow base, под живым Glow…» со ссылкой на DECOR-EDITOR.md §1 — согласуется с §1 нового документа (таблица «View composition»); «hidden isometric» → «View (Flat and 2.5D)»; follow-up из #3 сведён к абзацу «все выпущены» |
Устаревшие статусы в шапках (VACUUM.md, WARM-REMOUNT.md, WALL-THICKNESS.md, STYLING-HOOKS.md, DECOR-EDITOR.md, CONFIG-COMPATIBILITY.md:18-21, PDF-EXPORT.md:62-65) |
построчный дифф каждого | все статусные строки/таблицы истории сняты; CONFIG-COMPATIBILITY.md теперь называет test/config-schema-parity.test.mjs вместо «следующий этап»; WARM-REMOUNT.md переименовал устаревшее «Выровнять всё по сетке» в текущее «Оптимизировать планы» |
README: абзац о пересъёмке → CONTRIBUTING.md; RADAR/PDF-EXPORT в списке; RU догнал EN |
дифф README.md, README.ru.md, CONTRIBUTING.md |
абзац перенесён (новый раздел «Documentation screenshots» в CONTRIBUTING.md, ссылается на Docs screenshots workflow, docs:accept --reviewed/--identical, согласуется с PROCESS.md §759-765); RADAR и PDF-EXPORT добавлены в оба README; README.ru.md получил абзац про 2.5D-переключатель, «уже загруженное изображение» и ссылку на STAIRS |
Единый список канонических документов подсистем (AGENTS.md + _process.yml) |
дифф обоих файлов | оба теперь перечисляют одни и те же 16 документов (было 7): SUN, LIGHT, CANVAS, WALL-THICKNESS, UX-MODES, CONFIG-COMPATIBILITY, TOUCH-SUPPORT, ISOMETRIC, VACUUM, DECOR-EDITOR, DEVICE-PRESENTATION, FILTERING, STAIRS, RADAR, PDF-EXPORT, STYLING-HOOKS, дословно совпадают |
ADR 282 в WALL-THICKNESS.md |
дифф | §1 добавляет прямую ссылку на docs/adr/282-wall-geometry-representation.md и матрицу миграций в CONFIG-COMPATIBILITY.md |
Зависимости и машинные проверки (раздел issue)
test/device-presentation-policy.test.mjs— читаетdocs/DEVICE-PRESENTATION.md(сам тест не изменился, что и ожидалось: он и раньше читал новый дом, только контента там не было для сверяемых строк — теперь есть). 7 тестов, все зелёные (прогнано локально, см. «Гейты»).test/config-schema-parity.test.mjs— прогнан, зелёный.test/review-doc-guard.test.mjs,test/golden-matrix.test.mjs,test/entry-cost.test.mjs,test/testing-notes-index.test.mjs,test/devices.test.mjs— прогнаны локально, все зелёные (230/230 в общем прогоне пяти файлов + отдельноconfig-schema-parity/devices)._process.yml— правка синхронизирована вmain? Не проверялась мной: задача явно требует «зеркалить вmainтем же содержимым», но этот диф (origin/dev...HEAD) правит только версию наdev; зеркалирование вmainпроисходит отдельным механизмом (workflow_sync/ручной шаг) и не относится к дереву материала этого ревью. Отмечаю как «не в материале», не как дефект: правка тела_process.ymlне входит в список файлов, которыеworkflow_syncсверяет между ветками (сверяются только шесть тонких вызывающих файлов), так что расхождение содержимого_process.ymlмеждуmainиdev— штатное состояние процесса (AGENTS.md, «Workflows run from the default branch are thin callers»), а не находка этого ревью.git grepпо старым именам/якорям внеdocs/reviews,legacy,docs/specs: выполнено вручную —git grep -n "BACKDROP\.md\|LIVE-TEXT\.md\|TESTING-DEMO\.md\|DEVICE-LIGHT-SETTINGS-MATRIX"— единственные два хита — намеренные «formerly …» в шапкеDECOR-EDITOR.md. Пусто в остальном дереве.scripts/check-docs.mjsPUBLIC_DOCS / якоря — не содержит удалённых имён (провереноgrepпо скрипту).
Что проверено и корректно
- Смысловые правки корректны и построчно совпадают с фактическим кодом,
который они описывают (сверено:
space-render.tsдля декора на static-card,SUN.md/DECOR-EDITOR.md§3.3 для правила бумаги,WALL-THICKNESS.md§1 для ссылки на ADR 282). - Оба коммита несут обязательные трейлеры
Issue: #679,User-Visible: no— верно для чисто документационной/комментарийной правки без видимого поведения. - Единый список канонических документов действительно устраняет
рассинхронизацию, названную в issue (
AGENTS.md:38-40vs промпт ревьюера). - Число (User-Visible: единственное затрагиваемое числовое поле в диффе — список из 7→16 канонических документов, дублированный в двух местах) имеет теперь один текст в обоих местах — совпадает дословно, второго независимого источника для этого списка в репозитории нет.
Гейты
Прогнано мной (после подтверждения, что дешёвые гейты уже зелёные на этом SHA):
| Гейт | Команда | Результат |
|---|---|---|
| Validate на материале | (готовый прогон) gh run view 36339487781 |
conclusion: success, headSha: 030780386c… — совпадает с материалом ревью. Покрывает typecheck, npm test, npm run build + bundle-policy --verify, docs job и остальные обязательные jobs validate.yml |
node scripts/check-docs.mjs --external --screenshots=warn |
прогнано локально | Documentation checks passed (7 files, 12 external links); WARN только «screenshot source fingerprint is stale» — ожидаемо для любой правки src/** (даже только комментариев), не блокирует вне кандидата |
node scripts/smoke-select.mjs --base origin/dev --head HEAD |
прогнано локально | «Изменено файлов src/**: 6 · символов на изменённых строках: 0» → «НЕОПРЕДЕЛЁННОСТЬ: дифф исполняемый, но ни один смок не связан доказуемо». Решение ревьюера: не прогонять браузерные смоки — 0 символов на изменённых строках означает, что все шесть изменений в src/** физически лежат внутри комментариев/докстрок (построчно перепроверено в «Как проверялось»); поведение карточки не меняется, смоки по определению не могут покраснеть от переименования пути в комментарии |
node --test по документо-зависимым файлам (device-presentation-policy, golden-matrix, review-doc-guard, entry-cost, testing-notes-index, config-schema-parity, devices) |
прогнано локально (после tsc -p tsconfig.test.json && node scripts/fix-test-build.mjs) |
230/230 pass (первый прогон покраснел из-за отсутствия test-build/*.js — это моя локальная сборка, не дефект материала; после сборки все зелёные) |
node scripts/mutation-registry.mjs --check |
прогнано локально | exit 0, без вывода |
node scripts/check-inputs.mjs --coverage |
прогнано локально | exit 0, без вывода |
Чего не проверял
npm run gate:smallцеликом (build + no-new-any + no-new-private-writes + bundle-tree/budget) — не перегонял отдельно: Validate на точном SHA уже зелёный и покрывает build/bundle-policy; диф не касаетсяdist/**и не является кандидатом, так что сверка бандла неприменима.process-gate --range— не прогонял; автор заявил «0 предупреждений», сам скрипт читает состояние issue/labels, для code-review это косвенная проверка процесса, а не кода, риска не несёт при чисто документационном диффе.- Браузерные смоки,
golden:verify,pytest tests_backend, инварианты модели, performance — не прогонял: смоки — см. решение выше (НЕОПРЕДЕЛЁННОСТЬ, но 0 исполняемых символов на диффе); ни один AC не требует golden/backend/geometry гейтов, дифф не касаетсяdemo/golden/**,custom_components/**/*.pyлогики (правкаvalidation.py— только два слова в комментарии) и геометрии/инвариантов модели. - Зеркалирование
_process.ymlвmain— вне дерева материала, см. выше.
Находки
Ни одной High/Medium/Low находки. Все 11 пунктов чек-листа issue выполнены и
подтверждены построчным сравнением документа с кодом либо с другим
документом; машинные зависимости (test/config-schema-parity.test.mjs,
test/device-presentation-policy.test.mjs, test/golden-matrix.test.mjs,
test/devices.test.mjs) прогнаны и зелёные; git grep по старым именам
пуст, кроме двух намеренных «formerly» в провенансе.
Вердикт
Зелёный. Задача — механический перенос текста без изменения исполняемого поведения; весь заявленный объём проверен, гейты, применимые к диффу, зелёные, дублирующих/устаревших мест не осталось.
Материал раунда
- Ветка:
issue/679-hygiene-wave2, коммит030780386cac— ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет. - Дерево материала:
7562c72f36d2aa1326aa9dcab83f960993611190git log --all --format='%H %T' | grep 7562c72f36d2 - Тело issue:
c9f99f28066575542c2388c6e3dfb210caa78929a048cc0dcdd71d359cfab47b - Вердикт конвейера:
green· High 0