From 7372e977b89a0a907b67cf00c1b2cd2b9ed2ddfa Mon Sep 17 00:00:00 2001 From: "claude[bot]" <209825114+claude[bot]@users.noreply.github.com> Date: Fri, 25 Sep 2026 12:48:25 +0000 Subject: [PATCH] docs: review document for #649 Issue: #649 User-Visible: no --- docs/reviews/INDEX.md | 3 +- docs/reviews/SPEC-REVIEW-649-r2.md | 176 +++++++++++++++++++++++++++++ 2 files changed, 178 insertions(+), 1 deletion(-) create mode 100644 docs/reviews/SPEC-REVIEW-649-r2.md diff --git a/docs/reviews/INDEX.md b/docs/reviews/INDEX.md index 921e6201..9d261a48 100644 --- a/docs/reviews/INDEX.md +++ b/docs/reviews/INDEX.md @@ -1,10 +1,11 @@ # Индекс ревью -Генерируется `node scripts/reviews-index.mjs` (#635) — не редактировать руками. Документов: 1057, issue: 373. Вердикт: 🟢 зелёный · 🟡 жёлтый · 🔴 красный · ⚪ не распознан (свободная форма старых документов). H/M — число High/Medium по строке вердикта или заголовкам находок. Файлы — пути, названные в находках; ищите по имени файла: `grep form-kit INDEX.md`. +Генерируется `node scripts/reviews-index.mjs` (#635) — не редактировать руками. Документов: 1058, issue: 373. Вердикт: 🟢 зелёный · 🟡 жёлтый · 🔴 красный · ⚪ не распознан (свободная форма старых документов). H/M — число High/Medium по строке вердикта или заголовкам находок. Файлы — пути, названные в находках; ищите по имени файла: `grep form-kit INDEX.md`. | Issue | Документ | Этап · раунд | Вердикт | H | M | Находки | Файлы | |---|---|---|---|---:|---:|---|---| | #649 | [SPEC-REVIEW-649-r1.md](SPEC-REVIEW-649-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | в скоупе задачи (возвращается автору); принято ревьюером с записью, правки не требует | `lab.js` `houseplan-card.ts` | +| #649 | [SPEC-REVIEW-649-r2.md](SPEC-REVIEW-649-r2.md) | spec · r2 | 🟢 зелёный | 0 | 0 | — | — | | #647 | [SPEC-REVIEW-647-r1.md](SPEC-REVIEW-647-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 2 | П.4 ТЗ переносит на новый слот прежнее; ТЗ не упоминает и не защищает документированный | `src/styles/dialogs.styles.ts` `src/styles.ts` `smoke_glow_blending.mjs` `smoke_test_facade.mjs` `smoke_unified_wall_tool.mjs` `docs/UX-MODES.md` `docs/reviews/CODE-REVIEW-195-r1.md` `src/styles/chrome.styles.ts` | | #647 | [SPEC-REVIEW-647-r2.md](SPEC-REVIEW-647-r2.md) | spec · r2 | 🟢 зелёный | 0 | 0 | — | — | | #647 | [CODE-REVIEW-647-r1.md](CODE-REVIEW-647-r1.md) | code · r1 | 🟢 зелёный | 0 | 0 | — | — | diff --git a/docs/reviews/SPEC-REVIEW-649-r2.md b/docs/reviews/SPEC-REVIEW-649-r2.md new file mode 100644 index 00000000..9ed68efd --- /dev/null +++ b/docs/reviews/SPEC-REVIEW-649-r2.md @@ -0,0 +1,176 @@ +# SPEC-REVIEW-649-r2 + +Этап: spec (PROCESS.md §2.4). Заход r2, блокирующих циклов израсходовано 1 из 4 +(потрачен на жёлтый r1; зелёный вердикт цикла не образует, §4). + +## Скоуп + +Issue #649 — без изменений с r1: 2.5D выходит из experimental и становится +публичным режимом; меняются плитки маркеров/замков (объём, торец, тень на +полу), свет из окон (мягкая заливка по солнцу), чинятся два бага декора/стен +(толщина линий мебели, независимость цвета стен от темы), добавляется +`settings.volumetric_view` в «Общих настройках». Flat, `houseplan-space-card` +и оба редактора не меняются. Полный трек — критерии §5 нарушены так же, как +в r1 (сложность 9/10, несколько поверхностей, новое конфиг-поле с +backend-валидацией, новый публичный UX-контракт, влияние на производительность +и touch); в скоупе `docs/SCOPE.md` — поименованное исключение #89. + +Материал ревью — тело issue #649, раздел `## ТЗ` (редакция r2, 25.09), плюс +комментарий Matysh «ТЗ r2 — ответ на SPEC-REVIEW-649-r1» от 25.09 12:41:23, +объявляющий делту явно. + +## Как проверялось (объём по дельте, §2.10) + +1. Прочитан документ и вердикт предыдущего раунда: + `docs/reviews/SPEC-REVIEW-649-r1.md` — жёлтый, одна находка Medium (M1, + opacity тени для сочетания «тёмная тема + светлый пол» не определена) и + одна снятая Low (L1, неточная строка кода для `iso-floor-scene` в разделе + «Проблема»). +2. Прочитан комментарий-ответ автора (Matysh, 25.09 12:41:23): заявлены ровно + два изменения — таблица 4×(сдвиг/размытие/opacity) в разделе «Тень на + полу» вместо двух независимых правил, и разнесение строки кода на + `_renderSunRays` ~9870 / `iso-floor-scene` ~10901. +3. Прочитано тело issue #649 целиком в текущей редакции (раздел `## ТЗ`, + r2) — не только делта, весь документ, чтобы исключить незаявленные правки + в остальных разделах. +4. Дельта сверена построчно с текстом, который цитирует сам документ r1 (это + и есть материал r1 — точные фрагменты «до»): + - было (цитата r1): «Opacity: белые тела 0.34, цветные тела и бейджи + 0.50. **Тёмная тема — 0.40** (цветные 0.50). … **Светлый пол**: opacity + 0.30 (цветные 0.42), размытие 0.1375 D, сдвиг (0.1 D, 0.425 D)» — два + независимых модификатора без правила пересечения; + - стало (текущее тело issue, раздел «1. Иконки-плитки» → «Тень на полу»): + таблица «Тема · пол | Сдвиг | Размытие | Opacity белых тел | Opacity + цветных тел и бейджей» на 4 строки, плюс явное правило приоритета: + «Правило тёмной темы стоит последним и перекрывает opacity пола, но не + сдвиг и размытие». Строка «тёмная · светлый пол» = сдвиг (0.1D, + 0.425D), размытие 0.1375D, opacity 0.40/0.40 — именно комбинация + вложения 13, которой не хватало в r1. Ambiguity, из-за которой была + заведена M1, закрыта: для всех четырёх сочетаний есть ровно одно число, + без противоречащих друг другу модификаторов. + - Дополнительно к исходной находке автор сам поправил обнаруженную у себя + ошибку: «Поправка к r1: там для тёмной темы стояло «цветные 0.50» — это + было неверно» — в таблице тёмная тема даёт 0.40 для обоих типов тел, не + 0.50 для цветных. Это сужение старого (возможно ошибочного) числа, а не + новая догадка: источник — `getComputedStyle` с лаборатории, а не чтение + исходников на глаз, то есть более сильный вид доказательства, чем то, + что стояло в r1. + - было (L1, справочный текст): «`houseplan-card.ts` ~9870, группа + `iso-floor-scene`» — одна координата на две разные сущности; + - стало: «`_renderSunRays` в `houseplan-card.ts` ~9870, группа + `iso-floor-scene` ~10901» — разнесено на две точные координаты. +5. Числа новой таблицы пересчитаны из базы **D**, заявленной в «Эталон и + единицы» (80 ед. = 1 D), и сошлись поразрядно с текстом таблицы: + `8/80=0.1`, `30/80=0.375`, `34/80=0.425`, `22/80=0.275`, `11/80=0.1375` + (см. «Как проверялось» r1, тот же метод, применённый к новым числам). +6. Проверены цвета пола, на которых, по тексту, снят `getComputedStyle` + (`#737777`, `#eee8de`), по формуле luma из самого ТЗ + (`0.2126R+0.7152G+0.0722B`): `luma(#737777) ≈ 0.463 < 0.55` (тёмный пол), + `luma(#eee8de) ≈ 0.912 > 0.55` (светлый пол) — согласуется с ярлыками + строк таблицы, не противоречие. +7. Исправленные координаты L1 сверены с кодом на том же SHA, что и в r1 + (`b7079ead` — HEAD `f68878cc` докой-only, код не менялся): + `grep -n "_renderSunRays" src/houseplan-card.ts` → `9870: private + _renderSunRays(...)`; `grep -n "iso-floor-scene" src/houseplan-card.ts` → + `10901: + +## Материал раунда + +- Ветка: `dev`, коммит `f68878cc44b8` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет. +- Дерево материала: `fb70cdc705198bd470005c6e486a6b63dff537ab` + ``` + git log --all --format='%H %T' | grep fb70cdc70519 + ``` +- Тело issue: `e7d94f185bc9a5d2d7e168933579903e54c88a9819347cb49f0f7c35db60a9e7` +- Вердикт конвейера: `green` · High 0