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

Merged
slaid098 merged 3 commits from fix/run-pipeline-skill/input-contract into main 2026-08-16 19:16:03 +03:00
Owner

Что сделано

  • SKILL.md: добавлен блок «Вход» с тремя режимами команды (один issue, список, bare = все открытые, oldest first); явно зафиксировано, что issues создаются вне пайплайна.
  • Протокол: шаг 1 теперь вызывает pipeline-status с номером из команды (issue-first), bootstrap-ответ NEXT: ... for issue #N описан как штатная ветка; добавлена обработка tool-failure строки ⚠️ ... failed.
  • Template A: убран Closes #N из body-шаблона (оставлен только issue_number: N); добавлен контракт финального отчёта сабагента — обязательная строка PR_NUMBER: <M>.
  • Batch-режим: строго последовательно, hard-stop одного issue → STOP всего батча; красная CI явно зафиксирована как штатный fix-цикл (Template D), не stop-условие.
  • Template F: «PR #N не найден» → M-нотация; по всему файлу единообразно N=issue, M=PR; в bug-discovery-хвостах буква для баг-ишуса заменена на <BUG_ISSUE>.
  • NEXT-строки синхронизированы с оракулом из #74 (bootstrap for issue #N, call merge-pr tool with pr_number=M).
  • Косметика: исправлена нумерация шагов Template C (п.6 «НЕ МЕРДЖИТЬ»); line-ref на memory-syncer.md обновлён на 47-48.
  • commands/run-pipeline.md: описаны три режима входа.
  • AGENTS.md: в секцию Pipeline добавлен bare-режим.
  • Копии скилла и команды в ~/.config/opencode/ синхронизированы байт-идеально.

Почему

Скилл не описывал контракт входа команды и bootstrap-дедлок (откуда брать номер PR на старте), нотация N/M прыгала, Template A дублировал Closes #N, а batch-семантика stop-условий не была зафиксирована. Issue #75 синхронизирует документацию с новым issue-first контрактом оракула из #74.

Watch out

  • ~/.config/opencode/ — bind-mount, изменения вне git; синк копий выполнен вручную (diff пуст).
  • Вход команды — всегда номера issues, не PR (контракт зафиксирован в блоке «Вход»).

Pending

—

Closes #75

Closes #75

## Что сделано - SKILL.md: добавлен блок «Вход» с тремя режимами команды (один issue, список, bare = все открытые, oldest first); явно зафиксировано, что issues создаются вне пайплайна. - Протокол: шаг 1 теперь вызывает `pipeline-status` с номером из команды (issue-first), bootstrap-ответ `NEXT: ... for issue #N` описан как штатная ветка; добавлена обработка tool-failure строки `⚠️ ... failed`. - Template A: убран `Closes #N` из body-шаблона (оставлен только `issue_number: N`); добавлен контракт финального отчёта сабагента — обязательная строка `PR_NUMBER: <M>`. - Batch-режим: строго последовательно, hard-stop одного issue → STOP всего батча; красная CI явно зафиксирована как штатный fix-цикл (Template D), не stop-условие. - Template F: «PR #N не найден» → M-нотация; по всему файлу единообразно N=issue, M=PR; в bug-discovery-хвостах буква для баг-ишуса заменена на `<BUG_ISSUE>`. - NEXT-строки синхронизированы с оракулом из #74 (bootstrap `for issue #N`, `call merge-pr tool with pr_number=M`). - Косметика: исправлена нумерация шагов Template C (п.6 «НЕ МЕРДЖИТЬ»); line-ref на memory-syncer.md обновлён на 47-48. - `commands/run-pipeline.md`: описаны три режима входа. - AGENTS.md: в секцию Pipeline добавлен bare-режим. - Копии скилла и команды в `~/.config/opencode/` синхронизированы байт-идеально. ## Почему Скилл не описывал контракт входа команды и bootstrap-дедлок (откуда брать номер PR на старте), нотация N/M прыгала, Template A дублировал `Closes #N`, а batch-семантика stop-условий не была зафиксирована. Issue #75 синхронизирует документацию с новым issue-first контрактом оракула из #74. ## Watch out - `~/.config/opencode/` — bind-mount, изменения вне git; синк копий выполнен вручную (diff пуст). - Вход команды — всегда номера issues, не PR (контракт зафиксирован в блоке «Вход»). ## Pending — Closes #75 Closes #75
Author
Owner

Code Review Summary

PR синхронизирует run-pipeline скилл с issue-first контрактом оракула (#74): фиксирует вход команды (issue-номера, 3 режима), bootstrap-ветку, batch stop-семантику, единообразную нотацию N=issue/M=PR и убирает дублирование Closes #N из Template A. Качество высокое: все writer↔reader связи обновлены в одном PR, line-ref'ы и NEXT-строки сверены с оракулом, копии в ~/.config/opencode/ синхронизированы байт-идеально.

Positives

  • Парная правка Template A корректна: create-pr.ts:138 сам аппендит Closes #N из issue_number — удаление из body-шаблона устраняет дублирование, а не ломает связь issue↔PR.
  • NEXT-строки сверены с оракулом: bootstrap (pipeline-status.py:926 NEXT_BOOTSTRAP) и call merge-pr tool with pr_number=M (pipeline-status.py:922) совпадают дословно.
  • Line-ref на memory-syncer.md:47-48 точен: строка 47 содержит git remote get-url origin, строка 48 — пример парсинга.
  • Batch-семантика зафиксирована: hard-stop (AMBIGUOUS / NEEDS_DISCUSSION / tool error после 1 retry) и красная CI как штатный fix-цикл (Template D) соответствуют реальному поведению оракула (NEXT_ACTIONS["CI"]).
  • Синк ~/.config/opencode/ проверен: diff пуст для обоих файлов (SKILL.md и command).
  • Template C: исправлена нумерация шагов (п.6 «НЕ МЕРДЖИТЬ»), ⚠️ ...failed обработка согласована с reviewer.md:360.

Suggestions (info, not blocking)

  • PR body (сам PR #81): Closes #75 встречается дважды — автор вписал его вручную, а tool create-pr добавил второй раз из issue_number. Ирония в том, что PR убирает ровно это дублирование из Template A. Косметика, оракул парсит корректно (ISSUE ✅).
  • SKILL.md Template A, шаг 1: «Checkout new branch ... от master» — дефолтная ветка репо main, не master. Строка не менялась в этом PR (pre-existing), но при следующей правке скилла стоит поправить.

Verdict: APPROVE

## Code Review Summary PR синхронизирует run-pipeline скилл с issue-first контрактом оракула (#74): фиксирует вход команды (issue-номера, 3 режима), bootstrap-ветку, batch stop-семантику, единообразную нотацию N=issue/M=PR и убирает дублирование `Closes #N` из Template A. Качество высокое: все writer↔reader связи обновлены в одном PR, line-ref'ы и NEXT-строки сверены с оракулом, копии в `~/.config/opencode/` синхронизированы байт-идеально. ### Positives - **Парная правка Template A корректна**: `create-pr.ts:138` сам аппендит `Closes #N` из `issue_number` — удаление из body-шаблона устраняет дублирование, а не ломает связь issue↔PR. - **NEXT-строки сверены с оракулом**: bootstrap (`pipeline-status.py:926` `NEXT_BOOTSTRAP`) и `call merge-pr tool with pr_number=M` (`pipeline-status.py:922`) совпадают дословно. - **Line-ref на memory-syncer.md:47-48 точен**: строка 47 содержит `git remote get-url origin`, строка 48 — пример парсинга. - **Batch-семантика зафиксирована**: hard-stop (AMBIGUOUS / NEEDS_DISCUSSION / tool error после 1 retry) и красная CI как штатный fix-цикл (Template D) соответствуют реальному поведению оракула (`NEXT_ACTIONS["CI"]`). - **Синк `~/.config/opencode/` проверен**: `diff` пуст для обоих файлов (SKILL.md и command). - **Template C**: исправлена нумерация шагов (п.6 «НЕ МЕРДЖИТЬ»), `⚠️ ...failed` обработка согласована с reviewer.md:360. ### Suggestions (info, not blocking) - **PR body (сам PR #81)**: `Closes #75` встречается дважды — автор вписал его вручную, а tool `create-pr` добавил второй раз из `issue_number`. Ирония в том, что PR убирает ровно это дублирование из Template A. Косметика, оракул парсит корректно (ISSUE ✅). - **SKILL.md Template A, шаг 1**: «Checkout new branch ... от master» — дефолтная ветка репо `main`, не `master`. Строка не менялась в этом PR (pre-existing), но при следующей правке скилла стоит поправить. ### Verdict: APPROVE
slaid098 deleted branch fix/run-pipeline-skill/input-contract 2026-08-16 19:16:03 +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!81
No description provided.