From 8eec4f1d86781b6cb6eb35da3dd5b91b991e18ff Mon Sep 17 00:00:00 2001 From: Dmitry Dementev Date: Sat, 4 Jul 2026 22:52:03 +0300 Subject: [PATCH] =?UTF-8?q?fix(skill):=20coordinator-loop=20=E2=80=94=20re?= =?UTF-8?q?run=20=D1=80=D0=B5=D0=B2=D1=8C=D1=8E=20=D0=BF=D1=80=D0=BE=D0=B4?= =?UTF-8?q?=D0=BE=D0=BB=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=D0=BC,=20=D0=BD?= =?UTF-8?q?=D0=B5=20=D1=81=D0=B2=D0=B5=D0=B6=D0=B5=D0=B9=20=D1=81=D0=B5?= =?UTF-8?q?=D1=81=D1=81=D0=B8=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - координатор прочитал «свежие сессии» как запрет продолжать субагента: пять полных xhigh-обходов финального ревью вместо узких rerun-ов. - Что: - правило уточнено: свежая сессия — про запуск без форка истории; узкий rerun — продолжение того же ревьюера через send_input. - свежий ревьюер обязателен по триггерам: спор, эскалация, широкая переработка, слабый индекс; правило продублировано в шаге 5 и финале. - reviewer-prompt.md: PREVIOUS_FINDINGS_BLOCK — только для свежего субагента. - Проверка: - сверка с механикой rerun в claude-team-review (продолжение — штатный путь, блок прошлых находок — для свежего). Co-Authored-By: Claude Fable 5 --- agents/.agents/skills/coordinator-loop/SKILL.md | 15 ++++++++++++++- .../references/reviewer-prompt.md | 11 +++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/agents/.agents/skills/coordinator-loop/SKILL.md b/agents/.agents/skills/coordinator-loop/SKILL.md index d5bf480..e1c731f 100644 --- a/agents/.agents/skills/coordinator-loop/SKILL.md +++ b/agents/.agents/skills/coordinator-loop/SKILL.md @@ -61,6 +61,16 @@ worker-у их индексы **дословно**, без своих интер независим. Не трать циклы на попытки передать субагенту полный контекст — это против дизайна, а не ограничение, которое надо обойти. +Свежая сессия — правило **запуска**, не запрет продолжения: уже запущенного субагента +между кругами **продолжай** (`send_input`), не пересоздавай. Worker-а — всегда: его +контекст по issue — актив. Ревьюера на rerun после точечных правок — тем же, узким +вопросом: «закрывают ли правки твои находки, не внесено ли нового рядом» — полный +обход заново не нужен. **Свежий ревьюер обязателен** там, где нужен незаинтересованный +взгляд: узкий гейт по спору, эскалация уровня, правки перекроили реализацию широко, +индекс прошлого ревьюера слаб или сомнителен. Серия полных обходов свежими xhigh-сессиями +на каждый rerun — сжигание бюджета, а не независимость (эмпирика 2026-07-04: пять +свежих кругов финального ревью). + ## Цикл на одну задачу 1. **Чистое дерево.** `git status --short` до старта. Чужие правки — стоп, спроси @@ -77,7 +87,8 @@ worker-у их индексы **дословно**, без своих интер бессмысленно). По назначенному режиму запусти ревьюеров; запуск и вердикт каждого фиксируй в журнале в момент события. Индекс находок перешли worker-у **дословно**, его триаж прими индексом же. Rerun после правок по гейт-находкам назначаешь **ты**, - автоматически — это не concern worker-а. **Круг** — одна итерация «прогон(ы) ревью → + автоматически — это не concern worker-а; узкий rerun — продолжением того же + ревьюера, свежий — по триггерам (см. «Роли»). **Круг** — одна итерация «прогон(ы) ревью → триаж worker-а»; пара «по задаче + по коду» на гейте — один круг. Гейт закрыт, когда все назначенные прогоны вернули `APPROVED`. Политика кругов (тождество находок между кругами судит worker в триаже, не ты — по индексам оно не определяется): @@ -224,6 +235,8 @@ Per-finding триаж («реально / ложно / чинить») дела и проверяет, не разъехалась ли поэтапная реализация с замыслом. Возвращает индекс. Один прогон добавляет к общей стоимости немного, а ловит дрейф, который per-issue срезы не видят — ни одно ревью отдельной задачи не сверяло целое с целым замыслом. + Rerun'ы финального ревью — по общему правилу продолжения: точечные правки проверяет + **тот же** ревьюер узким вопросом, свежая xhigh-сессия на каждый круг не нужна. Это Codex (одна линия): берёт **охват** (целое против замысла), но не кросс-линию — глубокие сквозные слепые пятна линии остаются на п.3. 3. **Handoff — условие выхода, а не пожелание.** Для нетривиальной цепочки цикл не diff --git a/agents/.agents/skills/coordinator-loop/references/reviewer-prompt.md b/agents/.agents/skills/coordinator-loop/references/reviewer-prompt.md index 11912af..949101d 100644 --- a/agents/.agents/skills/coordinator-loop/references/reviewer-prompt.md +++ b/agents/.agents/skills/coordinator-loop/references/reviewer-prompt.md @@ -38,11 +38,14 @@ reviewer-субагенту. Адаптирован из `reviewer-prompt.md` с {ROUND} # 1 — первичное ревью; N — rerun после правок worker-а {PREVIOUS_FINDINGS_BLOCK} -# Только на rerun (свежий субагент не знает прошлого круга): дословно находки -# прошлого круга; что worker исправил; что отклонил и с каким обоснованием -# (контракт/тест). Отклонённое оценивай по существу: обоснование верно — -# признай; неверно — переформулируй находку с контраргументом и новым +# Только когда rerun делает СВЕЖИЙ субагент (не знает прошлого круга): дословно +# находки прошлого круга; что worker исправил; что отклонил и с каким +# обоснованием (контракт/тест). Отклонённое оценивай по существу: обоснование +# верно — признай; неверно — переформулируй находку с контраргументом и новым # доказательством, а не повторением прежней формулировки. +# При продолжении того же ревьюера блок не нужен: передай через send_input +# только узкий вопрос — закрывают ли правки твои находки, не внесено ли нового +# рядом; полный обход заново не повторять. ## Что можно