18 KiB
CODE-REVIEW — issue #716 · заход r2
Итог: High 0 · Medium 0 · Low 0 Вердикт: зелёный
Материал раунда
- Диапазон:
git log --oneline origin/dev..HEAD, базаorigin/dev=a5a73d15. - Коммиты (2):
5f505674(«ci: register ship-review and beta-derived as thin callers in main (#716)») иbe0f9573(«docs: review document for #716», публикация документа r1). - Рабочая копия уже на
be0f957351181fa2ef72ae282e439a2917636ca2—HEAD detached, совпадает с меткой материала из системного промпта.git fetch/checkoutна другой коммит не делал; единственный вызовgit fetch origin devне менялorigin/dev(уже был наa5a73d15) и не переключал рабочую копию. - Причина r2 — не новая правка, а ребейз: владелец подтвердил в issue
«Изменение задачи то же, что в зелёном r1» (комментарий
20:49:31Z). Ребейз на ушедший вперёдdevпрямо назван в промпте как случай, не сокращающий объём разбора («разбор остаётся ПОЛНЫМ»), поэтому ниже — полная проверка AC1–AC3 на текущем SHA, а не только сверка дельты. - Validate на
be0f9573: success, https://github.com/Matysh/houseplan-card/actions/runs/36775411384 — я лично проверилgh run view 36775411384 --json headSha,conclusion:headSha==be0f957351181fa2ef72ae282e439a2917636ca2,conclusion==success. Принят по канону (§4),tsc/test/buildне перегонял.
Скоуп
Задача чинит процессный дефект инфраструктуры: ship-review.yml (#696) и
beta-derived.yml (#697) существовали только в dev. workflow_dispatch
исполняет файл с выбранной ветки, но GitHub регистрирует workflow и разрешает
сам запуск (кнопка, gh workflow run, API) только для файла, который есть в
ветке по умолчанию (main) — без этого обе беты не запускались вовсе.
Решение — устройство #623 (тонкий вызывающий в main, тело _<имя>.yml по
@dev), распространённое на эти два файла.
Меняются только .github/workflows/*, PROCESS.md,
scripts/mutation-registry.mjs, тесты и (в составе диапазона) документ ревью
r1 — продукта нет. Трек show, инфраструктура; docs/SCOPE.md не
затрагивается (нет пользовательского поведения, привязки к Core user jobs не
требуется — прецедент тот же, что у #623/#704/#714 в этом же репозитории).
User-Visible: no в трейлере 5f505674 соответствует диффу: ни одного файла
из custom_components/**, src/**, обоих changelog.
Как проверялось
-
Диапазон и идентичность содержимого.
git diff origin/dev...HEAD --stat— 11 файлов,739 insertions(+), 498 deletions(-). Прочитал полныйgit diffпо всем изменённым файлам (не только диффстат): новые тела_ship-review.yml(333 строки) и_beta-derived.yml(215 строк) — построчная копия прежних монолитных job'ов с заменой шапки наworkflow_call; вызывающиеship-review.yml/beta-derived.ymlвdevстали тонкими (on: workflow_dispatch, права, concurrency, одна jobuses: …/_<имя>.yml@devcsecrets: inherit) — устройство #623 применено без отклонений. -
AC1 (регистрация).
gh api repos/Matysh/houseplan-card/actions/workflows— лично прогнал сейчас: оба workflow перечислены,state: "active"для обоих (Бета: производные артефакты на dev,Бета: пакетное ревью ship) — прямое доказательство, что регистрация в силе, а не только состоялась в прошлом.- Зеркало в
main:git log --oneline -3 origin/mainпоказывает2022e183 ci: mirror thin workflow callers in main after #716перед7d4d75bd(v1.78.0). Сравнил побайтово:diff <(git show origin/main:.github/workflows/ship-review.yml) <(git show HEAD:.github/workflows/ship-review.yml)и то же дляbeta-derived.yml— пусто по обоим. Значит зеркало вmainи текущий кандидат наdevидентичны; порядок публикации (сначалаmain, потомdev) выполнен на практике, а не только продекларирован. - Структура тонкий/тело проверена и чтением, и тестом (см. AC2): единая
job,
uses: …/_<имя>.yml@dev,secrets: inherit, каждый входworkflow_dispatchпроброшен воworkflow_call, потолок прав — объединение прав job тела.
-
AC2 (сверка).
validate.yml/workflow_sync: цикл сверки расширен до восьми файлов (+ ship-review.yml beta-derived.yml), прочитал diff — соответствует.test/default-branch-workflows.test.mjs: новый наборDISPATCH_BEFORE_PROMOTION, новый тест#716: шаги беты по кнопке — тонкие файлы наравне с исполняемыми из mainпроверяет и список из восьми имён, и то, что каждый файл в списке существует и его единственный триггер —workflow_dispatch(иначе запись избыточна).- Мутанты воспроизведены лично (трек
showэтого не требует — REVIEWER.md прямо говорит «мутанты в разработке не гоняются ни на каком треке — ревьюер их тоже не применяет»; я прогнал их сверх минимума для собственной уверенности, а не по обязанности):- мутант
validate.yml(убратьship-review.yml beta-derived.ymlиз цикла сверки,scripts/mutation-registry.mjs:10838) — применил patch,node --test test/default-branch-workflows.test.mjs→ 1 из 45 упал (тест#716: шаги беты по кнопке — тонкие файлы наравне с исполняемыми из main), откатил,git status --shortпусто. - мутант
_beta-derived.yml(убратьecho "Release: $TAG",scripts/mutation-registry.mjs:13798, путь уже перенацелен сbeta-derived.ymlна_beta-derived.yml) — применил,node --test test/beta-derived.test.mjs→ 1 из 4 упал (провенанс-тест), откатил, рабочая копия чистая.
- мутант
node scripts/mutation-registry-check.mjs→ exit 0 — реестр непротиворечив, переименование пути мутанта не оставило «мёртвого»find.
-
AC3 (документация). Прочитал diff
PROCESS.md: §10.4 перечисляет восемь файлов с разбивкой «по событию» / «по кнопке, но до промоушена», объясняет, почемуworkflow_dispatchне даёт запуск без файла вmain, и задаёт порядок публикации («сначалаmain, затемdev»). §8 и §11.7 получили точную команду запуска (gh workflow run … --ref dev -f tag=…или кнопка) с отсылкой к тонкому/телу. Прежний неверный комментарий («файл исполняется с ветки прогона, зеркало не нужно») убран из обоих файлов и заменён корректным объяснением.grep -rn "шест[ьи] файл" PROCESS.md AGENTS.md docs/process/*.md— ничего не найдено, старых упоминаний «шести файлов» не осталось. -
Таблица для защитного AC (AC2 — гард сверки).
AC чем доказан чем краснеет AC2 ( workflow_syncдержит main/dev в синхроне для новых 2 файлов)test/default-branch-workflows.test.mjs, тест#716: …; лично прогнанный мутантvalidate.yml(убрать 2 файла из цикла сверки)1/45 тестов красный (см. пункт 3 выше) -
Тесты.
node --test test/default-branch-workflows.test.mjs test/beta-derived.test.mjs test/ship-review.test.mjs→ 57/57 green. Расширил до полного набора workflow-тестов, которые называл автор:test/default-branch-workflows.test.mjs test/validate-workflow.test.mjs test/beta-derived.test.mjs test/ship-review.test.mjs test/process-workflow*.test.mjs→ 85/85 green — совпадает с тем, что автор заявил после ребейза. -
Побочные гейты.
node scripts/action-pins.mjs→ «все сторонние Actions закреплены полным SHA» (новыхuses:нет — пины из прежних монолитных файлов перенесены без изменений).node scripts/smoke-select.mjs --base origin/dev --head HEAD→ «Исполняемого frontend-диффа нет… Browser-smoke этим диффом не выбираются… Тронуто файлов: 11.» — браузерные смоки к этому диффу не относятся, вход и решение приложены. -
Трейлеры.
git show -s --format=%Bдля5f505674:Issue: #716,User-Visible: no— соответствуют диффу (изменений пользовательского поведения нет, оба changelog не тронуты и не должны быть). Коммитbe0f9573(документ ревью r1) несёт те же трейлеры корректно. -
INDEX.md.
docs/reviews/INDEX.mdпока не знает про #716 — это ожидаемо: по прецеденту#704/#714в этом репозитории индекс обновляет отдельный последующий коммит бота («docs(reviews): индекс после сдвига каталога (#NN)»), а не коммит с самим документом ревью. Не находка.
Закрытие раунда r1
Раунд r1 был вынесен зелёным на коммите 5451542e, который затем стал
недостижим: во время ревью dev ушёл на 11 коммитов вперёд, слияние
отменил страж (#312), задачу вернули в S6-in-progress, и владелец
перебазировал ветку (d41cca76 → be0f9573, force-with-lease). Открытых
находок у r1 не было (High 0 · Medium 0), поэтому таблицы «находка | чем
закрыта» не требуется по существу — ниже фиксирую, что сам ребейз не внёс
расхождений с тем, что r1 проверил:
Что проверял r1 на 5451542e |
Что я перепроверил на be0f9573 |
Результат |
|---|---|---|
GET /actions/workflows — оба workflow active |
Тот же вызов сейчас | Совпадает, всё ещё active |
Зеркало в main (2022e183) побайтово равно кандидату |
diff зеркала main против текущего HEAD по обоим файлам |
Совпадает, пусто |
45/45 default-branch-workflows.test.mjs, оба мутанта лично воспроизведены |
Те же 2 мутанта лично воспроизведены на be0f9573, плюс полный набор 85/85 |
Совпадает и расширено |
| §10.4/§8/§11.7 называют 8 файлов и порядок публикации | Тот же текст (diff PROCESS.md идентичен по содержанию) |
Совпадает |
Различие между 5451542e и 5f505674 — только перестановка коммита поверх
нового dev (ребейз без конфликтов, подтверждено автором и видно по
идентичности диффа origin/dev...HEAD содержанию, описанному в r1). Новых
файлов, новых AC или изменённого поведения ребейз не внёс.
Унаследовано из r1
- Полный вывод
GET /actions/workflows(регистрация обоих workflow) — переподтверждено заново в этом раунде (не унаследовано вслепую, см. выше). - Оценка, что задача не расширяет скоуп за пределы трёх AC и не имеет
побочных продуктовых изменений — принято повторно после перечтения
полного диффа на
be0f9573, расхождений с оценкой r1 не найдено. - Ничего не принято по одному лишь упоминанию в документе r1 без собственной проверки: каждый пункт «Как проверялось» выше — это мой собственный прогон/чтение на текущем SHA.
Что проверено и корректно
- AC1: оба workflow —
activeвGET /actions/workflowsпрямо сейчас; зеркало вmainпобайтово равно кандидату; тонкий/тело — по автоматическому структурному тесту и по чтению. - AC2: восемь файлов сверяются
workflow_syncи структурным тестом; оба мутанта лично воспроизведены и красят соответствующие тесты; реестр мутаций внутренне непротиворечив. - AC3: §10.4 называет восемь файлов, причину и порядок публикации; §8 и §11.7 дают точную команду запуска; неверный комментарий убран из обоих файлов.
- Коммиты несут корректные
Issue:/User-Visible:трейлеры, соответствующие диффу. - Ребейз не изменил содержание изменения — подтверждено прямым диффом и повторной проверкой живых фактов (API, байтовое сравнение зеркала), а не только заявлением автора.
Чего не проверял
- Полный
npx tsc --noEmit/npm test/npm run buildсо сверкой трёх копий бандла — не перегонял: Validate зелёный на этом самом SHA (be0f9573, ссылка выше), принято по канону §4. - Реальный dispatch
ship-review.yml/beta-derived.yml(кнопкой илиgh workflow run) — не запускал: дорого, не полностью обратимо (коммитит вdev, запускает настоящего агента ревью), и автор сам отложил это до после слияния. npm run golden:verifyиpython -m pytest tests_backend— не требуются: нет меткиci:golden,custom_components/**/*.pyне тронут.npm run invariants— не требуется: геометрия не тронута.- Ограничение токена сессий (
Actions: writeдляpublish-prerelease.yml) — явно вынесено автором за рамки задачи в теле issue и не входит ни в один AC. docs/reviews/INDEX.mdдля #716 — не обновлён на этом SHA; по прецеденту репозитория это отдельный последующий коммит публикации, не часть диапазона задачи.
Находки
Нет.
Материал раунда
- Ветка:
issue/716-register-dispatch-workflows, коммитbe0f95735118— ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет. - Дерево материала:
993ff18663eee51f1c3312a5e3515d2e0a708852git log --all --format='%H %T' | grep 993ff18663ee - Тело issue:
9eab06f010a28bbbaccf0425202bd998c4f89b0361512585e9a82295f7deec14 - Вердикт конвейера:
green· High 0