13 KiB
CODE-REVIEW-448-r2
- Issue: #448
- Материал:
git diff 658f284b..HEAD(докоммитыed4ac972), плюс наследуемый диапазон r1origin/dev..658f284b - SHA материала:
ed4ac972b3784a0120710e81f3392907709fb5dc(свереноgit rev-parse HEADперед выводом) - Заход: r2 (код-ревью) · блокирующих циклов израсходовано 1 из 4 — r1 был жёлтым (тратит бюджет), это ревью зелёное и цикла не образует (§4, #227)
- Вердикт: зелёный
Скоуп раунда
Разбор по дельте (PROCESS.md §2.9/2.10): r1 (docs/reviews/CODE-REVIEW-448-r1.md, SHA 658f284b) вернул жёлтый вердикт с двумя Medium в скоупе. Автор ответил единственным коммитом:
ed4ac972—docs: close alpha review findings(Issue: #448,User-Visible: no) — правитdocs/RELEASE-NOTES.mdиAGENTS.md, плюс кладёт в деревоdocs/reviews/CODE-REVIEW-448-r1.md(артефакт публикации r1, не предмет этого раунда).
Класс изменения — C (документация): ни один файл класса A (src/**, custom_components/houseplan/**/*.py, manifest.json, hacs.json, i18n) и класса B (тесты/скрипты/CI) не тронут. git diff 658f284b..HEAD --stat подтверждает: только AGENTS.md, docs/RELEASE-NOTES.md и добавление docs/reviews/CODE-REVIEW-448-r1.md. Продуктовый код, тесты и бандл, зелёные в r1, дельтой не задеты — Validate на ed4ac972 зелёный (см. вводные условия раунда), пересобирать и перегонять typecheck/test/build не требуется: диф не трогает src/**, test/**, scripts/**.
Закрытие раунда r1
| Находка r1 | Чем закрыта | Где это видно |
|---|---|---|
M1 — docs/RELEASE-NOTES.md молча потерял пункт #447 в обеих языковых секциях (заменён пунктом #448 вместо добавления) |
Пункт #447 возвращён в обе секции; чтобы удержать лимит «не более четырёх пунктов» (проверяется validateReleaseNotes из scripts/release-contract.mjs, тест test/release-contract.test.mjs:111 — /at most four bullets/), #152 и #447 объединены в один пункт с деталями обеих задач и обеими ссылками |
git diff 658f284b..HEAD -- docs/RELEASE-NOTES.md: RU-секция «## Основное» и EN-секция «## Highlights» — по 4 пункта каждая, [#152](...) и [#447](...) присутствуют в обеих; grep -n '#447' docs/RELEASE-NOTES.md → 2 совпадения (RU+EN) |
M2 — AGENTS.md §«Labs flags» не обновлён: описывал активацию ?hp-labs=<id>/-<id>/off и обязательные since/expires, которых в контракте hp_alpha больше нет |
Раздел переименован в «Alpha experiments», текст переписан под единый hp_alpha=1/0 (query/hash, persisted), явно называет отсутствие per-feature ключей и since/expires, фиксирует, что legacy hp-labs/houseplan_card_labs_v1 игнорируются и не мигрируются |
git diff 658f284b..HEAD -- AGENTS.md (строки 402-416); чтением сверено с фактическим LabsFlag в src/labs.ts (лишён since/expires уже в 169fed01, дельта этого раунда код не трогает) — текст раздела теперь соответствует коду |
Обе находки r1 были Medium в скоупе задачи — по PROCESS.md §2.7/§4 отдельный issue не заводился, чинились в этой же задаче; здесь подтверждено предметно, а не по заявлению автора.
Унаследовано из r1
Без повторной проверки — документ docs/reviews/CODE-REVIEW-448-r1.md, материал SHA 658f284b44610fbb583cc795e12a3b4fae798f9c (дерево 417fc35379c08ddc060ba43fd37e6c5b835d6446):
- Все 13 AC (AC1–AC13), включая три защитных (AC4, AC6, AC9) и таблицу «чем краснеет» — дельта этого раунда не трогает
src/labs.ts,src/houseplan-card.tsни один тестовый/smoke/golden-файл, поэтому доказательства AC не могли быть задеты. - Гейты r1:
npx tsc --noEmit,npm test(1907/1908, 1 skipped),npm run build+ побайтовая сверкаdist↔custom_components/houseplan/frontend,bundle-tree.mjs,bundle:sync,no-new-any.mjs,check-docs.mjs,bundle:budget, 10 прямых smoke-совпадений +smoke_isometric_contract/smoke_isometric_live_touch,npm run golden:verify(157/157, включая 7 isometric-сценариев) — все зелёные на658f284b, дельта их не инвалидирует (docs-only diff внеsrc/**/test/**). - Раздел «Что проверено и корректно» r1 (precedence резолвера, единственный источник
LabsSnapshot.alpha→active, kiosk/редакторы без проекции, регрессионный барьер golden-harness, запрет legacy-полей в матрице контрактным тестом, changelog RU+EN в том же коммите169fed01). - Раздел «Чего не проверял» r1 (
benchmark:large-house-isometricне запускался — тяжёлый гейт вне минимума;pytest tests_backendне запускался — Python не тронут;model-invariants.mjsне запускался — геометрия/layout/marker.space/open_spansне тронуты; 209/221 смоков не относятся к диффу; AC12 доказан только чтением).
Как проверялось в этом раунде — гейты
| Гейт | Команда | Результат |
|---|---|---|
| Дешёвые гейты (typecheck/test/build) | не перегонялись | Validate зелёный на точном SHA ed4ac972 (ссылка на прогон дана как условие раунда); диф этого раунда не трогает src/**/test/**/scripts/**, перегонять нечего |
node scripts/check-docs.mjs |
автор: node scripts/check-docs.mjs → Documentation checks passed (коммит ed4ac972) |
pass — не обязателен для этого раунда (diff не трогает src/**), но выполнен автором и подтверждён |
node --test test/release-contract.test.mjs |
автор: 10/10 pass | подтверждает контракт validateReleaseNotes (маркер тега, RU/EN эквивалентность, лимит 4 пунктов) на синтетической фикстуре теста, не на самом docs/RELEASE-NOTES.md — фактический файл сверен ревьюером вручную (см. ниже) |
Ручная сверка docs/RELEASE-NOTES.md |
sed -n '1,40p' docs/RELEASE-NOTES.md, grep -n '#447' |
RU и EN секции — по 4 пункта, #447 присутствует в обеих, RU/EN списки эквивалентны по числу пунктов, маркер тега <!-- release: v1.72.0-beta.1 --> и ссылки на CHANGELOG не изменены |
Ручная сверка AGENTS.md |
git diff 658f284b..HEAD -- AGENTS.md, grep по всему дереву на якорь Labs flags/#labs-flags |
новый текст не содержит устаревших since/expires/?hp-labs; ссылок на старый заголовок раздела из активных (не-исторических) документов не найдено — только в замороженных ревью SPEC-REVIEW-203-* (исторический артефакт другой задачи, не правится) |
| Smoke/golden/backend/invariants | не перегонялись | не относятся к дельте — дельта не содержит кода, геометрии, Python или визуальных изменений |
Защитных AC в дельте этого раунда нет (M1/M2 — не защитные находки: несоответствие текста документации фактическому контракту, не guard/limit/invariant), таблица «чем краснеет» не требуется по исключению PROCESS.md §2.7.
Находки
Не найдено. High: 0, Medium: 0, Low: 0.
Что проверено и корректно
- Обе находки r1 закрыты по существу, а не текстуально: M1 — числовое ограничение «не более четырёх пунктов» (тест
release-contract.test.mjs:111) соблюдено объединением, а не удалением содержимого; #447 не потерялся дважды. M2 — разделAGENTS.mdтеперь описывает ровно тот контракт, что в коде (hp_alpha, отсутствиеsince/expires, non-migration legacy). - Дельта не расширяет скоуп задачи (PROCESS.md §2.6): оба файла были прямо названы находками r1, новых поверхностей не появилось.
- Трейлеры коммита
ed4ac972:Issue: #448,User-Visible: no— корректно для чисто документационной правки без нового пользовательского поведения. - RU/EN версии
RELEASE-NOTES.mdостаются симметричными по структуре и содержанию (одно и то же объединение #152+#447 сделано в обеих секциях).
Чего не проверял
- Не перегонял
tsc --noEmit,npm test,npm run build— дельта раунда docs-only, внеsrc/**/test/**, а Validate уже зелёный на точном SHAed4ac972(условие раунда). Это решение по дельте (§2.10), а не пропуск. - Не перегонял smoke/golden/backend/model-invariants — ни один не относится к дельте (без кода, геометрии, Python, визуальных изменений); полные наборы — предрелизный гейт (§8), не гейт ревью.
- Не проверял фактическое поведение
npm run release:prerelease(генерация тела релиза изRELEASE-NOTES.md) — тегv1.72.0-beta.1ещё не опубликован, это отдельный релизный шаг вне код-ревью.
Материал раунда
- SHA:
ed4ac972b3784a0120710e81f3392907709fb5dc(свереноgit rev-parse HEADнепосредственно перед выводом вердикта) - Диапазон дельты:
658f284b..HEAD, 1 коммит (ed4ac972) - Дерево:
b55955d59283a59ecb751673f9d5d29094b7bc11git log --all --format='%H %T' | grep b55955d59283 - Унаследованный материал r1: SHA
658f284b44610fbb583cc795e12a3b4fae798f9c, дерево417fc35379c08ddc060ba43fd37e6c5b835d6446, документdocs/reviews/CODE-REVIEW-448-r1.md
Материал раунда
- Ветка:
issue/448-alpha-switch, коммитed4ac972b378— ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет. - Дерево материала:
b55955d59283a59ecb751673f9d5d29094b7bc11git log --all --format='%H %T' | grep b55955d59283 - ТЗ
docs/specs/448-alpha-switch.md, блоб951eaa1266d5845a7674a8ef61950cd78b8e140bgit log --all --find-object=951eaa1266d5845a7674a8ef61950cd78b8e140b -- docs/specs/448-alpha-switch.md