13 KiB
CODE-REVIEW #698 r2
Материал: origin/dev..HEAD, два коммита ea2c000a (r1, уже разобран) и
97d819ad (новый, только он в скоупе этого раунда) поверх dev@9e4bfb43
(рабочая копия уже на 97d819ad). Дельта раунда — git diff ea2c000a..97d819ad:
PROCESS.md (10 строк), scripts/rebase-generated.mjs (комментарий,
5 строк), плюс публикация docs/reviews/CODE-REVIEW-698-r1.md (артефакт
конвейера, не правка автора). Файлов класса A по-прежнему нет —
инфраструктурный трек (§1), track:show.
Раунд не первый (PROCESS.md §2.10, #214): разбор — по дельте r1→r2, а не
заново. Дельта локальна и мала (переформулировка одного абзаца канона и
парного комментария в коде, без изменения логики) — полный повторный разбор
механизма (.gitattributes union, UPSTREAM_WINS, PATCH_ID_EXCLUDES) не
требуется, он не менялся байт в байт (см. «Унаследовано из r1»).
Скоуп
r1 закрыл ровно одну блокирующую находку — Medium: абзац PROCESS.md,
добавленный коммитом #698, утверждал в настоящем времени существование
«теста полосы на Validate» для всех шести чисел монолита, которого на
момент r1 не было (полоса — только у bundleBytes, остальные пять чисел
судятся точно; полоса для всех шести — отдельная нетриаженная задача #699).
Коммит 97d819ad переписывает этот абзац и парный комментарий к
UPSTREAM_WINS, называя текущий допуск так, как он реализован сегодня, а
не так, как он будет выглядеть после гипотетического #699. Код не менялся
(автор говорит об этом прямо в хендоффе, и git diff ea2c000a..97d819ad -- scripts/ подтверждает: правка только в блоке /** ... */ над
UPSTREAM_WINS, объявление и вся исполняемая логика — байт в байт те же).
Как проверялось
| Гейт | Команда | Результат |
|---|---|---|
Validate на материале (97d819ad) |
CI run, ссылка в задаче ревью | success — дешёвые гейты (tsc, полный npm test, build+сверка бандла) не перегонял, приняты по этой ссылке (#343) |
| Соответствие формулировки коду: гейт | grep -n "lint:unused" package.json |
"lint:unused": "node scripts/unused-locals-gate.mjs" — имя гейта в новом абзаце названо верно |
| Соответствие формулировки коду: допуск | scripts/monolith-metrics.mjs:262-274 (BUNDLE_BYTES_BAND = 2_000, compareWithBaseline: band = name === 'bundleBytes' ? bundleBand : 0) |
подтверждает буквально: пять чисел — точное совпадение, bundleBytes — полоса 2000 Б, ровно как теперь написано в PROCESS.md |
| Соответствие формулировки коду: где стоит гейт | grep -n "lint:unused" .github/workflows/validate.yml → строка 809 |
гейт действительно часть Validate кандидата, а не только локальный скрипт |
| Целевой юнит-набор (дельта r1, не менялась в r2, но перепроверил на новом SHA) | node --test test/rebase-generated.test.mjs |
15/15 pass |
| Согласованность конспектов ролей | node --test test/process-digests.test.mjs |
5/5 pass — переписанный абзац не входит в дословные «ключевые правила» AUTHOR.md/REVIEWER.md, там о #698/#699 ничего не сказано (grep по обоим файлам не нашёл упоминаний «тест полосы»/monolith-baseline/#699) — расхождения конспекта с новым каноном нет |
| Реестр мутантов, дешёвая половина | node --test --test-name-pattern="every mutant patch anchors exactly once|every guard command points" test/mutation-gate.test.mjs |
2/2 — три мутанта из r1 по-прежнему анкерятся, комментарий не входит в их find/replace |
| Провенанс коммита r2 | git show -s --format=full 97d819ad |
Issue: #698, User-Visible: no — корректно, правка только канона и комментария, продуктового поведения нет |
process-gate.mjs на дельте r2 |
node scripts/process-gate.mjs --range 97d819ad~1..97d819ad |
«гейт пройден, предупреждений 0» |
Не прогонял (и почему): npx tsc --noEmit, полный npm test, npm run build
- сверка трёх копий бандла,
node scripts/check-docs.mjs,mutation-gate --checkцеликом — приняты по зелёному Validate на97d819ad(#343); дельта r2 не трогаетsrc/**и не меняет исполняемый код. Golden/скриншоты, браузерные смоки,pytest tests_backend, инварианты модели, performance-профили — не применимо, как и в r1: диапазон не трогает визуал, Python или геометрию плана.
Что проверено и корректно
- Медиан-находка r1 закрыта по существу, а не косметически. Новая
формулировка называет реальный гейт (
npm run lint:unused→scripts/unused-locals-gate.mjs→compareWithBaseline), реальный сегодняшний допуск (пять чисел — точно,bundleBytes— полоса 2000 Б) и корректно относит полосу для всех шести чисел к будущему #699, не выдавая её за факт. Проверено не по тексту хендоффа, а прямым чтениемscripts/monolith-metrics.mjsи.github/workflows/validate.yml— цитаты выше воспроизводимы построчно. - Прежний вывод об отсутствии тихого прохождения неверного бейзлайна не
меняется. Новый текст сам это формулирует явно: «сторона
devв базе краснеет, если задача сама меняла эти числа — это прежний возврат автору, только после Validate, а не до ревью» — совпадает с тем, что уже было проверено исполнением в r1 (safety net через Validate кандидата). - Код механизма не тронут.
git diff ea2c000a..97d819ad -- scripts/rebase-generated.mjs— правка ограничена телом doc-комментария надUPSTREAM_WINS; объявление константы,planStop,rebaseRegenerating— те же байты, что проверялись мутациями в r1. - Трейлеры и класс изменений корректны:
Issue: #698,User-Visible: no.
Закрытие раунда r1
| Находка (r1) | Чем закрыта | Где это видно |
|---|---|---|
Medium: PROCESS.md утверждал как факт «тест полосы на Validate» для всех шести чисел монолита, которого не существует (полоса только у bundleBytes) |
Абзац переписан в настоящем времени под фактическую автоматизацию: назван гейт (lint:unused), сегодняшний нулевой допуск для пяти чисел и полоса 2000 Б для bundleBytes; полоса всех шести явно отнесена к будущему #699 |
PROCESS.md (диапазон строк 392-401, коммит 97d819ad); тот же текст продублирован в комментарии к UPSTREAM_WINS в scripts/rebase-generated.mjs; подтверждено чтением scripts/monolith-metrics.mjs:262-274 и .github/workflows/validate.yml:809 — формулировка и код совпадают дословно по числам и названию гейта |
Унаследовано из r1 (без повторной проверки)
- Механизм разрешения конфликтов —
.gitattributes(merge=unionна обоих CHANGELOG),UPSTREAM_WINSвscripts/rebase-generated.mjs,PATCH_ID_EXCLUDESвscripts/merge-candidate.mjs, три новых мутационных гвардианта — реализован корректно и проверен исполнением реального git и ручными мутациями. Документ:docs/reviews/CODE-REVIEW-698-r1.md, SHA материалаea2c000af5e4bd47140c2c255fca16ad2a136f6c. Не перепроверял заново мутациями в r2: код этих файлов в дельте r1→r2 не менялся (см. «Скоуп» и «Как проверялось» выше — единственная правкаscripts/этого раунда — комментарий). - Обоснование, почему
docs/images/screenshots.jsonиscripts/bundle-budget.mjsвне скоупа #698, — из r1, не пересматривал: первое отложено на #697 (раскрыто автором), второе — смешанный файл с содержательными словарями, не тот же тип конфликта, что чистый производный JSON. - Два Low из r1 (предиктивный
--dry-run-логrebase-on-dev.mjsне знает про новые правила; риск дублирования строки ченджлога при настоящем конфликте двух правок) остаются снятыми ревьюером без правки — дельта r2 их не касается.
Находки
Новых находок в дельте r2 нет. High: 0, Medium: 0.
Чего не проверял
- Полный
npm test,npx tsc --noEmit,npm run build+ сверка бандла — приняты по зелёному Validate на97d819ad(#343); дельта r2 не трогаетsrc/**. - Существо #699 (проектирование полосы для всех шести чисел) — вне скоупа #698, не проверял по существу; только убедился, что новая формулировка канона не выдаёт его результат за уже реализованный.
- Живой прогон конвейера на реальном GitHub Actions с настоящим конфликтом между двумя параллельными PR — как и в r1, не воспроизводил; логика проверена в r1 реальным git во временных репозиториях, дельта r2 её не меняет.
Вердикт
Единственная блокирующая находка r1 (Medium: формулировка канона опережала
не принятую задачу #699) закрыта точечной правкой того же абзаца — новый
текст сверен построчно с фактическим кодом гейта и подтверждён
исполняемыми числами (compareWithBaseline, BUNDLE_BYTES_BAND,
validate.yml:809). Код механизма не менялся, ранее проверенные мутациями
гарантии в силе. Новых находок нет.
Вердикт: зелёный · заход r2 · блокирующих циклов 1/2 · High: 0 · Medium: 0
Материал раунда
- Ветка:
issue/698-rebase-auto-resolve, коммит97d819ad6757— ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет. - Дерево материала:
0e024d33642f2428aefb2486c6e12395e3e05209git log --all --format='%H %T' | grep 0e024d33642f - Тело issue:
e17d18976553c2da4042b649a2073c581aa5108f58a57cf7c2902b6d639859c0 - Вердикт конвейера:
green· High 0