From c23c7927de99deb4d401e9c9413f19ba84114700 Mon Sep 17 00:00:00 2001 From: "claude[bot]" <209825114+claude[bot]@users.noreply.github.com> Date: Mon, 14 Sep 2026 06:48:54 +0000 Subject: [PATCH] docs: review document for #565 Issue: #565 User-Visible: no --- docs/reviews/CODE-REVIEW-565-r1.md | 284 +++++++++++++++++++++++++++++ 1 file changed, 284 insertions(+) create mode 100644 docs/reviews/CODE-REVIEW-565-r1.md diff --git a/docs/reviews/CODE-REVIEW-565-r1.md b/docs/reviews/CODE-REVIEW-565-r1.md new file mode 100644 index 00000000..3ada1ab9 --- /dev/null +++ b/docs/reviews/CODE-REVIEW-565-r1.md @@ -0,0 +1,284 @@ +# CODE-REVIEW — issue #565, заход r1 + +**Вердикт: жёлтый · заход r1 · блокирующих циклов 1/4 · High: 0 · Medium: 1 → в задаче** + +## Скоуп + +Материал ревью: `git log --oneline origin/dev..HEAD` / `git diff origin/dev...HEAD` +на SHA `127cd07ba78fc75cd776ebd6518248a6bef91e82` (рабочая копия на нём же). +Диапазон — один продуктовый коммит `127cd07b` (`fix: улучшить доступность View +(#565)`, трейлеры `Issue: #565` / `User-Visible: yes` на месте) плюс +предшествующий `65a426d6` (`docs: review document for #565`, публикация +SPEC-REVIEW-565-r1 конвейером). + +ТЗ (тело issue #565, зафиксировано владельцем 2026-09-14, ревью ТЗ зелёное, +`docs/reviews/SPEC-REVIEW-565-r1.md`) реализует три независимых дефекта +доступности: + +1. **AC1/AC2** — полоса вкладок пространств получает именованную навигацию и + ровно один `aria-current="page"`, Tab/Enter/Space не меняются. +2. **AC3/AC4** — доступное имя устройства схлопывает точные повторы + локализованных сегментов (в основном View и `houseplan-space-card`), не + трогая различающиеся факты. +3. **AC5–AC7** — клавиатурный `:focus-visible` на маркере устройства в View + открывает ту же tooltip, что и mouse-hover, следует за фокусом, + закрывается по перечисленным границам и не активируется touch/pen. + +Не-скоуп: контраст/цвет/текст подписей комнат (**AC8**, явно защищён — не +тронут ни один файл стилей/логики подписей), конфиг/миграции (**AC9**), общий +ARIA-tablist, roving tabindex, интерактивность статической карточки — +всё подтверждено диффом (см. «Что проверено»). + +Файлы: `src/houseplan-card.ts`, `src/live-hover.ts`, +`src/live-interaction-runtime.ts`, `src/device-presentation.ts`, +`src/space-render.ts`, `src/i18n/{en,ru,de,fr}.json`, +`test/view-accessibility.test.mjs`, `test/device-presentation.test.mjs`, +`demo/smoke_household_journeys.mjs`, `demo/smoke_space_card.mjs`, +`scripts/mutation-registry.mjs`, документация +(`docs/CHANGELOG{.ru,}.md`, `docs/TOUCH-SUPPORT.md`, `docs/UX-MODES.md`, +`docs/USER-GUIDE{.ru,}.md`, `docs/TESTING.md`) — соответствует хендоффу. + +## Как проверялось + +| Гейт | Результат | Как учтён | +|---|---|---| +| `npx tsc --noEmit` | не перезапускал | Validate зелёный на точном SHA `127cd07b` (https://github.com/Matysh/houseplan-card/actions/runs/34814012888) покрывает | +| `npm test` | не перезапускал | покрывается тем же Validate-прогоном | +| `npm run build` + сверка 3 копий бандла | не перезапускал | покрывается тем же Validate-прогоном; diff-stat подтверждает, что все три копии (`dist/`, `custom_components/.../frontend/`, корневые `houseplan-card.js`/`houseplan-panel.js`) изменены синхронно | +| `node scripts/check-docs.mjs` | не перезапускал | часть Validate; diff трогает `src/**`, автор зафиксировал ожидаемое Linux-предупреждение отдельно | +| mutation-gate (4 новых witness) | не перезапускал | часть Validate (`mutation-gate` шардируется в `validate.yml`); прочитаны сами мутанты в `scripts/mutation-registry.mjs` — патчи корректно снимают именно ту защиту, которую называют (см. таблицу AC ниже) | +| `node scripts/smoke-select.mjs --base origin/dev --head HEAD` | не запускал сам инструмент | по диффу очевидны затронутые смоки: `demo/smoke_household_journeys.mjs`, `demo/smoke_space_card.mjs` — оба уже расширены в этом коммите; `demo/smoke_touch_tips.mjs` не изменён, но прочитан целиком (ниже) | +| `node demo/smoke_household_journeys.mjs`, `node demo/smoke_space_card.mjs`, `node demo/smoke_touch_tips.mjs` | **не прогонял** | браузерные смоки не запускались в этом ревью; вместо исполнения — построчное чтение новых проверок (см. «Находки» и «Что проверено») и прослеживание кода, который они должны ловить. Это ослабление отмечаю явно: находка ниже обнаружена именно потому, что код не исполнялся под сценарием, которого смоки не покрывают | +| `npm run golden:verify` | не требуется | AC8 защищён явно: ни один файл стилей/логики подписей комнат не тронут (`git diff --stat -- src/` не включает `styles/`, `space-render` правки — только импорт `deviceAccessibleLabel` и замена `.filter(Boolean).join(', ')`); `
→