From 6e93aa705caf7dd2d871ff22fda6f17989e6dd98 Mon Sep 17 00:00:00 2001 From: Matysh Date: Wed, 19 Aug 2026 13:46:25 +0300 Subject: [PATCH] docs: fix in-scope Medium findings inside the current issue MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Filing and servicing a separate issue costs far more than fixing a small problem in place — the owner's call of 2026-08-19 (#202). A Medium finding inside the task's scope no longer becomes its own issue: with no High findings the verdict is yellow, the author fixes it and the fix passes another review cycle. Only an out-of-scope Medium is still filed separately, because foreign scope is never patched from a task branch. Applied to the canon (PROCESS.md), the reviewer prompt in process.yml and AGENTS.md; the verdict format now writes "Medium: N -> in-task | #NN". Issue: #202 User-Visible: no --- .github/workflows/process.yml | 25 +++++++++++++++---------- AGENTS.md | 9 +++++++-- PROCESS.md | 28 +++++++++++++++++++--------- 3 files changed, 41 insertions(+), 21 deletions(-) diff --git a/.github/workflows/process.yml b/.github/workflows/process.yml index 9bb8bb30..831de739 100644 --- a/.github/workflows/process.yml +++ b/.github/workflows/process.yml @@ -299,16 +299,20 @@ jobs: Ты НЕ правишь ни ТЗ, ни продуктовый код. Только оцениваешь. - Серьёзность: High блокирует; Medium обязан стать отдельным issue; - Low либо правится, либо снимается с записью. Жёлтый вердикт - допустим при полностью выполненных AC, если изменение не решает - заявленный сценарий или ухудшает смежный. Продуктовое рассуждение - расширяет вопросы, но не отменяет AC и не даёт права менять скоуп. + Серьёзность: High блокирует; Medium В СКОУПЕ задачи чинится в ней + же — без High это жёлтый вердикт и возврат автору, отдельный issue + НЕ заводится (решение владельца 2026-08-19, #202: заведение и + обслуживание issue дороже правки на месте); Low либо правится, + либо снимается с записью. Жёлтый вердикт допустим и при полностью + выполненных AC, если изменение не решает заявленный сценарий или + ухудшает смежный. Продуктовое рассуждение расширяет вопросы, но не + отменяет AC и не даёт права менять скоуп. - Каждую Medium-находку заведи отдельным issue со ссылкой на - #${{ github.event.issue.number }} и метками: тип, приоритет, - S1-new. «Оставили в тексте ревью» закрытием не считается и прямо - запрещено §12. + Только Medium-находку ВНЕ скоупа задачи (попутный дефект соседнего + поведения, который в этой ветке чинить нельзя) заведи отдельным + issue со ссылкой на #${{ github.event.issue.number }} и метками: + тип, приоритет, S1-new. «Оставили в тексте ревью» закрытием не + считается и прямо запрещено §12. Напиши полный документ ревью в файл docs/reviews/-REVIEW-${{ github.event.issue.number }}-r${{ needs.guard.outputs.cycle }}.md @@ -319,7 +323,8 @@ jobs: Затем оставь в issue краткий комментарий: вердикт, ключевые находки и ссылка на документ. Первой строкой — вердикт в формате §7.2: - `Вердикт: зелёный/жёлтый/красный · цикл r${{ needs.guard.outputs.cycle }}/${{ needs.guard.outputs.limit }} · High: N · Medium: N → #…` + `Вердикт: зелёный/жёлтый/красный · цикл r${{ needs.guard.outputs.cycle }}/${{ needs.guard.outputs.limit }} · High: N · Medium: N → в задаче | #…` + («→ #…» — только у Medium вне скоупа; находки в скоупе возвращаются автору жёлтым) Затем верни JSON по схеме. Это последнее действие и оно обязательно: без него метка не переставится и конвейер встанет. diff --git a/AGENTS.md b/AGENTS.md index 379bf46e..2cd97171 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -255,10 +255,15 @@ The exchange happens in **issue comments** — there is no local message bus. Ve format: ```text -Verdict: green/yellow/red · cycle r/4 · High: N · Medium: N → #… · Document: … +Verdict: green/yellow/red · cycle r/4 · High: N · Medium: N → in-task | #… · Document: … ``` -High blocks. Medium must become its own issue. Low is fixed or waived with a note +High blocks. A Medium finding INSIDE the task's scope is fixed within the task: +with no High findings the verdict is yellow, the author fixes it and the fix +passes another review cycle — no separate issue (owner's decision 2026-08-19, +#202: filing and servicing an issue costs far more than fixing in place). Only +a Medium finding OUTSIDE the scope becomes its own issue — foreign scope is +never patched from this branch. Low is fixed or waived with a note in the review document. A yellow verdict is legitimate even when every acceptance criterion passes, if the change does not solve the stated scenario or degrades a neighbouring one. diff --git a/PROCESS.md b/PROCESS.md index 99ba0ad9..7138ec67 100644 --- a/PROCESS.md +++ b/PROCESS.md @@ -131,8 +131,12 @@ S1-new → S2-analysis → S3-spec → S4-spec-review ⟲ → S5-ready → Его задача — не согласиться, а найти, где ТЗ не выполнимо или не проверяемо. - **Артефакт:** `docs/reviews/SPEC-REVIEW--r.md`, вердикт зелёный / жёлтый / красный. Лёгкий трек — комментарий в issue. -- **High-находки блокируют.** Medium/Low — либо правятся, либо становятся - отдельными issue со ссылкой; «оставили в тексте ревью» не считается закрытием. +- **High-находки блокируют.** Medium **в скоупе задачи** чинится в текущем + issue: без High это жёлтый вердикт, автор правит ТЗ, фикс проходит повторный + цикл. Medium **вне скоупа** — отдельный issue: чужой скоуп в этой задаче не + правится. «Оставили в тексте ревью» не считается закрытием ни для одной + (решение владельца 2026-08-19, #202: отдельный issue дороже правки на месте). + Low либо правится, либо снимается решением ревьюера с записью. - **Выход:** «Готово к разработке» либо возврат в «ТЗ в работе» — не более 4 циклов (§4). @@ -187,7 +191,9 @@ S1-new → S2-analysis → S3-spec → S4-spec-review ⟲ → S5-ready → кода отвечает на вопрос «оно вообще работает»: каждый AC либо доказан автотестом — и ревьюер убедился, что **тест умеет падать**, — либо разобран по коду с явной записью «проверено чтением, не исполнением». -- **High блокируют.** Medium **обязаны** превратиться в issue. +- **High блокируют.** Medium **в скоупе задачи** чинится в текущем issue: + без High это жёлтый вердикт и возврат автору, фикс проходит повторный цикл. + Medium **вне скоупа** — отдельный issue (#202). - **Выход:** очередь на пре-релиз либо возврат в «В разработке», не более 4 циклов (§4). @@ -231,8 +237,10 @@ S1-new → S2-analysis → S3-spec → S4-spec-review ⟲ → S5-ready → ревью-гейт. 7. **Ревью возвращает не более 4 раз.** Пятый заход — решение владельца: разделить, отклонить или арбитраж (§4). -8. **High блокирует. Medium становится issue.** Low либо правится, либо снимается - решением ревьюера с записью в документе. +8. **High блокирует. Medium в скоупе чинится в текущем issue** (без High — + жёлтый вердикт и повторный цикл); Medium вне скоупа становится отдельным + issue (#202). Low либо правится, либо снимается решением ревьюера с записью + в документе. 9. **Скоуп не расширяется.** Всё найденное вне ТЗ — новый issue, а не попутная правка. Блокирующая находка отправляет текущий issue в «Заблокировано». 10. **Каждый коммит класса A и B несёт трейлер `Issue: #NN`**, ветка называется @@ -445,7 +453,8 @@ issue #NN - **Хендофф:** `Сделано: … · Файлы: … · Гейты: <команда → результат> · НЕ сделано: … · Риски: … · Следующий статус: … · Новые issue: #…` - **Вердикт ревью:** `Вердикт: зелёный/жёлтый/красный · цикл r/<лимит> · - High: N · Medium: N → #… · Документ: docs/reviews/…` + High: N · Medium: N → в задаче | #… · Документ: docs/reviews/…` + («→ #…» — только у Medium вне скоупа; находки в скоупе возвращаются автору) - **Закрытие:** `Выпущено в <тег беты> · CI: <ссылка> · Changelog: <ссылка>` **Вперёд двигает только зелёный вердикт.** Жёлтый и красный возвращают автору; @@ -686,8 +695,8 @@ S7-code-review → код-ревью → слияние в dev → S8-merged л ``` Ревьюер — `anthropics/claude-code-action`. Он читает `docs/SCOPE.md`, `AGENTS.md`, -этот документ и тело issue, публикует разбор комментарием, заводит issue на каждую -Medium-находку, кладёт документ в `docs/reviews/` ветки задачи и возвращает вердикт +этот документ и тело issue, публикует разбор комментарием, заводит issue на Medium-находки +вне скоупа задачи (#202), кладёт документ в `docs/reviews/` ветки задачи и возвращает вердикт структурированным JSON. **Метку переставляет отдельный детерминированный шаг по вердикту, а не модель.** @@ -811,7 +820,8 @@ Golden, браузерные смоки, performance и полный HA-харн - принятие golden-эталонов ради зелёного CI или по частичному артефакту; - закрытие issue до выпуска беты с зелёным CI; - переоткрытие закрытого issue вместо нового бага; -- Medium-находки, оставленные как TODO в документе ревью; +- Medium-находки, оставленные как TODO в документе ревью: в скоупе — чинятся + в текущем issue, вне скоупа — становятся отдельным (#202); - **параллельные бэклоги** в файлах (`BACKLOG-*.md`, «планы» в docs); - ревью-документы вне репозитория; - попутные правки «раз уж я здесь»;