From fbbaed22ded3698a5f66d06b7e8ed7ad60a25a5d Mon Sep 17 00:00:00 2001 From: "claude[bot]" <41898282+claude[bot]@users.noreply.github.com> Date: Wed, 19 Aug 2026 07:27:52 +0000 Subject: [PATCH] docs: review document for #192 Issue: #192 User-Visible: no --- docs/reviews/CODE-REVIEW-192-r2.md | 132 +++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 docs/reviews/CODE-REVIEW-192-r2.md diff --git a/docs/reviews/CODE-REVIEW-192-r2.md b/docs/reviews/CODE-REVIEW-192-r2.md new file mode 100644 index 00000000..f4cbed01 --- /dev/null +++ b/docs/reviews/CODE-REVIEW-192-r2.md @@ -0,0 +1,132 @@ +# CODE-REVIEW-192-r2 + +Issue: [#192](https://github.com/Matysh/houseplan-card/issues/192) — «Колор-пикер: +шкала «Оттенок» показывает реальную радугу вместо одноцветного слайдера». +Лёгкий трек (`small`); ТЗ живёт в теле issue. Лимит цикла код-ревью для +лёгкого трека — 2; это второй и последний цикл. + +Диапазон: `origin/dev..HEAD` = `508d38c` (Show spectrum on hue slider), +`c27c1e4` (docs: review document for #192 — документ r1), +`0d58f77` (Keep hue slider thumb visible — исправление по итогам r1). +Диапазон соответствует ветке `issue/192-hue-gradient`. + +## Скоуп проверки + +r1 (см. [CODE-REVIEW-192-r1.md](CODE-REVIEW-192-r1.md)) уже подтвердил AC1, +AC2, AC4, AC5 исполнением и дал жёлтый вердикт из-за частично проваленной +AC3: заявленное «thumb остаётся различимым» не выполнялось на hue ≈195°–260° +(включая hue=205° — значение по умолчанию в обеих golden-сценах), Medium +заведён как [#194](https://github.com/Matysh/houseplan-card/issues/194). + +r2 — это review исправляющего коммита `0d58f77`. Задача этого цикла: не +повторять весь r1 с нуля, а (а) подтвердить, что исправление действительно +закрывает найденный дефект, (б) убедиться, что оно не расширило скоуп и не +задело остальное, (в) держать общую картину AC1/2/4/5 в поле зрения, раз они +не менялись со времён r1. + +## Как проверялось + +| Гейт | Прогнан | Результат | +|---|---|---| +| `npx tsc --noEmit` | да | зелёный, без вывода | +| `npm test` | да | 889 passed, 0 failed — совпадает с хендоффом | +| `npm run build` + сверка 3 копий бандла | да | `cmp` тождественны; SHA-256 `d66b779574aebd9222ddf432b746cdf5195cae3030b2cc8ba149dad6f98ce89d` — совпадает с указанным в хендоффе | +| `node demo/smoke_color_picker.mjs` | да | 16/16 true, включая новый `hueThumbContrastContract` | +| Фальсифицируемость unit-теста | да | во временном worktree на pre-fix коммите `508d38c` с тестовыми файлами из HEAD: `hue-range exposes one cyclic spectrum...` падает ровно на новой ассерции (box-shadow/thumb-shadow), остальные 4 подтеста того же теста проходят | +| Фальсифицируемость smoke-проверки | да | тот же pre-fix коммит, пересобранный бандл: `hueThumbContrastContract: false` (единственный провал), после применения `0d58f77` — `true` | +| Визуальная проверка контраста thumb | да, вручную через Playwright/`demo/serve.mjs` | скриншоты открытого picker на hue=205° (dark, mobile-профиль) и hue=235° (тот же профиль) — кольцо чётко видно на голубом/синем участке трека, ранее проблемном по r1 | +| `npm run golden:capture -- --scenario=decor-color-popover-desktop-en` | да | `missing-baseline` (ожидаемо, эталона ещё нет); candidate открыт — кольцо видно и в light-теме на hue=205° | +| `node scripts/process-gate.mjs` (офлайн) | да | «гейт пройден», 1 ожидаемое WARN (ТЗ в теле issue при `small`, а не в `docs/specs/`) | +| Трейлеры коммитов | да, чтением `git log` | все три коммита несут `Issue: #192` и корректный `User-Visible:`; `User-Visible: yes` на `508d38c` и `0d58f77` сопровождается правками обоих changelog в том же коммите | + +**Не прогонялось и почему:** + +- `npm run golden:verify` (полный набор, 67 сценариев) — не гонял повторно. + r1 уже прогонял полный набор и получил ожидаемую картину (65 passed + 2 + ожидаемых расхождения ровно в двух `decor-color-popover-*` сценах). Диапазон + правки `0d58f77` строго ограничен селекторами `.hue-range::-webkit-slider-thumb` + и `.hue-range::-moz-range-thumb` — то есть тем же самым hue-thumb внутри тех + же двух сцен, что уже были единственными расхождениями в r1. Полный прогон + здесь не добавил бы уверенности к тому, что дают точечные `golden:capture` + двух затронутых сцен (сделаны) плюс unit-контракт изоляции (`commonRange` + не содержит `linear-gradient|hp-picker-hue-track`, не тронут). Это гейт, + соразмерный задаче (PROCESS.md §8): полный набор — предрелизный, не ревью. +- `python -m pytest tests_backend -q` — не гонял: `custom_components/**/*.py` + не тронут ни в одном из трёх коммитов (diffstat это подтверждает). +- performance-профили — не гонял: в AC не названы, правка — один статичный + CSS `box-shadow`, без новых вычислений в рантайме. +- Firefox/Safari реальным движком — недоступно в этом окружении (только + Chromium), это принятое предположение самого ТЗ («Принятые предположения», + автоматизированный smoke остаётся Chromium; Gecko/WebKit declarations + доказываются source-contract и код-ревью). Прочитаны декларации + `::-moz-range-thumb` — синтаксически корректны и симметричны webkit-версии. + +## Находки + +Нет ни одной High- или Medium-находки в этом цикле. + +Low (не блокирует, снимается с записью, дальнейшая правка не нужна): +корректирующий коммит не добавил отдельного smoke/unit-теста, который бы +проверял именно *визуальный* контраст (пиксельное сравнение thumb/track) — +только наличие CSS custom property. Единственное реальное доказательство +контраста на конкретном hue — это golden-эталон (проверяется людьми при +приёмке) и ручной скриншот, сделанный в этом ревью. Это соответствует +принятому в ТЗ способу доказательства AC3 (golden + source-contract/code +review), поэтому не поднимаю до Medium — но фиксирую, что «различимость +thumb» как факт живёт исключительно в golden-baseline review, а не в +автотесте, который умеет упасть сам по себе на будущей регрессии этого рода. + +Информационно, не находка: описанный в +[#194](https://github.com/Matysh/houseplan-card/issues/194) дефект +воспроизводится именно на pre-`0d58f77` коде и не воспроизводится после — +проверено выше и unit-тестом, и smoke, и скриншотами на hue=205° и hue=235°. +Закрытие #194 — не в полномочиях этого ревью (§12: закрывает issue +релиз-менеджер/владелец, не ревьюер кода), фиксирую здесь как факт для того, +кто будет разбирать #194 дальше. + +## Что проверено и корректно + +- **AC1 (спектр).** Без изменений с r1: `linear-gradient` с ключевыми stops + на `.hue-range`, эквивалентные `::-webkit-slider-runnable-track` и + `::-moz-range-track`. Подтверждено исполнением (unit + smoke, + `hueTrackContract: true`). +- **AC2 (управление).** Без изменений с r1 и без затронутого кода в r2: + `min=0/max=359/step=1`, mouse/touch/keyboard/`Shift+Arrow`/emit не тронуты. + 889/889 unit + 16/16 smoke, включая `shiftArrowUsesTenStep` и + `hueUpdatesSharedDraft`. +- **AC3 (темы и accessibility) — предмет этого цикла.** Ранее проваленная + часть («thumb остаётся различимым») теперь выполняется: двухконтурное + `box-shadow` (`--card-background-color` внутренний контур, + `--primary-text-color` внешний) не зависит от hue и поэтому контрастен на + любом участке трека — проверено чтением реализации и визуально на двух + ранее проблемных значениях (205°, 235°) в обоих затронутых golden-сценах + (dark/mobile, light/desktop). `forced-colors: active` корректно отключает + декоративную тень (`box-shadow: none` внутри того же media-блока, + подтверждено чтением diff) — системный рендеринг thumb остаётся. Native + размер/цвет/hit area бегунка не переопределены, значит риск нарушить + hit-area или fallback без color отсутствует. `prefers-reduced-motion` + блок не тронут. +- **AC4 (изоляция).** Правка `0d58f77` меняет ровно 4 селектора внутри уже + существующего scoped-блока `.hue-range`/forced-colors; unit-тест явно + проверяет, что `input[type='range']` (общий блок) не содержит новых + свойств. Изменённых golden-сцен по-прежнему ровно две — те же, что в r1. +- **AC5 (совместимость).** Public API, данные, i18n, стили остальных range + не изменены — diffstat и unit source-contract это подтверждают. +- **Трейлеры и changelog.** `Issue: #192` на каждом коммите; `User-Visible: + yes` на `508d38c` и `0d58f77` — в обоих оба changelog правятся в том же + коммите (проверено чтением `git show`). `USER-GUIDE.md`/`USER-GUIDE.ru.md` + обновлены той же формулировкой («contrasting ring» / «контрастный контур») + синхронно с кодом. +- **Гейты.** Все обязательные (typecheck/test/build+сверка) зелёные и + воспроизведены самостоятельно, не только со слов хендоффа; SHA-256 + бандла совпал. + +## Вердикт + +Дефект AC3, из-за которого r1 получил жёлтый вердикт, исправлен и +верифицирован независимым исполнением (unit, smoke, ручной визуальный +скриншот на конкретных ранее проблемных hue-значениях), а не только +прочитан. Новых High/Medium-находок нет. Скоуп не расширен: правка +ограничена thumb-декорацией того же `.hue-range`. + +**Вердикт: зелёный · цикл r2/2 · High: 0 · Medium: 0 → нет**