mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-30 11:49:16 +00:00
@@ -0,0 +1,111 @@
|
||||
# SPEC-REVIEW-204-r1
|
||||
|
||||
- Issue: [#204](https://github.com/Matysh/houseplan-card/issues/204)
|
||||
- ТЗ: [docs/specs/204-space-create-display-defaults.md](../specs/204-space-create-display-defaults.md)
|
||||
- Ветка: `issue/204-space-create-display-defaults`, коммит `f703242`
|
||||
- Трек: обычный (метка `small` не выставлена — файл ТЗ обязателен и присутствует)
|
||||
- Вердикт: **зелёный**
|
||||
|
||||
## Скоуп ревью
|
||||
|
||||
Этап `spec` по PROCESS.md §2.4: проверяется ТЗ на выполнимость, однозначность
|
||||
AC и отсутствие догадок, выданных за решения. Продуктовый код не менялся —
|
||||
диапазон `origin/dev..HEAD` содержит один docs-коммит (`204-*.md` +
|
||||
запись в `docs/specs/README.md`), что соответствует стадии `S4-spec-review`.
|
||||
|
||||
## Как проверялось
|
||||
|
||||
1. Прочитаны в порядке: `docs/SCOPE.md`, `AGENTS.md`, `PROCESS.md` (§2.4, §7.1,
|
||||
§7.2), тело issue #204 и оба комментария (аналитика+вопросы, ТЗ готово),
|
||||
timeline issue (`gh api .../timeline`) — подтверждено, что `blocked` снят
|
||||
владельцем (17:08:25) до публикации ТЗ (17:12:03), т.е. Q1/Q2 закрыты не
|
||||
умолчанием, а явным действием с правом записи.
|
||||
2. Сверены обязательные разделы §7.1 (сценарий, что человек увидит, проблема,
|
||||
скоуп/не-скоуп, контракт, UX, данные/миграция, i18n, AC, тест-план, риски,
|
||||
откат, release-артефакты) — все присутствуют и в правильном порядке.
|
||||
3. Корневая причина ТЗ (§3) сверена построчно с кодом на ветке:
|
||||
- `src/houseplan-card.ts:13232-13251` (`_openSpaceDialog('create')`) —
|
||||
`showBorders:false, showNames:false` подтверждено;
|
||||
- `src/houseplan-card.ts:13605-13625` (`_openNextImport`) — тот же дефолт
|
||||
подтверждён;
|
||||
- `src/houseplan-card.ts:19521,19548` — радиокнопки File/Draw меняют только
|
||||
`source`, переключатели не трогают;
|
||||
- `src/houseplan-card.ts:13476-13477` — скрытая ветка
|
||||
`show_borders: draw && d.mode === 'create' ? true : d.showBorders` (и
|
||||
аналогично `show_names`) подтверждена буквально;
|
||||
- `src/logic.ts:1238-1244` (`spaceDisplayOf`) — реальный runtime-дефолт
|
||||
`s.show_borders ?? noPlan` подтверждает, зачем скрытая ветка вообще
|
||||
появилась (сохранить видимый план без фона с включённой разметкой), и
|
||||
объясняет, почему File-create с `false/false` не деградирует: `plan_url`
|
||||
на этот момент уже отличен от null, `noPlan` не участвует.
|
||||
Причина не является догадкой — она voспроизведена по коду, а не
|
||||
предположена.
|
||||
4. Терминология переключателей сверена с `src/i18n/ru.json:353-354`
|
||||
(`"Всегда отображать границы комнат"`, `"Отображать названия комнат
|
||||
(перетаскиваются)"`) — совпадает буквально с телом issue и с ТЗ.
|
||||
`docs/UX-MODES.md` (таблица «Display section», строки 119-147) не
|
||||
противоречит: она описывает общий backend-дефолт (`?? noPlan`), ТЗ трогает
|
||||
только create-dialog UX и Save, а не резолвер — это explicitно вынесено в
|
||||
«Non-scope» (§5) и совпадает с уже закрытым #203 (тот же резолвер, другое
|
||||
поле, не пересекается).
|
||||
5. Проверено, что #203 закрыт (`state: CLOSED`) и правда не про создание
|
||||
пространства — исключает риск дублирования и конфликта non-scope.
|
||||
6. Проверены трейлеры коммита `f703242`: `Issue: #204`, `User-Visible: no` —
|
||||
корректно для docs-only коммита на этапе spec.
|
||||
7. Проверена запись в `docs/specs/README.md` — индекс обновлён, ссылка на
|
||||
правильный файл, порядок строк в таблице уже был не отсортирован до этого
|
||||
коммита (не новая проблема, см. «Не находки»).
|
||||
|
||||
## Находки
|
||||
|
||||
Нет ни High, ни Medium, ни Low.
|
||||
|
||||
## Что проверено и корректно
|
||||
|
||||
- **Персона и сценарий (§1)**: администратор, создание пространства / шаг
|
||||
Floors-Areas onboarding — соответствует J4/J6 `docs/SCOPE.md`, скоуп по
|
||||
размеру задачи (одна поверхность — create-dialog) корректен для полного
|
||||
трека без метки `small` (сложность 4/10 по аналитике, что уже выше порога
|
||||
`small` ≤3 — трек выбран верно).
|
||||
- **До/после (§2)** сформулировано в пользовательских терминах, без деталей
|
||||
реализации.
|
||||
- **Контракт (§6)** описывает конечный автомат `displayTouched` без
|
||||
противоречий: 6 пунктов покрывают init, source-switch до/после touch,
|
||||
Save, Cancel — не осталось необозначенных переходов (File→Draw→File с
|
||||
touched, повторный File→Draw и т.д. выводятся из п.2 и п.4 однозначно).
|
||||
- **AC1–AC10 (§9)** пронумерованы, каждый привязан к способу доказательства
|
||||
(smoke/unit/mutation/regression), формулировки проверяемы без домысливания
|
||||
— включая мутационный гейт AC9, что соответствует существующей практике
|
||||
проекта (`scripts/mutation-gate.mjs`, см. `docs/TESTING.md`), а не новой
|
||||
выдумке.
|
||||
- **Non-scope (§5)** явно исключает резолвер #203, миграцию, i18n, дизайн
|
||||
диалога — предотвращает расширение скоупа при реализации.
|
||||
- **Предположения (§13)** отделены от решений: имя `displayTouched`, выбор
|
||||
smoke-файла и общий helper прямо помечены «технически, менять свободно»,
|
||||
продуктовые Q1/Q2 закрыты явным ответом владельца (снятие `blocked`) до
|
||||
публикации ТЗ.
|
||||
- **Release-артефакты (§12)**: `User-Visible: yes` для будущей реализации
|
||||
корректно предполагает оба changelog, `USER-GUIDE.ru.md`, `TESTING.md`,
|
||||
`STATUS.md` — соответствует DoD §2.5.
|
||||
- **Откат (§12)**: явно описан (revert коммита возвращает скрытую подмену) —
|
||||
пункт DoR «откат» закрыт.
|
||||
|
||||
## Чего не проверял
|
||||
|
||||
- Не проверялась реализация — её ещё нет (стадия spec, диапазон дальше
|
||||
докс-коммита пуст). Гейты `typecheck`/`test`/`build` не запускались:
|
||||
предмета для них на этой стадии нет (класс A/B файлы не менялись).
|
||||
- Не проверялся сам механизм существующего смока
|
||||
`demo/smoke_space_settings.mjs` на предмет того, легко ли он расширяется
|
||||
под AC1–AC8 — это техническое решение автора кода (§13 п.3 ТЗ), не предмет
|
||||
ревью ТЗ.
|
||||
- Не запрашивался `docs/specs/040-floor-area-onboarding.md` на полноту вне
|
||||
грепа по `show_borders/show_names/default` — грепом подтверждено отсутствие
|
||||
конфликтующих утверждений про defaults, дальше документ не читался целиком.
|
||||
|
||||
## Не находки (сознательно не заведены)
|
||||
|
||||
- Таблица `docs/specs/README.md` уже была не отсортирована по номеру issue до
|
||||
этого коммита (`150` после `157`, `201/203/186` в произвольном порядке) —
|
||||
вставка `#204` между `#197` и `#201` не создаёт новую проблему, это
|
||||
косметика существующего файла, не relevant к ТЗ #204.
|
||||
Reference in New Issue
Block a user