docs(claude): formalize Auto-review passed as approval signal #85
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#85
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "chore/auto-review-approval-rule"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Per user feedback after PR #84 merge — формализую факт что "Auto-review passed" / "LGTM" от auto-review бота = approval signal (без отдельного "merge it" от человека).
Что меняется
CLAUDE.md:feedback_pr_workflow.md(local memory, not in PR):Test plan
Closes follow-up на PR #84 workflow.
❌ Changes requested — 3 блокирующих и 2 для обсуждения:
Блокирующие:
Типо
полinging-detectedна новом bullet (Critical workflow rules, item 5, второй sub-bullet) — смесь cyrillic/latin, похоже на artefact чернового аннотирования. Заменить на plain-language note или убрать вообще.Race condition в "Polling loop" step 3-4: после fixup-push новый SHA, но старый LGTM комментарий остаётся в PR (GitHub не инвалидирует comments при новом commit). Если polling loop тика́ет быстрее чем auto-review bot успевает re-review (тот раз в 1 минуту, эти полл-итерации тоже 60с — гонка реальна) — loop увидит "старый" LGTM, выполнит step 3, замержит unreviewed код. Фикс: в step 1/3 добавить guard "LGTM comment is valid approval ONLY if marker SHA in comment body == current PR HEAD SHA". У бота уже есть HTML-маркер
<!-- gendesign-review-bot: sha=<sha7> verdict=approve -->— используй его.Self-approving chain без human gate: бот = тоже Claude (другая сессия), пишет код в одной сессии, ревьюит в другой, мерджит в третьей — за всю цепочку нет ни одного человеческого действия. PR #84 ввёл "Не merge без явного user approval"; этот PR его отменяет (rule 5: bot LGTM = approval). Если это осознанный выбор — добавь явную фразу в TL;DR или в новый rule 5 ("Bot self-approval разрешён для рутинных PR в скоупе X, для security/migrations/etc — нужен human"). Иначе будущая Claude-сессия применит правило вне границ.
Worth checking:
Когда auto-modesection (после "Polling loop" в файле) — её bullet list не апдейтится в этом PR. Если там по-прежнему "финальный gh pr merge только по явному approval от пользователя" — это прямое противоречие с новым step 3. Синхронизировать в этом же PR.Cap на 30 итераций (step 6) — для 60с интервала это 30 минут autonomous loop без human ping. Может быть много для рискованных изменений (миграции, схема, security). Возможно явный allowlist путей где разрешён auto-merge?
Fix and push — bot re-review автоматически.
Все 5 пунктов исправлены в
1682d9f:полinging-detectedубрано — заменено plain-language объяснением про SHA-валидацию.headRefOid[:7], иначе approval игнорируется. Также явно указано: comment "Auto-review passed" / "LGTM" без HTML marker → не доверять.Сам этот PR попадает в blocked scope (меняет CLAUDE.md рядом с Critical workflow rules / Auto-merge scope) — поэтому даже при
verdict=approveя не делаю auto-merge, жду явного approval от @lekss361.⚠️ Auto-review: minor (non-blocking) — 4 прошлых блокера устранены чисто, 2 новых рекомендации:
Что починилось (✅):
полinging-detected— удалён вместе с переписанным bullet.marker.sha7 == headRefOid[:7]).CLAUDE.mdрядом сCritical workflow rules/Auto-merge scope/ auth блокированы от auto-merge. Этот PR сам попадает под clause — auto-merge невозможен → no loophole.Когда auto-modesection синхронизирована.Новые рекомендации:
Polling loop не обрабатывает
verdict=minorиverdict=skip. Бот эмитит 4 verdict'а (approve,minor,changes,skip), но rule покрывает только два. Сейчас PR с verdict=minor будет молча зацикливаться до cap=30 (или 5 для scope ❌), хотяminor= pass with notes = safe to merge. Аналогичноskip(PR >2000 строк) — без явного handling auto-merge никогда не сработает на scope-allowed PR. Предложение: в step 3 добавить:verdict=minor+ SHA match + scope OK → merge как приapprove(можно с notification "merged with minor notes")verdict=skip→ ping user (бот сам отказался ревьюить)frontend/src/app/**без явного исключенияapp/api/**. В Next 15 app router route handlers живут вfrontend/src/app/api/<route>/route.ts— это де-факто backend endpoints. Qualifier "UI-only changes без новых API endpoints" не проверяем глобом (gh pr view --json filesвозвращает paths, не content). PR добавляющийfrontend/src/app/api/webhook/route.tsпопадёт под allow-list и проскочит. Предложение: добавитьfrontend/src/app/api/**в блок-лист явно, либо убрать qualifier как непроверяемый.Не блокирует merge — обе проблемы default'ятся safely (silent ignore vs auto-merge). Но если хочешь чистую policy — стоит починить в этом же PR.
approv
@lekss361 видно «approv» — это «approved / залей» или сообщение оборвалось? PR self-modify scope (правит CLAUDE.md → Critical workflow rules + Auto-merge scope) — я по новой rule 6 жду явного подтверждения. Если ok — напиши «merge it» или «approved» полностью.
approved