mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
@@ -0,0 +1,152 @@
|
||||
# SPEC-REVIEW-403-r2
|
||||
|
||||
- Issue: https://github.com/Matysh/houseplan-card/issues/403
|
||||
- Артефакт ТЗ: `docs/specs/403-area-relocation-safety.md` (полный трек, класс A;
|
||||
без метки `small`/`trivial`)
|
||||
- Материал: спец-файл на `HEAD = 83005c3c` (ветка `issue/403-area-relocation-safety`,
|
||||
коммит «docs: revise area relocation safety spec», ревизия ТЗ 2)
|
||||
- Заход: r2 · блокирующих циклов израсходовано **1/4** (зелёный вердикт цикл не
|
||||
образует, §4/#227 — этот раунд бюджет не тронет)
|
||||
- Ревьюер: Claude (роль «ревьюер ТЗ»), независимая сессия
|
||||
- Разбор — **по дельте** (§2.10 PROCESS.md): дельта локальна (см. ниже),
|
||||
ребейза не было, контракт поведения не менялся, новая подсистема не задета,
|
||||
объём дельты (25 строк diff) многократно меньше исходной задачи
|
||||
|
||||
## 1. Вердикт r1 и SHA, на котором он получен
|
||||
|
||||
`docs/reviews/SPEC-REVIEW-403-r1.md` (коммит `bfe05bed`): **жёлтый**, заход r1,
|
||||
блокирующих циклов 1/4, High: 1 (H1), Medium: 0, Low: 1 (L1, снят с записью).
|
||||
Материал ревью r1 — SHA `1f9d9014` (ветка `issue/403-area-relocation-safety`,
|
||||
тот же текст, что и коммит `bb47ec31` в этой ветке; расхождение SHA — только
|
||||
факт истории ветки на момент r1, содержимое спецификации идентично тому, что
|
||||
лежит в `bb47ec31`). SHA был назван в документе r1 явно — находки «SHA не
|
||||
назван» здесь нет.
|
||||
|
||||
## 2. Объявление дельты
|
||||
|
||||
Код продукта (`src/**`) на этапе ТЗ не менялся и не должен был: спор — только
|
||||
о тексте спецификации. Дельта:
|
||||
|
||||
```
|
||||
git diff bb47ec31..83005c3c -- docs/specs/403-area-relocation-safety.md
|
||||
```
|
||||
|
||||
```diff
|
||||
- Ревизия: 1 (2026-08-31)
|
||||
+ Ревизия: 2 (2026-09-01; H1/L1 из SPEC-REVIEW-403-r1)
|
||||
...
|
||||
- `src/houseplan-card.ts:5056-5058`:
|
||||
+ `src/houseplan-card.ts:5062-5065`:
|
||||
...
|
||||
+ ## Touch, View и kiosk
|
||||
+ (текст: touch-контракт не меняется, drag/tap-жесты и DOM/рендер не
|
||||
+ затрагиваются, View/kiosk сохраняют идентичный desktop-результат)
|
||||
+
|
||||
+ ## Производительность
|
||||
+ (текст: нет новых циклов/подписок/сетевых вызовов сверх уже выполняемых
|
||||
+ `_syncAreaRelocations`/`_writeConfig`; очистка истории — не более 50 команд)
|
||||
```
|
||||
|
||||
`git diff --stat bb47ec31..HEAD` подтверждает: изменены ровно два файла —
|
||||
сам спек (+23/-2) и новый `docs/reviews/SPEC-REVIEW-403-r1.md` (публикация
|
||||
документа r1, не предмет разбора). Продуктовый код, тесты, `docs/SCOPE.md`,
|
||||
`docs/TOUCH-SUPPORT.md`, `docs/USER-GUIDE.ru.md` в дельте не участвуют —
|
||||
разбор ограничен текстом спецификации, что и требуется §2.10 для дельты по ТЗ.
|
||||
|
||||
Дельта локальна: без ребейза (истории общий предок совпадает), без смены
|
||||
контракта (AC1–AC7, сценарий, скоуп/не-скоуп не тронуты), без новой
|
||||
подсистемы (правки — только два новых раздела DoR-чек-листа и один адрес
|
||||
строки).
|
||||
|
||||
## 3. Закрытие раунда r1
|
||||
|
||||
| Находка r1 | Чем закрыта | Где это видно |
|
||||
|---|---|---|
|
||||
| **H1 (High).** ТЗ не называет влияние на touch/kiosk (`docs/TOUCH-SUPPORT.md`) и на производительность — ни утвердительно, ни явным «нет», как требует DoR §2.5 | Добавлены разделы «Touch, View и kiosk» (docs/specs/403-area-relocation-safety.md:133-144) и «Производительность» (:146-152) с явными положительными утверждениями «нет влияния» и обоснованием | `docs/specs/403-area-relocation-safety.md:133-152`; проверено построчно против `docs/TOUCH-SUPPORT.md:9-38` (View/kiosk — «fully supported», доступный AC1/AC2-результат туда попадает без ослабления) и против `docs/USER-GUIDE.ru.md:260,1325` (раздел 6 «Навигация, масштаб и жесты» — строка «История редактора»; лимит 50 команд подтверждён кодом, см. §5) |
|
||||
| **L1 (Low).** Адрес сниппета M1 указывал `src/houseplan-card.ts:5056-5058`, актуальный код на `1f9d9014` — `:5062-5065` | Адрес в тексте ТЗ обновлён на `:5062-5065` | `docs/specs/403-area-relocation-safety.md:84`; сверено с текущим деревом — `src/houseplan-card.ts:5062-5065` содержит ровно процитированный фрагмент (см. §5) |
|
||||
|
||||
Обе находки закрыты правкой текста, не заявлением автора о правке — ниже
|
||||
приведена самостоятельная проверка, а не пересказ хендоффа.
|
||||
|
||||
## 4. Унаследовано из r1 (без повторной проверки)
|
||||
|
||||
Источник: `docs/reviews/SPEC-REVIEW-403-r1.md` (коммит `bfe05bed`, материал —
|
||||
SHA `1f9d9014`). Дельта r2 этих утверждений не касается, поэтому переносятся
|
||||
без повторной проверки:
|
||||
|
||||
- диагноз C2 и M1 точен и построчно сверен с кодом (`_syncAreaRelocations`,
|
||||
`resolveDeviceAreaRelocations`, `_devicePositionHistory.clear()`);
|
||||
- AC1–AC7 однозначны, у каждого указан способ доказательства, реалистичны на
|
||||
существующей инфраструктуре смоков (`demo/smoke_area_relocation.mjs` уже
|
||||
умеет мокать отказ `houseplan/config/set`);
|
||||
- все обязательные разделы §7.1 присутствуют (сценарий · что человек увидит ·
|
||||
проблема/контракт по пунктам · скоуп/не-скоуп · UX · модель данных и
|
||||
миграция · i18n · план автотестов · риски · откат · release-артефакты);
|
||||
- терминология соответствует `docs/USER-GUIDE.ru.md` (раздел «Устройства»,
|
||||
раздел «История редактора»);
|
||||
- инструменты плана тестов существуют (`scripts/mutation-gate.mjs`,
|
||||
`demo/smoke_area_relocation.mjs`);
|
||||
- задача лежит в скоупе `docs/SCOPE.md` (J6 «Keep the plan true as the home
|
||||
evolves» + правило «никогда не удалять данные пользователя по догадке»).
|
||||
|
||||
## 5. Проверка дельты (не унаследовано — перепроверено заново)
|
||||
|
||||
**Строка L1.** Прочитан `src/houseplan-card.ts:5060-5070` на текущем HEAD:
|
||||
|
||||
```
|
||||
5062 this._areaRelocationIds = new Set(areaRelocations.relocateIds);
|
||||
5063 if (this._areaRelocationIds.size) {
|
||||
5064 this._cancelDeviceDrag();
|
||||
5065 this._devicePositionHistory.clear();
|
||||
```
|
||||
|
||||
Совпадает буквально с текстом ТЗ и с новым адресом `:5062-5065`. Находка L1
|
||||
закрыта корректно, не только по номеру, но и по содержанию.
|
||||
|
||||
**Раздел «Производительность».** ТЗ утверждает лимит истории «не более чем из
|
||||
50 команд». Проверено чтением `src/command-stack.ts:20-21`:
|
||||
`public constructor(limit = 50)` — комментарий на той же строке ссылается на
|
||||
UX-04 («useful 30–50-step history»). Число подтверждено, не выдумано.
|
||||
|
||||
**Раздел «Touch, View и kiosk».** Утверждение «View/kiosk сохраняют
|
||||
одинаковый позиционный результат на desktop и touch» проверено против
|
||||
`docs/TOUCH-SUPPORT.md:9-41` — View обязан быть «fully supported; must be
|
||||
convenient and reliable» на touch, отдельного исключения для содержимого
|
||||
маркера/отметки внимания там нет; AC1/AC2 результата (позиция или отметка)
|
||||
не вводят нового жеста и не меняют DOM/рендер — согласуется с диагнозом,
|
||||
унаследованным из r1 (правка ограничена `_syncAreaRelocations` и фильтром по
|
||||
`deviceId` в существующей истории). Раздел не содержит утверждений о
|
||||
поведении, которых нет в каноне: ссылки на TOUCH-SUPPORT.md и на раздел
|
||||
«История редактора» USER-GUIDE.ru.md проверены и точны.
|
||||
|
||||
Ни один AC не задет дельтой текстуально (AC1–AC7 не менялись), поэтому
|
||||
повторная проверка самих AC не требовалась по правилу §2.10 п.4 — они
|
||||
наследуются из §4 этого документа.
|
||||
|
||||
## 6. Что проверено и корректно
|
||||
|
||||
- Оба замечания r1 (H1, L1) закрыты по существу, не косметически: новые
|
||||
разделы отвечают на конкретные пункты DoR, а не констатируют «нет» без
|
||||
обоснования; исправленный адрес строки указывает на верный код.
|
||||
- Ревизия ТЗ поднята до 2 с корректной пометкой источника правки.
|
||||
- Дельта не расширяет скоуп, не меняет AC, не вводит новых терминов и не
|
||||
противоречит канону подсистемы (TOUCH-SUPPORT.md, USER-GUIDE.ru.md).
|
||||
- Продуктовый код и тесты в дельте отсутствуют, что и ожидается на этапе ТЗ.
|
||||
|
||||
## 7. Чего не проверял
|
||||
|
||||
- Диагноз C2/M1 и построчную сверку с `src/houseplan-card.ts` /
|
||||
`src/device-area-relocation.ts` — не перепроверял заново, дельта их не
|
||||
касается; см. §4 «Унаследовано из r1».
|
||||
- Автотесты, мутанты и код реализации — их не существует на этапе ТЗ, вне
|
||||
скоупа спек-ревью.
|
||||
- Гейты `typecheck`/`test`/`build`/`golden`/смоки — не прогонял: дельта этого
|
||||
раунда состоит из двух docs-коммитов (`bfe05bed`, `83005c3c`), продуктовый
|
||||
код не тронут ни разу с прошлого зелёного Validate на `83005c3c` (тот же
|
||||
SHA — это и есть HEAD; прогон уже зафиксирован в контексте задачи). Полные
|
||||
наборы гейтов — предмет код-ревью, а не ревью ТЗ.
|
||||
|
||||
## Итог
|
||||
|
||||
Обе находки r1 закрыты правкой текста, а не заявлением. Дельта локальна,
|
||||
дополнительных находок не выявлено. **Вердикт: зелёный.**
|
||||
Reference in New Issue
Block a user