fix(run-pipeline-skill): input contract and batch stop semantics #75

Closed
opened 2026-08-16 18:05:50 +03:00 by slaid098 · 0 comments
Owner

Контекст

Зависит от #74 (оракул получает issue-first вход) — этот issue синхронизирует документацию с новым контрактом.

Дефекты .opencode/skills/run-pipeline/SKILL.md (зафиксированы аудитом):

  • Протокол требует pipeline-status({pr_number: M}) до любого действия, но не объясняет откуда берётся M на старте — bootstrap-дедлок; нет ветки обработки tool-failure.
  • Не описаны режимы входа команды: одно issue, список, или все открытые.
  • Нотация прыгает: конвенция N=issue/M=PR нарушается в Template F («PR #N не найден»); буква N имеет три разных значения в одном документе.
  • Template A требует И вписать Closes #N в body, И передать issue_number: N — tool create-pr сам аппендит Closes, получается дубль.
  • Template A не задаёт машиночитаемый формат возврата номера PR сабагентом.
  • Скилл утверждает, что NEXT всегда содержит subagent_type+template — после #74 это станет правдой, текст нужно привести к факту.
  • Косметика: сломана визуальная нумерация шагов Template C (п.6 «НЕ МЕРДЖИТЬ»); stale line-ref на memory-syncer.md:38 (правило на строках 47–48).
  • commands/run-pipeline.md и секция Pipeline в AGENTS.md не отражают новые режимы.

Задача

  1. В начало SKILL.md — блок «Вход»: /run-pipeline #N (номер ISSUE); список номеров; bare (без аргументов) = все открытые issues, oldest first. Явно: issues создаются ВНЕ пайплайна (feature-spec → issue-скилл), run-pipeline никогда не создаёт issues.
  2. Протокол, шаг 1: pipeline-status вызывается с номером из команды (issue-first; bootstrap-ответ NEXT: template=A for issue #N — штатная ветка, не ошибка). Описать обработку tool-failure строки ⚠️ ... failed.
  3. Template A: убрать Closes #N из body-шаблона (оставить только issue_number: N); добавить контракт финального отчёта сабагента — обязательная строка PR_NUMBER: <M>.
  4. Batch-режим: строго последовательно; hard-stop одного issue (AMBIGUOUS от оракула / NEEDS_DISCUSSION от reviewer / tool error после 1 retry) → весь батч STOP с отчётом. Явно зафиксировать: красная CI — штатный fix-цикл (Template D + re-loop), НЕ stop-условие.
  5. Template F: «PR #N не найден» → M-нотация; по всему файлу единообразно N=issue, M=PR (включая bug-discovery-хвосты — там букву для баг-ишуса обозначить отдельно, например <BUG_ISSUE>).
  6. Синхронизировать упоминания NEXT-строк с новым оракулом из #74 (bootstrap for issue #N, CI с template=D и т.д.).
  7. Косметика: нумерация шагов Template C; line-ref на memory-syncer.md.
  8. commands/run-pipeline.md — описать три режима входа.
  9. Секция Pipeline в AGENTS.md (источник — /root/workspace/opencode-config/AGENTS.md, НЕ трогать bind-mount копию в ~/.config; синк по skill configure-opencode) — добавить bare-режим. Копии скилла в /root/workspace/opencode-config/.opencode/skills/ и ~/.config/opencode/skills/ держать байт-идеальными (синк).

Контракты

  • Формат SKILL.md (frontmatter name/description, структура шаблонов A/C/D/E/F) не меняется.
  • Все упоминаемые tool-имена и их сигнатуры — kebab-case, соответствуют реальным TS-обёрткам.

Инварианты

  • 6 фаз и их порядок не меняются; правило «pipeline-status перед любым action» сохраняется, но bootstrap через оракул описан явно.
  • Правило «1 retry subagent error → STOP» и запрет --admin для merge-pr сохраняются.

Граничные случаи

  • Пользователь передал номер PR вместо issue — скилл должен явно сказать: вход всегда issue-номер; оракул примет и PR, но контракт команды — issue.
  • Пустой репо без открытых issues при bare-запуске → завершение с понятным сообщением.

Влияние на связанные компоненты

  • #74 (источник новых NEXT-строк; сначала мерж #74).
  • commands/run-pipeline.md, AGENTS.md (обе копии через sync), копии скилла в двух каталогах.

Вне scope

  • Изменения оракула, issue/bug-discovery скиллов, агентов reviewer/memory-syncer — отдельные issues.
  • Лимиты CI-fix попыток — сознательно не вводим.

Критерии приемки

  • grep: Template A не содержит Closes #N одновременно с issue_number: N; Template F не содержит «PR #N».
  • SKILL.md содержит блок «Вход» с тремя режимами и правилами batch-STOP.
  • Template A описывает PR_NUMBER: <M> в отчёте сабагента.
  • Копии скилла в .opencode/skills и ~/.config/opencode/skills идентичны (diff пуст).
## Контекст Зависит от #74 (оракул получает issue-first вход) — этот issue синхронизирует документацию с новым контрактом. Дефекты `.opencode/skills/run-pipeline/SKILL.md` (зафиксированы аудитом): - Протокол требует `pipeline-status({pr_number: M})` до любого действия, но не объясняет откуда берётся M на старте — bootstrap-дедлок; нет ветки обработки tool-failure. - Не описаны режимы входа команды: одно issue, список, или все открытые. - Нотация прыгает: конвенция N=issue/M=PR нарушается в Template F («PR #N не найден»); буква N имеет три разных значения в одном документе. - Template A требует И вписать `Closes #N` в body, И передать `issue_number: N` — tool `create-pr` сам аппендит `Closes`, получается дубль. - Template A не задаёт машиночитаемый формат возврата номера PR сабагентом. - Скилл утверждает, что NEXT всегда содержит subagent_type+template — после #74 это станет правдой, текст нужно привести к факту. - Косметика: сломана визуальная нумерация шагов Template C (п.6 «НЕ МЕРДЖИТЬ»); stale line-ref на memory-syncer.md:38 (правило на строках 47–48). - `commands/run-pipeline.md` и секция Pipeline в AGENTS.md не отражают новые режимы. ## Задача 1. В начало SKILL.md — блок «Вход»: `/run-pipeline #N` (номер ISSUE); список номеров; bare (без аргументов) = все открытые issues, oldest first. Явно: issues создаются ВНЕ пайплайна (feature-spec → issue-скилл), run-pipeline никогда не создаёт issues. 2. Протокол, шаг 1: `pipeline-status` вызывается с номером из команды (issue-first; bootstrap-ответ `NEXT: template=A for issue #N` — штатная ветка, не ошибка). Описать обработку tool-failure строки `⚠️ ... failed`. 3. Template A: убрать `Closes #N` из body-шаблона (оставить только `issue_number: N`); добавить контракт финального отчёта сабагента — обязательная строка `PR_NUMBER: <M>`. 4. Batch-режим: строго последовательно; hard-stop одного issue (AMBIGUOUS от оракула / NEEDS_DISCUSSION от reviewer / tool error после 1 retry) → весь батч STOP с отчётом. Явно зафиксировать: красная CI — штатный fix-цикл (Template D + re-loop), НЕ stop-условие. 5. Template F: «PR #N не найден» → M-нотация; по всему файлу единообразно N=issue, M=PR (включая bug-discovery-хвосты — там букву для баг-ишуса обозначить отдельно, например `<BUG_ISSUE>`). 6. Синхронизировать упоминания NEXT-строк с новым оракулом из #74 (bootstrap `for issue #N`, CI с `template=D` и т.д.). 7. Косметика: нумерация шагов Template C; line-ref на memory-syncer.md. 8. `commands/run-pipeline.md` — описать три режима входа. 9. Секция Pipeline в AGENTS.md (источник — /root/workspace/opencode-config/AGENTS.md, НЕ трогать bind-mount копию в ~/.config; синк по skill configure-opencode) — добавить bare-режим. Копии скилла в /root/workspace/opencode-config/.opencode/skills/ и ~/.config/opencode/skills/ держать байт-идеальными (синк). ## Контракты - Формат SKILL.md (frontmatter name/description, структура шаблонов A/C/D/E/F) не меняется. - Все упоминаемые tool-имена и их сигнатуры — kebab-case, соответствуют реальным TS-обёрткам. ## Инварианты - 6 фаз и их порядок не меняются; правило «pipeline-status перед любым action» сохраняется, но bootstrap через оракул описан явно. - Правило «1 retry subagent error → STOP» и запрет `--admin` для merge-pr сохраняются. ## Граничные случаи - Пользователь передал номер PR вместо issue — скилл должен явно сказать: вход всегда issue-номер; оракул примет и PR, но контракт команды — issue. - Пустой репо без открытых issues при bare-запуске → завершение с понятным сообщением. ## Влияние на связанные компоненты - #74 (источник новых NEXT-строк; сначала мерж #74). - commands/run-pipeline.md, AGENTS.md (обе копии через sync), копии скилла в двух каталогах. ## Вне scope - Изменения оракула, issue/bug-discovery скиллов, агентов reviewer/memory-syncer — отдельные issues. - Лимиты CI-fix попыток — сознательно не вводим. ## Критерии приемки - grep: Template A не содержит `Closes #N` одновременно с `issue_number: N`; Template F не содержит «PR #N». - SKILL.md содержит блок «Вход» с тремя режимами и правилами batch-STOP. - Template A описывает `PR_NUMBER: <M>` в отчёте сабагента. - Копии скилла в .opencode/skills и ~/.config/opencode/skills идентичны (diff пуст).
Sign in to join this conversation.
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#75
No description provided.