feat(claude): auto-* agent stubs для autonomous multi-window workflow (DRAFT) #608
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#608
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/claude-auto-agents-stubs"
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
DRAFT-файлы для autonomous /loop окон — 5 ролей с префиксом
auto-:auto-analyst(sonnet, /loop 30m) — декомпозиция issues из vault inboxauto-backend(sonnet, /loop dynamic) — pickup scope/backend issuesauto-frontend(sonnet, /loop dynamic) — pickup scope/frontend issuesauto-code-reviewer(opus, /loop 5m) — review + merge authorityauto-qa-tester(sonnet, /loop 10m) — Playwright smoke post-mergeПлюс
_autonomous_pickup.md— shared snippet с Forgejo claim/state-transition contract.Все файлы помечены
status: draftв frontmatter +[DRAFT — autonomous loop only]в description, чтобы main session НЕ подхватил их через Task tool случайно.Также fix
.gitignore:.claude/→.claude/*чтобы whitelist'ы!.claude/agents/**работали (git не позволяет re-include children of ignored directory, известное ограничение).Что НЕ активируется этим PR
.claude/commands/work-as-*.mdwrapper'ы — не созданыscope/*,status/*,priority/*) — не созданыСтуб-файлы лежат на диске + теперь в git, но не имеют активного эффекта.
Полная схема
См. vault:
runbooks/multi_agent_autonomous_workflow.md(DRAFT status). 5-window architecture + state machine + per-window walkthrough + cost estimate (~$127/день при активной работе) + open questions.Test plan
.gitignorechange не trigger'ит unwanted file trackingclaude(subagent picker) но не selectable для invoke (description warning)Refs
runbooks/multi_agent_autonomous_workflow.md.claude/agents/backend-engineer.md,tech-analyst.mdetcDeep Code Review — PR #608
Note: mergeable=false — нужен rebase перед merge.
Summary
.claude/agents/auto-*.md+_autonomous_pickup.md; P3:.gitignore).gitignorechange (.claude/→.claude/*) — корректно объяснено, whitelist needs glob-style ignore🟠 High (нужно поправить до un-draft)
1.
auto-backend.md:7—mcp__postgres-gendesign__execute_sqlв autonomous worker = blast radius DML/DDL.claude/rules/sql.mdmigrations идут черезdata/sql/NN_*.sql+deploy.yml, не runtimeexecute_sqlиз worker'аbackend-engineer.mdиспользует SQL files; autonomous версия НЕ должна расширять capabilityexecute_sqlиз tools list. Оставитьlist_objects,get_object_details,explain_queryдля read-only investigation2.
auto-code-reviewer.md:7—mcp__postgres-gendesign__execute_sqlдля reviewerdeep-code-reviewer.md(read-only mandate) имеет ТОЛЬКОexplain_query/analyze_query_indexes— НЕТexecute_sqlexecute_sql3. Env var name inconsistency:
FORGEJO_PAT(stubs) vsFORGEJO_TOKEN(.claude/rules/git-pr.md)_autonomous_pickup.md:13-15envsFORGEJO_BASE_URL/FORGEJO_PAT/FORGEJO_REPO$FORGEJO_TOKEN+$FORGEJO_URLFORGEJO_PAT=..., kill-switch query сработает с пустым$FORGEJO_PAT→ auth fail → AUTH_ERROR halt. Или наоборот: existing scripts сломаютсяFORGEJO_TOKEN+FORGEJO_URL(current convention)4.
auto-code-reviewer.mdНЕ упоминает marker + SHA guard.claude/rules/git-pr.mdтребует на каждом review comment:<!-- gendesign-review-bot: sha=<sha7> verdict=<approve|changes> -->marker.sha7 == head.sha[:7]иначе устаревший verdict игнорируется5.
auto-code-reviewer.mdself-extending guard НЕ упомянут## Auto-merge policyилиCritical workflow rulesв CLAUDE.md — НЕ merge, ping user"НЕ merge PR диффающий .claude/rules/git-pr.md или CLAUDE.md критичные блоки; +blocked +needs-human🟡 Medium
6. Claim race в
_autonomous_pickup.md.assignees[0]— но если оба назначены, читается первый. Race теоретически решается, но описание вводит в заблуждение.assignees | length == 1, либо stricter retry on race7. Stale-claim cleanup — TODO не имплементирован
_autonomous_pickup.md:80"cron на VPS — отдельная задача"scripts/cleanup-stale-claims.sh+.forgejo/workflows/stale-claims.yml, либо описать как issue / follow-up8.
auto-qa-tester.md:60— global kill-switch на 3× FAIL слишком агрессивноpause-botsдля ВСЕХ окон = весь pipeline стоит9.
auto-backend.mdPR body template неполный## Summary+## Test plan+Closes #Nbody: "Closes #N"10. Behavior при
pause-botsmid-work не определёнpause-botsустанавливаетсяpause-botsпоявился пока wip → finish current commit/push, открыть PR (он не merge'нётся пока review-bot тоже paused)"🟢 Low
11.
auto-analyst.mdtoolmcp__obsidian__obsidian_get_recent_changes12.
auto-analyst.mdde-dup черезq=<keywords>— fuzzyforgejo_issue:(уже есть в шаге 6) — это надёжнее13. PAT scope guidance
_autonomous_pickup.mdне упоминает что bot-PAT должен быть narrow-scope (только этот repo, не user-scope)14.
BOT_USERNAMEenv используется, но не задокументирован рядом с FORGEJO_PAT/URL/REPO--data '{"assignees": ["$BOT_USERNAME"]}'Positive
pause-botslabel) — простой и понятный механизмstatus/ready/wip/review/qa/done/blocked) cleanstatus: draft+ явно "NOT for Task-tool spawn" — низкий риск accidental invoke.gitignorechange правильно объяснён в комментеCross-reference verification
auto-backend.mdссылается наbackend-engineer.md+rules/backend.md+sql.md+git-pr.md— все existauto-frontend.mdссылается наfrontend-engineer.md+ui-*.md— existauto-code-reviewer.mdссылается наcode-reviewer.md+deep-code-reviewer.md— existauto-qa-tester.mdссылается наqa-tester.md+deploy.md— existauto-analyst.mdссылается наtech-analyst.md— existsRecommended next steps
execute_sqlиз обоихauto-backendиauto-code-reviewertools lists (🟠 #1, #2)FORGEJO_TOKEN+FORGEJO_URL(🟠 #3)auto-code-reviewer.md(🟠 #4, #5)auto-backend.md(🟡 #9)status: draft→status: stable) — повторный reviewComplexity / blast radius
status: draft, явно "NOT for Task-tool spawn", не активируются автоматическиVerdict: 🟡 COMMENT — ready after rebase + 🟠 High items addressed. Не блокирует как DRAFT, но активация (status→stable) должна закрыть as least 5 high-severity items. Не мержу — mergeable=false, нужен rebase.
Fixup pushed:
76784e9Адресую все 🟠 High + большую часть 🟡 Medium + 🟢 Low из review. Stale-claim cron — TODO в отдельном PR (явно помечено в
_autonomous_pickup.md). Branch update — skip, classifier заблокировал без явного approval (mergeable=false можно решить либоupdate branchчерез UI, либо merge main руками когда я дам ОК).🟠 High — все 5 закрыты
auto-backend.md: убранmcp__postgres-gendesign__execute_sqlиз tools. Оставленыlist_objects,get_object_details,explain_queryдля read-only investigation. Добавлено hard-rule «НЕ исполнять DDL/DML через execute_sql — миграции черезdata/sql/NN_*.sql».auto-code-reviewer.md: убранexecute_sql. Добавленanalyze_query_indexesдля SQL review (тоже read-only). Hard rule прописан._autonomous_pickup.md: env varsFORGEJO_PAT/BASE_URL→FORGEJO_TOKEN/URL(align с.claude/rules/git-pr.md+ existing infra).curl_forgejo()использует$FORGEJO_URL/api/v1/.auto-code-reviewer.mdACT step: каждый comment ОБЯЗАН содержать canonical marker<!-- gendesign-review-bot: sha=<sha7> verdict=<approve/changes/comment> -->. Перед merge — SHA guard: re-GET PR, проверкаhead.sha[:7] == sha7из marker, abort merge если mismatch (stale approval после fixup).auto-code-reviewer.mdHard rules: «NEVER merge self-extending PRs» — diff меняет auto-merge policy в rules/git-pr.md, Critical workflow rules в CLAUDE.md, этот же файлauto-code-reviewer.md, либо содержит литеральный 40-char hex/JWT. Action: comment verdict=changes + status/blocked + needs-human.🟡 Medium — 5/5 адресованы
length == 1 AND .assignees[0] == BOT_USERNAME, иначе best-effort rollback (откатить wip → ready). Race window documented как «не атомично, но verify+rollback minimizes blast»._autonomous_pickup.md(«НЕ имплементировано в текущем PR. Без stale cleanup worker crash = wip forever»). Implementation отложен на отдельный PR.classify_failure()логика —flaky/prod_down/feature_regression. Globalpause-botsтригерится только приprod_down(все FAIL на/healthendpoint или single host). Flaky → retry 1× + +blocked. Feature_regression → +blocked, без pause.auto-backend.mdPR body template: расширен полный rules/git-pr.md format —## Summary+## Test plan+Closes #N._autonomous_pickup.md.🟢 Low — 3/4 закрыты
obsidian_get_recent_changes— skipped verify в этом PR (low risk; если tool отсутствует — auto-analyst упадёт на этом step, escalatepause-botsсам). Можно проверить отдельно.auto-analyst.mdde-dup: preferred — vault frontmatterforgejo_issue: #N(шаг 6). Fuzzyq=<keywords>— fallback с sanity check._autonomous_pickup.mdenv section: PAT scope guidance — «narrow scope: ТОЛЬКО repo lekss361/gendesign (write:issue, write:repository), НЕ user-scope»._autonomous_pickup.mdenv list:BOT_USERNAME=<bot's login>явно документирован + verify command `curl ... /userНе сделано в этом PR
_autonomous_pickup.md. Отдельный PR сscripts/cleanup-stale-claims.sh+.forgejo/workflows/stale-claims.yml.Diff stat
5 files changed, +104 / -26Готов к re-review.
Deep Code Re-Review — PR #608 (delta
89303c9→024bd4c)Summary
024bd4cfrom forgejo/main)76784e9addresses all 5 🟠 High + 4 🟡 Medium из prior comment🟠 High — статус по 5 items из prior review
execute_sqlв auto-backend toolsauto-backend.md:7tools list =list_objects, get_object_details, explain_query(read-only); + явный запрет в "What NOT to do" (line 60)execute_sqlв auto-code-reviewer toolsauto-code-reviewer.md:7tools =list_objects, get_object_details, explain_query, analyze_query_indexes(read-only); + явный запрет (line 79)FORGEJO_PAT/FORGEJO_BASE_URL_autonomous_pickup.md:13-30→FORGEJO_TOKEN+FORGEJO_URL(alignment с.claude/rules/git-pr.md); + credentials verify step (curl /user→BOT_USERNAME); + PAT scope guidance (narrow-scope)auto-code-reviewer.md:40-61canonical marker format<!-- gendesign-review-bot: sha=<sha7> verdict=... -->+ explicit SHA guard step (re-GET head.sha[:7] перед merge)auto-code-reviewer.md:80-85hard exception: 4 trigger rules (rules/git-pr.mdAuto-merge policy, CLAUDE.mdCritical rules, сам файл, 40-char hex literal) → NEVER merge даже при APPROVE🟡 Medium — статус
length == 1 AND .assignees[0] == me+ rollback labels back toreadyauto-qa-tester.md:67-92classifier с тремя ветками:flaky(retry → blocked),prod_down(pause-bots only здесь),feature_regression(blocked, no global pause). Толькоprod_downтригерит global pauseauto-backend.md:39-46теперь содержит## Summary+## Test plan+Closes #Nmatching rules/git-pr.md_autonomous_pickup.md:107-113дефинированная политика: finish commit + push + open PR; PR не merge'нётся пока reviewer paused; claim НЕ release'ится🟢 Low — статус
obsidian_get_recent_changesavailabilityauto-analyst.md:55preferred=vault frontmatterforgejo_issue: #N, fallback=keyword search с явной пометкой "unreliable"_autonomous_pickup.md:18-19narrow scope: ТОЛЬКО repo lekss361/gendesign (write:issue, write:repository), НЕ user-scopeBOT_USERNAMEenv var documented_autonomous_pickup.md:21добавлен в env list с credentials verify stepCross-file impact verification
status: draft, не invoke'ятся через Task. Активация (status→stable) — отдельный PRFORGEJO_PAT→FORGEJO_TOKEN— alignment с уже existing.claude/rules/git-pr.md, никакой существующий код не сломается (стабы ещё не активны)<!-- gendesign-review-bot: sha=<sha7> verdict=... -->)024bd4cmerge commit pulledforgejo/mainбез conflicts;.gitignorechange из prior diff dropped (видимо уже мерджен в main параллельно)Self-extending PR — MERGE POLICY
🚨 Self-extending (auto- agents) — human merge required*
Этот PR создаёт agents с
merge-authority(auto-code-reviewer мерджит APPROVE автономно). Hard exception из.claude/rules/git-pr.md(которую сам PR cites в новом self-extending guard) применяется к этому PR — bot НЕ может self-approve расширение собственных capability.Дополнительно: новый guard в
auto-code-reviewer.md:83explicitly включает "Diff меняет содержимое этого файла (auto-code-reviewer.md)" — что matches dataset PR #608 directly.Action: verdict=approve, но merged=no. Human (lekss361) должен ручную нажать merge button.
Positive (delta-specific)
curl /user→ match BOT_USERNAME) — отличный fail-fast при misconfigComplexity / blast radius
status: draft, не invoke'ятсяVerdict: ✅ APPROVE — все 🟠 High fixed, ready to merge by human.