17 KiB
SPEC-REVIEW-159-r2
- Issue: https://github.com/Matysh/houseplan-card/issues/159
- ТЗ под ревью:
docs/specs/159-furniture-pack.md, commitd3d18b1b, обычный трек (неsmall/trivial) - Роль: ревьюер ТЗ (не автор), этап
S4-spec-review - Лимит циклов: обычный трек — 4 (PROCESS.md §4)
- Заход: r2 · блокирующих циклов израсходовано 1/4 (r1 — жёлтый)
Примечание к номеру захода. Метаданные задачи, переданные этому ревью,
называли текущий прогон «заход r1 · 0/4». Это не совпадает с фактическим
состоянием issue: в docs/reviews/SPEC-REVIEW-159-r1.md (ветка
issue/159-furniture-pack) уже лежит завершённый жёлтый вердикт на commit
a9d4d9e6, за ним следуют комментарии автора о его исправлении и явная фраза
«Повторно передаю на ревью по дельте r2» (issue comment #5454091450).
Согласно PROCESS.md §2.10 п.1, ненайденный/неверный SHA/номер раунда —
находка сама по себе; здесь она отражает несогласованность метаданных
конвейера с историей issue, а не дефект ТЗ. Ниже раунд посчитан по фактам
issue: r2, бюджет 1/4.
Скоуп ревью
Второй цикл ревью ТЗ #159. Предмет раунда — дельта git diff a9d4d9e6..d3d18b1b -- docs/specs/159-furniture-pack.md, то есть точечное исправление двух
находок r1 (провенанс/лицензия 77 SVG и внутренняя нестыковка формулировки
бюджета ≤18 KiB). Остальной текст ТЗ (сценарий, скоуп, каталог совместимости,
UX-контракт, модель данных, i18n, AC2–AC7, AC9, план автотестов, риски,
откат) дельту не затрагивает и наследуется из r1 без повторной проверки —
см. раздел «Унаследовано из r1».
Продуктовый код по-прежнему отсутствует на ветке — гейты (typecheck/test/
build) вне скоупа этапа ревью ТЗ (PROCESS.md §2.4/§8), как и в r1.
Закрытие раунда r1
| Находка r1 | Чем закрыта | Где это видно |
|---|---|---|
High-1 — провенанс/лицензия 77 SVG опирались на комментарий #issuecomment-5449707137 (nikitaevfz-commits, authorAssociation: NONE), который не содержал ни слова об авторстве или лицензии |
Спец теперь цитирует другой, реальный комментарий владельца — #issuecomment-5454085168 — и AC1/Scope переписаны под этот источник |
Diff docs/specs/159-furniture-pack.md строки 42–46 и AC1 (см. ниже); сам комментарий получен напрямую через gh api repos/Matysh/houseplan-card/issues/159/comments: author_association: OWNER, login: Matysh, текст «Я являюсь автором всех 77 SVG из архива houseplan-furniture-custom-0.3.0 и разрешаю House Plan использовать, изменять и распространять их на условиях MIT License репозитория без обязательной отдельной атрибуции в интерфейсе» — дословно то, что цитирует ТЗ |
| Medium-1 (в скоупе) — раздел «Производительность и bundle» описывал 18 KiB как цель с эскейп-хэтчем («пересогласовать продуктовую цену»), а AC8 — как обычный жёсткий критерий; противоречие оставляло код-ревью выбор из двух несовместимых трактовок | Раздел переписан: «Это блокирующий критерий задачи: при превышении реализация упрощает представление и повторяет замер. Поднять общий budget или принять превышение в #159 нельзя; иное решение требует отдельного изменения ТЗ и нового ревью до реализации» — эскейп-хэтч убран, формулировка теперь совпадает по смыслу с AC8 | Diff строки 247–253 (раздел «Производительность и bundle»); текст AC8 (строки 302–306 текущей редакции) не менялся и с новой формулировкой раздела больше не противоречит |
Low-1 (снят с запиской в r1, без обязательства править) — непоследовательное форматирование метода доказательства в заголовке AC6 (`unit`, smoke без кавычек) |
Не исправлено — и не требовалось: r1 явно снял находку без действия | Текущий текст: ### AC6 — локализации (unit, smoke) — то же форматирование, что и в r1; расхождение с решением r1 отсутствует |
Обе блокирующие/скоуп-находки закрыты по существу, а не заявлением автора:
цитата теперь ведёт на комментарий, реально содержащий заявленный факт (и с
верным author_association), а формулировка бюджета больше не допускает двух
прочтений.
Как проверялось (дельта r2)
- Найден вердикт r1 и SHA, на котором он получен:
docs/reviews/SPEC-REVIEW-159-r1.mdна веткеissue/159-furniture-pack, зафиксированный на commita9d4d9e6(сам документ называет SHA явно — в отличие от комментария-вердикта в issue, где SHA не назван; это отдельно отмечено выше). - Дельта объявлена и получена:
git diff a9d4d9e6..d3d18b1b -- docs/specs/159-furniture-pack.md(полный diff воспроизведён выше построчно). - Прочитаны все комментарии issue между r1 и r2: реакция владельца на High-1 (запрос явного публичного заявления), собственно заявление владельца, финальный комментарий о закрытии обеих находок и передаче на ревью «по дельте r2».
- Заявление-источник (
#issuecomment-5454085168) получено напрямую черезgh api repos/Matysh/houseplan-card/issues/159/comments(не через кэшgh issue view), проверены поляauthor_association(OWNER) иlogin(Matysh) — ссылка в ТЗ ведёт ровно на этот комментарий и текст совпадает дословно. - Перепроверен AC1 целиком (единственный AC, чья формулировка изменилась
дельтой): текст остаётся однозначным и доказуемым — код-ревью сможет
проверить (а) наличие публичного подтверждения по указанной ссылке,
(б) что vendored source соответствует зафиксированному архиву, (в) что
--checkподтверждает свежесть двух generated каталогов. Три независимые, проверяемые части, ни одна не требует веры автору на слово. - Перепроверен раздел «Производительность и bundle» и его согласованность с
AC8 (единственная другая точка, которую задело дельтой): новая
формулировка убирает альтернативный путь «пересогласовать цену» и явно
называет 18 KiB блокирующим критерием с единственным разрешённым выходом
при превышении (упростить и переизмерить) — совпадает с буквальным
прочтением AC8. Дополнительно проверено текущее состояние гейта:
dist/houseplan-assets.jsonнаHEAD(78c60207, до этой задачи) показываетinitialViewGzipBytes: 256828против потолкаINITIAL_VIEW_GZIP_BUDGET = 282000(scripts/bundle-budget.mjs) — то есть текущий запас ~25 KiB; бюджет задачи в 18 KiB для 44 SVG действительно тесен, но это риск реализации, явно описанный и обработанный самим ТЗ («реализация упрощает представление и повторяет замер»), а не дыра в тексте. - Проверена новая секция «Продуктово-правовое решение» — не вводит новых утверждений сверх уже проверенного пункта 4, корректно резюмирует закрытие правового вопроса и не оставляет открытых пунктов.
- Проверено, что дельта не затронула ни один другой раздел ТЗ (сценарий, scope/не-scope, каталог совместимости, контракт UX, рендер/безопасность, модель данных, generation/source of truth, i18n, план автотестов, риски, откат, блок «принято предположительно») и, соответственно, ни один другой AC (AC2–AC7, AC9) — их доказательства дельта не задевает, они наследуются из r1 без повторной проверки.
- Оценено, является ли дельта локальной по критериям §2.10: рёбейза на
ушедший вперёд
devне было (ветка короткоживущая,devза время цикла не продвигался в части, задевающей это ТЗ); контракт поведения не менялся (провенанс — не поведение, порог bundle — тот же порог, только однозначно сформулированный); новая подсистема не затронута; объём дельты (~20 строк из 375) несопоставим с объёмом задачи. Разбор по дельте — корректный объём для этого раунда.
Унаследовано из r1
Все находки и разделы ниже приняты из docs/reviews/SPEC-REVIEW-159-r1.md
(commit a9d4d9e6) без повторной проверки — дельта r2 их не касается:
- Соответствие §7.1: все обязательные разделы присутствуют, включая оба продуктовых (сценарий/персона, «что увидит»).
- Арифметика каталога (18 replace + 12 retained = 30 прежних; +26 add = 56)
сверена построчно с
src/furniture.ts/FURNITURE_GROUPSиdocs/FURNITURE.md§3. - Технический план (generated TS вместо runtime SVG import, раздельные
plan-art/menu-art графы,
--checkдетерминированность) обоснован архитектуройhouseplan-editor-runtime.tsи правилом «no user markup in config» изdocs/FURNITURE.md§9. - Цитата про backend forward-compatibility (символ не проверяется по
closed-list) дословно совпадает с
docs/FURNITURE.md§8. - Модель данных: persisted schema не меняется, соответствует
docs/CONFIG-COMPATIBILITY.md. - Не-скоуп корректно исключает то, что уже запрещено
docs/SCOPE.md. - Двухуровневая палитра «категории → варианты» укладывается в принцип
context tray из
docs/UX-MODES.md, не изобретает новый паттерн навигации. - Решение «даже категория с одним вариантом проходит второй экран» помечено как предположение, подлежащее оспариванию ревьюером, — процесс соблюдён; в r2 это решение не переоценивалось повторно.
- Трассируемость issue ↔ ТЗ двусторонняя (
docs/specs/README.md:126). - AC2–AC7, AC9 однозначны, у каждого назван метод доказательства; текст этих разделов дельтой не менялся.
Находки (r2)
Ни одной новой находки High/Medium. Обе находки r1 закрыты по существу (см. таблицу выше). Low-1 из r1 остался в прежнем, сознательно принятом состоянии.
Что проверено и корректно (дополнительно к унаследованному)
- Источник провенанса — теперь настоящий комментарий владельца с верным
author_association: OWNER, содержащий дословно то заявление, которое ТЗ ему приписывает. - Формулировка бюджета 18 KiB согласована между описательным разделом и AC8; оба места теперь читаются одинаково — как жёсткий блокирующий критерий без альтернативного «мягкого» пути.
- Новая секция «Продуктово-правовое решение» не вводит противоречий и не оставляет открытых правовых/продуктовых вопросов.
Чего не проверял
- То же, что не проверялось в r1 (не в скоупе этапа ТЗ): содержимое архива
houseplan-furniture-custom-0.3.0.zipи все 77 SVG построчно; фактическая величина gzip-прироста; golden/визуальные сцены; юнит/смоук-тесты — кода ещё нет. - Не проверялась подлинность личности
Matyshкак аккаунта владельца за пределами того, что гарантирует GitHub полемauthor_association: OWNER(это тот же уровень доверия, на котором стоит весь процесс — метки и роль ставит только тот, у кого есть право записи). - Не пересчитывался остаток бюджета
bundle:budgetдля будущей реализации — указанные 256 828 / 282 000 B взяты из текущегоdist/houseplan-assets.jsonнаHEADвне этой задачи и приведены только как контекст тесноты бюджета, а не как проверка AC8 (AC8 проверяется в код-ревью после реализации).
Вердикт
High: 0 · Medium: 0 (обе находки r1 закрыты; Low-1 остаётся снятым без правки, как решено в r1).
Зелёный. ТЗ готово к разработке: провенанс/лицензия 77 SVG теперь
опираются на реальное публичное подтверждение владельца с верной
author_association, а формулировка bundle-бюджета в 18 KiB однозначна и
совпадает с текстом AC8. Остальная часть ТЗ (наследуется из r1) остаётся
технически выполнимой и проверяемой.
Вердикт: зелёный · заход r2 · блокирующих циклов 1/4 · High: 0 · Medium: 0