docs(agents): консервативный рефактор промтов — analyst verify-before-act, qa anti-idle, гигиена

- auto-analyst: явное правило «читать ПОЛНОЕ тело issue через get_issue ПЕРЕД любым действием»
  (коммент/лейбл/решение); verify кода в main если про код. Правило в заголовке и в Hard rules.
  Инцидент-ref: mis-read #884 по title → взаимоисключающие комменты 2026-05-31.
- auto-qa-tester: anti-idle guard в step 2 — перед объявлением idle перепроверить
  status/qa&state=open без limit, чтобы не пропустить застрявшие items.
- auto-resolver: убрать «(Opus) осознанно» — resolver теперь тоже Sonnet через start-bot.ps1.
- auto-backend, auto-frontend, auto-code-reviewer, _autonomous_pickup: не тронуты (ок).
This commit is contained in:
bot-backend 2026-05-31 15:46:58 +03:00
parent aa3d012fdf
commit 6ebba84394
3 changed files with 16 additions and 3 deletions

View file

@ -14,7 +14,13 @@ tools: Task, Read, Glob, Grep, Bash, mcp__obsidian__obsidian_simple_search, mcp_
>
> **Модель = модель окна.** Frontmatter `model: sonnet` действует ТОЛЬКО при Task-spawn (запрещён).
> Твой issue — ЕДИНСТВЕННЫЙ канал к worker'у (он не видит твой контекст, не читает vault). Качество
> всего pipeline упирается в качество твоей декомпозиции → запускай окно в сильной модели осознанно.
> всего pipeline упирается в качество твоей декомпозиции.
>
> **⚠️ ЧИТАТЬ ПОЛНОЕ ТЕЛО ISSUE ПЕРЕД ЛЮБЫМ ДЕЙСТВИЕМ.** Прежде чем оставить коммент, сменить
> лейбл или принять решение по issue — получи актуальное тело через `mcp__forgejo__get_issue`
> (не полагайся на title / память / предыдущий тик). Если issue касается кода — verify актуальный
> код в main (`git show forgejo/main:<file>` или Grep). Один выверенный коммент лучше «коммент →
> опровержение». (Инцидент 2026-05-31: mis-read #884 по title → два взаимоисключающих коммента.)
> **Forgejo API → `mcp__forgejo__*` tools** (primary; полный mapping в [[_autonomous_pickup]] § «Forgejo операции»). curl — только fallback. Запуск окна: `scripts/start-bot.ps1 analyst`.
@ -181,6 +187,9 @@ Files/сигнатур/бинарного DoD, ≥2 толкования) — **
- ❌ **`status/ready` → потом переписываю тело** — ready только на финальном verified-теле; иначе
держи `status/blocked` (воркер берёт ready за ~30s)
- ❌ **Label-изменение без аудита тела** — «поменяй лейблы» ⇒ проверь+перепиши тонкое тело до ready
- ❌ **Действие по issue без чтения ПОЛНОГО тела** — ВСЕГДА `mcp__forgejo__get_issue` ПЕРЕД
комментом/лейблом/решением. Не полагаться на title, память, предыдущий тик. Если про код —
verify актуальный код в main. (Anti-pattern: «написал коммент → опроверг себя вторым комментом»)
- ✅ **Метрики из issue верифицируй на live-БД** перед ready: `mcp__postgres-tradein__execute_sql` для tradein (NULL %, coverage, anchor n, stale-counts), `mcp__postgres-gendesign__execute_sql` для основной. Не переписывай цифру из старой vault-заметки без своего SELECT — данные дрейфуют. **postgres-tradein** = отдельная trade-in БД (scraped avito/cian/yandex, estimator), **postgres-gendesign** = основная.
- ✅ Один issue = единственное толкование. Перечитай глазами worker'а с нулевым контекстом перед CREATE

View file

@ -27,7 +27,11 @@ QA в autonomous-pickup mode. Polling issues с `status/qa` (PR уже merged au
1. KILL-SWITCH check (см. _autonomous_pickup.md)
2. PICKUP:
GET issues?labels=status/qa&state=open&sort=updated-desc&limit=3
Нет → result: idle, sleep 5m
Нет → ПЕРЕД тем как объявить idle: перепроверь без limit (или limit:1) что
status/qa&state=open реально пуст. Причина: limit:3 может вернуть 0 при
ошибке запроса, а застрявшие items копятся. Если после перепроверки пусто
→ result: idle, sleep 5m. Если есть — обрабатывай по terminal-правилу
(Non-UI-testable) или обычному smoke, не объявляй idle.
3. Для каждой issue (max 3 за тик):
a. Read issue body — что нужно проверить (acceptance criteria из analyst'а)
b. Read related vault — какие smokes есть для этого scope

View file

@ -14,7 +14,7 @@ tools: Read, Write, Edit, Glob, Grep, Bash, mcp__obsidian__obsidian_simple_searc
>
> **Модель = модель окна.** Frontmatter `model` действует только при Task-spawn (запрещён).
> Резолвер несёт высокую judgment-нагрузку (классификация блокера, прод-операции, решение
> «задача vs решение-человека») → запускай окно в сильной модели (Opus) осознанно.
> «задача vs решение-человека»). Окно запускается через `start-bot.ps1 resolver` (Sonnet).
> **Forgejo API → `mcp__forgejo__*` tools** (mapping в [[_autonomous_pickup]] § «Forgejo операции»). curl — fallback.