docs: review document for #673

Issue: #673
User-Visible: no
This commit is contained in:
claude[bot]
2026-09-27 08:39:55 +00:00
parent 2475403469
commit e62dec74cd
+146
View File
@@ -0,0 +1,146 @@
# 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. Цикл не образуется.
---
<!-- material-anchors: сгенерировано конвейером (#414) -->
## Материал раунда
- Ветка: `issue/673-stage6-golden`, коммит `247540346965` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет.
- Дерево материала: `74d76079b3ba59c93e8838b55a6f3913c37ac81b`
```
git log --all --format='%H %T' | grep 74d76079b3ba
```
- Тело issue: `2d5e8509154786e88d54451c677aae851abbbb856cf4fef150eeb92d232af154`
- Вердикт конвейера: `green` · High 0