16 KiB
CODE-REVIEW-691-r2
Материал ревью: 33ae14a99d55b8959e54508c41c3e2eba63a9b33 (origin/dev..HEAD,
рабочая копия уже стоит на нём). Заход r2, блокирующих циклов израсходовано
1 из 4 (потрачен r1, жёлтый вердикт).
Скоуп
Issue #691, продолжение после жёлтого r1
(docs/reviews/CODE-REVIEW-691-r1.md). r1 подтвердил продуктовый код
(src/logic.ts, src/room-fit.ts, src/houseplan-card.ts — контракт §6/§7 ТЗ
реализован верно, все 12 AC доказаны автотестом или чтением) и нашёл два
Medium в скоупе, оба документационно-тестовые, без продуктовых изменений:
- Medium-1:
docs/USER-GUIDE.ru.mdне обновлён и описывал старый контракт (мгновенный room-fit, double-tap только по фону, свайп «при масштабе 1:1» без упоминания края) — канонический источник терминологии для видимого поведения расходился с кодом. - Medium-2:
demo/smoke_pan_any_zoom.mjs(regression-смок из #531, прямое совпадение поsmoke-select) реально красный на материале r1 —kioskSwipeStillSwitchesFloors/kioskHorizontalDragIsNotAPanожидалиtrue, получалиfalse, потому что тест стартовал drag из середины стейджа, что по новому контракту (§6 п.5 ТЗ) корректно классифицируется как pan, а не swipe.
r2 — точечный фикс обоих находок, продуктовый код (src/**) не менялся.
Дельта git diff 53503e0373fe73d54ebccf5e70af8171ca778716..HEAD --stat:
demo/smoke_pan_any_zoom.mjs | 26 ++++++++++++++++----------
docs/USER-GUIDE.ru.md | 12 ++++++------
docs/reviews/CODE-REVIEW-691-r1.md | 286 ++++++++++++++++++++++++++++++++++++
(последний файл — публикация ревью-документа предыдущего раунда пайплайном, не работа автора.)
Два коммита автора/пайплайна поверх материала r1:
09f8cf4cdocs: review document for #691— публикацияCODE-REVIEW-691-r1.md,Issue: #691,User-Visible: no.33ae14a9test(touch): align kiosk smoke and Russian guide (#691)— фикс обеих находок,Issue: #691,User-Visible: no.
User-Visible: no корректен: правки не меняют поведение продукта (оно уже
было в материале r1), только приводят документацию/тест в соответствие с уже
выпущенным контрактом — docs/CHANGELOG.md/docs/CHANGELOG.ru.md в этой
дельте не тронуты, и это ожидаемо.
Дельта локальна: два файла, оба — предметы находок r1, продуктовый код и тестовые unit/browser-смоки для AC1–AC12 не менялись. Разбор по §2.10 — только по этим двум находкам; продуктовый контракт (AC1–AC12) переразбору не подлежит, см. «Унаследовано из r1».
Как проверялось
Дешёвый набор подтверждён зелёным Validate на этом SHA
(https://github.com/Matysh/houseplan-card/actions/runs/36435141249) —
tsc --noEmit, npm test, npm run build. Полный перегон npm test/tsc
не повторял — дельта не трогает src/**/test/**, полагаюсь на Validate
(#343). Прогнал сам только то, что доказывает закрытие двух находок:
| Гейт | Прогнан | Результат |
|---|---|---|
npm run bundle:sync (нужен для запуска demo-смоков локально) |
да | success; после проверки бандл/demo/srv/assets возвращены в состояние материала (git checkout -- dist/ demo/srv/assets/ + git clean -fd dist/) — рабочая копия сверена git status --porcelain (пусто) |
node demo/smoke_pan_any_zoom.mjs |
да | зелёный: 55/55 проверок true, 0 false, точное совпадение с числом, заявленным автором в хендоффе («55/55 проверок true») |
node scripts/check-docs.mjs |
да | Documentation checks passed (7 files, 12 external links) |
Диффо-сверка docs/USER-GUIDE.ru.md против docs/USER-GUIDE.md и текста ТЗ §6/§7 |
да, чтением | все 4 места, названные в находке Medium-1 r1 (474, 475, 476, 1936/1938), правлены и синхронны с английской версией |
node scripts/smoke-select.mjs |
нет | дельта не трогает src/**; смок-селектор ориентируется на изменённые продуктовые символы, здесь их нет — не даёт новой информации сверх точечной проверки изменённого файла |
node scripts/mutation-gate.mjs |
нет | продуктовый код (src/logic.ts/src/room-fit.ts/src/houseplan-card.ts) не менялся в этой дельте; 4 mutation-witness ID из r1 не затронуты — статус «применимы побайтово» из r1 остаётся в силе (см. «Унаследовано из r1») |
npm test (полный), npx tsc --noEmit |
нет | подтверждены Validate на этом SHA; дельта не трогает test/**/типы |
npm run golden:verify |
нет | дифф не меняет геометрию/рендер |
npm run invariants |
нет | дифф не меняет геометрию модели |
python -m pytest tests_backend |
нет | дифф не трогает custom_components/** |
| Performance-профили | нет | не названы в AC |
AC — доказательства
Продуктовый контракт (AC1–AC12) не менялся этой дельтой — доказательства
из r1 (docs/reviews/CODE-REVIEW-691-r1.md, раздел «AC — доказательства»)
остаются в силе без переразбора (см. «Унаследовано из r1»). Единственное,
что меняется относительно AC-доказательств r1: demo/smoke_pan_any_zoom.mjs
теперь зелёный, поэтому регрессионное покрытие «pan вне края / swipe только у
края» (пересекается с AC1/AC3) снова осмысленно, а не ложно-красное.
Находки
Нет находок, переживших верификацию. Обе Medium из r1 закрыты (см. таблицу ниже).
Что проверено и корректно
docs/USER-GUIDE.ru.mdстроки 474–476 и 1936/1938 переписаны и теперь дословно по смыслу совпадают сdocs/USER-GUIDE.mdи контрактом §6/§7 ТЗ: 350 мс отложенный room-fit, double-tap/double-click по фону, заливке комнаты и её пассивной подписи (не только по фону), edge-swipe только из 48 CSS px у края с доступным соседом, «drag вне этой зоны панорамирует план». Клавиатурная активация (Enter/Space) осталась немедленной, как и требует §7 п.9 ТЗ (keyboard activation не ждёт 350 мс).demo/smoke_pan_any_zoom.mjs: положительный kiosk-swipe теперь стартует из фактического правого края стейджа (rect.right - 20, вычислено изgetBoundingClientRect(), не хардкод), что попадает в 48 px активную зону независимо от размера окна; комментарий файла обновлён и больше не утверждает устаревший инвариант «любой горизонтальный kiosk-drag — свайп». Остальные проверки того же блока (вертикальный drag — pan; zoom > 1 — всегда pan) не менялись и не требовали правки — граница находки была локализована в r1 правильно.- Прогон на точном SHA материала (
33ae14a9, а не на рабочей ветке после моих локальных операций) даёт 55/55true— совпадает с числом из хендоффа автора; проверка не является «Verified» без команды — команда и результат приведены в таблице гейтов. - Никакого продуктового кода (
src/**) в дельте нет — риск регрессии AC1–AC12 от этого раунда отсутствует по построению, не только по прогону. - Рабочая копия после моих локальных
bundle:sync/check-docs/смок-запусков возвращена к состоянию материала (git status --porcelainпуст,git rev-parse HEAD=33ae14a99d55b8959e54508c41c3e2eba63a9b33), сгенерированные файлы не просочились в чужой контекст.
Чего не проверял
- Полный
npm test/tsc --noEmit/npm run buildзаново — подтверждены зелёным Validate на этом SHA; дельта не даёт причин ожидать иного результата (не трогаетsrc/**/test/**). node scripts/mutation-gate.mjs— не перегонял; 4 ID из r1 не связаны с файлами этой дельты, повторная проверка не требуется по объёму дельты (§2.10). Статус «фактическое красное/зелёное исполнение не воспроизведено автором ревью» остаётся тем же наследуемым пробелом, что и в r1 — он не блокирует, так как связан не с этим раундом.- Ручное тестирование на физическом touch-устройстве — как и в r1, вне объёма код-ревью; ТЗ §12 требует browser-смоков, они прогнаны.
smoke-select.mjsдля этой дельты — не гонял; дельта не трогаетsrc/**, инструмент ориентируется на изменения продуктовых символов и не дал бы дополнительного сигнала сверх прямой проверки единственного изменённого demo-файла.golden:verify,invariants,pytest tests_backend, performance — не гонял; дельта не даёт повода (нет изменений геометрии, рендера, Python или производительности).
Вердикт
Обе Medium-находки r1 закрыты точечно и без побочных изменений: русский
пользовательский гайд снова совпадает с фактическим контрактом и английской
версией, demo/smoke_pan_any_zoom.mjs снова зелёный (55/55, воспроизведено
мной запуском на материале раунда). Продуктовый код не менялся, новых
находок не появилось.
Вердикт: зелёный · заход r2 · блокирующих циклов 1/4 · High: 0 · Medium: 0
Закрытие раунда r1
| Находка | Чем закрыта | Где это видно |
|---|---|---|
Medium-1 — docs/USER-GUIDE.ru.md описывает старый контракт (мгновенный room-fit, double-tap только по фону, свайп «при 1:1» без края) |
Коммит 33ae14a9, правка строк 474–476 и 1936/1938 |
git diff 53503e03..HEAD -- docs/USER-GUIDE.ru.md: все 4 места переписаны на «350 мс», «фон/заливка/пассивная подпись», «48 CSS px у края с соседом»; сверено построчно с docs/USER-GUIDE.md и §6/§7 ТЗ — расхождений не осталось |
Medium-2 — demo/smoke_pan_any_zoom.mjs красный (kioskSwipeStillSwitchesFloors/kioskHorizontalDragIsNotAPan → false) |
Коммит 33ae14a9, drag теперь стартует из rect.right - 20 (реальная правая краевая зона) вместо середины стейджа |
Прогнал node demo/smoke_pan_any_zoom.mjs на материале раунда: 55/55 true, exit 0 (было 2 FAILED, exit 1, на материале r1) |
Унаследовано из r1
Принято без повторной проверки в этом раунде (продуктовый код не менялся):
- Все 12 AC (AC1–AC12) и их доказательства — таблица «AC — доказательства»
в
docs/reviews/CODE-REVIEW-691-r1.md, материал того раунда:53503e0373fe73d54ebccf5e70af8171ca778716(деревоa7e88993df66e38c08587bda9eff3f757ecce457). - Чтение
src/logic.ts(spaceSwipeEdgeAt/classifySpaceDrag/spaceSwipeTargetForOwner) иsrc/room-fit.ts(PlanTapGestureController) на предмет буквального соответствия §6/§7 ТЗ — раздел «Что проверено и корректно» r1. - Бюджет бандла (
INITIAL_VIEW_GZIP_CEILING300 300→301 000,scripts/monolith-baseline.json) — не менялся в r2, число видно один раз, источник один, как зафиксировано в r1. - Применимость (побайтовая, статическая) 4 mutation-witness ID
(
double-fit-plan-owner-guard-removed,space-swipe-edge-origin-guard-removed,space-swipe-release-ignores-final-owner,double-fit-interactive-pending-cancel-removed) к текущему текстуsrc/logic.ts/src/room-fit.ts/src/houseplan-card.ts— файлы не менялись в r2, статус r1 не устарел; фактическое исполнениеmutation-gate.mjsпо-прежнему не воспроизведено ни в одном раунде (см. «Чего не проверял»), это тот же наследуемый, не блокирующий пробел. - 29 зелёных smoke-прогонов из «прямых совпадений»
smoke-select(smoke_editor_gestures.mjs,smoke_long_press_gesture.mjs,smoke_isometric_contract.mjs,smoke_backdrop.mjs,smoke_edit_walk.mjsи остальные) — прогнаны и зафиксированы в r1, файлы не менялись.
Материал раунда
- Ветка:
issue/691-touch-navigation, коммит33ae14a99d55— ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет. - Дерево материала:
2b04171e527bbe29a9f04e40a36f9b74028412f0git log --all --format='%H %T' | grep 2b04171e527b - Тело issue:
e8f3dd66a656bbca09f4f291c52632feb3ee16759c54dc9dcdd4e328aaf99b7b - Вердикт конвейера:
green· High 0