Files
houseplan-card/docs/reviews/CODE-REVIEW-673-r2.md
T
2026-09-27 08:39:55 +00:00

13 KiB

CODE-REVIEW-673-r2

Материал: 2475403469650fb4f45181a5049f5fce5ef89d5a (issue/673-stage6-golden, HEAD == материал), делта — git diff 855bede537e7b7dd9bdd11aab1d1cbb4b6f6623d..HEAD Заход: r2 · блокирующих циклов израсходовано 1 из 4

Скоуп

Issue #673: пять сцен Stage 6 (утверждённых по эскизу приёмкой #649) переведены из диагностического экспорта STAGE6_ACCEPTANCE_SCENARIOS в канонический GOLDEN_SCENARIOS с baseline-файлами и защитным тестом. Механизм задачи разобран и принят полностью в r1 (жёлтый вердикт с единственной находкой Medium в скоупе). Этот раунд — проверка закрытия ровно той находки; продукт не меняется, User-Visible: no.

Материал раунда r1 и дельта

  • Документ r1: docs/reviews/CODE-REVIEW-673-r1.md, материал 855bede537e7b7dd9bdd11aab1d1cbb4b6f6623d.
  • Дельта: git diff 855bede537e7b7dd9bdd11aab1d1cbb4b6f6623d..HEAD (git log --oneline между ними):
    • 2aeda2df — «docs: review document for #673»: коммит публикации документа r1 в ветку (пайплайн, класс вне A/B, трейлеры Issue: #673 / User-Visible: no на месте). Правок продукта не несёт.
    • 24754034 — «docs: обновить fingerprint после ребейза #673» (автор): единственный правящий коммит, единственный файл — docs/images/screenshots.json (24 строки, только sourceFingerprint и одиннадцать sourceSha256; все одиннадцать imageSha256 не тронуты). Трейлеры Issue: #673 / User-Visible: no на месте.
  • Дельта локальна: один файл, одна правка, адресующая ровно находку r1. Полный повторный разбор механизма задачи (перенос сцен в GOLDEN_SCENARIOS, тест, мутант, baseline) не требуется — ничего из этого дельта не касается.
  • git log --oneline origin/dev..HEAD не показывает коммитов dev впереди материала r1 — рёбейза на ушедший вперёд dev не было, несмотря на формулировку сообщения коммита («после ребейза» относится к внутреннему шагу пайплайна, не к смещению базы).

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

Находка r1 Чем закрыта Где это видно
Medium: docs/images/screenshots.json — закоммиченный sourceFingerprint (843b7c30…) не совпадал с тем, что реально даёт visualFingerprint() на дереве материала; check-docs.mjs --screenshots=strict был красным на 855bede5 Коммит 24754034 заменил sourceFingerprint и все одиннадцать sourceSha256 на 4c475f0121499124efd0ae3233a06b05f0ab4a117adf17d942e792bcc7462238 git diff 855bede5..HEAD -- docs/images/screenshots.json; независимо пересчитал visualFingerprint(process.cwd()) на HEAD — результат побайтово совпал с новым значением в файле; node scripts/check-docs.mjs --external --screenshots=strict на HEAD — Documentation checks passed (7 files, 12 external links), exit 0 (прогнал сам, не со слов автора)
Low: SHA 557d4e38… в комментарии автора не резолвится в репозитории (снято ревьюером без правки) Не требовало действия автора — уже снято ревьюером в r1 с явной записью docs/reviews/CODE-REVIEW-673-r1.md, раздел «Low»

imageSha256 во всех одиннадцати сценариях не изменился между 855bede5 и HEAD — подтверждает заявление автора «PNG не менялись, обновлён только отпечаток исходников» (сверил построчно по диффу выше).

Унаследовано из r1 (без повторной проверки в этом раунде)

Дельта их не касается, повторно не перепроверялось:

  • Перенос STAGE6_ACCEPTANCE_SCENARIOS в GOLDEN_SCENARIOS, версия матрицы 66 — docs/reviews/CODE-REVIEW-673-r1.md, материал 855bede537e7b7dd9bdd11aab1d1cbb4b6f6623d.
  • Защитный тест test/golden-matrix.test.mjs («#673 Stage 6 designer acceptance scenes are canonical golden entries») + мутант stage6-acceptance-left-diagnostic-only, мутационно доказан красным в r1 вручную — там же.
  • golden:verify 184/184, включая пять isometric-stage6-* побайтово — там же.
  • Правки ACCEPTANCE.md / комментария в matrix.mjs (текст, не будущая работа) — там же.
  • Классификация коммитов по AGENTS.md (A/B/C/D), трейлеры Baseline-Reviewed-Local и его sha256-соответствие baselines-index.json — там же.
  • Условный AC про недетерминизм (два независимых захвата дали одинаковый SHA-256) — принят в r1 как факт по issue, не переисполнялся; в этом раунде тоже не переисполнялся, дельта его не касается.

Как проверялось в этом раунде

Validate на материале 24754034 зелёный (https://github.com/Matysh/houseplan-card/actions/runs/36306459071) — typecheck, npm test, npm run build + bundle-policy --verify доверяю этому прогону, отдельно ради них не перегонял (единственный изменённый файл — JSON-манифест метаданных скриншотов, не код и не тест).

Прогнано мной лично в этом раунде (адресно к находке r1, а не для галочки):

Гейт Команда Результат
Typecheck (доп. подтверждение, дёшево) npx tsc --noEmit чисто
Пересчёт отпечатка независимо от закоммиченного значения node -e "import('./scripts/source-fingerprint.mjs').then(m=>console.log(m.visualFingerprint(process.cwd())))" 4c475f0121499124efd0ae3233a06b05f0ab4a117adf17d942e792bcc7462238 — совпадает с записанным в docs/images/screenshots.json
Доки-гейт, строгий режим (ровно тот, что был красным в r1) node scripts/check-docs.mjs --external --screenshots=strict Documentation checks passed (7 files, 12 external links), exit 0
Режим гейта на текущей вершине (для полноты — какой режим реально действует в CI) node scripts/classify-changes.mjs --screenshots-mode warn (на HEAD по-прежнему нет Release:) — не имеет значения: strict тоже зелёный, находка закрыта не «отступлением в warn», а фактическим совпадением отпечатка
Диапазон делты, дерево чистое git status --short (пусто), git log --oneline origin/dev..HEAD подтверждает: рёбейза на ушедший вперёд dev не было, делта — ровно два коммита выше

Не прогонял и почему: npm test, npm run build, bundle-policy --verify, golden:verify, мутационную пробу — унаследованы от зелёного Validate на этом же SHA и от полного разбора r1 (механизм задачи дельта не трогает); pytest tests_backend, инварианты модели, performance, browser-смоки — как и в r1, диф этого коммита не трогает custom_components/**/*.py, геометрию, src/** или AC, называющий их.

AC · чем доказан · чем краснеет

Формальных AC issue дельта не добавляет и не меняет (см. таблицу в r1 — она не пересматривается). Единственный релевантный этому раунду пункт — процессное условие «оба гейта строгие на финальном дереве», проверенное исполнением выше; защитного мутационного свидетеля это условие не предполагает (не код, а согласованность вычисляемого значения с сохранённым — доказательство пересчётом и есть исчерпывающая проба, других состояний, которые нужно было бы уметь ронять, здесь нет).

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

  • Пересчитанный visualFingerprint() совпал с сохранённым значением на всех двенадцати местах, где оно встречается в файле (шапка + одиннадцать sourceSha256) — «одно число, один источник» восстановлено: до правки расходились ровно эти же двенадцать вхождений с прежним неверным значением.
  • imageSha256 — не тронуты, соответствует заявлению «PNG не менялись».
  • Трейлеры Issue: #673 / User-Visible: no на исправляющем коммите корректны и соответствуют характеру правки (метаданные, не поведение).
  • Дельта не расширяет и не сужает скоуп: единственный файл, единственная причина изменения.

Находки

Нет. Единственная находка r1 (Medium, docs/images/screenshots.json) закрыта и подтверждена исполнением, не со слов автора. High: 0, Medium: 0.

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

  • Повторный полный разбор механизма задачи (перенос сцен, тест, мутант, baseline, golden:verify) — не требовался: дельта их не касается, они разобраны и подтверждены исполнением в r1 (см. «Унаследовано из r1»).
  • pytest tests_backend, npm run invariants, performance-профили — как и в r1: вне AC этой задачи, дельта не трогает Python/геометрию.
  • Реальный повторный WSL-захват кадров — не требовался в этом раунде: правка не меняла ни один PNG (imageSha256 идентичны), только метаданные отпечатка исходников.

Вердикт

Зелёный. Находка r1 (Medium, устаревший sourceFingerprint) закрыта и подтверждена независимым пересчётом и строгим прогоном check-docs.mjs лично, а не заявлением автора. High: 0, Medium: 0. Цикл не образуется.


Материал раунда

  • Ветка: issue/673-stage6-golden, коммит 247540346965 — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет.
  • Дерево материала: 74d76079b3ba59c93e8838b55a6f3913c37ac81b
    git log --all --format='%H %T' | grep 74d76079b3ba
    
  • Тело issue: 2d5e8509154786e88d54451c677aae851abbbb856cf4fef150eeb92d232af154
  • Вердикт конвейера: green · High 0