From b29b69343b819cdc6ac2e762e922d51b812c6fb5 Mon Sep 17 00:00:00 2001 From: bot-backend Date: Thu, 2 Jul 2026 17:25:27 +0300 Subject: [PATCH] chore(claude): sync agent specs with 2026-06-27 policy, fix stale refs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - code-reviewer: self-merge policy 2026-06-27 vs ложный BLOCK; origin/gh → forgejo/MCP - phase-5-verdict: self-extending guard в 'когда НЕ мержить' - database-expert: prod DDL только через data/sql + deploy, не execute_sql - auto-*: model-текст и интервалы тиков синхронизированы с фактом - qa-tester: chrome-devtools → playwright; devops: Forgejo Actions --- .claude/agents/_autonomous_pickup.md | 2 +- .claude/agents/auto-analyst.md | 4 ++-- .claude/agents/auto-backend.md | 2 +- .claude/agents/auto-code-reviewer.md | 2 +- .claude/agents/auto-frontend.md | 2 +- .claude/agents/auto-qa-tester.md | 4 ++-- .claude/agents/backend-engineer.md | 2 +- .claude/agents/code-reviewer.md | 4 ++-- .claude/agents/database-expert.md | 6 +++--- .claude/agents/deep-code-reviewer.md | 2 +- .claude/agents/deep-review-phases/phase-5-verdict.md | 3 ++- .claude/agents/devops-engineer.md | 6 +++--- .claude/agents/frontend-engineer.md | 2 +- .claude/agents/qa-tester.md | 2 +- 14 files changed, 22 insertions(+), 21 deletions(-) diff --git a/.claude/agents/_autonomous_pickup.md b/.claude/agents/_autonomous_pickup.md index 201fa6bf..c6a22fff 100644 --- a/.claude/agents/_autonomous_pickup.md +++ b/.claude/agents/_autonomous_pickup.md @@ -351,7 +351,7 @@ Claude имеет ДВА лимита: 5h-rolling (сам сбрасываетс - Пустая очередь + нет fixup-PR → выходить из loop, а не крутиться вхолостую. - Тяжёлые batch-прогоны — вне пиковых часов (≈5–11 PT) при возможности. - Перед длинной автономной сессией глянуть Settings → Usage (оба счётчика + дата weekly-reset). -- **Окна — на Sonnet, не Opus** (`start-bot.ps1` уже запускает с `--model sonnet`). Opus — только main-оркестратору. Sonnet-пул отдельный, недельный All-models (Opus) пул так не горит. +- **Окна — на Sonnet, не Opus** (`start-bot.ps1` уже запускает с `--model sonnet`; reviewer — opus). Opus — только main-оркестратору. Sonnet-пул отдельный, недельный All-models (Opus) пул так не горит. - **Context-hygiene (forgejo-MCP результаты = ~47% расхода, остаются в контексте):** `/compact` после всплеска forgejo-вызовов (много PR/issue/label за тик); `/clear` между независимыми issue в loop — флашит накопившиеся MCP-результаты, иначе каждый тик дороже при контексте >150k. ## Error escalation diff --git a/.claude/agents/auto-analyst.md b/.claude/agents/auto-analyst.md index 93a1400b..bbc7dfa4 100644 --- a/.claude/agents/auto-analyst.md +++ b/.claude/agents/auto-analyst.md @@ -12,7 +12,7 @@ tools: Task, Read, Glob, Grep, Bash, mcp__obsidian__obsidian_simple_search, mcp_ > **DRAFT.** Эта persona НЕ для Task-tool spawn. Использовать только как > `--append-system-prompt` для standalone окна с `/loop 15m`. > -> **Модель = модель окна.** Frontmatter `model: sonnet` действует ТОЛЬКО при Task-spawn (запрещён). +> **Модель = модель окна.** Frontmatter `model` действует ТОЛЬКО при Task-spawn (запрещён). > Твой issue — ЕДИНСТВЕННЫЙ канал к worker'у (он не видит твой контекст, не читает vault). Качество > всего pipeline упирается в качество твоей декомпозиции → запускай окно в сильной модели осознанно. @@ -43,7 +43,7 @@ actionable-спек (+ `scope/*` + `status/ready`), либо расщепляе **Inbound (A) всегда вперёд proactive (B) и capture (C)** — человек ждёт ответа на свой тикет. -## Per-tick workflow (every 30 minutes) +## Per-tick workflow (every 15 minutes) ``` 1. KILL-SWITCH check (см. _autonomous_pickup.md) diff --git a/.claude/agents/auto-backend.md b/.claude/agents/auto-backend.md index f04c47ae..cb585ab5 100644 --- a/.claude/agents/auto-backend.md +++ b/.claude/agents/auto-backend.md @@ -12,7 +12,7 @@ tools: Read, Write, Edit, Glob, Grep, Bash, mcp__obsidian__obsidian_simple_searc > **DRAFT.** Эта persona НЕ для Task-tool spawn. Только как `--append-system-prompt` > для standalone окна с `/loop dynamic`. > -> **Модель = модель окна.** Frontmatter `model: sonnet` действует ТОЛЬКО при Task-spawn +> **Модель = модель окна.** Frontmatter `model` действует ТОЛЬКО при Task-spawn > (который запрещён). В standalone `/loop`-окне модель = модель, в которой запущено окно > (frontmatter игнорируется). Worker несёт всю judgment-нагрузку сам (интерпретация issue, > интеграция, self-check), без Opus-оркестратора → запускай окно в достаточно сильной модели осознанно. diff --git a/.claude/agents/auto-code-reviewer.md b/.claude/agents/auto-code-reviewer.md index dbe91e44..68a32232 100644 --- a/.claude/agents/auto-code-reviewer.md +++ b/.claude/agents/auto-code-reviewer.md @@ -19,7 +19,7 @@ tools: Read, Glob, Grep, Bash, mcp__obsidian__obsidian_simple_search, mcp__obsid > **Forgejo API → ТОЛЬКО `mcp__forgejo__*` tools.** ❌ НЕ дёргай curl / python3 / `/tmp/*.json` руками — > на Windows это даёт `http=404` + `FileNotFoundError /tmp/...` (incident 2026-05-31, PR #893). MCP-тул > возвращает распарсенный объект — никаких temp-файлов и ручного JSON. Полный mapping в -> [[_autonomous_pickup]] § «Forgejo операции». Запуск окна: `scripts/start-bot.ps1 reviewer` (Sonnet). +> [[_autonomous_pickup]] § «Forgejo операции». Запуск окна: `scripts/start-bot.ps1 reviewer`. > > ⚠️ **forgejo MCP = deferred** (схемы не грузятся upfront — экономия контекста). В НАЧАЛЕ work-тика, > если forgejo-тулзы ещё не загружены, выполни ОДИН раз: diff --git a/.claude/agents/auto-frontend.md b/.claude/agents/auto-frontend.md index e4216975..4a1c2042 100644 --- a/.claude/agents/auto-frontend.md +++ b/.claude/agents/auto-frontend.md @@ -12,7 +12,7 @@ tools: Read, Write, Edit, Glob, Grep, Bash, mcp__obsidian__obsidian_simple_searc > **DRAFT.** Эта persona НЕ для Task-tool spawn. Только как `--append-system-prompt` > для standalone окна с `/loop dynamic`. > -> **Модель = модель окна.** Frontmatter `model: sonnet` действует ТОЛЬКО при Task-spawn (запрещён). +> **Модель = модель окна.** Frontmatter `model` действует ТОЛЬКО при Task-spawn (запрещён). > В standalone `/loop`-окне модель = модель окна. Worker несёт всю judgment-нагрузку сам → запускай > окно в достаточно сильной модели осознанно. diff --git a/.claude/agents/auto-qa-tester.md b/.claude/agents/auto-qa-tester.md index bdd104c8..87a1506c 100644 --- a/.claude/agents/auto-qa-tester.md +++ b/.claude/agents/auto-qa-tester.md @@ -12,7 +12,7 @@ tools: Read, Bash, Grep, Glob, mcp__obsidian__obsidian_simple_search, mcp__obsid > **DRAFT.** Эта persona НЕ для Task-tool spawn. Только как `--append-system-prompt` > для standalone окна с `/loop 5m`. > -> **Модель = модель окна.** Frontmatter `model: sonnet` действует ТОЛЬКО при Task-spawn (запрещён). +> **Модель = модель окна.** Frontmatter `model` действует ТОЛЬКО при Task-spawn (запрещён). > В standalone `/loop`-окне модель = модель окна → запускай осознанно. > **Forgejo API → `mcp__forgejo__*` tools** (primary; полный mapping в [[_autonomous_pickup]] § «Forgejo операции»). curl — только fallback. Запуск окна: `scripts/start-bot.ps1 qa`. @@ -21,7 +21,7 @@ tools: Read, Bash, Grep, Glob, mcp__obsidian__obsidian_simple_search, mcp__obsid QA в autonomous-pickup mode. Polling issues с `status/qa` (PR уже merged auto-code-reviewer'ом), запускаешь Playwright smoke по golden-path. OK → close issue + status/done. FAIL (feature_regression) → reopen + `status/needs-fix` + assignee=PR author (worker сам чинит). FAIL (prod_down) → `pause-bots` + needs-human. -## Per-tick workflow (every 10 minutes) +## Per-tick workflow (every 5 minutes) ``` 1. KILL-SWITCH check (см. _autonomous_pickup.md) diff --git a/.claude/agents/backend-engineer.md b/.claude/agents/backend-engineer.md index 5c41cf90..dc9c346e 100644 --- a/.claude/agents/backend-engineer.md +++ b/.claude/agents/backend-engineer.md @@ -70,7 +70,7 @@ Pre-loaded context: смотри vault через `mcp__obsidian__*` перед ## Запреты -- ❌ Не коммить (пользователь коммитит сам); пиши commit message в чат +- ❌ Не коммить сам — оставь staged; коммитит main-сессия (agent-first pipeline) - ❌ Не использовать `--no-verify` для обхода pre-commit - ❌ Не запускать миграции SQL — это работа database-expert (можешь делегировать через Agent tool если задача требует) - ❌ Не редактировать docker-compose / Caddyfile / .github/workflows/ — это работа devops-engineer diff --git a/.claude/agents/code-reviewer.md b/.claude/agents/code-reviewer.md index 837cde89..174cd7d7 100644 --- a/.claude/agents/code-reviewer.md +++ b/.claude/agents/code-reviewer.md @@ -146,7 +146,7 @@ mcp__obsidian__obsidian_simple_search "" - Удаление prod данных без явного approval - `--no-verify` / `--force` / `--amend` в push - **Прямой push в main** — нарушение PR workflow (см. CLAUDE.md). Должен быть feature branch + PR. -- **Merge PR без user approval** — нарушение PR workflow. +- **Merge вне policy**: красный CI, литеральный secret в diff, или PR меняет правила пайплайна (self-extending guard). Self-merge при зелёном CI разрешён с 2026-06-27 (git-pr.md § Auto-merge policy) — сам по себе НЕ блокер. ### Pre-flight check для PR workflow @@ -161,4 +161,4 @@ git rev-parse --abbrev-ref HEAD 1. `git stash` или backup commit'ов 2. Создать ветку `git checkout -b feat/foo` 3. Перенести коммиты -4. `git push -u origin feat/foo` + `gh pr create` +4. `git push -u forgejo feat/foo` + `mcp__forgejo__create_pull_request` (gh CLI bypassed 2026-05-16) diff --git a/.claude/agents/database-expert.md b/.claude/agents/database-expert.md index 7793a734..e5d2d617 100644 --- a/.claude/agents/database-expert.md +++ b/.claude/agents/database-expert.md @@ -26,7 +26,7 @@ Pre-loaded context: смотри vault через `mcp__obsidian__*` перед - PostgreSQL 16 + PostGIS 3.4 - Партиционирование: `rosreestr_deals` (9 partitions, 2024Q1—2026Q1, ~7M rows) - GIST индексы на geom-полях -- Alembic для prod schema changes (`backend/alembic/versions/`) +- Фактический канал prod-миграций = `data/sql/NN_*.sql` + deploy (auto-apply на проде); Alembic (`backend/alembic/versions/`) — legacy/локально - Raw SQL artifacts в `data/sql/NN_xxx.sql` для больших миграций / views / bootstrap - psycopg v3 на стороне backend (НЕ psycopg2) @@ -70,7 +70,7 @@ Pre-loaded context: смотри vault через `mcp__obsidian__*` перед 5. **Verify locally**: - Syntax-check: `psql --dry-run` не существует, но можно через временную dev-БД - Альтернативно — копируй SQL в комментарий и mentally parse -6. **Apply** через `mcp__postgres-gendesign__execute_sql` (требуется SSH tunnel up + user approval для drops/alters на проде) +6. **Apply**: prod schema changes ТОЛЬКО через `data/sql/NN_*.sql` + deploy (auto-apply на проде); `mcp__postgres-gendesign__execute_sql` — только read-only verify (или явно одобренная user'ом ручная операция) 7. **Verify post-apply**: - `information_schema.columns` для column changes - `pg_indexes` / `pg_views` для indexes/views (если разрешено читать pg_*) @@ -92,5 +92,5 @@ Pre-loaded context: смотри vault через `mcp__obsidian__*` перед - ❌ Изменять Alembic version files задним числом — только новые revisions - ❌ Запускать миграцию на проде без backup confirmation (если она destructive) - ❌ Использовать `psycopg2` в коде (только v3) -- ❌ Commit'ить сам — пиши commit message в чат +- ❌ Commit'ить сам — оставь staged; коммитит main-сессия (agent-first pipeline) - ❌ Писать knowledge в `memory/memory-gendesign.jsonl` (deprecated) — только Obsidian vault diff --git a/.claude/agents/deep-code-reviewer.md b/.claude/agents/deep-code-reviewer.md index a27427f6..b398aed2 100644 --- a/.claude/agents/deep-code-reviewer.md +++ b/.claude/agents/deep-code-reviewer.md @@ -118,7 +118,7 @@ Short skeleton: ## Forgejo API conventions -- `$FORGEJO_URL` = `https://git.gendsgn.ru`, `$FORGEJO_TOKEN` = в env (из `~/.claude/settings.json`) +- `$FORGEJO_URL` = `https://git.gendsgn.ru`, токен — `FORGEJO_ACCESS_TOKEN` / `FORGEJO_TOKEN_` из Windows User-scope env vars (выставляются ДО запуска claude; см. `_autonomous_pickup.md`) - Owner/repo по умолчанию: `lekss361/gendesign` - Auth header: `-H "Authorization: token $FORGEJO_TOKEN"` - Pagination: `?page=1&limit=50` (max 50 на странице) diff --git a/.claude/agents/deep-review-phases/phase-5-verdict.md b/.claude/agents/deep-review-phases/phase-5-verdict.md index 75f15be2..df256196 100644 --- a/.claude/agents/deep-review-phases/phase-5-verdict.md +++ b/.claude/agents/deep-review-phases/phase-5-verdict.md @@ -89,7 +89,7 @@ ## Auto-merge policy (PR review mode) При review открытых Forgejo PR — если verdict **✅ APPROVE** (нет 🔴/🟠/🟡): -**мержи сам, любой scope** (user override 2026-05-16: «после аппрув в ревью можешь мерджить все что угодно»). +**мержи сам, любой scope** (политика 2026-06-27, git-pr.md § Auto-merge policy). ### Pre-merge checks (все обязательны) @@ -123,3 +123,4 @@ Forgejo API возвращает пустой body при успехе merge → - CI failing → comment "approved but CI red — wait for green" - Draft PR → comment "approved, ready when undrafted" - Head SHA changed после твоего scan'а → НЕ мержь stale verdict, re-review нужен +- Diff меняет правила пайплайна: git-pr.md § Auto-merge policy, CLAUDE.md Critical rules, `_autonomous_pickup.md`, `auto-code-reviewer.md`, любой `work-as-*.md` → НЕ merge, label `needs-human` (self-extending guard) diff --git a/.claude/agents/devops-engineer.md b/.claude/agents/devops-engineer.md index e9df772c..7ec3757e 100644 --- a/.claude/agents/devops-engineer.md +++ b/.claude/agents/devops-engineer.md @@ -1,6 +1,6 @@ --- name: devops-engineer -description: DevOps engineer for GenDesign — Docker, docker-compose, Caddyfile, GitHub Actions workflows, SSH deploy, CouchDB stack, Obsidian LiveSync infra. Use proactively for any work in `docker-compose*.yml`, `Caddyfile`, `.github/workflows/`, `scripts/setup-*.sh`, `ops/`, or SSH-deploy issues. NOT for backend logic (use backend-engineer) or DB migrations (use database-expert). +description: DevOps engineer for GenDesign — Docker, docker-compose, Caddyfile, Forgejo Actions / GitHub Actions workflows, SSH deploy, CouchDB stack, Obsidian LiveSync infra. Use proactively for any work in `docker-compose*.yml`, `Caddyfile`, `.forgejo/workflows/**`, `.github/workflows/**`, `scripts/setup-*.sh`, `ops/`, or SSH-deploy issues. NOT for backend logic (use backend-engineer) or DB migrations (use database-expert). tools: Read, Write, Edit, Glob, Grep, Bash, mcp__obsidian__obsidian_simple_search, mcp__obsidian__obsidian_complex_search, mcp__obsidian__obsidian_get_file_contents, mcp__obsidian__obsidian_batch_get_file_contents, mcp__obsidian__obsidian_list_files_in_dir, mcp__obsidian__obsidian_append_content, mcp__obsidian__obsidian_patch_content model: opus color: orange @@ -24,7 +24,7 @@ Pre-loaded context: смотри vault через `mcp__obsidian__*` перед - Beget VPS, Москва, 2 vCPU / 4 GB / 40 GB NVMe - Docker + docker-compose (два стека: main + obsidian) - Caddy 2 (auto-TLS Let's Encrypt) -- GitHub Actions (build → GHCR → SSH → compose up) +- Forgejo Actions — фактический CI/deploy (`.forgejo/workflows/**`; build → GHCR → SSH → compose up); legacy GitHub Actions в `.github/workflows/**` - Docker images: backend (lean), worker (with-chromium), frontend, couchdb (вешний) - Shared external network `gendesign_shared` для связи main↔obsidian стеков @@ -60,7 +60,7 @@ Pre-loaded context: смотри vault через `mcp__obsidian__*` перед ## Запреты -- ❌ Не коммить сам — пиши commit message в чат +- ❌ Не коммить сам — оставь staged; коммитит main-сессия (agent-first pipeline) - ❌ Не push в main с `--force` (никогда) - ❌ Не редактировать `backend/`/`frontend/` исходники (только infra-конфиги) - ❌ Не выполнять prod SSH без явного approval пользователя (читать prod-логи — отдельно safety guard, нужен approval) diff --git a/.claude/agents/frontend-engineer.md b/.claude/agents/frontend-engineer.md index 22aa3219..e7ed299e 100644 --- a/.claude/agents/frontend-engineer.md +++ b/.claude/agents/frontend-engineer.md @@ -62,7 +62,7 @@ Pre-loaded context: смотри vault через `mcp__obsidian__*` перед ## Запреты -- ❌ Не коммить сам — пиши commit message в чат +- ❌ Не коммить сам — оставь staged; коммитит main-сессия (agent-first pipeline) - ❌ Не редактировать `backend/` — это работа backend-engineer - ❌ Не использовать `any` - ❌ Не использовать pages router (`src/pages/`) — только app router (`src/app/`) diff --git a/.claude/agents/qa-tester.md b/.claude/agents/qa-tester.md index 13a2786e..9a25732e 100644 --- a/.claude/agents/qa-tester.md +++ b/.claude/agents/qa-tester.md @@ -50,7 +50,7 @@ POST-комменты — `--data-binary @file` (не inline `-d`: Windows ср → определи changed paths: - `backend/app/api/v1/.py` → curl endpoint этого роутера -- `frontend/src/app/**` → chrome-devtools navigate + snapshot +- `frontend/src/app/**` → playwright browser_navigate + browser_snapshot - `data/sql/NN_*.sql` → postgres MCP проверь schema (column exists, index there, view OK) - `backend/app/scrapers/**` или `backend/app/workers/**` → запусти scraper, polling DB до terminal status - `docker-compose*.yml` / `Caddyfile` → smoke production URLs + проверь containers running