15 KiB
CODE-REVIEW-743-r2
Issue: #743 · Трек: show · Заход: r2 · блокирующих циклов израсходовано 1 из 2 (лимит show)
Материал: 12687daa9da834d968a6f8f7e14969bfe4e7aa03 (ветка issue/743-bench-iso-backdrop, поверх dev 653d94ef, три коммита: два из r1 плюс docs: review document for #743)
Скоуп
Делта r1 → r2 — ровно один коммит 12687daa, класс C (добавляет
docs/reviews/CODE-REVIEW-743-r1.md, 209 строк, публикующий шаг конвейера).
Продуктовый и тестовый код не меняются: git diff d73b1782..12687daa --stat
показывает только новый docs-файл. Единственная содержательная правка
раунда — не коммит, а комментарий автора в issue с новым прогоном Full
Performance на финальном SHA, закрывающий Medium r1.
Задача по-прежнему проходит критерий §5 (разобрано в r1, код не изменился):
сложность низкая, одна поверхность (перф-харнесс), миграций и
compatibility-полей нет, нового UX-контракта нет (User-Visible: no),
продуктовой производительности/touch не касается, ожидаемое поведение
зафиксировано в ТЗ issue и docs/ISOMETRIC.md (#739 АС2). route: fix.
Закрытие раунда r1
| Находка r1 | Чем закрыта | Где это видно |
|---|---|---|
Medium — АС3 доказан не на финальном материале: единственный прогон Full Performance (36869442701) состоялся на 9e323303, до коммита d73b1782, ужесточившего switchCycleMs.hardMaxMs с 8000 до 1550; защитный потолок ни разу не проверялся прогоном |
Автор запустил performance.yml заново на финальном SHA 12687daa (= d73b1782 плюс docs-коммит, продукт/тесты не менялись) — прогон 36883292495, conclusion: success, headSha подтверждён. Job isometric-backdrop вызывает compare.mjs --baseline-sha=d73b1782764640da67386c181fcfc62d1d9684a1 --candidate-sha=12687daa9da834d968a6f8f7e14969bfe4e7aa03 — то есть кандидат исполнялся именно на коммите с финальным бюджетом. Таблица отчёта: `✅ timing.switchCycleMs.median |
1070.4 |
Структурный АС2 (perSwitch === 1 на каждом переключении) тоже подтверждён
этим прогоном, а не только юнит-тестом: demo/performance/compare.mjs вызывает
requireReport, которая бросает исключение a warm 2.5D floor switch with a backdrop took <n> update passes, если хоть один perSwitch !== 1
(demo/performance/evaluate.mjs:65-76, прочитано построчно). Job isometric-backdrop
завершился success и напечатал полную ✅-таблицу — то есть requireReport
не бросила исключение, то есть perSwitch === 1 по всем строкам на
финальном коде. Это закрывает находку r1 сильнее, чем просто «автор
подтвердил цифрой в комментарии»: доказательство — исполнение на CI, а не
заявление.
Новый прогон найден и прочитан мной напрямую (gh run view), а не принят
со слов хендоффа — числа и SHA сверены.
Унаследовано из r1
Код не менялся между r1 и r2 (делта — только docs-коммит), поэтому
нижеследующее из docs/reviews/CODE-REVIEW-743-r1.md (материал
d73b1782764640da67386c181fcfc62d1d9684a1) принято без повторной
проверки:
- Профиль
large-house-isometric-backdrop-v1заведён по закреплённым образцам (id — README «Changing budgets», вариант фикстуры — как уlarge-house-plan-snap-v1, бюджет-двойник — как у #160). - Предусловие подложки
image.hp-backdrop(src/houseplan-card.ts:10923, геттер:1169) и именаperf-floor-Nсверены с_pickSpace(src/houseplan-card.ts:1636) и фикстуройdemo/fixtures/large-house.mjs:230. - Структурная проба стоит после окна
switchCycleи сторожа #735, доforceGc, вне таймеров. evaluate.mjs: кандидат этого профиля отвергается приperSwitch !== 1в любой строке, при отсутствииfloorSwitchPassesилиsupported !== true; база не судится. Таблица «чем краснеет» заполнена юнит-тестом АС2, мутация (временное отключение проверки) подтверждена исполнением r1-ревьюером:performance-budget.test.mjsстал 18 pass/1 fail именно на целевом тесте.- Бюджет-файл — буквальная копия
budgets-large-house-isometric.jsonкромеprofile; дрейф исключёнdeepEqual-юнит-тестом (приём как у #160). test/performance-workflow.test.mjs: счётчики--samples=7 --warmups=1,--baseline-sha=/--candidate-sha=, запись матрицыisometric-backdrop— численно совпадают с реальнымperformance.yml(подтверждено исполнением теста).- Trailers
Issue: #743/User-Visible: noна обоих коммитах реализации (2f0b608e,d73b1782) — корректно, changelog не требуется. - Продукт (
src/**),demo/fixtures/**, бандл не меняются. - «Одно число — один источник»:
switchCycleMs.hardMaxMs=1550фигурирует в двух JSON-бюджетах (исторический + новый), тождество гарантируетdeepEqual-юнит-тест кроме поляprofile— не новая находка, принятый в проекте образец (#160).
Как проверялось в этом раунде
- Прочитаны:
docs/SCOPE.md,AGENTS.md,docs/process/REVIEWER.md(повторный раунд — объём по дельте, §2.10), тело issue #743 и все комментарии до текущего, включая ответ автора на Medium r1 и его ссылку на прогон36883292495. git log --oneline origin/dev..HEADиgit diff origin/dev...HEAD --stat— три коммита, из них r2-дельта (d73b1782..12687daa) — один файл,docs/reviews/CODE-REVIEW-743-r1.md, только добавления.gh run view 36883292495 --json headSha,headBranch,createdAt,conclusion,jobs—headShaсовпадает с материалом ревью (12687daa),headBranch— ветка задачи,conclusion: success, все 10 job зелёные.gh run view 36883292495 --log— построчно найдена и прочитана таблица jobisometric-backdrop:--baseline-sha=d73b1782… --candidate-sha=12687daa…и полная ✅-таблица сравнения с бюджетом (switchCycleMs1070.4 ≤ 1333.7 ≤ скрытыйhardMaxMs=1550).- Прочитан построчно
demo/performance/evaluate.mjs:41-87(requireReport) — подтверждено чтением, что структурная проверкаperSwitch === 1бросает исключение и прерывает job при нарушении; раз job зелёный и таблица напечатана целиком — проверка пройдена исполнением на CI, а не предположением. - Сверен бюджет-файл на материале:
demo/performance/budgets-large-house-isometric-backdrop.json→switchCycleMs.hardMaxMs: 1550— число, названное закрытой находкой, действительно в файле. - Trailers коммита
12687daa:Issue: #743,User-Visible: no— docs-only коммит мог обойтись без них (AGENTS.md, «Commits и branches»), но они поставлены и корректны (ничего пользователю не видно). - Дешёвые гейты не перегонялись: Validate на материале
12687daaзелёный — проверено напрямую (gh run view 36884365543 --json headSha,conclusion→headSha=12687daa…,conclusion: success), это и прогон, названный в промпте, и свежая сверка, а не слепое доверие ссылке.
Находки
Нет. Единственная находка предыдущего раунда закрыта прогоном на финальном материале, прочитанным и сверенным напрямую, новых изменений кода в этом раунде нет.
Что проверено и корректно
- AC3 (Full Performance на ветке, все профили зелёные, включая
isometric-backdrop) — доказан исполнением на финальном SHA12687daa(прогон36883292495), а не на промежуточном, как было в r1. - Структурный контракт «один проход на тёплое переключение при подложке»
(АС1/АС2) подтверждён не только юнит-тестом, но и реальным прогоном
evaluate.mjs/compare.mjsна CI —requireReportне бросила исключение, job прошёл. - Защитный потолок
switchCycleMs.hardMaxMs=1550подтверждён измерением на финальном коде: кандидат1070.4мс, запас ~31% — риск, названный в r1 (локальный свидетель1687мс), не материализовался на CI-раннере. - Делта раунда (docs-коммит) не нарушает правило 4 (бандл/golden не трогает), классу C trailers не обязательны и корректны там, где проставлены.
- Унаследованные из r1 пункты (список выше) остаются в силе — код, который они описывают, не менялся.
Чего не проверял
- Дешёвые гейты (
npx tsc --noEmit,npm testцеликом,npm run build+ сверка копий бандла) не перегонял повторно: зелёный Validate на SHA материала подтверждён напрямую (gh run view 36884365543), делта раунда их не касается (docs-only коммит). npm run gate:smallне запускал — делта раунда не трогает код, который он проверяет; в r1 он был подтверждён и код с тех пор не менялся.golden:verify— не запускал; рендер не меняется ни в r1, ни в r2-дельте (docs-коммит), метокci:goldenнет.pytest tests_backend— не запускал, диффа вcustom_components/**/*.pyнет ни в одном из трёх коммитов.npm run invariants— не запускал, геометрия плана не затронута.- Мутанты реестра по диффу не запрашивались и не прогонялись (трек show, #709) — решение конвейера, не находка.
- Не повторял ручного исполнения локального бенчмарка (
npm run benchmark:large-house-isometric-backdrop) — достаточно CI-прогона на финальном SHA, он сильнее локального свидетельства и уже сверен напрямую.
Вердикт
Зелёный. Находка r1 закрыта прогоном Full Performance на финальном
материале (36883292495, headSha 12687daa), сверенным напрямую по логам
и JSON, а не принятым со слов хендоффа. Новых находок нет. Цикл зелёный
вердикт не образует; бюджет раунда остаётся израсходованным на 1 из 2
(от r1).
Материал раунда
- Ветка:
issue/743-bench-iso-backdrop, коммит12687daa9da8— ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет. - Дерево материала:
2c07d96dd3f492aaa0090c5acfe0c6b1a031fa15git log --all --format='%H %T' | grep 2c07d96dd3f4 - Тело issue:
62e82cbccdc0323ae350f6b2353d5c8b2e11b6ebdb4c1febe813bf20a54a0e4e - Вердикт конвейера:
green· High 0 · маршрутfix