Files
houseplan-card/docs/reviews/SPEC-REVIEW-361-r2.md
T
2026-08-29 07:55:23 +00:00

98 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# SPEC-REVIEW-361-r2
Issue: [#361](https://github.com/Matysh/houseplan-card/issues/361) — «Мебель: физическая
толщина линий не масштабируется при zoom»
ТЗ: `docs/specs/361-furniture-stroke-zoom.md`, commit `31c6e77c` (`docs: require targeted
furniture smoke`, Issue: #361, User-Visible: no)
Этап: spec (§2.4) · трек: полный · заход r2 · блокирующих циклов израсходовано 1 из 4
## Предыдущий раунд
r1: жёлтый, High: 0, Medium: 1 (в скоупе). Документ: `docs/reviews/SPEC-REVIEW-361-r1.md`,
получен на SHA `ccaf34d6` (SHA назван в самом документе r1 — недостающего SHA как находки
здесь нет).
## Дельта раунда (PROCESS.md §2.10)
Автор сам назвал дельту в хендоффе: `02e96750..31c6e77c`. Диф спеки за этот диапазон:
```
git diff 02e96750..31c6e77c -- docs/specs/
```
даёт ровно одно изменение — пункт 7 раздела «План автотестов» в
`docs/specs/361-furniture-stroke-zoom.md` (5 добавлений / 4 удаления, единственный
изменённый файл в диапазоне). Никакие другие разделы ТЗ, тело issue, `docs/specs/README.md`
или иные файлы в этом диапазоне не тронуты.
**Дельта локальна** в терминах §2.10: это не ребейз на ушедший вперёд `dev` (сравнение с
`origin/dev` — родитель по-прежнему тот же), не смена контракта поведения (AC1…AC9 и разделы
«Контракт поведения» / «Технический render-контракт» не менялись), не задета новая
подсистема, объём (5/4 строк) несравним с объёмом исходного ТЗ (287 строк). Поэтому полный
повторный разбор не требуется — разбор ограничен дельтой плюс тем, до чего она дотягивается.
## Закрытие раунда r1
| Находка r1 (Medium) | Чем закрыта | Где это видно |
|---|---|---|
| Пункт 7 «Плана автотестов» откладывал `demo/smoke_furniture.mjs` до предрелизного прогона, хотя AC1/AC3/AC4/AC6 называют именно его доказательством — противоречие правилу `AGENTS.md` («before moving an issue to `S7-code-review`, run the smokes named in its AC locally»), issue #151. | Пункт 7 переписан: «перед переводом в `S7-code-review` дополнительно запустить названный в AC целевой `node demo/smoke_furniture.mjs`». Golden, полный набор browser smoke, performance и полный gate по-прежнему явно отнесены к предрелизному прогону — эта часть не тронута и не должна была быть. | `docs/specs/361-furniture-stroke-zoom.md:236-240` (commit `31c6e77c`); формулировка дословно соответствует правилу `AGENTS.md:340-341`. |
Находка закрыта полностью и точно — не общим заявлением автора, а конкретной строкой текста,
процитированной выше и сверенной с `AGENTS.md` посимвольно по смыслу требования (какой смок,
когда, обязательность).
## Что перепроверено в этом раунде
Дельта — правка процесса гейтов в «Плане автотестов», не поведенческая. Она не задевает
доказательство ни одного AC (AC1…AC9 остаются описывать *что* доказывается; правка меняет
только *когда* один из способов доказательства обязан быть исполнен). Поэтому по правилу
«заново проверять только те AC, чьё доказательство дельта задевает» — предметных AC для
повторной проверки нет.
Проверено отдельно, поскольку это прямой предмет находки r1:
- новая формулировка не создаёт новое противоречие — `demo/smoke_furniture.mjs` назван
обязательным именно там же, где AC1/AC3/AC4/AC6 называют его доказательством (раздел
«Критерии приёмки», не менявшийся в дельте): `docs/specs/361-furniture-stroke-zoom.md:183,
190, 194, 203`;
- `golden`, полный набор browser smoke, `performance_smoke` и полный gate остались
предрелizными, как и было в r1-версии — эта граница дельтой не сдвинута, значит регрессии
§11.4 (предрелизные гейты не подменяют код-ревью) нет;
- трейлеры коммита `31c6e77c`: `Issue: #361`, `User-Visible: no` — корректно, изменение
докс-only и не видно пользователю продукта.
## Унаследовано из r1
Без повторной проверки в этом раунде, по документу `docs/reviews/SPEC-REVIEW-361-r1.md`
(SHA `ccaf34d6`), поскольку дельта их не касается:
- диагноз дефекта (line/rect/ellipse без `vector-effect` vs. furniture с
`vector-effect="non-scaling-stroke"`, `plan-svg viewBox` от `_applyView(zoom, …)`) сверен с
кодом и не догадка;
- обязательные разделы §7.1 присутствуют и полны;
- скоуп/не-скоуп корректны и не расширены относительно аналитики #361;
- терминология сверена с `docs/USER-GUIDE.ru.md`;
- AC1…AC9 однозначны и указывают способ доказательства;
- раздел «Принято предположительно, поменять свободно» корректно отделяет техническое от
продуктового;
- сложность/риск/трек (полный, не `small`) не оспаривались и не изменились.
## Гейты
Дельта — правка одного docs-файла в `docs/specs/**`, `src/**` не затронут. Продуктовый код не
менялся (спек-этап). Поэтому:
- `npx tsc --noEmit`, `npm test`, `npm run build`, `node scripts/check-docs.mjs` — не
прогонялись в этом раунде: их предмет (код/бандл/отпечаток скриншотов по `src/**`) дельтой
не затронут, а автор уже подтвердил `node scripts/check-docs.mjs` → PASS и `process-gate
pre-push` → PASS в хендоффе на этом SHA;
- смоки, golden, инварианты модели, backend pytest, performance-профили — неприменимы на
этапе spec без кода, как и в r1.
## Находки
Нет. High: 0, Medium: 0.
## Вердикт
Зелёный. Дельта r2 точно и полностью закрывает единственную Medium-находку r1, не открывая
новых расхождений; ТЗ в текущей редакции (`31c6e77c`) готово к DoR/S5.