16 KiB
CODE-REVIEW-513-r2
Заход: r2 · блокирующих циклов израсходовано 1 из 2
Материал
- Предыдущий вердикт: r1, жёлтый, High 0 / Medium 1 (M1), получен на SHA
61905bacdc5a9f08cd70562d7a43b50b8ad88c4a— SHA назван самим документом r1 (docs/reviews/CODE-REVIEW-513-r1.md, блок «Материал раунда»), не находка. - Дельта этого раунда:
git diff 61905bacdc5a9f08cd70562d7a43b50b8ad88c4a..HEAD(за вычетом некодового коммитаf5fb7a0f— публикация документа r1):Один коммитdocs/TESTING.md | 5 +++-- scripts/mutation-gate.mjs | 4 ++-- scripts/pre-push-gate.mjs | 11 ++++++----- test/mutation-gate.test.mjs| 2 +- 4 files changed, 12 insertions(+), 10 deletions(-)0b9acd6382e5f01e264d3516d936819055255ea3— «docs: the local pre-push gate no longer calls the full mutation registry a pre-release gate», текст коммита сам указывает на закрытие M1 из r1. Рабочая копия на этом SHA (git rev-parse HEAD=0b9acd63…, совпадает с материалом ревью). - Трейлеры коммита:
Issue: #513,User-Visible: no— присутствуют, формат верный. Диффу не трогаетsrc/**/custom_components/**, только комментарии/строки консоли в трёхscripts/*.mjs+test/*.mjsи один абзацdocs/TESTING.md→User-Visible: noфактически верен, changelog не тронут — правильно,git diff --statподтверждает отсутствие правокdocs/CHANGELOG*.md. - Дельта не сопоставима по объёму с исходной задачей, не задевает новую
подсистему, ребейза на ушедший вперёд
devне было (диапазонorigin/dev..HEAD= два коммита,f5fb7a0f+0b9acd63, оба поверх материала r1) — локальный разбор по дельте применим, полный прогон не требуется.
Скоуп (наследовано из r1, не меняется дельтой)
Issue #513, лёгкий трек: полный мутационный прогон переводится с еженедельного/предрелизного триггера на ночное расписание, вне цикла разработки и релиза. Дельта r2 не меняет ни cron, ни условие report-job, ни какую-либо логику — только формулировки в комментариях/выводе, закрывающие ровно M1.
Закрытие раунда r1
| Находка r1 | Чем закрыта | Где это видно |
|---|---|---|
M1 (Medium, в скоупе): scripts/pre-push-gate.mjs (строки 22–24 комментарий, 182–183 console.log) продолжал называть «весь мутационный реестр» предрелизным гейтом — прямое противоречие AC3 и новому тексту docs/TESTING.md/mutation-gate.mjs, принятому этим же диффом |
Обе строки переформулированы: комментарий и фактический вывод скрипта теперь говорят «HA-харнесс — heavy-набор Validate на кандидате; весь мутационный реестр — ночное расписание (#513)» | scripts/pre-push-gate.mjs:22-25 (шапка) и scripts/pre-push-gate.mjs:183-184 (console.log), проверено чтением диффа и node --check (синтаксис корректен) |
Автор в комментарии заявил более широкий охват фикса (test/mutation-gate.test.mjs
шапка, дифф-режим scripts/mutation-gate.mjs, docs/TESTING.md §pre-push) —
проверено построчно, все три правки на месте и синхронны по формулировке:
scripts/mutation-gate.mjs:8491,8789— «полный набор остаётся предрелизным контрактом» / «полный реестр остаётся предрелизным контрактом» → «полный набор идёт ночным расписанием (#513)» / «полный реестр идёт ночным расписанием (#513)».test/mutation-gate.test.mjs:16— комментарий шапки: «предрелизный» → «ночное расписание (#513)». Логика теста (cron/day-of-week/фраза-запрет) не менялась — унаследована из r1 без повторной проверки падения теста (см. ниже).docs/TESTING.md:1058-1060— тот же абзац, что и вpre-push-gate.mjs, переформулирован идентично.
Полнотекстовый повторный поиск по всему дереву (не только по изменённым
файлам, как и в r1) подтверждает: ни один живой документ процесса
(scripts/**, test/**, docs/TESTING.md, docs/PROCESS.md, AGENTS.md,
.github/workflows/**) больше не называет полный мутационный реестр шагом
разработки или релиза.
grep -rln "предрелизн" scripts test docs --include="*.md" --include="*.mjs" --include="*.yml" \
| grep -v docs/reviews
даёт только scripts/smoke-select.mjs (о полной матрице смоков — не о
мутационном реестре, вне AC3) и файлы docs/specs/*.md других задач (их
упоминания «предрелизн…» не о мутационном гейте). Оставшиеся упоминания
«весь мутационный реестр — предрелизный гейт» — только в архивных
docs/reviews/CODE-REVIEW-513-r1.md (сам документ r1, зафиксированное
прошлое состояние) и в исторических CODE-REVIEW-478-r1.md/
CODE-REVIEW-472-r2.md (написаны раньше решения владельца от 09.09, речь
там о другом наборе — performance smoke / гейт до этого решения). Это не
живые документы процесса, а замороженные артефакты ревью прошлых задач —
правка их задним числом не требуется и не предусмотрена процессом (§9,
исторические ревью «описывают код, которого уже нет»).
Вывод: AC3 закрыт полностью.
Разбор по AC — что перепроверено дельтой, что унаследовано
- AC1 (cron ежедневный
0 1 * * *; тест краснеет при смене на недельное). Дельта r2 не трогает ниmutation-gate.yml, ни логикуtest/mutation-gate.test.mjs(только строка комментария в шапке файла) — унаследовано из r1 без повторной проверки падения теста, доказательство ниже не могло измениться. - AC2 (report-job заводит issue только для
schedule). Не затронут дельтой r1 и r2 — унаследовано из r1. - AC3 (ни один документ процесса не называет полный мутационный прогон шагом разработки/релиза). Был не закрыт в r1 (M1); дельта r2 — целевой фикс. Перепроверено заново в этом раунде (см. «Закрытие раунда r1» выше) — выполнен полностью.
- AC4 (
User-Visible: no; UX/i18n/модель данных не затронуты). Дельта r2 не трогаетsrc/**, только комментарии и текст CLI-вывода — перепроверено: трейлер коммита0b9acd63соответствует, changelog не правился, соответствует факту.
Как проверялось
- Нашёл вердикт и материал r1 в
docs/reviews/CODE-REVIEW-513-r1.mdи в комментариях issue #513 (gh issue view 513 --json body,comments,labels). - Объявил дельту:
git log/git diff61905bacdc5a…HEAD, отдельно исключив некодовый коммит публикации документа r1. - Построчно сверил дифф с заявлением автора в хендоффе r2 («M1 закрыт…») —
каждая упомянутая правка (
pre-push-gate.mjs,mutation-gate.mjs,test/mutation-gate.test.mjs,docs/TESTING.md) присутствует и согласована по формулировке. - Полнотекстовый
grepпо дереву (не ограничиваясь диффом) на предмет остаточных упоминаний «мутационный реестр — предрелизный/по понедельникам» — ничего живого не осталось (см. раздел выше). node --checkна всех трёх изменённых.mjs-файлов — синтаксис корректен.node --test test/mutation-gate.test.mjs— 42/42 зелёных (совпадает со счётом r1; расхождение с заявленными автором «44/44» в r2-хендоффе не проверено отдельно — то же несоответствие уже отмечено и не признано находкой в r1, логика теста дельтой не менялась).- Подтвердил, что дифф не трогает
src/**/custom_components/**/*.py(git diff …--stat -- src/ custom_components/— пусто).
Что проверено и корректно
- M1 из r1 закрыт по существу и по формулировке, согласован во всех трёх
местах, где жила стилистическая ошибка, плюс синхронно поправлен
docs/TESTING.md. - Термин «heavy-набор Validate на кандидате» — не новодел: совпадает с уже
установленной терминологией
scripts/classify-changes.mjs(heavyGatesRequested) и с формулировками из прежних ревью (heavy=false/true, «heavy-гейтинг»), значит не вносит нового расхождения словаря. - Трейлеры коммита
0b9acd63(Issue: #513,User-Visible: no) верны и соответствуют фактическому диффу. - Диапазон
origin/dev..HEADне содержит стороннего кода — только документ ревью r1 (класс C, публикация) и текущий фикс-коммит (тоже класс C:scripts/**,test/**,docs/**).
Чего не проверял и почему
npx tsc --noEmit,npm test(полный),npm run buildсо сверкой трёх копий бандла,node scripts/check-docs.mjs— не прогонял отдельно. Validate на точном SHA материала0b9acd63зелёный (https://github.com/Matysh/houseplan-card/actions/runs/34386523768), и дельта r2 не трогаетsrc/**/custom_components/**— те же основания, что и в r1, дельтой не задеты.- Браузерные смоки,
golden:verify,pytest tests_backend, performance-профили — не применимо: дельта меняет только текст комментариев/CLI-вывода в трёх нетронутых r1 местах и один абзац документации; ни рендер, ни бэкенд, ни перф-пути не затронуты. npm run invariants/ инварианты модели — не применимо, геометрия и ссылки на неё дельтой не задеты (унаследовано из r1).- Полный
node scripts/mutation-gate.mjs(без--changed) — не прогонял: дорогой прогон (~37 мин), сама задача выводит его из цикла ревью; вместо него — дешёвыйtest/mutation-gate.test.mjs(п.6 выше). - «Одно число — один источник» — не применимо: дельта не добавляет и не меняет ни одной пользовательски видимой величины.
Унаследовано из r1
Без повторной проверки принято (документ docs/reviews/CODE-REVIEW-513-r1.md,
материал: ветка issue/513-mutation-gate-nightly, коммит 61905bacdc5a,
дерево 0ff88d8c67bc15b1170c5a0164b6d94f15af2bfe):
- AC1 — тест
test/mutation-gate.test.mjsпинит cron0 1 * * *и умеет падать (r1 экспериментально откатывал cron на недельный, тест краснел,not ok 14); дельта r2 логику теста не трогает. - AC2 — условие
github.event_name == 'schedule'в report-job (.github/workflows/mutation-gate.yml:125) не менялось ни r1, ни r2. - Отсутствие пересечения по времени с ночным Validate (cron 01:00 UTC vs 02:30 UTC) — геометрия расписания дельтой не затронута.
- Класс изменений (C: workflow/скрипты/тест/доки), отсутствие правок
src/**— верно в r1 и остаётся верным в r2. docs/specs/README.mdне содержит упоминаний мутационного гейта ни до, ни после дельты r1 — не проверял заново, дельта r2 этот файл не трогает.
Вердикт
Зелёный. M1 (единственная блокирующая жёлтый вердикт находка r1) закрыт по всем упомянутым автором местам и подтверждён полнотекстовым поиском по дереву — ни один живой документ процесса больше не называет полный мутационный реестр шагом разработки или релиза. AC1–AC4 выполнены: AC1/AC2 унаследованы из r1 (дельта их не касается), AC3 перепроверен и закрыт в этом раунде, AC4 подтверждён на текущем SHA. Новых находок нет.
Материал раунда
- Ветка:
issue/513-mutation-gate-nightly, коммит0b9acd6382e5— ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет. - Дерево материала:
7401a1eedfb837c8c9577c2f7b4b7fcb75bbec98git log --all --format='%H %T' | grep 7401a1eedfb8 - Вердикт конвейера:
green· High 0