chore(rules): drop blocked-scope list from git-pr.md #506

Merged
lekss361 merged 2 commits from chore/git-pr-rules-any-scope-v2 into main 2026-05-24 11:26:10 +00:00
Owner

Summary

  • Body section Auto-merge scope (lines 87-103) содержал legacy blocked-list (data/sql, services, scrapers, docker-compose, Caddyfile, workflows), который прямо противоречил header line 10 (APPROVE → merge любой scope, 2026-05-16) и memory rule [Auto-merge any scope].
  • Из-за двусмысленности session-side classifier'ы ошибочно блокировали auto-merge approved PR (incident: #501-504 ждали ручного merge).
  • Replaced с concise Auto-merge policy секцией: Any scope OK при verdict=approve + SHA match; Hard exceptions: literal secret/token/password в diff (security tripwire) + self-extending guard (изменение самих правил через human).
  • Cleanup в Polling loop: убраны Scope guard reference и Blocked-scope cap.

Test plan

  • diff чистый, только git-pr.md (7 insertions, 18 deletions)
  • pre-commit hooks passed
  • deep-code-reviewer (cron auto-pick на следующем fire)
  • self-extending guard: этот PR меняет Auto-merge policy → требует human approval даже при APPROVE

Self-extending guard срабатывает на этот PR — auto-merge заблокирован, human должен подтвердить merge вручную.

## Summary - Body section Auto-merge scope (lines 87-103) содержал legacy blocked-list (data/sql, services, scrapers, docker-compose, Caddyfile, workflows), который прямо противоречил header line 10 (APPROVE → merge любой scope, 2026-05-16) и memory rule [Auto-merge any scope]. - Из-за двусмысленности session-side classifier'ы ошибочно блокировали auto-merge approved PR (incident: #501-504 ждали ручного merge). - Replaced с concise Auto-merge policy секцией: Any scope OK при verdict=approve + SHA match; Hard exceptions: literal secret/token/password в diff (security tripwire) + self-extending guard (изменение самих правил через human). - Cleanup в Polling loop: убраны Scope guard reference и Blocked-scope cap. ## Test plan - [x] diff чистый, только git-pr.md (7 insertions, 18 deletions) - [x] pre-commit hooks passed - [ ] deep-code-reviewer (cron auto-pick на следующем fire) - [ ] self-extending guard: этот PR меняет Auto-merge policy → требует human approval даже при APPROVE Self-extending guard срабатывает на этот PR — auto-merge заблокирован, human должен подтвердить merge вручную.
lekss361 added 1 commit 2026-05-24 10:59:23 +00:00
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.
Author
Owner

Deep Code Review — verdict

Summary

  • Status: APPROVE (content-wise) — но human merge required (см. ниже)
  • Files: 1 (P1 — workflow rule changing bot merge authority)
  • Lines: +7 / -18 · 1 changed file · PR #506

🚨 Self-extending change — human merge required

Этот PR редактирует секцию ## Auto-merge policy (новое имя) / ## Auto-merge scope (старое) в .claude/rules/git-pr.md — именно ту самую, которая определяет когда bot может авто-мержить. Per current (pre-merge) rule:

PR меняет Auto-merge scope / blocked-list в любом .claude/rules/*.md (self-extending rules → нужен human)

Это guard против bot loop где bot сам себе расширяет права на merge. Поэтому даже при APPROVE вердикте — bot НЕ должен мержить. Human merge required. Iron-ically, новый wording PR'а тоже сохраняет этот self-extending guard (good!) — но именно этот PR подпадает под него.

Content review

Что проверено:

  1. Diff не теряет важных rules:

    • Secret/token tripwire — preserved (даже сильнее: явно перечислены 40-char hex, API keys, JWT)
    • Self-extending guard — preserved (block name updated Auto-merge scopeAuto-merge policy)
    • CLAUDE.md Critical workflow rules guard — preserved
    • Удалённые allowed / blocked списки путей (data/sql, alembic, api/v1, services, scrapers, docker-compose, Caddyfile, workflows, frontend UI, agents, etc.) — это и есть точка PR'а: blocked-list снят 2026-05-16 (см. memory rule [Auto-merge any scope]).
    • Удалённая строка Blocked-scope cap = 5 в polling loop — корректно, blocked-scope больше не существует, cap унифицирован к 30 iter
    • Удалённая строка Scope guard в polling step 3 — корректно, нет blocked paths больше
    • Удалённое Touches both → more restrictive (block) — корректно, нет двух категорий
  2. Wording корректно отражает текущую политику:

    • Header line 10 файла уже декларирует «APPROVE → merge любой scope» (2026-05-16) — body теперь consistent с header (раньше противоречил, что вызывало incident с classifier'ом блокировавшим PR #501-504)
    • Cross-ref на memory rule [Auto-merge any scope] — хороший anchor для audit trail
    • Hard exceptions явные и actionable
  3. Self-extending guard упомянут:

    • Да, явно: «PR меняет блок ## Auto-merge policy в этом файле или Critical workflow rules в CLAUDE.md (self-extending guard — изменение правил всегда через human)»
    • Wording даже улучшен по сравнению со старым (объясняет почему self-extending → human)
  4. Typos / markdown:

    • Нет typos.
    • Markdown syntactically clean (header ##, bullets, inline code в backticks).
    • [Auto-merge any scope] — memory rule reference style, consistent с остальным файлом.

Cross-file impact

  • CLAUDE.md — grep подтвердил отсутствие cross-ref на Auto-merge или blocked-list. Удаление списка ничего не ломает.
  • Other .claude/rules/*.md — нет упоминаний Auto-merge scope (только git-pr.md владеет policy).
  • .claude/agents/deep-review-phases/phase-5-verdict.md уже использует имя ## Auto-merge policy — новый header в git-pr.md теперь aligns.
  • code-reviewer / deep-code-reviewer агенты потеряют scope-based блокировку, но это намеренно (по memory rule). Self-extending guard остаётся как защита от runaway loops.
  1. Human merge (squash + delete branch) — НЕ через bot.
  2. После merge: проверить что reviewer agents (code-reviewer, deep-code-reviewer) корректно читают новую policy секцию (имена ## Auto-merge policy vs ## Auto-merge scope могут быть hard-coded в их promptах). Grep .claude/agents/** на Auto-merge scope чтобы убедиться.
  3. (Optional) Опционально добавить дату в hard exception: (decided 2026-05-24) рядом с self-extending guard — для будущего audit.

Complexity / blast radius

  • Risk: LOW (docs-only change, чёткая semantic preservation)
  • Reversibility: HIGH (один revert PR'а возвращает blocked-list)
  • Merge window: anytime (workflow rule, не runtime)

Verdict body summary: APPROVE on content, но self-extending — human merge.

<!-- gendesign-review-bot: sha=c9737d2 verdict=approve --> ## Deep Code Review — verdict ### Summary - Status: APPROVE (content-wise) — но human merge required (см. ниже) - Files: 1 (P1 — workflow rule changing bot merge authority) - Lines: +7 / -18 · 1 changed file · PR #506 ### 🚨 Self-extending change — human merge required Этот PR редактирует секцию `## Auto-merge policy` (новое имя) / `## Auto-merge scope` (старое) в `.claude/rules/git-pr.md` — именно ту самую, которая определяет когда bot может авто-мержить. Per current (pre-merge) rule: > PR меняет `Auto-merge scope` / blocked-list в любом `.claude/rules/*.md` (self-extending rules → нужен human) Это guard против bot loop где bot сам себе расширяет права на merge. Поэтому даже при APPROVE вердикте — bot НЕ должен мержить. **Human merge required.** Iron-ically, новый wording PR'а тоже сохраняет этот self-extending guard (good!) — но именно этот PR подпадает под него. ### Content review **✅ Что проверено:** 1. **Diff не теряет важных rules**: - Secret/token tripwire — preserved (даже сильнее: явно перечислены 40-char hex, API keys, JWT) - Self-extending guard — preserved (block name updated `Auto-merge scope` → `Auto-merge policy`) - CLAUDE.md `Critical workflow rules` guard — preserved - Удалённые ✅ allowed / ❌ blocked списки путей (data/sql, alembic, api/v1, services, scrapers, docker-compose, Caddyfile, workflows, frontend UI, agents, etc.) — это и есть точка PR'а: blocked-list снят 2026-05-16 (см. memory rule [Auto-merge any scope]). - Удалённая строка `Blocked-scope cap = 5` в polling loop — корректно, blocked-scope больше не существует, cap унифицирован к 30 iter - Удалённая строка `Scope guard` в polling step 3 — корректно, нет blocked paths больше - Удалённое `Touches both → more restrictive (block)` — корректно, нет двух категорий 2. **Wording корректно отражает текущую политику**: - Header line 10 файла уже декларирует «APPROVE → merge любой scope» (2026-05-16) — body теперь consistent с header (раньше противоречил, что вызывало incident с classifier'ом блокировавшим PR #501-504) - Cross-ref на memory rule `[Auto-merge any scope]` — хороший anchor для audit trail - Hard exceptions явные и actionable 3. **Self-extending guard упомянут**: - Да, явно: «PR меняет блок `## Auto-merge policy` в этом файле или `Critical workflow rules` в CLAUDE.md (self-extending guard — изменение правил всегда через human)» - Wording даже улучшен по сравнению со старым (объясняет _почему_ self-extending → human) 4. **Typos / markdown**: - Нет typos. - Markdown syntactically clean (header `##`, bullets, inline code в backticks). - `[Auto-merge any scope]` — memory rule reference style, consistent с остальным файлом. ### Cross-file impact - `CLAUDE.md` — grep подтвердил отсутствие cross-ref на `Auto-merge` или `blocked-list`. Удаление списка ничего не ломает. - Other `.claude/rules/*.md` — нет упоминаний `Auto-merge scope` (только `git-pr.md` владеет policy). - `.claude/agents/deep-review-phases/phase-5-verdict.md` уже использует имя `## Auto-merge policy` — новый header в git-pr.md теперь aligns. - `code-reviewer` / `deep-code-reviewer` агенты потеряют scope-based блокировку, но это намеренно (по memory rule). Self-extending guard остаётся как защита от runaway loops. ### Recommended next steps 1. **Human merge** (squash + delete branch) — НЕ через bot. 2. После merge: проверить что reviewer agents (`code-reviewer`, `deep-code-reviewer`) корректно читают новую policy секцию (имена `## Auto-merge policy` vs `## Auto-merge scope` могут быть hard-coded в их promptах). Grep `.claude/agents/**` на `Auto-merge scope` чтобы убедиться. 3. (Optional) Опционально добавить дату в hard exception: `(decided 2026-05-24)` рядом с self-extending guard — для будущего audit. ### Complexity / blast radius - Risk: LOW (docs-only change, чёткая semantic preservation) - Reversibility: HIGH (один revert PR'а возвращает blocked-list) - Merge window: anytime (workflow rule, не runtime) **Verdict body summary: APPROVE on content, но self-extending — human merge.**
lekss361 added 1 commit 2026-05-24 11:11:18 +00:00
Reviewer's optional recommendation #3: добавить дату в hard
exception для audit trail. Также расширил wording: 'предотвращает
bot-loop где bot сам расширяет свои merge права' — делает intent
явным для будущих reviewers.
Author
Owner

Fixup pushed (head 35bf050) addressing optional review recommendation #3 (date stamp on self-extending guard) + расширенный wording объясняющий intent.

Подтверждение recommendation #2 (grep agents на старое имя секции): проверено вручную перед fixup —

  • .claude/agents/code-reviewer.md — нет references на Auto-merge scope или blocked-list
  • .claude/agents/deep-code-reviewer.md — references phase-5-verdict.md для policy, имя не hardcoded
  • .claude/agents/deep-review-phases/phase-5-verdict.md — уже использует ## Auto-merge policy (PR review mode) + явный any-scope override per 2026-05-16
  • .claude/rules/*.md (кроме git-pr.md) — нет references
  • CLAUDE.md — нет references

Grep clean. Recommendation #1 (human merge) — за тобой.

Fixup pushed (head 35bf050) addressing optional review recommendation #3 (date stamp on self-extending guard) + расширенный wording объясняющий intent. Подтверждение recommendation #2 (grep agents на старое имя секции): проверено вручную перед fixup — - `.claude/agents/code-reviewer.md` — нет references на `Auto-merge scope` или `blocked-list` - `.claude/agents/deep-code-reviewer.md` — references `phase-5-verdict.md` для policy, имя не hardcoded - `.claude/agents/deep-review-phases/phase-5-verdict.md` — уже использует `## Auto-merge policy (PR review mode)` + явный any-scope override per 2026-05-16 - `.claude/rules/*.md` (кроме git-pr.md) — нет references - `CLAUDE.md` — нет references Grep clean. Recommendation #1 (human merge) — за тобой.
Author
Owner

Deep Code Review (re-review) — verdict

Summary

  • Status: APPROVE — Self-extending — human merge required
  • Files: 1 (.claude/rules/git-pr.md) · Fixup delta: +1/-1 (one line, P1)
  • Prior SHA: c9737d2 → Fixup SHA: 35bf050

Fixup delta verified

One-line change на L92, addressing optional recommendation #3 от prior review:

-- 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 права)

Verified:

  • Date stamp 2026-05-24 корректен (matches today, matches project convention used в memory files типа feedback_auto_merge_any_scope.md 2026-05-16)
  • Markdown integrity: backticks balanced (## Auto-merge policy, Critical workflow rules), parenthetical opens/closes correctly, em-dash consistent, no list-item break
  • Bullet остаётся single-line element — renders как один <li>
  • Wording addition ("предотвращает bot-loop где bot сам расширяет свои merge права") — non-functional threat-model clarification, не меняет rule effect

Recommendation #2 confirmation (follow-up comment 2986)

Author заявил отсутствие stale references на Auto-merge scope / blocked-list в .claude/agents/**. Independent grep подтверждает: grep -rn 'Auto-merge scope|blocked-scope|blocked-list' .claude/agents/ → No matches found.

Единственные оставшиеся references на старые имена — в самом .claude/rules/git-pr.md (working tree, до merge этого PR), и они все удаляются этим PR. No cleanup debt.

Cross-file impact

  • phase-5-verdict.md уже использует новое имя ## Auto-merge policy (PR review mode) + any-scope override — consistent с merged state
  • code-reviewer.md / deep-code-reviewer.md — references по содержанию, не по имени секции — не affected

Security / correctness

  • Никаких credentials в diff (40-char hex check passes)
  • Self-extending guard всё ещё на месте + теперь усилен явным threat-model rationale
  • Backward compat: rule effect identical к pre-fixup версии (только wording)

Verdict

APPROVE — но Self-extending — human merge required. Этот PR редактирует именно ту секцию ## Auto-merge policy, которая по правилу самого PR требует human merge. Bot НЕ должен авто-мержить даже при verdict=approve.

Ping @lekss361 для manual squash-merge.

<!-- gendesign-review-bot: sha=35bf050 verdict=approve --> ## Deep Code Review (re-review) — verdict ### Summary - Status: APPROVE — **Self-extending — human merge required** - Files: 1 (`.claude/rules/git-pr.md`) · Fixup delta: +1/-1 (one line, P1) - Prior SHA: c9737d2 → Fixup SHA: 35bf050 ### Fixup delta verified One-line change на L92, addressing optional recommendation #3 от prior review: ```diff -- 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 права) ``` **Verified:** - Date stamp `2026-05-24` корректен (matches today, matches project convention used в memory files типа `feedback_auto_merge_any_scope.md` 2026-05-16) - Markdown integrity: backticks balanced (`## Auto-merge policy`, `Critical workflow rules`), parenthetical opens/closes correctly, em-dash consistent, no list-item break - Bullet остаётся single-line element — renders как один `<li>` - Wording addition ("предотвращает bot-loop где bot сам расширяет свои merge права") — non-functional threat-model clarification, не меняет rule effect ### Recommendation #2 confirmation (follow-up comment 2986) Author заявил отсутствие stale references на `Auto-merge scope` / `blocked-list` в `.claude/agents/**`. Independent grep подтверждает: `grep -rn 'Auto-merge scope|blocked-scope|blocked-list' .claude/agents/` → No matches found. Единственные оставшиеся references на старые имена — в самом `.claude/rules/git-pr.md` (working tree, до merge этого PR), и они все удаляются этим PR. No cleanup debt. ### Cross-file impact - `phase-5-verdict.md` уже использует новое имя `## Auto-merge policy (PR review mode)` + any-scope override — consistent с merged state - `code-reviewer.md` / `deep-code-reviewer.md` — references по содержанию, не по имени секции — не affected ### Security / correctness - Никаких credentials в diff (40-char hex check passes) - Self-extending guard всё ещё на месте + теперь усилен явным threat-model rationale - Backward compat: rule effect identical к pre-fixup версии (только wording) ### Verdict **APPROVE — но Self-extending — human merge required.** Этот PR редактирует именно ту секцию `## Auto-merge policy`, которая по правилу самого PR требует human merge. Bot НЕ должен авто-мержить даже при verdict=approve. Ping @lekss361 для manual squash-merge.
lekss361 merged commit 606d3fe7c0 into main 2026-05-24 11:26:10 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#506
No description provided.