Files
houseplan-card/legacy/reviews/v1.65.0/SPEC-REVIEW-204-r1.md
T
Claudeandclaude[bot] 0991c45374 fix(tools): архив переписывает относительные ссылки перенесённых документов (#682)
Ревью #682 r1, Medium: перенос добавляет документу уровень вложенности
(`docs/reviews/X.md` → `legacy/reviews/<тег>/X.md`, `docs/specs/` →
`legacy/specs/`), а относительные ссылки внутри перенесённых документов и в
соседях, ссылавшихся на них, никто не пересчитывал — на `97d19268` 53 битые
ссылки в 46 файлах (заявление «все 26 резолвятся» в `7feb6177` было верно
только до переноса документов ревью). Гейты архив не смотрят.

`reviews-archive.mjs`: `repairLinks` пересчитывает ссылку, если она не
резолвится от нового места, а цель находится от нового или старого места
через карту переносов; битая и до переноса ссылка не трогается. `--apply`
делает это само, `--repair-links=<rev>` — для всех переименований
`<rev>..HEAD`, `--check-links` печатает битые. Этим коммитом
`--repair-links=origin/dev` переписал ровно 53 ссылки в 46 файлах; остались
две прежние «...»-заглушки в CODE-REVIEW-448-r2 (битые и на dev). Тесты:
перенесённый документ, сосед со ссылкой в архив, ТЗ со ссылкой на позже
перенесённое ревью, битая-до-переноса не трогается, в `legacy/` битых нет;
мутант `reviews-archive-links-from-new-place-only`. PROCESS §2.10 и
DEVELOPMENT › Release называют переписывание и `--check-links`.

Issue: #682
User-Visible: no
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd
2026-09-27 22:10:47 +00:00

112 lines
9.0 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-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.