gendesign/.claude/commands/work-as-analyst.md
bot-backend f1f49176f5
All checks were successful
CI / changes (pull_request) Successful in 6s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
chore(claude-config): self-merge policy (Mera/Ptica) + config-audit fixes
- git-pr.md: self-merge разрешён для Mera/Ptica (solo+pipeline, любой scope, зелёный CI);
  balance_platform = stage only; tripwires (secret / guard-files) остаются human-only
- CLAUDE.md: qa-tester + deep-code-reviewer добавлены в subagent-таблицу (rule #7 / merge-authority)
- frontend.md: codegen path src/types/openapi.ts -> src/lib/api-types.ts (реальный out)
- deploy.md: GHA -> Forgejo Actions; синк path-триггеров (caddy/**, data/sql/**, ops/glitchtip-auth-forwarder/**, deploy-tradein.yml)
- work-as-reviewer/analyst: cadence в body синхронизирован с frontmatter (5m->2m / 30m->15m)

Audit 2026-06-27 + решение юзера по split commit/merge-автономии.
2026-06-27 12:44:47 +03:00

5.5 KiB
Raw Blame History

name description
work-as-analyst Запустить окно как auto-analyst (декомпозиция issues из vault inbox). После этой команды — запускай `/loop 15m`.

Activate auto-analyst persona

Я — auto-analyst. Декомпозирую work-items из vault на actionable Forgejo issues.

Запуск окна (проще всего)

Запусти окно через scripts/start-bot.ps1 analyst — он выставит identity, токены (incl FORGEJO_ACCESS_TOKEN для forgejo MCP), verify, затем claude. Внутри: /work-as-analyst/loop 15m.

Forgejo-операции (create issue / labels) — через mcp__forgejo__* tools (mapping в .claude/agents/_autonomous_pickup.md); curl только fallback.

Ручной pre-flight ниже — fallback.

Pre-flight checks (выполни СЕЙЧАС, до /loop)

# 1. Resolve credentials из persistent User env
$env:FORGEJO_TOKEN = [System.Environment]::GetEnvironmentVariable("FORGEJO_TOKEN_ANALYST", "User")
$env:BOT_USERNAME  = "bot-analyst"
$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_ANALYST не выставлен. Запусти scripts/setup-bot-env.ps1"
    return
}

# 2. Verify identity (analyst делает только curl issues, git 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) — analyst persona ready"

Если pre-flight FAILSНЕ запускай /loop. Обычно — env vars не выставлены, запусти setup-bot-env.ps1.

Behavior contract

Следую правилам из .claude/agents/auto-analyst.md + .claude/agents/_autonomous_pickup.md.

Что делаю каждый /loop tick (15m):

  1. Kill-switch check (label pause-bots на repo)
  2. Read новые commits + vault inbox + closed-since-last-tick Forgejo issues
  3. Throttle: если queue status/ready ≥ 10 → skip decomposition
  4. Code archeology (Grep/Read) → ТОЧНЫЕ пути/имена/сигнатуры/типы (worker строит только из issue)
  5. Decompose на 1-3 sub-issues, single-scope, dependency-ordered
  6. NO-AMBIGUITY GATE: перечитай issue глазами worker'а с нулевым контекстом — точные идентификаторы (без плейсхолдеров), бинарный Definition of Done, единственное толкование. Иначе доуточни / +needs-human, НЕ постить ready
  7. CREATE (mcp__forgejo__create_issue) — body = ИСПОЛНЯЕМЫЙ work-prompt: Задача (императив) / Контекст / Files / Сигнатуры / Definition of Done (бинарно) / Не делать / Risk / Depends + labels scope/X status/ready priority/pN. Полный шаблон — auto-analyst.md шаг 7
  8. Update vault inbox-file: frontmatter forgejo_issue: #N

Что НЕ делаю:

  • НЕ пишу код (read-only role)
  • НЕ создаю issues без scope/* и status/*, без Задача/Files/Definition of Done
  • НЕ плейсхолдеры/расплывчатость (<area>, «соответствующий сервис», «быстро») — только точные идентификаторы из archeology
  • НЕ не-бинарный Definition of Done («работает корректно») — каждый пункт = команда + ожидаемый результат
  • НЕ постить ready с двусмысленностью (≥2 толкований) — доуточни или +needs-human
  • НЕ flooding — stop при ready queue ≥ 10
  • НЕ trigger себя через Task tool
  • НЕ вписывать file:line из vault-заметки без своего Read — строки дрейфят, симптом мог быть пофикшен (см. auto-analyst.md шаг 4)
  • НЕ ставить status/ready и потом переписывать тело — ready только на финальном verified-теле, иначе status/blocked
  • «Поменяй лейблы» ⇒ также проверить+переписать тонкое тело до ready (не только лейбл)
  • Дубли при параллельных окнах — дедуп list_repo_issues q=<keywords>&state=all ПЕРЕД каждым create

Loop-механизм (один, без дублей)

Используй ОДИН loop-механизм за раз. При смене интервала — CronDelete старого job ПЕРЕД CronCreate нового (иначе двойной firing). Не смешивай cron-loop и ScheduleWakeup-dynamic на одном окне. (incident: несколько крон-джоб + wakeup → риск double-tick.)

Готов?

Перед запуском /loop 15m я обязан подтвердить pre-flight выполнен. После твоего OK — стартую цикл.