mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-06 14:39:22 +00:00
14 KiB
14 KiB
CODE-REVIEW — issue #716 · заход r1
Итог: High 0 · Medium 0 · Low 0 Вердикт: зелёный
Материал раунда
- Диапазон:
git log --oneline origin/dev..HEAD, базаorigin/dev=84ed38e3. - Коммит:
5451542ee2fe78be1b3dca40c22650fdea7814f5(единственный в диапазоне). - Мутация main:
2022e183— «ci: mirror thin workflow callers in main after #716», уже опубликована вmain(провереноgit log --oneline -3 origin/main); содержимоеship-review.yml/beta-derived.ymlвmainпобайтово равно версии на5451542e(diff <(git show origin/main:…) <(git show HEAD:…)— пусто по обоим файлам). - Трек
show, до 3 AC (AC1 регистрация, AC2 сверка, AC3 документация) — уложились. - Validate на
5451542e: success, https://github.com/Matysh/houseplan-card/actions/runs/36771480144 — принят по канону, не перегонялся.
Скоуп
Задача чинит процессный дефект: ship-review.yml и beta-derived.yml существовали только в dev и как workflow_dispatch-only файлы были недоступны для запуска вовсе (GitHub регистрирует и разрешает dispatch только для workflow, чей файл есть в ветке по умолчанию). Решение — устройство #623 (тонкий вызывающий в main, тело _<имя>.yml по @dev), распространённое на эти два файла. Меняются только .github/workflows/*, PROCESS.md, scripts/mutation-registry.mjs, тесты — продукта нет, User-Visible: no в трейлере коммита соответствует диффу (ни одного файла из custom_components/**, src/**, changelog).
Как проверялось
Рабочая копия уже на 5451542e; git fetch/checkout на другой коммит не делал.
- AC1 (регистрация).
GET /actions/workflows(прямой вызовgh api repos/Matysh/houseplan-card/actions/workflows) перечисляет оба workflow:{"name":"Бета: производные артефакты на dev","path":".github/workflows/beta-derived.yml","state":"active"}{"name":"Бета: пакетное ревью ship","path":".github/workflows/ship-review.yml","state":"active"}— это прямое доказательство, что регистрация состоялась (до задачиGETих не перечислял, по телу issue). Структуру тонкий/тело проверил чтением обоих новых файлов (_ship-review.yml,_beta-derived.yml— содержимое побайтово совпадает с прежними монолитными файлами, кроме шапкиon: workflow_callвместоworkflow_dispatch+run-name+concurrency) и прогоном общего структурного теста (см. ниже) — он разбирает YAML этого репозитория собственным парсером (topBlocks/children) и проверяет для каждой пары тонкий/тело: единственная job,uses: …/_<имя>.yml@dev,secrets: inherit, потолок прав = объединение прав job тела, каждый вход dispatch прокинут воworkflow_call, тело не триггерится само по себе. Мой прогон:node --test test/default-branch-workflows.test.mjs→ 45/45 green (лог ниже). - AC2 (сверка).
validate.yml(workflow_sync) иtest/default-branch-workflows.test.mjsтеперь держат список из восьми файлов. Проверил, что найденное множествоDISPATCH_BEFORE_PROMOTIONне подобрано произвольно: тест утверждает, что оба файла существуют и их единственный триггер —workflow_dispatch(иначе они попали бы в список автоматически по событию, как первые шесть). Прогнал оба мутанта, которые автор заявил «перенацелены», ЛИЧНО, не доверяя заявлению:- мутант в
validate.yml(убратьship-review.yml beta-derived.ymlиз цикла сверки) — временно применил patch изscripts/mutation-registry.mjs, перегналtest/default-branch-workflows.test.mjs→ 1 из 45 упал (#716: шаги беты по кнопке — тонкие файлы наравне с исполняемыми из main), откатил файл; - мутант в
_beta-derived.yml(убрать строкуecho "Release: $TAG") — применил, перегналtest/beta-derived.test.mjs→ 1 из 4 упал (провенанс-тест#697 бот: сообщение коммита проходит провенанс…), откатил файл. Оба теста умеют падать — дисциплина соблюдена.git status --shortпосле отката — пусто. Отдельно прогналnode scripts/mutation-registry-check.mjs(сверяет, что всеfind-патчи реестра совпадают с текущим содержимым файлов) → exit 0, тихо. Значит переименование пути мутанта (.github/workflows/beta-derived.yml→_beta-derived.yml) не оставило «мёртвого»find.
- мутант в
- AC3 (документация). Прочитал
PROCESS.md§10.4 (строки 1159–1188 на текущем HEAD): перечислены все восемь файлов с разбивкой «по событию» / «по кнопке, но до промоушена», объяснено, почемуworkflow_dispatchтребует файл вmain, и прямо сказано про порядок публикации («сначалаmain, затемdev; в обратном порядке push вdevнайдёт файл, которого нет вmain») — это как раз то, что произошло по факту (мутация2022e183вmainпредшествует этому коммиту). §8 (строки ~848–859) и §11.7 (строки ~1533–1539) обновлены с точной командой запуска (gh workflow run … --ref dev -f tag=…или кнопка) и явной отсылкой к тонкому/телу. Неверный комментарий «файл исполняется с ветки прогона, зеркало не нужно» убран изship-review.yml(было — см. диф, убрано) и заменён корректным объяснением тонкий/тело.grepна «шесть файлов»/«шести файлов» поPROCESS.md/AGENTS.md/docs/process/*.md— ничего не найдено, стал старых упоминаний нет. - Косвенная проверка «ничего не сломано рядом».
grep -rn "beta-derived.yml\|ship-review.yml"по*.mjs/*.md— единственное место, использующее имя workflow для реального запуска,scripts/ship-review.mjs:155(gh workflow run ship-review.yml --ref dev -f tag=…), не требует правки: имя файла тонкого вызывающего не изменилось,--ref devпо-прежнему корректен, поскольку после слияния тонкий файл вdevиmainидентичен (это и держитworkflow_sync). Полные файлыrelease-review.yml/docs-screenshots.yml(не входящие в задачу) сверил отдельно — они сейчас побайтово равны вmainиdev, то есть задача не переизобретает то, что уже работает как раньше. node scripts/smoke-select.mjs --base origin/dev --head HEAD→ «Исполняемого frontend-диффа нет… Browser-smoke этим диффом не выбираются… Тронуто файлов: 10.» — подтверждает, что браузерные смоки к этому диффу не относятся.node scripts/action-pins.mjs→ «все сторонние Actions закреплены полным SHA» (exit 0) — новыхuses:в_ship-review.yml/_beta-derived.ymlнет (это те же actions, что были в монолитных файлах, пины не менялись).
Что проверено и корректно
- AC1: оба workflow видны
GET /actions/workflowsкакactive— регистрация состоялась; тонкий/тело структурно идентичны устройству #623 по автоматическому структурному тесту. - AC2: восемь файлов сверяются
workflow_syncи структурным тестом; оба «перенацеленных» мутанта лично воспроизведены и красят соответствующие тесты; реестр мутаций внутренне непротиворечив (mutation-registry-check.mjsзелёный). - AC3: §10.4 называет восемь файлов и объясняет причину/порядок; §8 и §11.7 дают команду запуска; неверный комментарий убран.
- Коммит несёт
Issue: #716иUser-Visible: no; диффу это соответствует (нет пользовательского поведения, changelog не тронут — и не должен быть). - Тела
_ship-review.yml/_beta-derived.yml— построчная копия прежней логики (checkoutref: dev/кандидат, потолок прав, шаги приёмки/ревью/паблиша) с заменой шапки наworkflow_call; неожиданных изменений поведения самих джобов не внесено. - Потолок прав вызывающих job равен объединению прав job тела (проверено автоматическим тестом, не только чтением).
- Порядок публикации (
mainраньшеdev) выполнен на практике, а не только продекларирован: мутация2022e183вmainуже существует и совпадает с тем, что попадёт вdevпри мерже.
Чего не проверял
- Полный
npx tsc --noEmit/npm test/npm run build— не перегонял: Validate уже зелёный на этом самом SHA (ссылка выше, §4 позволяет принять по ссылке для этого раунда); прогнал только целевые тестовые файлы (test/beta-derived.test.mjs,test/ship-review.test.mjs,test/default-branch-workflows.test.mjs— 57/57 green) и утилиты (action-pins.mjs,mutation-registry-check.mjs). - Реальный dispatch
ship-review.yml/beta-derived.yml(кнопкой илиgh workflow run) не запускал — это дорогое и не полностью обратимое действие (запускает настоящего агента ревью / коммитит вdev), и автор сам отложил его до после слияния («сквозной прогон — после слияния»). Косвенное доказательство регистрации (API перечисляет оба какactive) получено; само исполнение тела_ship-review.yml/_beta-derived.ymlпри реальном dispatch не наблюдал. npm run golden:verifyиpython -m pytest tests_backend— не требуются: нет меткиci:golden,custom_components/**/*.pyне тронут.- Инварианты модели (
npm run invariants) — не требуются, геометрия не тронута. - Отдельно не проверял независимое ограничение токена сессий (
Actions: writeдляpublish-prerelease.yml), упомянутое автором в комментарии, — оно явно вынесено за рамки этой задачи в теле issue («Отдельно: …») и не входит ни в один AC.
Находки
Нет.
Материал раунда
- Ветка:
issue/716-register-dispatch-workflows, коммит5451542ee2fe— ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет. - Дерево материала:
b4aeec2e2095f26e478ba745fda84cb4d4964a10git log --all --format='%H %T' | grep b4aeec2e2095 - Тело issue:
9eab06f010a28bbbaccf0425202bd998c4f89b0361512585e9a82295f7deec14 - Вердикт конвейера:
green· High 0