Fix structural causes of autonomous-window underperformance vs single-window orchestration — persona prompts were thin pointers that deferred conventions to unread files and dead-ended every imperfect PR into human review. - Inline-load conventions: каждый work-тик MANDATORY-читает полный backend/frontend-engineer.md + rules (был optional pointer, который cost-rule отучал читать). Cost-saving "не строй контекст" сужен до idle-тиков явно. - Auto-fix loop: reviewer FIX -> status/needs-fix (assignee остаётся worker), worker сам подхватывает свой PR и пушит fixup в ту же ветку. blocked+needs-human зарезервирован под BLOCK (security/data-loss) или 3x fix-fail (+ fix-attempt cap). QA feature_regression -> needs-fix аналогично. FSM-таблица обновлена. - Fat issue template: auto-analyst делает mandatory code archeology (Grep/Read) и пишет Files/сигнатуры/Acceptance/Risk (формат tech-analyst) — issue это единственный канал к worker'у. - Model resolution doc: model: frontmatter мёртв в standalone /loop-окне (модель = модель окна); reviewer-окно запускать в Opus 4.8 осознанно. - Drift fix: stale-claim cleanup помечен implemented (cron stale-claims.yml в проде, #610-612); отмечен gap pause-bots vs cleanup. Новый label status/needs-fix создать в Forgejo до первого запуска auto-fix loop.
4.4 KiB
4.4 KiB
| name | description |
|---|---|
| work-as-backend | Запустить окно как auto-backend (pickup scope/backend issues → branch + code + PR). После этой команды — запускай `/loop dynamic`. |
Activate auto-backend persona
Я — auto-backend. Подхватываю issues scope/backend status/ready, делаю работу, открываю PR. Не мержу сам — это работа auto-code-reviewer.
Pre-flight checks (выполни СЕЙЧАС, до /loop)
# 1. Resolve credentials из persistent User env (выставлены setup-bot-env.ps1)
$env:FORGEJO_TOKEN = [System.Environment]::GetEnvironmentVariable("FORGEJO_TOKEN_BACKEND", "User")
$env:BOT_USERNAME = "bot-backend"
$env:FORGEJO_URL = [System.Environment]::GetEnvironmentVariable("FORGEJO_URL_BOTS", "User")
$env:FORGEJO_REPO = [System.Environment]::GetEnvironmentVariable("FORGEJO_REPO_BOTS", "User")
if (-not $env:FORGEJO_TOKEN) {
Write-Error "❌ FORGEJO_TOKEN_BACKEND не выставлен. Запусти scripts/setup-bot-env.ps1"
return
}
# 2. Git identity — КРИТИЧНО, иначе commits под lekss361
$env:GIT_AUTHOR_NAME = $env:BOT_USERNAME
$env:GIT_AUTHOR_EMAIL = "$($env:BOT_USERNAME)@gendsgn.local"
$env:GIT_COMMITTER_NAME = $env:GIT_AUTHOR_NAME
$env:GIT_COMMITTER_EMAIL = $env:GIT_AUTHOR_EMAIL
# 3. Bot-remote для push (audit log под bot, не lekss361)
git remote remove forgejo-bot 2>$null
git remote add forgejo-bot "https://$($env:BOT_USERNAME):$($env:FORGEJO_TOKEN)@git.gendsgn.ru/lekss361/gendesign.git"
# 4. Verify identity
$me = curl -sS -H "Authorization: token $env:FORGEJO_TOKEN" "$env:FORGEJO_URL/api/v1/user" | ConvertFrom-Json
if ($me.login -ne $env:BOT_USERNAME) {
Write-Error "❌ Identity mismatch: PAT belongs to $($me.login), expected $env:BOT_USERNAME"
return
}
Write-Host "✓ PAT belongs to $($me.login)"
Write-Host "✓ Commits authored as: $env:GIT_AUTHOR_NAME <$env:GIT_AUTHOR_EMAIL>"
Write-Host "✓ Use 'git push forgejo-bot' для push (НЕ forgejo — он lekss361)"
Если что-то FAILS — НЕ запускай /loop. Скажи user'у (обычно — env vars не выставлены, запусти setup-bot-env.ps1).
Behavior contract
Следую правилам из .claude/agents/auto-backend.md + .claude/agents/_autonomous_pickup.md + .claude/rules/backend.md + .claude/rules/sql.md + .claude/rules/git-pr.md.
Что делаю каждый /loop tick (dynamic):
- Kill-switch check
- PICKUP (fixup приоритетнее): сначала свои
scope/backend status/needs-fix(assignee=я) → есть → FIXUP MODE (step 10); иначеscope/backend status/readyбез assignee → pickup по priority - Claim (assign self + status/wip, STRICT race check) — только для нового issue
- CONTEXT LOAD (MANDATORY, work-tick only): Read
.claude/agents/backend-engineer.mdПОЛНОСТЬЮ (conventions + 5 critical pitfalls) +.claude/rules/backend.md/sql.md/git-pr.mdobsidian_simple_searchпо теме. Пропуск = broken PR. На idle-тиках НЕ читаю.
git fetch forgejo && git checkout -b feat/N-slug forgejo/mainв worktree- Implement (lint via
uv run ruff, tests viauv run pytest) - Commit с правильным author (env vars из Шага 2 выше делают это автоматически)
- Push через
git push forgejo-bot(НЕ черезforgejoremote — он lekss361's) - POST PR + status/review label
- FIXUP MODE (step 2 нашёл needs-fix): CONTEXT LOAD → checkout СУЩЕСТВУЮЩЕЙ ветки feat/N-slug
(
git fetch forgejo-bot && git checkout feat/N-slug) → прочитать review-bot fix-list → фиксы → lint/test → push в ТОТ ЖЕ branch →+status/review -status/needs-fix+ comment "fixup K/3"
Hard rules:
- ❌ НЕ merge сам
- ❌ НЕ push в main / forgejo/main
- ❌ НЕ редактировать frontend файлы (escalate scope/frontend issue через analyst)
- ❌ НЕ исполнять DDL/DML через execute_sql (миграции = data/sql/NN_*.sql)
- ❌
--no-verify/--amend/--forceзапрещены - ✅ Isolation:worktree обязательна
- ✅ Vault search первым делом
Готов?
После твоего OK на pre-flight — /loop dynamic запускает цикл.