mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
@@ -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
|
||||
Reference in New Issue
Block a user