From 27044543a69d184f492dc72f78be82f7259a1209 Mon Sep 17 00:00:00 2001 From: Matysh Date: Wed, 2 Sep 2026 07:46:27 +0300 Subject: [PATCH] ci: mirror the review-material gate into main MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Конвейер исполняет process.yml из ветки по умолчанию, поэтому файл обязан совпадать в main и dev — это проверяет предполётный шаг «Процесс: process.yml идентичен в main и dev». Здесь ровно тот же файл, что уехал в dev коммитом 206732e9, байт в байт. Issue: #413 User-Visible: no --- .github/workflows/process.yml | 36 +++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/.github/workflows/process.yml b/.github/workflows/process.yml index cf99cfb2..deb7e897 100644 --- a/.github/workflows/process.yml +++ b/.github/workflows/process.yml @@ -745,6 +745,42 @@ jobs: fi echo "документ опубликован в $target: $doc" + # Материал раунда обязан быть достижим с origin (#413). + # + # SPEC-REVIEW-403-r2 объявил материал на `HEAD = 83005c3c`, и тот же SHA + # независимо назвал автор ТЗ в комментарии issue. Коммит существовал, но + # к моменту публикации был осиротевшим: ветку перебазировали за 15 минут + # ДО публикации документа, спец-коммит переехал в 94502d3d с тем же + # сообщением и тем же содержимым. Через раунд команда `git diff + # 83005c3c..HEAD` из §2.10 буквально не работала, и r3 восстанавливал + # реальный коммит по содержимому диффа руками. + # + # Проверка стоит ПОСЛЕ публикации намеренно. Артефакт ревью терялся здесь + # трижды (#171, #220), и «вердикт без документа» в этом репозитории + # дороже мёртвой ссылки: документ сначала спасается, потом судится. Шаг + # при этом идёт ДО «Переставить метку», поэтому инвариант «метка не + # сменилась = прогон упал» сохраняется. + # + # Достижимость считается от `refs/remotes/origin/*`, а не от локальных + # ссылок: осиротевший 83005c3c до сих пор лежит в клоне автора и + # достижим там из необновлённой локальной ветки. Читателю отчёта от этого + # пользы нет — он достанет только то, что есть на origin. + - name: "Материал раунда воспроизводим (#413)" + if: steps.rebase.outputs.conflict != 'true' + env: + NUM: ${{ github.event.issue.number }} + STAGE: ${{ needs.guard.outputs.stage }} + CYCLE: ${{ needs.guard.outputs.cycle }} + BRANCH: ${{ steps.branch.outputs.name }} + run: | + marker=CODE-REVIEW + if [ "$STAGE" = "spec" ]; then marker=SPEC-REVIEW; fi + doc="docs/reviews/${marker}-${NUM}-r${CYCLE}.md" + target="${BRANCH:-dev}" + git fetch -q origin "$target" + # Судится опубликованная версия, а не рабочая копия: именно её прочтёт + # следующий раунд. + git show "origin/$target:$doc" | node scripts/review-doc-guard.mjs --doc=- - name: Решение по вердикту id: decide if: steps.rebase.outputs.conflict != 'true'