chore(agents): bot harness tuning — per-role model, forgejo MCP deferral, vault capture, #893 curl hardening #898

Merged
lekss361 merged 1 commit from chore/bot-harness-tuning into main 2026-05-31 13:30:48 +00:00
Owner

Summary

Тюнинг автономного bot-харнеса (диагноз: weekly-лимит выжигался Opus'ом, forgejo MCP грузил ~90 схем в каждый запрос, волт не обновлялся после задач, reviewer падал на hand-rolled curl).

  • scripts/start-bot.ps1--model per-role (sonnet для analyst/backend/frontend/qa, opus только reviewer — раньше флага не было → дефолт Opus для всех); CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=60 (ужимать контекст раньше в 8h+ loop-окнах).
  • .claude/mcp/*.json — forgejo (~90 tools) → deferred во всех 5 ролях (схемы не грузятся upfront, подгрузка через ToolSearch); postgres-gendesign → deferred в backend/reviewer. Claude Code не имеет eager-subset, permissions.allow контекст не экономит → deferred единственный рычаг.
  • auto-analyst.md — новый шаг 3b knowledge-capture: из status/done issue (нетривиальных) синтез из merged-diff → draft в inbox/ (obsidian_append_content) → спавн vault-overlord. Закрывает дыру «волт не обновляется» (все auto-* были read-only на vault + в FSM не было шага записи).
  • forgejo ops через mcp__forgejo__* вместо сырого curl — переписаны workflow в auto-code-reviewer / auto-backend / auto-qa-tester (raw HTTP-глаголы GET /pulls, POST /merge транслировались персоной в curl); общий якорь в _autonomous_pickup.md контракте.
  • #893 guard — бан анти-паттерна curl -o /tmp/*.jsonpython3 json.load (на Windows http=404 + FileNotFoundError); deferred → ToolSearch-инструкция; hardening curl-fallback (--data-binary @file, $env:TEMP) в qa-tester / deep-reviewer phases.
  • stale-cleanup — поправлены устаревшие имена тулзов (get_pr_diffget_pull_request_diff и т.д.) в deep-reviewer phases.

NB: .claude/settings.local.json (там тоже чистил stale-имена) не трекается git — local-only, в PR не входит, и это правильно.

Test plan

  • Перезапустить bot-окна start-bot.ps1 <role> → в шапке OK model: sonnet (reviewer — opus)
  • reviewer-окно: pickup/merge идёт через mcp__forgejo__*, без curl//tmp
  • JSON всех 5 role-конфигов валиден (проверено локально: node JSON.parse OK)
  • analyst tick на свежем status/done → появляется inbox-заметка + vault-overlord её разложил

Не закрывает issue (харнес-тюнинг, не задача из очереди).

## Summary Тюнинг автономного bot-харнеса (диагноз: weekly-лимит выжигался Opus'ом, forgejo MCP грузил ~90 схем в каждый запрос, волт не обновлялся после задач, reviewer падал на hand-rolled curl). - **`scripts/start-bot.ps1`** — `--model` per-role (sonnet для analyst/backend/frontend/qa, **opus только reviewer** — раньше флага не было → дефолт Opus для всех); `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=60` (ужимать контекст раньше в 8h+ loop-окнах). - **`.claude/mcp/*.json`** — forgejo (~90 tools) → **deferred** во всех 5 ролях (схемы не грузятся upfront, подгрузка через ToolSearch); `postgres-gendesign` → deferred в backend/reviewer. Claude Code не имеет eager-subset, `permissions.allow` контекст не экономит → deferred единственный рычаг. - **`auto-analyst.md`** — новый шаг 3b **knowledge-capture**: из `status/done` issue (нетривиальных) синтез из merged-diff → draft в `inbox/` (`obsidian_append_content`) → спавн `vault-overlord`. Закрывает дыру «волт не обновляется» (все auto-* были read-only на vault + в FSM не было шага записи). - **forgejo ops через `mcp__forgejo__*` вместо сырого curl** — переписаны workflow в `auto-code-reviewer` / `auto-backend` / `auto-qa-tester` (raw HTTP-глаголы `GET /pulls`, `POST /merge` транслировались персоной в curl); общий якорь в `_autonomous_pickup.md` контракте. - **#893 guard** — бан анти-паттерна `curl -o /tmp/*.json` → `python3 json.load` (на Windows `http=404` + `FileNotFoundError`); deferred → ToolSearch-инструкция; hardening curl-fallback (`--data-binary @file`, `$env:TEMP`) в qa-tester / deep-reviewer phases. - **stale-cleanup** — поправлены устаревшие имена тулзов (`get_pr_diff`→`get_pull_request_diff` и т.д.) в deep-reviewer phases. > NB: `.claude/settings.local.json` (там тоже чистил stale-имена) не трекается git — local-only, в PR не входит, и это правильно. ## Test plan - [ ] Перезапустить bot-окна `start-bot.ps1 <role>` → в шапке `OK model: sonnet` (reviewer — opus) - [ ] reviewer-окно: pickup/merge идёт через `mcp__forgejo__*`, без curl/`/tmp` - [ ] JSON всех 5 role-конфигов валиден (проверено локально: node JSON.parse OK) - [ ] analyst tick на свежем `status/done` → появляется inbox-заметка + vault-overlord её разложил Не закрывает issue (харнес-тюнинг, не задача из очереди).
lekss361 added 1 commit 2026-05-31 13:27:00 +00:00
- start-bot.ps1: --model per-role (sonnet; opus только reviewer); CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=60
- .claude/mcp/*.json: forgejo (~90 tools) deferred во всех ролях; postgres-gendesign deferred в backend/reviewer
- auto-analyst.md: knowledge-capture step (status/done → inbox draft → vault-overlord) — закрывает 'волт не обновляется'
- forgejo ops через mcp__forgejo__* вместо сырого curl: auto-code-reviewer/backend/qa workflow + _autonomous_pickup contract
- #893 guard: бан curl→/tmp→python3 (Windows 404+FileNotFoundError); deferred→ToolSearch; stale tool-name cleanup (deep-reviewer phases)
lekss361 merged commit 07b64bc740 into main 2026-05-31 13:30:48 +00:00
lekss361 deleted branch chore/bot-harness-tuning 2026-05-31 13:30:48 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#898
No description provided.