* feat(agents): increase step limit to 150 * test(agents): update step limit assertions to 150 * docs(adr): add ADR-029 agent step limit 100 to 150 * docs(project-map): update tree with PR#68 changes * docs(handoff): add PR 69 handoff for agent steps 150 * docs(project-map): fix PR tags to PR#69 (actual PR number) --------- Co-authored-by: opencode-agent <agent@opencode.local>
29 lines
3.3 KiB
Markdown
29 lines
3.3 KiB
Markdown
---
|
||
pr: 69
|
||
title: feat(agents): increase step limit to 150
|
||
---
|
||
|
||
## Что сделано
|
||
Повышен лимит шагов subagent-ов со 100 до 150 для всех 4 настроенных агентов (reviewer, docs-reviewer, memory-syncer, general). Обновлены 4 конфига + 2 тест-файла (5 правок в test_agent_frontmatter.py + 1 в test_permissions.py). Создан ADR-029 (docs/decisions/029-pr-69-agent-steps-150.md).
|
||
|
||
Конкретно:
|
||
- .opencode/agents/reviewer.md:5, docs-reviewer.md:5, memory-syncer.md:5 — frontmatter `steps: 100` → `steps: 150`
|
||
- .opencode/opencode.json:319 — `agent.general.steps: 100` → `150`
|
||
- tests/test_agent_frontmatter.py — module docstring, section comment, rename `test_steps_100_present` → `test_steps_150_present`, docstring, assertion `fm["steps"] == "150"` (string)
|
||
- tests/test_permissions.py:119 — assertion `general.steps == 150` (int, JSON)
|
||
- docs/project-map/README.md — теги PR#68 на 5 строках (3 agent .md, opencode.json, 2 test-файла)
|
||
|
||
## Почему
|
||
PR#67 reviewer упёрся в `MAXIMUM STEPS REACHED` (hard stop с бинарника 2026-07-24, реализует `failUnsettledTools` при `iteration_count >= agent.steps` → tools disabled), не успел вызвать `post-review` — оркестратор делал 1 retry вручную. 100 оказалось тесно для reviewer на PR с 6+ файлами diff.
|
||
|
||
Memory `technical/opencode-log-subagent-stumbles-analysis.md` (2026-07-20) утверждала «`steps:` НЕ хард-лимит — hint, не enforcement» — устарело: бинарник 2026-07-24 уже hard stop. Подтверждено на PR#67. ADR-029 фиксирует обновление и trade-off (+50% budget → +50% doom-loop risk, но guard сохранён).
|
||
|
||
## Pending
|
||
- memory update `opencode-log-subagent-stumbles-analysis.md` (soft hint → hard stop) — на фазе MEMORY через memory-syncer subagent
|
||
- Рефакторинг (вынос explore-фазы reviewer'а в отдельный `explore` subagent с ∞ steps) — отложено в отдельный PR если 150 снова станет тесно
|
||
|
||
## Watch out
|
||
- global copy `/root/.config/opencode/agents/*.md` — bind-mount, лимит 150 вступит в силу после `git pull` + container restart. В текущем контейнере лимит остаётся 100 до рестарта.
|
||
- scaffold-handoff.sh нумерация ADR по `ls docs/decisions | wc -l + 1` — если ADR создан вручную ДО scaffold, scaffold найдёт существующий файл по `*-pr-<N>-<slug>.md` паттерну и не создаст дубликат (как в этом PR). Если создать вручную с placeholder в имени (029-pr-PR-NUMBER-...), нужно переименовать ДО запуска scaffold, иначе scaffold не найдёт и создаст дубликат 030.
|
||
- `test_permissions.py:119` проверяет int `150` (JSON, json parser → int), `test_agent_frontmatter.py:154` — строку `"150"` (frontmatter parser возвращает строки, не int). Не путать типы.
|
||
- package-lock.json untracked в репо — не относится к этому PR, не коммитить.
|