mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-30 19:58:50 +00:00
@@ -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 | — | — |
|
||||
|
||||
@@ -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: <g class=${iso ? 'iso-floor-scene' : nothing}`. Обе
|
||||
координаты точны.
|
||||
8. Остальные разделы ТЗ (сценарий, скоуп/не-скоуп, разделы 1–4, модель
|
||||
данных, AC1–AC13, план тестов, риски, откат, release-артефакты,
|
||||
«Принято предположительно») прочитаны в текущей редакции целиком и
|
||||
структурно совпадают с тем, что описывал и проверял r1 — построчных
|
||||
расхождений с описанием r1, кроме заявленной делты, не найдено.
|
||||
9. Не запускались никакие гейты (typecheck/test/build/смоки) — этап ревью
|
||||
ТЗ, продуктовый код не пишется, гейты неприменимы (§2.5, §8), так же как
|
||||
в r1.
|
||||
|
||||
## Находки
|
||||
|
||||
Нет ни High, ни Medium, ни Low.
|
||||
|
||||
## Закрытие раунда r1
|
||||
|
||||
| Находка | Чем закрыта | Где это видно |
|
||||
|---|---|---|
|
||||
| **M1** — opacity тени для «тёмная тема + светлый пол» не определена (независимые модификаторы темы и пола без правила пересечения) | Прозаические правила заменены таблицей 4×(сдвиг, размытие, opacity белых, opacity цветных) с явным правилом приоритета «тёмная тема перекрывает opacity пола, но не сдвиг/размытие» | Тело issue #649, `## ТЗ` → «1. Иконки-плитки (только 2.5D...)» → подраздел «Тень на полу», строка таблицы «тёмная · светлый пол» = (0.1D,0.425D) / 0.1375D / 0.40 / 0.40 |
|
||||
| **L1** (Low, была снята без правки) — строка кода для `iso-floor-scene` в разделе «Проблема» указана как ~9870 (факт 10901), одна координата на два разных места | Координата разнесена: `_renderSunRays` ~9870, `iso-floor-scene` ~10901 — обе проверены `grep -n` на SHA `b7079ead` и точны | Тело issue, раздел «Проблема (по коду `dev@b7079ead`)» → пункт «Свет» |
|
||||
|
||||
## Унаследовано из r1
|
||||
|
||||
Без повторной проверки, документ `docs/reviews/SPEC-REVIEW-649-r1.md`,
|
||||
материал — SHA `b7079ead801f` (код не менялся между r1 и r2: единственный
|
||||
коммит между раундами, `f68878cc`, — docs-only, публикация документа r1):
|
||||
|
||||
- обязательные разделы ТЗ по §7.1 присутствуют по существу;
|
||||
- все технические утверждения разделов «Проблема» и «Эталон и единицы» (кроме
|
||||
исправленной делтой строки) сверены построчно с кодом на `b7079ead` и
|
||||
подтвердились (`_renderSunRays`, `furnitureScreenScale`,
|
||||
`openingInnerFaceOffsetFromIndex`, `windowLit`, `planSunAngle`,
|
||||
`gridVisualUnits`, `ISO_WALL_HEIGHT`, `isoRaisedOverlayHalfSize`,
|
||||
`wall_fill`, `houseplan_card_view_v1`, `projection-toggle`, `LABS_FLAGS`,
|
||||
`plan.styles.ts:338-368/757`, `general-settings-dialog.ts:86-100`,
|
||||
`i18n/{en,ru,de,fr}.json:766-767`, backend-прецедент `validation.py`/
|
||||
`support_package.py`/`config-schema.json`, performance-профили из AC13);
|
||||
- Q1–Q3 отвечены владельцем и корректно перенесены в текст;
|
||||
- таблица AC1…AC13 — все три столбца заполнены для защитных AC, пустых «чем
|
||||
краснеет» нет (§2.7, #435); AC12 и AC13 корректно используют другой тип
|
||||
свидетельства (сравнение с макетом / предрелизный гейт);
|
||||
- модель данных, миграция, откат, i18n — соответствуют принятому в проекте
|
||||
паттерну (`docs/CONFIG-COMPATIBILITY.md`);
|
||||
- дискрепанс вложения 11 (янтарная рамка лаборатории vs `#0C82F0` продукта)
|
||||
разрешён автором заранее и не вводит находку.
|
||||
|
||||
## Что проверено и корректно
|
||||
|
||||
- Делта r2 полностью и однозначно закрывает M1: для всех четырёх сочетаний
|
||||
темы и пола в таблице есть ровно одно число (сдвиг, размытие, opacity
|
||||
белых, opacity цветных), включая ранее отсутствовавшую комбинацию «тёмная
|
||||
тема + светлый пол» (вложение 13). Числа таблицы арифметически выводятся
|
||||
из базы D, заявленной в «Эталон и единицы», без округлений на глаз.
|
||||
- Самокоррекция автора («цветные 0.50» → «0.40» для тёмной темы) сделана на
|
||||
более сильном виде доказательства (`getComputedStyle` с работающей
|
||||
лаборатории), чем то, что стояло в r1, и не противоречит остальному тексту
|
||||
ТЗ или AC.
|
||||
- L1 закрыта точной координатой, подтверждённой чтением кода на
|
||||
неизменившемся SHA.
|
||||
- Остальной текст ТЗ (сценарий, скоуп, разделы 1–4, AC, тесты, риски, откат,
|
||||
release-артефакты, «Принято предположительно») не изменился по существу
|
||||
относительно того, что проверил и описал r1 — делта локальна, расширения
|
||||
разбора на смену контракта/подсистему/ребейз не требуется (§2.10).
|
||||
|
||||
## Чего не проверял
|
||||
|
||||
- Не открывал архив лаборатории (`first-floor-lab-2026-09-25-sketch07.zip`) и
|
||||
не сверял значение `getComputedStyle` из таблицы напрямую с `lab.css` —
|
||||
как и в r1, это вне доступа ревьюера; проверена только внутренняя
|
||||
непротиворечивость таблицы (единицы D, порог luma) и правдоподобие через
|
||||
явно названное правило приоритета. Точное численное соответствие макету —
|
||||
задача AC12 на код-ревью (side-by-side с `docs/design/649-25d-stage6/
|
||||
ACCEPTANCE.md`), не текста.
|
||||
- Не запускал `npx tsc --noEmit`, `npm test`, `npm run build` — на этапе
|
||||
ревью ТЗ продуктовый код не меняется, гейты неприменимы (§2.5, §8); та же
|
||||
практика, что и в r1.
|
||||
- Не переоткрывал верификацию восьми вложений 09–16 и формулы луча
|
||||
параллелограмма — делта их не касается, оставлено как унаследовано из r1.
|
||||
|
||||
## Вердикт
|
||||
|
||||
Обе находки r1 закрыты корректно и по существу — M1 таблицей с
|
||||
самодостаточным правилом приоритета (числа сходятся с базой D), L1 точной
|
||||
координатой (подтверждена чтением кода). Новых находок делта не вносит,
|
||||
остальной текст ТЗ не изменился. High: 0, Medium: 0.
|
||||
|
||||
Вердикт: зелёный · заход r2 · блокирующих циклов 1/4 · High: 0 · Medium: 0
|
||||
|
||||
---
|
||||
|
||||
<!-- material-anchors: сгенерировано конвейером (#414) -->
|
||||
|
||||
## Материал раунда
|
||||
|
||||
- Ветка: `dev`, коммит `f68878cc44b8` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет.
|
||||
- Дерево материала: `fb70cdc705198bd470005c6e486a6b63dff537ab`
|
||||
```
|
||||
git log --all --format='%H %T' | grep fb70cdc70519
|
||||
```
|
||||
- Тело issue: `e7d94f185bc9a5d2d7e168933579903e54c88a9819347cb49f0f7c35db60a9e7`
|
||||
- Вердикт конвейера: `green` · High 0
|
||||
Reference in New Issue
Block a user