From 555bbf546c474ce131ad0e06f846ce12c9e4ed6b Mon Sep 17 00:00:00 2001 From: bot-backend Date: Fri, 28 Aug 2026 23:27:22 +0300 Subject: [PATCH] =?UTF-8?q?chore(rules):=20=D1=83=D0=B1=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BE=D1=81=D0=B8=D1=80=D0=BE=D1=82=D0=B5=D0=B2=D1=88?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20PR=20#3198=20?= =?UTF-8?q?=D0=B2=D0=B5=D1=82=D0=BA=D0=B8=20bot-pipeline?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Правила ссылались на механику удалённых ботов. Главное — не косметика: секция "Polling loop / Foreground fallback" безусловно предписывала парсить маркер , который писал auto-code-reviewer. Агента нет, маркера нет — соло-сессия опрашивала PR до Cap 30 iter × 60s в ожидании вердикта, которого не будет, и через полчаса пинговала человека. git-pr.md: - Polling loop: шаг 3 вместо маркера бота теперь merge по зелёному CI, добавлены ветки "checks красные" и "человеческий review с правками" - Refs #N -> Closes #N: обходной путь был нужен только потому, что issue закрывал qa-бот на status/done. Бота нет, иначе issue не закроется никогда - Auto-merge policy: убрано упоминание reviewer-окна и approve+SHA gate delegation.md: - снята ветка "bot-pipeline: label status/needs-analysis, снять claim" Что НЕ менялось: сам self-extending guard, пороги эвристик, Cap 30 iter. --- .claude/rules/delegation.md | 3 +-- .claude/rules/git-pr.md | 15 +++++++-------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/.claude/rules/delegation.md b/.claude/rules/delegation.md index 1821f007..9d6e0000 100644 --- a/.claude/rules/delegation.md +++ b/.claude/rules/delegation.md @@ -28,8 +28,7 @@ ## Эскалация oversized-задачи (worker) Issue/задача выглядит больше одного захода (эвристика: >5 файлов, ИЛИ >500 строк diff, ИЛИ >2ч) → **НЕ исполнять целиком**: -- bot-pipeline: комментарий с планом сплита + label `status/needs-analysis`, снять claim -- interactive: вернуть main-сессии план сплита вместо результата +- вернуть main-сессии план сплита вместо результата ## Целость результата workflow diff --git a/.claude/rules/git-pr.md b/.claude/rules/git-pr.md index 2a736476..5d9097e9 100644 --- a/.claude/rules/git-pr.md +++ b/.claude/rules/git-pr.md @@ -60,7 +60,7 @@ paths: Closes #N ``` -Человеческий PR: `Closes #N` (авто-закрывает issue на merge). **Автономный bot-pipeline: `Refs #N` (НЕ Closes/Fixes/Resolves)** — иначе merge закроет issue до qa, а qa-pickup ищет open `status/qa` → smoke не запустится; в боте issue закрывает **qa** на status/done. Комментарий на issue при PR create: "Working on this in PR #M". +PR: `Closes #N` — issue закрывается автоматически на merge. Комментарий на issue при PR create: "Working on this in PR #M". ## Polling loop @@ -76,16 +76,15 @@ Closes #N 1. `mcp__forgejo__get_pull_request` (или `curl -sH "$H" "$REPO/pulls/"`) → читай `state`, `mergeable`, `head.sha` 2. `state == merged` → stop polling -3. Новый review/comment: `mcp__forgejo__list_pull_reviews` / `list_issue_comments`. Парсь marker `` - - **SHA guard**: `marker.sha7 == head.sha[:7]` — иначе устаревший approval до fixup-push, игнорируй - - `verdict=approve` + SHA match → `mcp__forgejo__merge_pull_request` (squash + delete branch) - - `verdict=changes` → fixup commits + push в `forgejo feat/` + re-poll -4. Нет новых comments → re-schedule 60s -5. **Cap**: 30 iter без resolution → stop, ping user. +3. Checks зелёные + `mergeable` → `mcp__forgejo__merge_pull_request` (squash + delete branch), с оглядкой на § Auto-merge policy +4. Checks красные → читай лог, fixup commits + push в `forgejo feat/` + re-poll +5. Человеческий review с запросом правок → правь, отвечай в треде, re-poll +6. Ничего не изменилось → re-schedule 60s +7. **Cap**: 30 iter без resolution → stop, ping user. ## Auto-merge policy -**Self-merge разрешён (2026-06-27, Mera/Ptica).** Любая GenDesign-сессия — solo/foreground ИЛИ bot-pipeline — мержит свой PR сама (любой scope), когда checks зелёные. В bot-pipeline review остаётся (reviewer-окно ставит `verdict=approve` + SHA match), но merge-authority больше **не** эксклюзив reviewer'а — worker может смержить approved PR сам. Pre-merge gate: зелёный CI + (в pipeline) approve+SHA match. `balance_platform` — никогда не мержит (stage only). +**Self-merge разрешён (2026-06-27, Mera/Ptica).** Любая GenDesign-сессия мержит свой PR сама (любой scope), когда checks зелёные. Pre-merge gate: зелёный CI. `balance_platform` — никогда не мержит (stage only). **Жёсткие исключения (даже при зелёном — НЕ merge, ping human):** - Diff содержит литеральный secret/token/password/credential (40-char hex, API keys, JWT, и т.д.) — security tripwire. -- 2.45.3