* 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>
3.3 KiB
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, assertionfm["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'а в отдельный
exploresubagent с ∞ 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проверяет int150(JSON, json parser → int),test_agent_frontmatter.py:154— строку"150"(frontmatter parser возвращает строки, не int). Не путать типы.- package-lock.json untracked в репо — не относится к этому PR, не коммитить.