From 83a07925465b5aa6724b2b27d454029b56ddd631 Mon Sep 17 00:00:00 2001 From: "claude[bot]" <209825114+claude[bot]@users.noreply.github.com> Date: Sat, 19 Sep 2026 12:29:27 +0000 Subject: [PATCH] docs: review document for #593 Issue: #593 User-Visible: no --- docs/reviews/CODE-REVIEW-593-r2.md | 151 +++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 docs/reviews/CODE-REVIEW-593-r2.md diff --git a/docs/reviews/CODE-REVIEW-593-r2.md b/docs/reviews/CODE-REVIEW-593-r2.md new file mode 100644 index 00000000..6b2a63e0 --- /dev/null +++ b/docs/reviews/CODE-REVIEW-593-r2.md @@ -0,0 +1,151 @@ +# Код-ревью #593 — «Заменить все иконки библиотеки и расширить каталог до 60 плановых символов» + +Заход: **r2** · блокирующих циклов израсходовано **1/4** (после этого вердикта — не увеличивается: зелёный) +Материал: `fc4d55c7cdb36d35889f85b55f3a8e42087575ac` (рабочая копия — HEAD, detached), 4 новых +коммита после материала r1 (`7df2740f1ccc`). + +## 1. Скоуп ревью + +Это второй заход. По PROCESS.md §2.9/§4 объём разбора — по дельте, а не заново: r1 +(`docs/reviews/CODE-REVIEW-593-r1.md`) уже провёл полное ревью 245 файлов на +`7df2740f` и признал 11 AC доказанными, найдя две находки Medium в скоупе (High — 0). +Раунд закрыт жёлтым, вердикт вернул задачу автору без нового issue. + +Дельта r1→r2: + +``` +git diff --stat 7df2740f..fc4d55c7 +``` + +4 коммита, 49 файлов, из них по существу — 2 текстовых файла (`docs/ARCHITECTURE.md`, +`src/furniture-art-runtime.ts`, только заголовочный комментарий), 4 принятых golden- +эталона, пересборка `dist/**`/`custom_components/.../frontend/**` (класс D, следствие +правки комментария) и `docs/images/screenshots.json` (отпечаток скриншотов). Ни одна +строка исполняемой логики не менялась — весь диф `src/furniture-art-runtime.ts` это +JSDoc-комментарий (проверено `git diff` построчно, см. §3). + +Дельта локальна: не ребейз, не новая подсистема, не смена контракта поведения — +полный разбор не требуется, разбираю только то, до чего дельта дотягивается. + +## 2. Как проверялось + +Дешёвые гейты уже зелёные на этом самом SHA: Validate run +[35442063854](https://github.com/Matysh/houseplan-card/actions/runs/35442063854), +проверил `head_sha` через `gh api` — совпадает с `fc4d55c7cdb36d35889f85b55f3a8e42087575ac`, +`conclusion: success`. Поэтому `npx tsc --noEmit`, `npm test` заново не гонял. + +Дополнительно (дёшево, и потому что «Golden-кадры» и «Смоки» в этом конкретном +прогоне Validate вышли `skipped` — сработал шаг «Переиспользование: это дерево уже +проверено», результат унаследован от прогона на предыдущем коммите дельты, а не +получен заново на `fc4d55c7`; я перепроверил сам, а не доверился ярлыку): + +| команда | результат | +|---|---| +| `npm run build && npm run bundle:sync` | бандл собран заново; `diff -rq dist custom_components/houseplan/frontend` и `diff -rq dist demo/srv/assets` — совпадение (расхождение только по статичным SVG/`icons.js` демо-харнесса, не части бандла) | +| `npm run furniture:check` | `Furniture pack OK: 60 plan symbols, 33 menu icons (generated files current)` | +| `node scripts/check-docs.mjs --external --screenshots=strict` | `Documentation checks passed (7 files, 12 external links)` | +| `node scripts/smoke-select.mjs --base 7df2740f --head fc4d55c7` | «Изменено файлов src/\*\*: 1 · символов на изменённых строках: 0» → НЕОПРЕДЕЛЁННОСТЬ; решение см. §5 | +| `npm run golden:verify` (полная матрица, пересобранный бандль этой вершины) | 173/173 сцен `passed`, **0** `different`, **0** `missing-baseline` | + +Ручной проверкой кода (без исполнения): `git diff 7df2740f..fc4d55c7` построчно по +всем нетривиальным файлам (`docs/ARCHITECTURE.md`, `src/furniture-art-runtime.ts`, +`docs/images/screenshots.json`, тело issue §8/§9), провенанс коммитов (`Issue:`, +`User-Visible:`, `Baseline-Reviewed:`/`Release:` на коммите с baselines), состав +`scripts/mutation-registry.mjs` для `furniture-art-runtime.ts` (патчи адресуются +`find/replace` по содержимому, а не по номеру строки — комментарий их не задевает). + +## 3. Закрытие раунда r1 + +| находка r1 | чем закрыта | где это видно | +|---|---|---| +| **Medium 1** — `docs/ARCHITECTURE.md:249` называл «44 SVG drawings» и союз с примитивами, хотя ТЗ §9 явно требовало правки при таком условии | Коммит `ebc577d2`: абзац переписан — «the 60 SVG drawings», плюс новое предложение «Since #593 the library is designer artwork only — the twelve primitive symbols drawn from code are gone, so every piece waits for the chunk instead of twelve of them rendering regardless» | `git diff 7df2740f..fc4d55c7 -- docs/ARCHITECTURE.md`: было `the 44 SVG drawings live in…`, стало `the 60 SVG drawings live in… Since #593 the library is designer artwork only…`. То же условие закрыто и в коде: `src/furniture-art-runtime.ts` заголовок (коммит `0565c7ad`) — «The 60 designer symbols carry ~17 KB gzip… every piece now waits for this chunk instead of twelve of them rendering regardless. The `fallback` paragraph below is therefore the behaviour of the whole library, not of 48 pieces out of 60» — то же место, которое я называл источником путаницы в r1, теперь прямо снимает старое обещание. `grep -n "44" docs/ARCHITECTURE.md src/furniture-art-runtime.ts` — 0 совпадений | +| **Medium 2** — golden-сцена `tray-narrow-palette-en` расходится (diffRatio 0,0022 на каноническом Chromium), но не объявлена в списке §8 ТЗ; команда `golden:accept` отказала бы приёмке необъявленной `different`-сцены | Тело issue обновлено (ред. 5, §8): таблица явно добавляет строку «`tray-narrow-palette-en` — different — **добавлена по ревью r1 M2**», рядом с уже объявленными `furniture-categories-light`, `furniture-placement-preview-light` и новой `furniture-new-symbols-light`. Эталоны фактически приняты коммитом `65e0c85d` со ссылкой на полный линуксовый прогон [35441152733](https://github.com/Matysh/houseplan-card/actions/runs/35441152733) (трейлеры `Baseline-Reviewed:`/`Release:` присутствуют) | Читал тело issue напрямую (`gh issue view 593 --json body`) — таблица §8 содержит все 4 сцены. Сам прогнал `npm run golden:verify` на пересобранном бандле `fc4d55c7` — **173/173 `passed`, 0 `different`, 0 `missing-baseline`**: `tray-narrow-palette-en` и `furniture-new-symbols-light` (была `missing-baseline` в r1) теперь совпадают с принятым эталоном. Находка закрыта не только текстом, но и исполнением | + +Оба Medium из r1 закрыты предметно, не декларативно: у M1 я прочитал текст обоих +файлов (docs и код) после правки, у M2 — перегнал сам `golden:verify` и получил ноль +расхождений, а не поверил хендоффу автора. + +## 4. Унаследовано из r1 (без повторной проверки) + +Дельта не касается перечисленного ниже — принимаю выводы `CODE-REVIEW-593-r1.md` на +SHA `7df2740f1ccc3bf14caeca1ae824eed853dda50f` без повторного исполнения: + +- **AC1–AC6, AC9, AC10** — пакет 0.4.0 (33/60, ID-совместимость, mapping категорий, + сохранённые размеры, inert-generator, UX палитры, бюджеты-гейты, провенанс/лицензия). + Ни один из файлов, участвующих в доказательстве (`pack.json`, + `scripts/generate-furniture-assets.mjs`, `src/furniture.ts`, + `scripts/bundle-budget.mjs`, `assets/furniture/houseplan-0.4.0/README.md`) не входит + в дельту r1→r2 (`git diff --stat 7df2740f..fc4d55c7` их не перечисляет). +- **AC8** (lazy split, отказ чанка для всех 60) — логика `furniture-art-runtime.ts` + не менялась, только комментарий; смок `smoke_furniture_lazy_art.mjs` перепроверять + незачем, поведение то же самое, что r1 уже подтвердил исполнением. +- **AC11** (доказательства/команды) — методология хендоффа не изменилась. +- Ловушка союза `LEGACY_FURNITURE ∪ GENERATED_FURNITURE_CATALOG` (§5 ТЗ) — код, + закрывающий её, не в дельте. +- i18n (7 ключей × 4 локали) — не в дельте. +- Разбор мутаций (5 новых + 1 исправленный) — `scripts/mutation-registry.mjs` не в + дельте. +- Вывод «diff не касается geometry/invariants/Python backend» — состав дельты (см. + `git diff --stat`) подтверждает то же самое и в r2: ни одного файла + `custom_components/houseplan/**/*.py`, ни изменений в моделях комнат/толщины. + +## 5. Находки + +Не найдено. High — 0, Medium — 0. + +Обе находки r1 закрыты предметно (см. §3). Новых дефектов в дельте не нашёл: обе +правки — точечные текстовые изменения ровно там, где условие ТЗ §9 их требовало, без +побочных эффектов на код или контракт. + +## 6. Чего не проверял и почему + +- **`npx tsc --noEmit`, `npm test` «с нуля»** — не гонял отдельно: Validate зелёный + именно на материале `fc4d55c7` (подтверждено `gh api`, см. §2). `npm run build` я + всё же выполнил дважды — не ради этого гейта, а чтобы получить свежий бандл для + `golden:verify`/сверки трёх копий; неявно typecheck подтверждён тоже (сборка чистая). +- **`node demo/smoke_furniture*.mjs`, `smoke_decor.mjs` повторно** — не гонял: диф + дельты не содержит ни строки исполняемой логики (`smoke-select.mjs` сам это + показывает — 0 символов на изменённых строках), а r1 уже прогнал все релевантные + смоки на той же логике на `7df2740f`. Инструмент вернул «НЕОПРЕДЕЛЁННОСТЬ», а не + «прямое совпадение» или «связь» — я трактую это как отсутствие связи, потому что + единственная изменённая строка кода — комментарий, не код. +- **`python -m pytest tests_backend`** — diff дельты не касается + `custom_components/houseplan/**/*.py` (`git diff --stat` подтверждает). +- **`npm run invariants -- --config …`** — diff дельты не касается геометрии/ссылок; + унаследовано из r1, дельта это не меняет. +- **`node scripts/mutation-gate.mjs` полный прогон** — не гонял: диффовый + mutation-gate — часть Validate, зелёного на этой вершине; сами мутанты, + адресующие `furniture-art-runtime.ts`, патчат по `find/replace` строки кода, а не + по номеру строки — комментарий их не сдвигает и не ломает (проверил чтением + `scripts/mutation-registry.mjs:8755-8820`). +- **`node scripts/process-gate.mjs --issues`** — не в компетенции код-ревью содержания. + +## 7. Вердикт + +Обе Medium-находки r1 закрыты предметно: `docs/ARCHITECTURE.md` и заголовок +`src/furniture-art-runtime.ts` больше не называют число 44 и не намекают на союз с +примитивами, а перечень golden-сцен §8 ТЗ дополнен `tray-narrow-palette-en`, эталон +для неё и для `furniture-new-symbols-light` принят с полного линуксового прогона и +подтверждён трейлерами `Release:`/`Baseline-Reviewed:`. Сам перегнал `golden:verify` +на пересобранном бандле этой вершины — 173/173 сцен `passed`, необъявленных +расхождений нет. Дельта не тронула ни одной строки исполняемого кода (комментарий + +документация + принятые эталоны), поэтому весь массив AC1–AC11, подтверждённый r1, +наследуется без риска регрессии. Новых находок нет. + +**Вердикт: зелёный · заход r2 · блокирующих циклов 1/4 · High: 0 · Medium: 0** + +--- + +--- + + + +## Материал раунда + +- Ветка: `issue/593-furniture-pack-0.4.0`, коммит `fc4d55c7cdb3` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет. +- Дерево материала: `3406b4590ff3a115016d03a9f6f5e5ce44d2945d` + ``` + git log --all --format='%H %T' | grep 3406b4590ff3 + ``` +- Тело issue: `f0feb60aec3d2ab0c475ea3b6ca6cb54cff91300c80121b963b7deb3528d1bdb` +- Вердикт конвейера: `green` · High 0