From 65526a6a7f0ad6cc80dbd72584b0e453d5c0f8bc Mon Sep 17 00:00:00 2001 From: Codex Date: Wed, 9 Sep 2026 17:34:47 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20spec=20#510=20r3=20=E2=80=94=20one=20br?= =?UTF-8?q?anching=20variable=20for=20the=20gate=20outcome?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Spec review r2: §5.2 named the gate outcome three different ways; the skip branch (spec stage, reuse fast-path) would have matched a literal `result != 'green'` and produced a spurious S7→S6 return. All step conditions now branch on `proceed` only (true = green or skipped, false = red/missing); `result` feeds the comment text alone. Issue: #510 User-Visible: no --- .../510-mutants-on-candidate-and-review-waits-validate.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/specs/510-mutants-on-candidate-and-review-waits-validate.md b/docs/specs/510-mutants-on-candidate-and-review-waits-validate.md index 819b3251..66bd4184 100755 --- a/docs/specs/510-mutants-on-candidate-and-review-waits-validate.md +++ b/docs/specs/510-mutants-on-candidate-and-review-waits-validate.md @@ -66,11 +66,11 @@ Push-прогоны на том же SHA не считаются доказат ### 5.2. `process.yml` -Новый шаг «Validate с мутантами на материале» (`id: gate`) стоит **после `reuse` (#499) и шага «Конфликт с dev — вернуть автору без ревью»** и **перед** «Зелёные гейты на этом SHA» (#343): порядок в файле — `material` → `reuse` → возврат при конфликте → `gate` → возврат при красном → `validated` (ревью ТЗ r1, Medium 1: `reuse.outputs` должен быть уже вычислен). Условие шага — `steps.rebase.outputs.conflict != 'true'`; внутри: при `stage != code`, `reuse == true` или отсутствии ветки шаг пишет `proceed=true`, `result=skipped` и выходит; иначе вызывает `validate-gate.mjs` и пишет `proceed=true|false` по его коду выхода (сам шаг всегда `exit 0`, чтобы дальнейшая логика меток отработала). Далее: +Новый шаг «Validate с мутантами на материале» (`id: gate`) стоит **после `reuse` (#499) и шага «Конфликт с dev — вернуть автору без ревью»** и **перед** «Зелёные гейты на этом SHA» (#343): порядок в файле — `material` → `reuse` → возврат при конфликте → `gate` → возврат при красном → `validated` (ревью ТЗ r1, Medium 1: `reuse.outputs` должен быть уже вычислен). Условие шага — `steps.rebase.outputs.conflict != 'true'`; внутри: при `stage != code`, `reuse == true` или отсутствии ветки шаг пишет `proceed=true`, `result=skipped` и выходит; иначе вызывает `validate-gate.mjs` и пишет `result=green|red|missing`, `proceed=true|false` по его коду выхода (сам шаг всегда `exit 0`, чтобы дальнейшая логика меток отработала). Единственная переменная, по которой ветвятся последующие шаги, — `proceed` (`true` = green **или** skipped; `false` = red/missing); `result` — только для текста комментария (ревью ТЗ r2, Medium 1: skip-ветка не должна ни возвращать задачу, ни блокировать ревью). Далее: -- новый шаг «Validate красный — вернуть автору без ревью», условие `steps.gate.outputs.result != 'green'` (и те же условия этапа): комментарий по образцу шага «Конфликт с dev» — что именно (red/missing), ссылка на прогон, что делать (починить, запушить, вернуть `S7`), «цикл ревью не израсходован»; метка `S7 → S6`; `exit 0`. -- все последующие шаги ревью (`validated`, зависимости, Chromium, Claude, Review, публикация, решение, слияние, перестановка метки) получают дополнительное условие `steps.gate.outputs.result == 'green'` там, где сейчас стоит `steps.rebase.outputs.conflict != 'true'` (одно условие — одна переменная: ввести выход `steps.gate.outputs.proceed`). -- шаг `validated` (#343) остаётся, но при `proceed == 'true'` всегда находит зелёный dispatch-прогон и пишет ссылку на него; ветка «зелёного нет» становится недостижимой на этапе code и остаётся для spec. +- новый шаг «Validate красный — вернуть автору без ревью», условие `steps.rebase.outputs.conflict != 'true' && steps.gate.outputs.proceed != 'true'` (на skip-ветке `proceed == 'true'` — шаг не срабатывает): комментарий по образцу шага «Конфликт с dev» — что именно (red/missing), ссылка на прогон, что делать (починить, запушить, вернуть `S7`), «цикл ревью не израсходован»; метка `S7 → S6`; `exit 0`. +- все последующие шаги ревью (`validated`, зависимости, Chromium, Claude, Review, публикация, решение, слияние, перестановка метки) получают условие `steps.gate.outputs.proceed == 'true'` вместо нынешнего `steps.rebase.outputs.conflict != 'true'` (при конфликте `gate` не выполняется, `proceed` пуст — условие ложно, как и раньше). +- шаг `validated` (#343) остаётся, но при `proceed == 'true'` на этапе code всегда находит зелёный dispatch-прогон и пишет ссылку на него; ветка «зелёного нет» становится недостижимой на этапе code и остаётся для spec. - Шаг «Переставить метку» и «Позвать владельца» не должны считать gate-возврат падением: `if: always()`-логика проверяется тестом. Этап `spec` (материал в issue/`docs/specs`) гейт не проходит — там нет кода.