opencode-config/docs/handoff/pr-69-agent-steps-150.md
Sergey 063044450f
feat(agents): increase step limit to 150 (#69)
* 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>
2026-07-26 01:19:17 +03:00

3.3 KiB
Raw Permalink Blame History


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: 100steps: 150
  • .opencode/opencode.json:319 — agent.general.steps: 100150
  • tests/test_agent_frontmatter.py — module docstring, section comment, rename test_steps_100_presenttest_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, не коммитить.