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.