Files
houseplan-card/docs/reviews/SPEC-REVIEW-239-r2.md
T
2026-08-22 10:03:10 +00:00

11 KiB
Raw Blame History

SPEC-REVIEW-239-r2

  • Issue: https://github.com/Matysh/houseplan-card/issues/239
  • ТЗ: docs/specs/239-grid-scale-invariance.md
  • Ветка / SHA: issue/239-grid-scale-invariance @ e8b3c86
  • Этап: spec (PROCESS.md §2.4) · трек: обычный
  • Заход: r2 · блокирующих циклов израсходовано 1/4 (r1 — жёлтый, потратил цикл; этот заход зелёный и цикла не образует, PROCESS.md §4, #227)
  • Ревьюер: Claude, роль «ревьюер ТЗ»

Скоуп

Оценивалась дельта r2 — ровно один docs-коммит e8b3c86 (26 строк diff в docs/specs/239-grid-scale-invariance.md), закрывающий две находки r1 (M1, L1). Дельта локальна: правка добрасывает доказательную таблицу и i18n-текст в уже принятый по продуктовой рамке документ, не меняет ни диагноз §3, ни классификацию §6, ни контракт поверхностей §8, ни AC1–AC16 по существу. Полный повторный разбор всего документа не требуется — применяется PROCESS.md §2.9/§2.10.

Код не менялся: git diff origin/dev...HEAD --stat — три файла, все docs/** (спека, README реестра, обзорный документ r1).

Как проверялось

  1. Найден вердикт r1 в комментариях issue: жёлтый, заход r1, SHA 4c065f5, документ docs/reviews/SPEC-REVIEW-239-r1.md (SHA в вердикте не был назван явно текстом — восстановлен по хэндоффу автора «Коммит 4c065f5» и по git log, где 4c065f5 — последний спек-коммит перед комментарием с вердиктом).
  2. Дельта объявлена и получена: git diff 4c065f5..e8b3c86 -- docs/specs/239-grid-scale-invariance.md — два блока: §10 (i18n-ключи) и новый §13.1 (матрица доказательств AC1–AC16).
  3. По каждой находке r1 проверено построчно, чем именно она закрыта (см. раздел «Закрытие раунда r1» ниже) — не по заявлению автора в хэндоффе, а по самому тексту документа.
  4. Перечитаны затронутые дельтой разделы в актуальном контексте всего документа: §9.2 (текст подписей), §10, §13 (AC13/AC14/AC16 целиком), §14 (план автотестов), §16 (риски), §19 (список «assumed, change freely»), чтобы убедиться в отсутствии противоречий между новым текстом и остальным ТЗ.
  5. Сверены формулировки новой матрицы с существующим кодом там, где это проверяемо на этапе spec:
    • src/i18n/en.json:373-374, src/i18n/ru.json:373-374 — ключи space.scale_label / space.scale_unit и их текущий текст («cm per cell» / «см на клетку») существуют буквально так, как утверждает новый §10 — совпадение, не догадка;
    • space.scale_unit_imperial — новый ключ, кода ещё нет, что ожидаемо на этапе spec.
  6. Гейты, применимые к docs-only дельте класса C: node scripts/check-docs.mjs → Documentation checks passed (7 files, 10 external links); git diff 4c065f5..e8b3c86 --check → чисто (нет whitespace-ошибок). npx tsc --noEmit / npm test / npm run build не запускались: git diff origin/dev...HEAD --stat подтверждает, что весь диапазон изменений — три файла в docs/**, класса A/B файлов нет, предмета для этих гейтов не существует.

Закрытие раунда r1

Находка r1 Чем закрыта Где это видно
M1 (Medium) — §13 не указывает способ доказательства для AC13, AC14, AC16, не восстанавливается из §14/§16 Добавлен новый раздел §13.1 «Матрица доказательств» с одной строкой на каждый AC1–AC16, включая явные записи для AC13 (code review exact scale-1 attributes + golden:verify как предрелизный, не как отдельно принимаемый baseline + docs provenance), AC14 (targeted touch/opening smoke: перечислены tap/pan/pinch/second-pointer/pointercancel/suppressed click раздельно, плюс edge hit-points из AC3) и AC16 (check-docs + code review обоих changelog/guide + screenshot provenance) docs/specs/239-grid-scale-invariance.md:377-396, три строки таблицы для AC13/AC14/AC16
L1 (Low) — §10 не называет конкретный текст/ключ imperial-подписи внутри самого i18n-раздела, а отсылает к §9.2 §10 теперь сам перечисляет оба ключа и оба текста (space.scale_unit metric, новый space.scale_unit_imperial, space.scale_label для label), не отсылая читателя к другому разделу — соответствует конвенции остальных спеков (#157, #167, #094), на которую ссылался L1 docs/specs/239-grid-scale-invariance.md:282-284

Обе правки точечные и не задевают ничего за пределами названных находок — дельта в 26 строк ровно совпадает с объёмом, который требовали M1 и L1.

Унаследовано из r1

Всё содержательное решение ТЗ, кроме двух правок выше, принято без повторной проверки по итогам r1 (docs/reviews/SPEC-REVIEW-239-r1.md @ 4c065f5):

  • продуктовая рамка §1–2, соответствие J4/J6 из docs/SCOPE.md, отсутствие продуктовых вопросов владельцу — не пересматривалось;
  • диагноз §3 (построчная сверка с кодом: opening-symbol.ts, ISO_WALL_HEIGHT/ISO_FLOOR_EDGE_HEIGHT, cellCm: 5 в manual create и floors-import, HATCH_BASE_STEP_UNITS, iconUnit/iconCqw) — дельта их не касается, повторная построчная сверка не проводилась;
  • классификация размеров §6 и контракт поверхностей §8 — внутренняя непротиворечивость подтверждена в r1 алгебраически (iconCqw/iconUnit), дельта их текст не меняет;
  • AC1–AC12, AC15 сами по себе (формулировки) — признаны однозначными и алгебраически проверяемыми в r1, дельта их не редактировала, только добавила способ доказательства в §13.1;
  • откат §18 и release-артефакты §17 — признаны полными в r1, не менялись;
  • риски §16 — признаны содержательными в r1, не менялись.

Находки

Нет находок ни в дельте, ни в местах, которые дельта задевает (§9.2, §10, §13, §13.1, §14, §16, §19 перечитаны целиком на непротиворечивость с новым текстом — противоречий не найдено).

Что проверено и корректно

  • Обе находки r1 закрыты по существу, а не переформулированы: M1 — таблица покрывает все 16 AC, а не только три названных, и формулировки строк буквально соответствуют тексту соответствующего AC (например, строка AC14 отдельно называет «tap остаётся действием» и отдельно — «pan/pinch/... не выполняют action», что закрывает обе половины критерия, на неполноту которых указывал r1); L1 — ключи и тексты названы в самом §10, дублирование с §9.2 не противоречиво (тексты идентичны).
  • Новая матрица §13.1 согласована с остальным документом: ссылки на конкретные файлы (test/grid-scale.test.mjs, demo/smoke_grid_scale_invariance.mjs, demo/smoke_space_scale_defaults.mjs) совпадают с именами, уже введёнными в §14.1/§14.2; ссылка на mutation grid-scale-physical-double-scaled в строке AC5 совпадает со строкой таблицы §15; разделение «code review» vs «предрелизный гейт» для AC13/AC15 согласовано с §12 и §14.3.
  • Новый i18n-текст §10 совпадает с уже существующим кодом для действующего ключа (space.scale_unit/space.scale_label, проверено по src/i18n/en.json/ru.json) — не введено расхождение с реальностью для той части, которая уже реализована.
  • Докс-гейт зелёный: node scripts/check-docs.mjs → Documentation checks passed (7 files, 10 external links); git diff --check на дельте — чисто.

Чего не проверял

  • Полный повторный разбор диагноза §3, классификации §6, контракта поверхностей §8 и AC1–AC12/AC15 по существу — дельта их не касается, унаследовано из r1 (см. выше), правило §2.9/§2.10.
  • npx tsc --noEmit, npm test, npm run build — не запускались: диапазон диффа не содержит файлов класса A/B, гейты не имеют предмета проверки.
  • Реализация helper'ов, тестов и smoke-файлов, названных в §13.1/§14 — кода нет, оценивалась только логическая полнота ссылок на этапе spec.
  • Golden/browser smoke/performance — не запускались и не должны: этап spec, реализации нет, эти гейты относятся к предрелизному прогону (PROCESS.md §8).