From c9737d26c94e6f0d2c8b093c88d5e3fc87e63df2 Mon Sep 17 00:00:00 2001 From: lekss361 Date: Sun, 24 May 2026 13:58:01 +0300 Subject: [PATCH 1/2] =?UTF-8?q?chore(rules):=20drop=20blocked-scope=20list?= =?UTF-8?q?=20from=20git-pr.md=20=E2=80=94=20align=20with=20any-scope=20po?= =?UTF-8?q?licy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Header line 10 + memory rule [Auto-merge any scope] (2026-05-16) заявили APPROVE → merge любой scope. Body всё ещё содержал устаревший blocked-list (data/sql, services, scrapers, и т.д.), из-за которого session-side classifier'ы ошибочно блокировали auto-merge approved PR (incident: PRs #501-504 ждали ручного merge). Заменил Auto-merge scope section на Auto-merge policy: - Любой scope OK при verdict=approve + SHA match - Hard exception: secrets в diff + self-extending guard (изменение самих правил всегда через human) Также убрал Scope guard и Blocked-scope cap из Polling loop section. --- .claude/rules/git-pr.md | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/.claude/rules/git-pr.md b/.claude/rules/git-pr.md index 8a9d769c..c43b6644 100644 --- a/.claude/rules/git-pr.md +++ b/.claude/rules/git-pr.md @@ -78,29 +78,18 @@ Closes #N 2. `state == merged` → stop polling 3. Новый review/comment: `mcp__forgejo__list_pr_reviews` / `list_issue_comments`. Парсь marker `` - **SHA guard**: `marker.sha7 == head.sha[:7]` — иначе устаревший approval до fixup-push, игнорируй - - **Scope guard** (см. ниже): если blocked paths → ping user, не auto-merge - - `verdict=approve` + SHA match + scope OK → `mcp__forgejo__merge_pull_request` (squash + delete branch) + - `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. Blocked-scope cap = 5. +5. **Cap**: 30 iter без resolution → stop, ping user. -## Auto-merge scope +## Auto-merge policy -**✅ Разрешено** (PR diff целиком в этих путях — bot merge без human): -- `CLAUDE.md`, `README.md`, `docs/**` -- `frontend/src/app/**` UI-only без новых endpoints -- `frontend/public/**` -- `.claude/agents/**`, `.claude/rules/**`, `memory/feedback_*.md` +**Любой scope** — bot мержит при `verdict=approve` + SHA match. Blocked-list снят 2026-05-16 ([Auto-merge any scope] memory rule). -**❌ Блокировано** (любой файл из списка → human approval): -- `data/sql/**`, `backend/alembic/versions/**` -- `backend/app/api/v1/**`, `backend/app/services/**`, `backend/app/scrapers/**` -- `docker-compose*.yml`, `Caddyfile`, `.github/workflows/**` -- Любой файл с упоминанием secret / token / password / credential -- PR меняет `Critical workflow rules` или `Auto-merge scope` в CLAUDE.md -- PR меняет `Auto-merge scope` / blocked-list в любом `.claude/rules/*.md` (self-extending rules → нужен human) - -Touches both → more restrictive (block). +**Жёсткие исключения** (даже при APPROVE — НЕ merge, ping user): +- Diff содержит литеральный secret/token/password/credential (40-char hex, API keys, JWT, и т.д.) — security tripwire +- PR меняет блок `## Auto-merge policy` в этом файле или `Critical workflow rules` в CLAUDE.md (self-extending guard — изменение правил всегда через human) ## Sequential PRs -- 2.45.3 From 35bf050e63afb2130595122972606a0f0b309582 Mon Sep 17 00:00:00 2001 From: lekss361 Date: Sun, 24 May 2026 14:10:53 +0300 Subject: [PATCH 2/2] chore(rules): add decision date to self-extending guard (review #506 fixup) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewer's optional recommendation #3: добавить дату в hard exception для audit trail. Также расширил wording: 'предотвращает bot-loop где bot сам расширяет свои merge права' — делает intent явным для будущих reviewers. --- .claude/rules/git-pr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.claude/rules/git-pr.md b/.claude/rules/git-pr.md index c43b6644..ae4a9e6f 100644 --- a/.claude/rules/git-pr.md +++ b/.claude/rules/git-pr.md @@ -89,7 +89,7 @@ Closes #N **Жёсткие исключения** (даже при APPROVE — НЕ merge, ping user): - Diff содержит литеральный secret/token/password/credential (40-char hex, API keys, JWT, и т.д.) — security tripwire -- PR меняет блок `## Auto-merge policy` в этом файле или `Critical workflow rules` в CLAUDE.md (self-extending guard — изменение правил всегда через human) +- PR меняет блок `## Auto-merge policy` в этом файле или `Critical workflow rules` в CLAUDE.md (self-extending guard, decided 2026-05-24 — изменение правил всегда через human, предотвращает bot-loop где bot сам расширяет свои merge права) ## Sequential PRs -- 2.45.3