mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
committed by
Sergey Matyunin
parent
2d8ade3b2b
commit
74fdf2182c
@@ -0,0 +1,145 @@
|
||||
# SPEC-REVIEW-288-r2
|
||||
|
||||
- **Issue:** https://github.com/Matysh/houseplan-card/issues/288
|
||||
- **Этап:** spec (PROCESS.md §2.4)
|
||||
- **Заход:** r2 · блокирующих циклов израсходовано 1 из 4 (r1 был жёлтым и
|
||||
потратил 1 цикл; зелёный вердикт цикла не образует, #227)
|
||||
- **Документ ТЗ:** `docs/specs/288-bounded-multiwall-corridor.md`
|
||||
- **SHA r1 (найден в документе r1, не в комментарии-вердикте):**
|
||||
`cb0f9e7351e919701666dfd05b53f0e218e672a5`
|
||||
- **SHA r2 (текущий HEAD, дельта этого раунда):**
|
||||
`fba615e9f6ec8841c6e6e0f9a7cc5fe0d1fc7c25`
|
||||
- **Разбор — по дельте** (PROCESS.md §2.10): единственный коммит между SHA r1
|
||||
и HEAD — `fba615e9 docs: add risks and rollback to junction spec`
|
||||
(`docs/specs/288-bounded-multiwall-corridor.md`, +21/-4 строк). Дельта
|
||||
локальна: только текст, только два новых раздела плюс одна строка в шапке;
|
||||
не задета ни одна формулировка сценария, контракта, scope или AC. Условия
|
||||
«разбор остаётся полным» (ребейз на ушедший вперёд `dev`, смена контракта
|
||||
поведения, новая подсистема, объём дельты сопоставим с исходной задачей) не
|
||||
выполнено ни одно — исходное ТЗ 208 строк, дельта 25 строк правки двух
|
||||
разделов. Полный повторный разбор не требуется.
|
||||
|
||||
## Дельта (что менялось)
|
||||
|
||||
```
|
||||
git diff cb0f9e73..fba615e9 -- docs/specs/288-bounded-multiwall-corridor.md
|
||||
```
|
||||
|
||||
- добавлен раздел «7. Риски и меры» (3 пункта: регрессия семи прежних
|
||||
junction-контрактов → мера AC4/оба плана/golden; над-/недосечение соседней
|
||||
стены → мера AC3/AC5/AC7; расхождение polygon между Plan/View/Static/Iso →
|
||||
мера AC5 + запрет consumer-specific post-fix);
|
||||
- добавлен раздел «8. Откат» (один абзац: чистый revert, флаг/миграция не
|
||||
нужны, т.к. persisted model не меняется);
|
||||
- последующие разделы («Ожидаемые файлы», «Release…», «Принятые технические
|
||||
предположения») перенумерованы 7→9, 8→10, 9→11 без потери и без дублей
|
||||
(проверено `grep -n "^## "` по всему файлу — последовательность 1…11 без
|
||||
пропусков);
|
||||
- в шапку «Связано» добавлен `#279`.
|
||||
|
||||
Коммит несёт корректные трейлеры: `Issue: #288`, `User-Visible: no` (класс C,
|
||||
поведение не меняется).
|
||||
|
||||
## Закрытие раунда r1
|
||||
|
||||
| Находка r1 | Чем закрыта | Где это видно |
|
||||
|---|---|---|
|
||||
| **M1** (Medium, в скоупе) — отсутствуют обязательные разделы «Риски» и «Откат» (§7.1, DoR §2.5) | Добавлены разделы «7. Риски и меры» (3 пункта с мерами, привязанными к AC3/AC4/AC5/AC7) и «8. Откат» (чистый revert, без флага/миграции) | `docs/specs/288-bounded-multiwall-corridor.md:170-185`, коммит `fba615e9` |
|
||||
| **L1** (Low) — «Связано» не включает #279, хотя AC4 на него ссылается | `#279` добавлен в строку «Связано» | `docs/specs/288-bounded-multiwall-corridor.md:11`, коммит `fba615e9` |
|
||||
|
||||
Оба пункта закрыты содержательно, а не формальным упоминанием слова: риск 1
|
||||
прямо называет затронутый общий код (`bevelMultiWallBody`) и все семь прежних
|
||||
контрактов по номерам, риск 2 и 3 — конкретные меры отказа (перекрытие,
|
||||
недосечение, рассинхронизация consumers) с привязкой к конкретным AC, а не
|
||||
общими словами. Формулировки рисков корректно хеджированы («может вернуть»,
|
||||
«может разойтись») — это анализ риска, а не факт о поведении, выданный без
|
||||
основания. Откат сформулирован как утверждение и совпадает с уже
|
||||
зафиксированным в шапке фактом «persisted model не меняется» — не новое
|
||||
недоказанное утверждение, а следствие уже принятого в r1 факта.
|
||||
|
||||
## Унаследовано из r1
|
||||
|
||||
Всё, что не затронуто дельтой, принимается без повторной проверки по
|
||||
документу `docs/reviews/SPEC-REVIEW-288-r1.md` (SHA `cb0f9e7351e919701666dfd05b53f0e218e672a5`):
|
||||
|
||||
- диагноз причины (узел `577,299`, лучи `349/120/5` шагов, толщины `30/30/30`
|
||||
см, соседняя стена `20` см, радиус `4×15=60`, вырез `60−15=45`) — сверен
|
||||
ревьюером r1 с телом issue буквально;
|
||||
- существование и корректность использования идентификаторов контракта
|
||||
(`MITRE_LIMIT`, `MultiWallNodeRay.supports`/`halfDepth`) в
|
||||
`src/wall-thickness.ts` — проверено чтением кода в r1, дельта этого файла
|
||||
не касается;
|
||||
- привязка AC1/AC2 к существующему `demo/smoke_real_plan_masonry.mjs` и
|
||||
корректность его логики подсчёта разрывов — не менялась;
|
||||
- table-driven конструкция AC3 как независимая от AC1 unit-гарантия — текст
|
||||
AC3 не тронут дельтой;
|
||||
- список регрессионных контрактов AC4 (#249/#261/#271/#272/#275/#278/#279),
|
||||
сверенный с `docs/WALL-THICKNESS.md`, — текст AC4 не тронут; #279 добавлен
|
||||
только в шапку «Связано», в самом AC4 он уже присутствовал в r1;
|
||||
сверено `git diff cb0f9e73..HEAD -- docs/specs/288-bounded-multiwall-corridor.md`
|
||||
— раздел AC (строки 98–156 текущего файла) в дельте не участвует;
|
||||
мутационное требование AC7 — не менялось;
|
||||
- корректность Scope/«Не входит» (исключение #289/#290 и глобальных
|
||||
констант) — не менялось;
|
||||
«Принятые технические предположения» — не менялись по содержанию, только
|
||||
перенумерованы (9→11);
|
||||
- отсутствие продуктовых вопросов, требующих участия владельца, — не
|
||||
менялось; новый текст рисков и отката тоже не содержит продуктовой
|
||||
развилки, ниже проверено отдельно.
|
||||
- совместимость/touch/performance (раздел 6) — не менялась.
|
||||
|
||||
## Что проверено заново в этом раунде
|
||||
|
||||
- Полный просмотр итогового файла (`docs/specs/288-bounded-multiwall-corridor.md`,
|
||||
226 строк) для проверки целостности нумерации разделов и отсутствия висячих
|
||||
перекрёстных ссылок на старые номера — ссылок по номеру раздела в тексте
|
||||
документа нет вообще (`grep -n "раздел\|§[0-9]"` — 0 совпадений), поэтому
|
||||
перенумерация 7→9/8→10/9→11 безопасна.
|
||||
- Содержательность нового раздела «Риски и меры»: каждый из трёх пунктов
|
||||
называет конкретный failure mode и конкретную меру, привязанную к
|
||||
проверяемому AC, а не общую фразу «будем осторожны». Прецедентная сверка
|
||||
формы с `docs/specs/275-multiwall-strip-containment.md` и
|
||||
`docs/specs/278-wall-union-isolation.md` (использовались как эталон в r1)
|
||||
показывает сопоставимую структуру: конкретный риск → конкретная мера.
|
||||
- Раздел «Откат»: соответствует требованию DoR §2.5 «откат: как выключить
|
||||
или вернуть назад» — здесь ответ «чистый revert» обоснован отсутствием
|
||||
изменений модели данных, что само по себе уже было зафиксировано в шапке
|
||||
ТЗ («Модель данных: schema, config, layout и Optimize не меняются») и в
|
||||
r1 это не оспаривалось.
|
||||
- Продуктовая рамка не пересматривалась целиком (не требуется по §2.10, дельта
|
||||
не продуктовая), но точечно проверено: новые два раздела не вводят решения,
|
||||
которое следовало бы адресовать владельцу (нет пограничного случая, нет
|
||||
конфликта персон, нет вопроса об объёме видимых изменений) — оба раздела
|
||||
чисто технические, что соответствует их месту в документе (после AC,
|
||||
до release-раздела).
|
||||
- Трейлеры коммита `fba615e9`: `Issue: #288`, `User-Visible: no` — корректно
|
||||
для документации класса C без изменения поведения.
|
||||
|
||||
## Гейты
|
||||
|
||||
Этап — spec, продуктовый код не менялся (diff ограничен `docs/specs/288-*.md`,
|
||||
класс C). Как и в r1, гейты §8 (`typecheck`/`test`/`build`/`check-docs`/
|
||||
smoke/invariants/golden) к этапу spec-review не относятся и не запускались —
|
||||
это гейты этапа code-review (§2.7), где эта задача окажется позже. Дельта
|
||||
этого раунда тем более не продуктовая (только текст ТЗ), так что необходимость
|
||||
их прогона не возникла и по факту дельты.
|
||||
|
||||
## Находки
|
||||
|
||||
Нет. High: 0, Medium: 0, Low: 0. Обе находки r1 закрыты содержательно (см.
|
||||
таблицу выше), новых находок дельта не порождает.
|
||||
|
||||
## Чего не проверял
|
||||
|
||||
- Повторно не проверял идентичность кода `src/wall-thickness.ts` контракту
|
||||
§3.1 — код не менялся с r1, наследуется.
|
||||
- Не запускал `demo/smoke_real_plan_masonry.mjs` и `npm run invariants` —
|
||||
реализации ещё нет, как и в r1; вопрос сохраняется до code-review.
|
||||
- Не проверял golden baseline — как и в r1, AC6 описывает будущую работу.
|
||||
|
||||
## Вердикт
|
||||
|
||||
```
|
||||
Вердикт: зелёный · заход r2 · блокирующих циклов 1/4 · High: 0 · Medium: 0
|
||||
Документ: docs/reviews/SPEC-REVIEW-288-r2.md
|
||||
```
|
||||
Reference in New Issue
Block a user