diff --git a/docs/reviews/CODE-REVIEW-665-r2.md b/docs/reviews/CODE-REVIEW-665-r2.md new file mode 100644 index 00000000..62c5c047 --- /dev/null +++ b/docs/reviews/CODE-REVIEW-665-r2.md @@ -0,0 +1,137 @@ +# CODE-REVIEW-665-r2 + +Issue: [#665](https://github.com/Matysh/houseplan-card/issues/665) — «2.5D: показатели комнаты под названием «плавают» при зуме». +Этап: code-review, заход r2, лёгкий трек `small`, лимит циклов 2, потрачен 1. +Материал: ровно `d06cca2c19a3b5a062b79b4073227e5682636c90`, рабочая копия уже +на нём (`git rev-parse HEAD` совпадает). Fetch/checkout не выполнялись. + +## Скоуп + +Дельта к материалу r1 (`8ffbdf8a28f8`, см. «Материал раунда» в +`docs/reviews/CODE-REVIEW-665-r1.md`): + +``` +git diff 8ffbdf8a..d06cca2c --stat + docs/reviews/CODE-REVIEW-665-r1.md | 216 +++++++++++++++++++++++++++++++++++++ + 1 file changed, 216 insertions(+) +``` + +Единственный новый коммит — `d06cca2c` (`docs: review document for #665`, +`User-Visible: no`) — публикация конвейером документа r1. Продуктовый код, +тесты, реестр мутаций, docs/ISOMETRIC.md, changelog не менялись ни на строку +с момента r1. Автор ответил на жёлтый вердикт r1 **комментарием в issue**, не +коммитом — это соответствует характеру находки: единственный Medium r1 был +не дефектом кода, а неточной записью о влиянии диффа на golden-матрицу, и её +устранение прямо ограничено записью в issue (сама находка так и +формулировала фикс: «Кода это не касается — правка чисто в разделе учёта +диффа»). + +Работа по-прежнему закрывает J1/J5 (`docs/SCOPE.md`), скоуп и класс (A+B+C) +не изменились — оценка из r1 остаётся в силе, см. «Унаследовано из r1» ниже. + +## Как проверялось + +Раз код не менялся, повторный прогон дешёвых/тяжёлых гейтов не даёт новой +информации — «код изменился» (условие §2.10 для обязательного повтора +дешёвых гейтов) здесь ложно. Дешёвые гейты уже подтверждены зелёным Validate +именно на этом SHA `d06cca2c` +(https://github.com/Matysh/houseplan-card/actions/runs/36243964626) — не +перегонял. Тяжёлые гейты (`golden:verify`, мутант, оба смока, отрицательная +проба) были исполнены на r1 против идентичного кода — код с тех пор не +менялся, дельта не задевает ни одного AC, поэтому не перегонял; см. +«Унаследовано из r1». + +Единственное, что реально проверялось в этом раунде — закрытие находки r1: +сверил текст нового комментария автора в issue (2026-09-26T13:04:07Z, +«Правка по `CODE-REVIEW-665-r1` (жёлтый) — учёт golden») построчно со +списком восьми сценариев, которые я сам получил в r1 прогоном +`golden:verify` HEAD vs `origin/dev` в отдельном worktree. + +| Что проверял | Как | Результат | +|---|---|---| +| Материал ревью — ровно то же дерево, что у r1 + один docs-коммит | `git diff 8ffbdf8a..d06cca2c --stat`, `git status --short` | подтверждено: только `docs/reviews/CODE-REVIEW-665-r1.md`, рабочая копия чистая | +| Список из 8 golden-сценариев в новом комментарии автора совпадает с найденным ревьюером в r1 | построчное сравнение таблицы в комментарии `Matysh` (13:04) с таблицей находки в `CODE-REVIEW-665-r1.md` | совпадают все 8 id: `isometric-geometry-view-dark/light`, `isometric-touch-kiosk-dark`, `isometric-large-warm-remount-dark`, `isometric-stage3-overlays-light/dark`, `isometric-stage3-forced-colors-dark`, `isometric-stage3-no-filter-dark` | +| Эстафета на кандидат беты явно передана | чтение комментария | да: `npm run golden:accept -- --reviewed --from=`, вместе с 12 известными и кадрами #666 — названо прямо, тот, кто примет бету, не гадает | +| Трейлеры нового коммита | `git show --stat d06cca2c` | `Issue: #665`, `User-Visible: no` — корректно для docs-only правки, changelog не требуется | + +## Находки + +Нет. Единственная находка r1 (Medium в скоупе, учёт golden) закрыта записью +в issue — см. таблицу ниже. Новых находок дельта не создаёт: она добавляет +только опубликованный документ прошлого раунда, продуктового кода не +касается. + +## Закрытие раунда r1 + +| Находка r1 | Чем закрыта | Где это видно | +|---|---|---| +| Medium (в скоупе) — хендофф автора занижал golden-влияние диффа: заявлено 0 задетых 2.5D-кадров с показателями, реально 8; эстафета на кандидат беты не передана | Комментарий автора в issue от 2026-09-26T13:04:07Z «Правка по `CODE-REVIEW-665-r1` (жёлтый) — учёт golden»: (1) признаёт ошибку прямо и называет команду проверки (`node -e "import('./demo/golden/matrix.mjs')..."`), (2) приводит таблицу всех 8 сценариев — построчно совпадает с найденной ревьюером в r1, (3) явно передаёт эстафету: `golden:accept -- --reviewed --from=` вместе с 12 известными и кадрами #666 | Issue #665, комментарий 2026-09-26T13:04:07Z; исходная находка — `docs/reviews/CODE-REVIEW-665-r1.md`, раздел «Находки → Medium» | +| Low, снято без возврата — расположение строки в `docs/ISOMETRIC.md` | Не требовало действия и в r1 (оставлено на усмотрение автора при следующей правке файла); дельта r2 файл не трогает | `docs/reviews/CODE-REVIEW-665-r1.md`, раздел Low | + +## Унаследовано из r1 + +Всё, кроме учёта golden-влияния, принято без повторной проверки — код с +момента r1 не менялся (см. «Скоуп» выше), материал r1 доказан исполнением, а +не заявлением: + +- **AC1** (отступ имя→показатели в 2.5D = Flat на обоих зумах) — доказан + запуском `demo/smoke_iso_room_label_metrics.mjs` на материале `8ffbdf8a`. +- **AC2** (цель касания 44×44 px) — доказан положительно и отрицательно + (ручной снятый `::before` красит `floorIs44`/`floorOwnsTheTarget` — + проба ревьюера, не автора). +- **AC3** (мутант `iso-room-label-44-box-centres-name`) — реально пойман + запуском `mutation-gate.mjs` без `--check`. +- **C3** (Flat/редакторы/`houseplan-space-card`/`isoRaisedOverlayHalfSize` не + задеты) — подтверждено чтением диффа (ограничен `plan.styles.ts`) и + прогоном `smoke_isometric_contract`. +- **Причина бага и приём фикса** (перенос пола 44×44 в `::before`, + копия `.oplock::before`, `z-index` локальный, не мировой) — проверено + построчно по коду. +- **Трейлеры** `c93b3a90`/`8ffbdf8a` — `Issue:`/`User-Visible:` корректны, + `yes` сопровождён правкой обоих changelog в том же коммите. +- **«Одно число — один источник»** — литерал `44px` в новом `::before` + повторяет существующую конвенцию (`.oplock::before`, `.dev`), не создаёт + второй источник истины. +- **`no-new-private-writes`** — второй коммит `8ffbdf8a` существует именно + для этого, проверено, что смок больше не пишет `card._view`. +- **Golden-влияние диффа** (сам факт: 8 новых `different`, все — ожидаемый + побочный эффект правильной работы фикса, не регрессия) — доказано двойным + прогоном `golden:verify` (HEAD и `origin/dev` в отдельном worktree) в r1; + в r2 проверялась только точность **записи** об этом факте, не сам факт. + +Документ и SHA источника: `docs/reviews/CODE-REVIEW-665-r1.md`, +материал `8ffbdf8a28f89f956fe6a0e550aec7b1d42efbf5` (база `72d49040`). + +## Чего не проверял + +- Дешёвые гейты (`tsc --noEmit`, `npm test`, `npm run build`, + `bundle-policy --verify`, `check-docs`) — не перегонял: код не менялся с + r1, а на точном SHA этого раунда (`d06cca2c`) Validate уже зелёный. +- `golden:verify`, оба смока, мутант, отрицательная проба на AC2 — не + перегонял повторно: делал это в r1 против идентичного кода, дельта r2 их + доказательств не задевает. +- `pytest tests_backend`, `npm run invariants`, perf — как и в r1: диф не + трогает Python/геометрию модели, перф не в AC. +- Полную golden-матрицу/`golden:accept` — не входит в код-ревью; беты + кандидата это касается, не этой задачи. + +## Вердикт + +Единственная блокирующая находка r1 закрыта записью в issue, новых находок +нет. High: 0, Medium: 0 (в задаче). + +--- + +--- + + + +## Материал раунда + +- Ветка: `issue/665-iso-label-metrics`, коммит `d06cca2c19a3` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет. +- Дерево материала: `8cdf9bae3bd399886d6fbd8d6f3d255e21827107` + ``` + git log --all --format='%H %T' | grep 8cdf9bae3bd3 + ``` +- Тело issue: `8da493f662bb94963a92e6ca40c224f16235947efbd137e809e313833e01cc97` +- Вердикт конвейера: `green` · High 0