* refactor(pipeline): add subagent_type and template to NEXT actions
NEXT_ACTIONS now explicitly specifies subagent_type + template per phase (except MERGE which calls merge_pr tool). ISSUE/IMPLEMENT -> general/A, DOCS -> docs-reviewer/B, REVIEW -> reviewer/C, MEMORY -> memory-syncer/E. Existing tests updated to new format, 25 new tests added.
* refactor(docs): slim AGENTS.md and run-pipeline skill
AGENTS.md 71 -> 31 lines: remove Commits/Pull Requests sections (formats in tools), shorten Development Workflow/Pipeline to 1-2 lines. run-pipeline SKILL.md 164 -> 155 lines: remove Phase 0 Bootstrap (duplicated phases, now in pipeline-status NEXT_ACTIONS). Keep protocol, templates, restrictions.
* chore(skills): remove commit skill (format in tool validator)
commit/SKILL.md deleted (format validated by commit.ts tool, PR#38). References updated: configure-opencode SKILL.md (2 places), add-skill SKILL.md (1 place + tree structure). project-map README: remove commit/SKILL.md from tree, add configure-opencode.
* docs(handoff): add ADR-017 and handoff for orchestration switch
PR number in handoff frontmatter is <PR-NUMBER> placeholder, will be set after gh pr create.
* docs(handoff): set PR number
Set PR number 42 in handoff frontmatter, rename handoff/ADR files from pr-41 to pr-42 (pipeline-status matches pr-{pr_number}-*.md in diff).
* docs: update project map + handoff + ADR
---------
Co-authored-by: opencode-agent <agent@slaid098.dev>
8.8 KiB
| pr | title |
|---|---|
| 42 | pipeline-status sole orchestrator + slim docs |
PR: pipeline-status sole orchestrator + slim docs
Что сделано
.opencode/scripts/pipeline-status.py→NEXT_ACTIONS: каждая фаза теперь явно указываетsubagent_type+template(кроме MERGE —merge_prtool). ISSUE/IMPLEMENT →subagent_type=general, template=A; DOCS →subagent_type=docs-reviewer, template=B; REVIEW →subagent_type=reviewer, template=C; MERGE →call merge_pr tool with pr_number=N(не subagent); MEMORY →subagent_type=memory-syncer, template=E.REVIEW_NEXT_REQUEST_CHANGES→dispatch subagent (subagent_type=general). ФорматNEXT:строки сохранён (pipeline-driver парсит без изменений) — изменился только текст action.AGENTS.mdсокращён с 71 → 31 строк: убраны## Commitsи## Pull Requests(форматы валидируютсяcommit/create_prtools, PR#38).## Development Workflowи## Pipelineсокращены до 1-2 строк (ссылки на/run-pipelineskill +pipeline_status/merge_prtools). Оставлены без изменений:## Orchestrator Model,## Read Path,## Code Style,## Language..opencode/skills/run-pipeline/SKILL.mdсокращён с 164 → 155 строк: убран## Phase 0: Bootstrap(8 строк, дублировал фазы — теперь порядок вpipeline-status.pyNEXT_ACTIONS). Оставлены: ПРОТОКОЛ, ЗАПРЕЩЕНО, Остановы, Prompt templates A-F, API Restrictions, Rules.## Rulesпоследняя строка обновлена:запусти fix subagent→dispatch subagent (general)..opencode/skills/commit/SKILL.mdудалён (директория.opencode/skills/commit/удалена). Формат коммитов зашит вcommit.tsвалидаторе (PR#38).- Ссылки на commit skill обновлены:
configure-opencode/SKILL.md(2 места: "черезcommitskill" → "черезcommittool", "загрузитьcommitskill" → "использоватьcommittool"),add-skill/SKILL.md(1 место: "по правилам скиллаcommit" → "по правиламcommittool" + убранcommit/SKILL.mdиз дерева структуры skills, добавленconfigure-opencode/SKILL.md). docs/project-map/README.md: убранcommit/SKILL.mdиз дерева skills, добавленconfigure-opencode/SKILL.md(был вне алфавитного порядка), обновлено описаниеAGENTS.md("commits, PRs" → "pipeline, formats enforced by tools").tests/test_pipeline_status.py: обновлены 7 существующих тестов под новый формат NEXT_ACTIONS —test_get_next_action(parametrize: 7 фаз),test_get_next_action_review(5 cases),test_format_single_pr_review_*(3 теста),test_format_single_pr_memory_not_done,test_format_table_with_prs,test_format_pr_row_review_request_changes. Строки assertions изменены:запустить reviewer→dispatch subagent (subagent_type=reviewer,запустить memory-syncer→dispatch subagent (subagent_type=memory-syncer, и т.д.tests/test_pipeline_status_next_actions.py(новый, 25 тестов): для каждой фазы NEXT action содержитsubagent_type+template(кроме MERGE —merge_pr); ISSUE/IMPLEMENT → general/A, DOCS → docs-reviewer/B, REVIEW → reviewer/C, MERGE → merge_pr (не subagent), MEMORY → memory-syncer/E; pr_number substitution; REVIEW verdict branching (REQUEST_CHANGES → general, default → reviewer, NEEDS_DISCUSSION → no subagent).- ADR-017 + этот handoff
Почему
Третий PR из серии из 3 (build → lock → switch). PR #38 (build) добавил 3 детерминированных tool'а (commit, create_pr, create_issue) с валидацией форматов. PR #40 (lock) заблокировал прямые bash-вызовы git commit/gh pr create/gh pr merge/gh issue create через global deny rules + role-based tool access. Этот PR (switch) обновляет промпты и оркестрацию на использование tools — pipeline-status.py становится единственным source of truth для оркестрации (NEXT action явно указывает subagent_type + template), а AGENTS.md/run-pipeline skill сокращаются убирая дублирование.
pipeline-status.py NEXT_ACTIONS был описательным текстом ("создать issue", "запустить docs-reviewer") без указания какой subagent и какой template использовать. run-pipeline skill дублировал 7 фаз в Phase 0: Bootstrap. AGENTS.md дублировал правила форматов commits/PRs (уже зашиты в tools, PR#38). commit skill дублировал правила коммитов (уже в commit.ts, PR#38). Цель: single source of truth + убрать дублирование.
Спека issue #41 не содержала ошибок. Все acceptance criteria выполнены.
Pending
run-pipeline/SKILL.mdсокращён с 164 → 155 строк (спека просила ~90). Дальнейшее сокращение невозможно без удаления обязательных секций: спека явно требует оставить ПРОТОКОЛ + ЗАПРЕЩЕНО + Остановы + Prompt templates A-F + API Restrictions + Rules. Одни templates A-F = ~100 строк. Единственное дублирование фаз (Phase 0: Bootstrap) удалено.AGENTS.md= 31 строк (спека просила ~25). 4 оставленные секции (Orchestrator Model 6 строк, Read Path 2, Code Style 5, Language 2) + 2 сокращённые (Development Workflow 2, Pipeline 2) + заголовки = 31. Дальнейшее сокращение потребует удаления обязательных секций.add-skill/SKILL.mdдерево skills теперь не содержитcommit/SKILL.mdи содержитconfigure-opencode/SKILL.md(раньше был вне алфавитного порядка в дереве)
Watch out
- NEXT_ACTIONS format совместим с pipeline-driver:
get_next_actionзаменяетNна pr_number через.replace("N", str(pr_number)). Новые строки содержатPR #Nиpr_number=N— оба корректно заменяются.REVIEW_NEXT_DEFAULT = NEXT_ACTIONS["REVIEW"]— default branchget_next_action_reviewтеперь возвращаетdispatch subagent (subagent_type=reviewer, template=C) for PR #N. pipeline-driver парситNEXT:строку целиком — изменений в формате строки нет, изменился только текст action. - 7 существующих тестов обновлены:
test_get_next_action,test_get_next_action_review,test_format_single_pr_review_not_done,test_format_single_pr_review_request_changes,test_format_single_pr_review_needs_discussion,test_format_single_pr_memory_not_done,test_format_table_with_prs,test_format_pr_row_review_request_changes. Не удалены, а обновлены под новый формат — это часть реализации (формат изменился). - commit skill удалён полностью (директория
.opencode/skills/commit/).commit.tstool (PR#38) валидирует формат независимо. Skills auto-discovered при старте opencode — после merge нуженgit pull+ рестарт контейнера (config bind-mount, skills грузятся при старте). - Ссылки на commit skill обновлены в 3 файлах:
configure-opencode/SKILL.md(2 места),add-skill/SKILL.md(1 место + дерево).opencode.jsoncommit: true/false— это tool access (не skill), без изменений. В handoff/ADR других PR упоминания commit skill оставлены как исторические (не актуальны). - ADR number = sequential (017), НЕ PR number. Проверить ADR naming в handoff до push (эволюция паттерна PR#26 docs-reviewer typo).
- PR number = 42 (установлен после
gh pr create, отдельный коммитdocs(handoff): set PR number). Handoff/ADR файлы переименованы сpr-41-*→pr-42-*(pipeline-status ищетpr-{pr_number}-*.mdв diff, pr_number=42).