mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
committed by
Sergey Matyunin
parent
8750708c5b
commit
f2e8fe5e93
@@ -0,0 +1,142 @@
|
||||
# SPEC-REVIEW-293-r2
|
||||
|
||||
- **Issue:** https://github.com/Matysh/houseplan-card/issues/293
|
||||
- **Этап:** spec (PROCESS.md §2.4)
|
||||
- **Заход:** r2 · блокирующих циклов израсходовано 1 из 4 (r1 — жёлтый, потратил
|
||||
1 цикл; зелёный вердикт цикла не образует, §227)
|
||||
- **Ветка/SHA:** `issue/293-resize-pointer-noop` @ `9e9fd0298587ef0d4a1f7a32c6bcc2c61e603729`
|
||||
- **Предыдущий раунд:** SPEC-REVIEW-293-r1, вердикт жёлтый, получен на SHA
|
||||
`c514b534` (SHA был явно назван в тексте вердикта r1 и в комментарии автора —
|
||||
не находка на этот раз)
|
||||
- **Дельта r1→r2:** `git diff c514b534..HEAD` — три файла:
|
||||
- `docs/specs/293-resize-pointer-noop.md` (+25/−3: новые разделы 9 и 10,
|
||||
сдвиг нумерации 9→11, 10→12, 11→13)
|
||||
- `docs/specs/README.md` (+1: строка индекса)
|
||||
- `docs/reviews/SPEC-REVIEW-293-r1.md` (+165: коммит документа r1 в дерево,
|
||||
не предмет этого раунда)
|
||||
- Продуктового кода в дельте нет (`git diff --stat c514b534..HEAD -- src/
|
||||
custom_components/` — пусто), новая подсистема не затронута, контракт
|
||||
поведения не менялся. Дельта чисто аддитивная и локальная — полный разбор
|
||||
по §2.10 не требуется.
|
||||
|
||||
## Скоуп ревью
|
||||
|
||||
Предмет раунда — только дельта: закрытие M1 и L1 из r1. AC1–AC10, контракт
|
||||
раздела 1–8, `docs/RESIZE.md`/`docs/TOUCH-SUPPORT.md`/`docs/USER-GUIDE.ru.md`
|
||||
согласованность, соответствие `docs/SCOPE.md` — уже разобраны в r1 полностью,
|
||||
дельта их не касается (ни один AC, ни один пункт контракта не переписан,
|
||||
только приписаны разделы «Риски» и «Откат» плюс строка индекса). Эти пункты
|
||||
наследуются без повторной проверки — см. раздел ниже.
|
||||
|
||||
## Как проверялось
|
||||
|
||||
1. `gh issue view 293 --json ... --comments` — подтверждён вердикт r1 (жёлтый,
|
||||
заход r1, 0/4 при входе) и его SHA `c514b534`, названный автором явно в
|
||||
тексте комментария-вердикта.
|
||||
2. `git diff c514b534..HEAD --stat` и полный текстовый diff — три файла,
|
||||
перечислены выше; `git log --oneline c514b534..HEAD` — два коммита
|
||||
(`9e9fd029` добавляет разделы, `b0696880` коммитит документ r1), оба несут
|
||||
`Issue: #293` / `User-Visible: no` — корректно для чисто документационной
|
||||
правки.
|
||||
3. Прочитан файл `docs/specs/293-resize-pointer-noop.md` целиком (231 строка) —
|
||||
не только добавленный фрагмент, чтобы проверить согласованность новых
|
||||
разделов с остальным текстом и отсутствие сломанных перекрёстных ссылок
|
||||
после сдвига номеров разделов. Перекрёстных ссылок по номеру раздела
|
||||
(`## 9`, «раздел 9» и т.п.) в файле не оказалось — все ссылки на AC даны по
|
||||
имени (`AC1`, `AC7`…), поэтому renumbering 9→11/10→12/11→13 безопасен.
|
||||
4. Проверено предметное содержание новых разделов против текста находки M1
|
||||
r1 — см. таблицу закрытия ниже.
|
||||
5. `grep -n "## P1" -A3 docs/specs/README.md` — новая строка `#293` попала в
|
||||
таблицу `## P1`, что соответствует фактическому приоритету issue (метка
|
||||
`P1`), не в `P2`/`P3`.
|
||||
6. Гейты `typecheck`/`test`/`build` не запускались — продуктовый код не
|
||||
менялся ни в r1, ни в этой дельте (см. п.2); эти гейты относятся к
|
||||
код-ревью (§2.7), не к ревью ТЗ. Смоки/golden/invariants не применимы по
|
||||
той же причине.
|
||||
|
||||
## Закрытие раунда r1
|
||||
|
||||
| Находка r1 | Чем закрыта | Где это видно |
|
||||
|---|---|---|
|
||||
| **M1** (Medium, в скоупе) — отсутствуют обязательные разделы §7.1 «риски» и «откат» | Добавлены раздел `## 9. Риски и меры` (3 пункта, каждый привязан к конкретным AC — AC1/AC6/AC8 для риска неопределённой root cause, AC2/AC5/AC9 для риска touch safety floor, AC7 для риска ослабления safe Resize) и раздел `## 10. Откат` (revert implementation-коммита, схема/миграция/данные не трогаются) | `docs/specs/293-resize-pointer-noop.md:188-205`, коммит `9e9fd029` |
|
||||
| **L1** (Low, на решение автора) — спек не индексирован в `docs/specs/README.md` | Строка `#293` добавлена в таблицу `## P1` | `docs/specs/README.md` diff в `9e9fd029`, видно в `## P1` рядом с #277/#280/#281 |
|
||||
|
||||
Обе находки закрыты правкой текста, а не заявлением — проверено чтением диффа,
|
||||
не пересказом автора.
|
||||
|
||||
Содержательная проверка новых разделов (не только факт присутствия):
|
||||
|
||||
- Риск 1 корректно называет то, что уже было открытым вопросом в разделе 1
|
||||
ТЗ («реализация обязана сначала зафиксировать точную причину… а затем
|
||||
исправить»), и не вводит новый факт под видом решения — риск сформулирован
|
||||
как риск, а не как скрытая догадка о причине.
|
||||
- Риск 2 и риск 3 указывают на реальные AC (AC2/AC5/AC9 и AC7 существуют в
|
||||
разделе 7 в указанном виде — проверено построчно), формулировки не
|
||||
противоречат разделу 8 (Touch safety floor) и разделу 3 (Pointer contract).
|
||||
- Раздел «Откат» согласован с шапкой документа («Модель данных: schema и
|
||||
model version не меняются») и с разделом 12 «Release» — противоречий нет.
|
||||
- Оба новых раздела не содержат догадки, выданной за факт: формулировки
|
||||
риска — гипотезы о рисках, а не утверждения о поведении кода.
|
||||
|
||||
## Унаследовано из r1
|
||||
|
||||
Без повторной проверки принято из **SPEC-REVIEW-293-r1** (документ в дереве —
|
||||
`docs/reviews/SPEC-REVIEW-293-r1.md`, вердикт получен на SHA `c514b534`):
|
||||
|
||||
- соответствие `docs/SCOPE.md` (дефект в закрытом J6, регрессия безусловно в
|
||||
скоупе);
|
||||
- фактическая точность раздела 1 (топология общей стены в
|
||||
`test/fixtures/real-plan-second-floor.json`, поведение
|
||||
`_rszDrag/_rszMove/_rszApplyPreview` в `src/houseplan-card.ts`) —
|
||||
проверено r1 численно и по коду, дельта эти утверждения не трогает;
|
||||
- корректность и неразмытость раздела «Не входит» (#292/#289/#290,
|
||||
partial-shared/diagonal/>2-room, schema/storage вне скоупа);
|
||||
- то, что контракт разделов 3–4 (Pointer contract, Live overlay contract)
|
||||
восстанавливает уже документированное в `docs/RESIZE.md`, а не изобретает
|
||||
новую продуктовую рамку;
|
||||
- то, что новая часть контракта (toast при непредсказуемом reject) — не
|
||||
придуманный UX, а прямой запрос владельца через существующий механизм
|
||||
`toast.*`;
|
||||
- проверяемость и способность падать AC1–AC10 (mutation-требования в
|
||||
AC1/AC2/AC5/AC8, отсутствие двойного источника числа);
|
||||
- согласованность раздела 8 с `docs/TOUCH-SUPPORT.md` (safety floor);
|
||||
- корректность условной формулировки i18n (раздел «Ожидаемые файлы»: en/ru
|
||||
ключи «если добавляется runtime reason»);
|
||||
- корректность release-артефактов (раздел 12: трейлеры, оба changelog,
|
||||
закрытие только бетой).
|
||||
|
||||
Ни один из этих пунктов не мог измениться дельтой этого раунда: дельта не
|
||||
касается разделов 1–8, 11–13, только добавляет 9–10 и одну строку индекса.
|
||||
|
||||
## Находки этого раунда
|
||||
|
||||
Нет. Дельта полностью закрывает M1 и L1, новых High/Medium/Low не внесено.
|
||||
|
||||
## Что проверено и признано корректным (в дельте)
|
||||
|
||||
- Оба новых раздела присутствуют, содержательны, не формальны (не «риск: не
|
||||
установлен» без конкретики) и ссылаются на реальные, существующие AC.
|
||||
- Renumbering разделов 9→11, 10→12, 11→13 не сломал внутренних ссылок —
|
||||
ссылок по номеру раздела в документе нет вообще.
|
||||
- Индекс `docs/specs/README.md` обновлён в правильной таблице (`P1`).
|
||||
- Коммиты дельты несут корректные трейлеры (`Issue: #293`,
|
||||
`User-Visible: no` — доки, не продукт).
|
||||
- Документ теперь формально закрывает все обязательные разделы §7.1: риски и
|
||||
откат добавлены, остальные были на месте с r1.
|
||||
|
||||
## Чего не проверял
|
||||
|
||||
- Полный повторный разбор разделов 1–8, 11–13 — не требуется по §2.10, они не
|
||||
входят в дельту; их проверка наследуется из r1 (см. выше).
|
||||
- `typecheck`/`test`/`build`/смоки/invariants/golden — неприменимо, продуктовый
|
||||
код не менялся ни в одном из двух раундов.
|
||||
- Соответствие итоговой реализации разделам 9–10 — предмет код-ревью (§2.7),
|
||||
не этапа ТЗ.
|
||||
|
||||
## Итог
|
||||
|
||||
High: 0. Medium: 0. Low: 0. Обе находки r1 (M1 Medium в скоупе, L1 Low)
|
||||
закрыты правкой текста, проверено построчно. Дельта чисто документационная,
|
||||
локальная, не задевает AC, контракт или подсистему — полный разбор не
|
||||
требовался и не проводился повторно там, где дельта не дотягивается. Вердикт:
|
||||
зелёный. Issue переходит в «Готово к разработке» (S5-ready).
|
||||
Reference in New Issue
Block a user