fix(agents): planned issues via main chat, found via subagents #95

Merged
slaid098 merged 5 commits from fix/agents/planned-issues-main-chat into main 2026-08-16 21:25:24 +03:00
Owner

Что сделано

  • AGENTS.md: carve-out в Orchestrator Model — плановые issues (декомпозиция после согласования плана) создаёт main-chat оркестратор сам, последовательными вызовами create-issue; в Pipeline «батч ишусов одним агентом» → «батч ишусов оркестратором в main chat»; в Bug Discovery Protocol добавлена граница: найденное в ходе исполнения создаёт сабагент сам, плановое — main chat; добавлена фраза-критерий «issue создаёт тот, в чьём контексте родилось знание о задаче».
  • .opencode/skills/issue/SKILL.md: убрана инструкция делегировать создание плановых issues сабагенту (включая frontmatter description); main chat создаёт сам, возврат списка [{number, url, title}]; батч-создание переписано под main chat; добавлен carve-out для bug-discovery (сабагент создаёт сам при баге).
  • .opencode/skills/bug-discovery/SKILL.md: добавлена строка границы ответственности (баг в ходе исполнения — сабагент сам; плановое — main chat).
  • .opencode/skills/spec/SKILL.md: исполнительская часть приведена к правилу — Phase 8 создаёт issues напрямую (body уже готовы из спеки, без лишнего делегирования).

Почему

Правила противоречили практике: плановые issues рождаются в контексте main-chat обсуждения плана, передача тел сабагенту — сломанный телефон + лишние токены. Bug-discovery при этом сохраняется за сабагентом (контекст обнаружения у него). Единый критерий: issue создаёт тот, в чьём контексте родилось знание о задаче.

Watch out

  • Правки только в workspace-клоне; на хост подтягиваются git pull (bind-mount, напрямую не править).
  • Linear Execution сохранён: создание строго последовательно, независимо от владельца процесса.

Pending

—

Closes #88

## Что сделано - AGENTS.md: carve-out в Orchestrator Model — плановые issues (декомпозиция после согласования плана) создаёт main-chat оркестратор сам, последовательными вызовами `create-issue`; в Pipeline «батч ишусов одним агентом» → «батч ишусов оркестратором в main chat»; в Bug Discovery Protocol добавлена граница: найденное в ходе исполнения создаёт сабагент сам, плановое — main chat; добавлена фраза-критерий «issue создаёт тот, в чьём контексте родилось знание о задаче». - `.opencode/skills/issue/SKILL.md`: убрана инструкция делегировать создание плановых issues сабагенту (включая frontmatter description); main chat создаёт сам, возврат списка `[{number, url, title}]`; батч-создание переписано под main chat; добавлен carve-out для bug-discovery (сабагент создаёт сам при баге). - `.opencode/skills/bug-discovery/SKILL.md`: добавлена строка границы ответственности (баг в ходе исполнения — сабагент сам; плановое — main chat). - `.opencode/skills/spec/SKILL.md`: исполнительская часть приведена к правилу — Phase 8 создаёт issues напрямую (body уже готовы из спеки, без лишнего делегирования). ## Почему Правила противоречили практике: плановые issues рождаются в контексте main-chat обсуждения плана, передача тел сабагенту — сломанный телефон + лишние токены. Bug-discovery при этом сохраняется за сабагентом (контекст обнаружения у него). Единый критерий: issue создаёт тот, в чьём контексте родилось знание о задаче. ## Watch out - Правки только в workspace-клоне; на хост подтягиваются `git pull` (bind-mount, напрямую не править). - Linear Execution сохранён: создание строго последовательно, независимо от владельца процесса. ## Pending — Closes #88
Author
Owner

Code Review Summary

PR приводит модель создания issues к единому критерию «issue создаёт тот, в чьём контексте родилось знание»: плановые (декомпозиция) — main chat, баги в ходе исполнения — сабагент. Изменения в 4 файлах внутренне согласованы, stale-ссылки на full-subagent модель вычищены (включая правильное обновление финальной строки issue/SKILL.md, которая ссылалась на run-pipeline Template A). PR body полный, title/branch — conventional. CI зелёный.

Questions

  1. .opencode/skills/audit/SKILL.md:47,51-53,108-138 (+ .opencode/commands/audit.md:5) — audit-флоу НЕ обновлён: Template ISSUE_CREATE по-прежнему предписывает сабагенту шаг 1 «Load issue skill» и самостоятельное создание issue. Новый issue/SKILL.md:93 говорит «Плановые issues (декомпозиция после согласования плана) создаёт main chat сам» — а audit это именно «декомпозиция после согласования плана» (юзер утверждает список проблем). Сабагент, загрузивший обновлённый issue-скилл по инструкции audit-шаблона, получает противоречивые указания: шаблон велит создать, скилл велит main chat'у. При этом по критерию PR («знание родилось в explore subagent») subagent-based audit тоже защитим — как bug-discovery и spec Phase 8, которые в PR получили явные carve-out'ы. Вопрос: audit намеренно оставлен subagent-based (тогда нужен carve-out в issue/SKILL.md по аналогии с bug-discovery — строка «Исключение — баг…»), или это пропущенный paired update (тогда audit переводится на main-chat создание, как в новом issue-скилле)?
  2. .opencode/skills/issue/SKILL.md:93 — если audit остаётся subagent-based, стоит явно перечислить исключения из blanket-формулировки «Плановые issues создаёт main chat сам» (bug-discovery ✅ добавлен, spec Phase 8 и audit — нет), чтобы читательскиллов не гадал. Планируется ли?

Verdict: NEEDS_DISCUSSION

## Code Review Summary PR приводит модель создания issues к единому критерию «issue создаёт тот, в чьём контексте родилось знание»: плановые (декомпозиция) — main chat, баги в ходе исполнения — сабагент. Изменения в 4 файлах внутренне согласованы, stale-ссылки на full-subagent модель вычищены (включая правильное обновление финальной строки issue/SKILL.md, которая ссылалась на run-pipeline Template A). PR body полный, title/branch — conventional. CI зелёный. ### Questions 1. **.opencode/skills/audit/SKILL.md:47,51-53,108-138** (+ `.opencode/commands/audit.md:5`) — audit-флоу НЕ обновлён: Template ISSUE_CREATE по-прежнему предписывает сабагенту шаг 1 «Load `issue` skill» и самостоятельное создание issue. Новый `issue/SKILL.md:93` говорит «Плановые issues (декомпозиция после согласования плана) создаёт main chat сам» — а audit это именно «декомпозиция после согласования плана» (юзер утверждает список проблем). Сабагент, загрузивший обновлённый issue-скилл по инструкции audit-шаблона, получает противоречивые указания: шаблон велит создать, скилл велит main chat'у. При этом по критерию PR («знание родилось в explore subagent») subagent-based audit тоже защитим — как bug-discovery и spec Phase 8, которые в PR получили явные carve-out'ы. Вопрос: audit намеренно оставлен subagent-based (тогда нужен carve-out в issue/SKILL.md по аналогии с bug-discovery — строка «Исключение — баг…»), или это пропущенный paired update (тогда audit переводится на main-chat создание, как в новом issue-скилле)? 2. **.opencode/skills/issue/SKILL.md:93** — если audit остаётся subagent-based, стоит явно перечислить исключения из blanket-формулировки «Плановые issues создаёт main chat сам» (bug-discovery ✅ добавлен, spec Phase 8 и audit — нет), чтобы читательскиллов не гадал. Планируется ли? ### Verdict: NEEDS_DISCUSSION
fix(agents): audit creates issues in main chat
All checks were successful
CI (always) / bootstrap (pull_request) Successful in 3s
6a3e1ff0f0
Author
Owner

Code Review Summary

Расхождение, вызвавшее NEEDS_DISCUSSION, устранено коммитом 6a3e1ff — audit приведён к blanket-правилу «issue создаёт тот, в чьём контексте родилось знание о задаче».

Positives

  • Точечный фикс: коммит правит только .opencode/commands/audit.md и .opencode/skills/audit/SKILL.md; unrelated файлы не затронуты (грязные package.json/package-lock.json в working tree не входят в PR diff).
  • audit/SKILL.md синхронизирован с issue/SKILL.md:93-104: шаг 9 — main chat создаёт issues сам через create-issue tool (со ссылкой «как для плановых issues, см. issue/SKILL.md «Создание issues»»); Rules — явная норма «Issues при аудите создаёт main chat» со ссылками на issue/SKILL.md:93 и AGENTS.md Orchestrator Model; Template ISSUE_CREATE переименован в «body для create-issue — создаёт main chat»; граничные случаи и запреты обновлены.
  • commands/audit.md согласован — «create-issue для каждой проблемы (main chat, последовательно — как плановые issues)», «Не делает edit/read сам».
  • Логика аудита не сломана: explore subagent сохранён для качественных находок (issues он не создаёт — разделение ответственности корректно), project-status — read-only oracle у оркестратора, дедупликация, вопрос юзеру и Linear Execution не тронуты.
  • Формулировки консистентны с issue/SKILL.md:93 («делегирование теряет контекст плана и тратит токены» — зеркалит) и AGENTS.md (carve-out в Orchestrator Model + единый критерий в Bug Discovery Protocol).
  • grep по .opencode/: остатков subagent-based create-issue нет (кроме намеренного carve-out bug-discovery и нейтральных frontmatter). run-pipeline skill (line 21 «Issues создаются ВНЕ пайплайна») не противоречит.

Suggestions (info, not blocking)

  • .opencode/skills/audit/SKILL.md:137 [style] В Template ISSUE_CREATE осталась фраза «Верни: issue URL (или ошибку валидации для оркестратора)» — пережиток subagent-эпохи: при создании main chat'ом «возвращать» некому. Не ломает логику (контекст шаблона однозначен), но можно заменить на «Зафиксируй issue URL (или ошибку валидации) для финального репорта».

Verdict: APPROVE

## Code Review Summary Расхождение, вызвавшее NEEDS_DISCUSSION, устранено коммитом `6a3e1ff` — audit приведён к blanket-правилу «issue создаёт тот, в чьём контексте родилось знание о задаче». ### Positives - **Точечный фикс**: коммит правит только `.opencode/commands/audit.md` и `.opencode/skills/audit/SKILL.md`; unrelated файлы не затронуты (грязные `package.json`/`package-lock.json` в working tree не входят в PR diff). - **audit/SKILL.md синхронизирован с issue/SKILL.md:93-104**: шаг 9 — main chat создаёт issues сам через `create-issue` tool (со ссылкой «как для плановых issues, см. issue/SKILL.md «Создание issues»»); Rules — явная норма «Issues при аудите создаёт main chat» со ссылками на issue/SKILL.md:93 и AGENTS.md Orchestrator Model; Template ISSUE_CREATE переименован в «body для create-issue — создаёт main chat»; граничные случаи и запреты обновлены. - **commands/audit.md согласован** — «create-issue для каждой проблемы (main chat, последовательно — как плановые issues)», «Не делает edit/read сам». - **Логика аудита не сломана**: `explore` subagent сохранён для качественных находок (issues он не создаёт — разделение ответственности корректно), `project-status` — read-only oracle у оркестратора, дедупликация, вопрос юзеру и Linear Execution не тронуты. - **Формулировки консистентны** с issue/SKILL.md:93 («делегирование теряет контекст плана и тратит токены» — зеркалит) и AGENTS.md (carve-out в Orchestrator Model + единый критерий в Bug Discovery Protocol). - **grep по `.opencode/`**: остатков subagent-based create-issue нет (кроме намеренного carve-out bug-discovery и нейтральных frontmatter). run-pipeline skill (line 21 «Issues создаются ВНЕ пайплайна») не противоречит. ### Suggestions (info, not blocking) - **.opencode/skills/audit/SKILL.md:137** [style] В Template ISSUE_CREATE осталась фраза «Верни: issue URL (или ошибку валидации для оркестратора)» — пережиток subagent-эпохи: при создании main chat'ом «возвращать» некому. Не ломает логику (контекст шаблона однозначен), но можно заменить на «Зафиксируй issue URL (или ошибку валидации) для финального репорта». ### Verdict: APPROVE
slaid098 deleted branch fix/agents/planned-issues-main-chat 2026-08-16 21:25:24 +03: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
slaid098/opencode-config!95
No description provided.