# SPEC-REVIEW-443-r2 - Issue: https://github.com/Matysh/houseplan-card/issues/443 - Этап: ревью ТЗ (PROCESS.md §2.4) - Заход: r2, блокирующих циклов израсходовано 1 из 4 - Материал: `docs/specs/443-vacuum-route-polish.md` на ветке `issue/443-vacuum-route-polish`, коммит `0d8cfffb` (Validate на этом SHA зелёный — https://github.com/Matysh/houseplan-card/actions/runs/33800001581) - Предыдущий раунд: r1, жёлтый, SHA `a488e898`, документ `docs/reviews/SPEC-REVIEW-443-r1.md` - Дельта: `git diff a488e898..0d8cfffb -- docs/specs/443-vacuum-route-polish.md` — 12 строк в двух разделах («Карта реализации», «Release-артефакты»), один коммит `0d8cfffb` ("docs: address spec review for vacuum routes") ## Почему разбор сокращён, а не заново Дельта строго локальна: правка целиком лежит в тексте документа, не трогает разделы «Сценарий», «Что человек увидит», «Контракт» (§1–§4), список AC1–AC8, «Не-скоуп», «План тестирования» или «Принятые предположения». Автор прямо заявил в комментарии к issue: «Контракт и acceptance criteria не менялись» — и `git diff` это подтверждает построчно: единственные изменённые строки — путь `src/i18n/support/{en,ru,de,fr}.json` в карте реализации и четыре новые строки в разделе «Release-артефакты» про `docs/CONFIG-COMPATIBILITY.md` и `docs/USER-GUIDE.ru.md`. Продуктовый контракт не менялся, новая подсистема не затронута, ребейза не было (SHA r1 — прямой предок SHA r2, `git merge-base a488e898 0d8cfffb` = `a488e898`). Оснований для полного повторного разбора нет — разбор ограничен закрытием двух находок r1 и беглой проверкой, что дельта не задела ничего, признанного выполненным в r1. ## Закрытие раунда r1 | Находка r1 | Чем закрыта | Где это видно | |---|---|---| | Medium: раздел «Release-артефакты» не называет `docs/CONFIG-COMPATIBILITY.md` и `docs/USER-GUIDE.ru.md` | Оба документа добавлены и в «Карту реализации», и в «Release-артефакты», с конкретной формулировкой правки (различие absent/`null`/explicit-empty/`[]` для первого; новая группа «Пространство удалено» для второго) | `docs/specs/443-vacuum-route-polish.md:279-281` (карта реализации), `:301-305` (release-артефакты) | | Low: путь i18n `src/locales/{en,ru,de,fr}.ts` не существует | Путь исправлен на фактический `src/i18n/support/{en,ru,de,fr}.json` | `docs/specs/443-vacuum-route-polish.md:275` | Обе правки текстовые, ограничены заявленными строками, AC/контракт/скоуп не менялись — соответствует тому, что фикс требовался «чисто текстовый». ## Унаследовано из r1 Всё содержательное сверение кода/документов из r1 наследуется без повторной проверки — дельта r2 не касается ни одного из проверенных там утверждений: - обе (frontend/backend) причины пункта (а) issue, `kept_routes or None` в export, детерминированный (но не сгруппированный) comparator пункта (б), полный скан ростера в `_renderVacuums` пункта (в) — построчно сверены с `origin/dev`; - контракт §1 (4-состояния authority), §2 (single-space export), §3 (группа удалённых пространств), §4 (vacuum-only snapshot) — однозначны, не оставляют выбора автору; - все восемь AC пронумерованы, у каждого указан способ доказательства, включая обязательный отрицательный прогон в AC2; - план автотестов называет два новых мутанта `scripts/mutation-gate.mjs`; - «Принятые предположения» отделяют технические решения от уже принятых владельцем фактов, догадка за факт не выдаётся; - открытых продуктовых вопросов нет; - i18n-текст группы не изобретён с нуля (`vac.route_status_missing_space`); - «одно число — один источник» неприменимо (задача не вводит новую пользовательскую величину) — рассмотрено и отклонено в r1, не заново. Источник: `docs/reviews/SPEC-REVIEW-443-r1.md`, SHA `a488e898`. ## Находки r2 Нет. Обе находки r1 закрыты текстуально и точно, новых текстовых проблем в делте не внесено. ## Что проверено в r2 - Полный `git diff a488e898..0d8cfffb` — единственный тронутый файл документов класса-C — `docs/specs/443-vacuum-route-polish.md` (плюс сам документ ревью r1, который конвейер закоммитил как артефакт — его содержание не является предметом проверки автора). - Раздел «Карта реализации» (`docs/specs/443-vacuum-route-polish.md:269-281`) и «Release-артефакты» (`:296-311`) прочитаны целиком в актуальном состоянии, не только по диффу — формулировки конкретны («различает absent, `null`, explicit empty и non-empty», «новую видимую группу … в Device editor»), не общие фразы. - `docs/specs/README.md` не затронут дельтой — трассируемость §7.1, подтверждённая в r1, не могла испортиться этой правкой. - Merge-base SHA r1/r2 подтверждает отсутствие ребейза (`git merge-base a488e898 0d8cfffb` = `a488e898`). ## Чего не проверял - Не перечитывал заново разделы «Сценарий», «Что человек увидит», «Контракт» §1–§4, AC1–AC8, «Не-скоуп», «План тестирования», «Принятые предположения» — дельта их не касается, наследуются из r1 (см. выше). - Не запускал `typecheck`/`test`/`build` — этап ревью ТЗ, диапазон изменений только `docs/specs/**`, Validate уже зелёный на этом SHA (см. материал выше); продуктового кода по-прежнему нет. - Не проверял golden/смоки/perf/инварианты модели — относятся к implementation loop и предрелизному гейту, кода ещё нет. ## Материал раунда - SHA: `0d8cfffb` (ветка `issue/443-vacuum-route-polish`) - Дерево ТЗ: `docs/specs/443-vacuum-route-polish.md` - Round: r2, budget циклов 1/4 - Предыдущий раунд: r1, SHA `a488e898`, `docs/reviews/SPEC-REVIEW-443-r1.md` --- ## Материал раунда - Ветка: `issue/443-vacuum-route-polish`, коммит `0d8cfffb9286` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет. - Дерево материала: `b899b29a6fbe75966853a43a6282cff22c146762` ``` git log --all --format='%H %T' | grep b899b29a6fbe ``` - ТЗ `docs/specs/443-vacuum-route-polish.md`, блоб `eb5bc721764abebb38a642cf9e450f52c6e608d7` ``` git log --all --find-object=eb5bc721764abebb38a642cf9e450f52c6e608d7 -- docs/specs/443-vacuum-route-polish.md ```