From 55a95140cd34d4ab3ff092c0ce38c984ee210053 Mon Sep 17 00:00:00 2001 From: Sergey <93754860+slaid098@users.noreply.github.com> Date: Fri, 24 Jul 2026 00:31:19 +0300 Subject: [PATCH] refactor: issue + repo-init skills rewrite (#28) * refactor(issue): full subagent delegation + acceptance criteria + dependencies * refactor(repo-init): Phase A/B split + git init prerequisite + remove private refs * docs(handoff): add pr-13 handoff + ADR-008 * docs(handoff): set PR number in filenames --------- Co-authored-by: opencode-agent --- .opencode/skills/issue/SKILL.md | 60 +++++++++++++++---- .opencode/skills/repo-init/SKILL.md | 34 ++++++++++- .../008-pr-28-issue-repo-init-rewrite.md | 23 +++++++ docs/handoff/pr-28-issue-repo-init-rewrite.md | 17 ++++++ 4 files changed, 119 insertions(+), 15 deletions(-) create mode 100644 docs/decisions/008-pr-28-issue-repo-init-rewrite.md create mode 100644 docs/handoff/pr-28-issue-repo-init-rewrite.md diff --git a/.opencode/skills/issue/SKILL.md b/.opencode/skills/issue/SKILL.md index f7ca7d2..fd3c688 100644 --- a/.opencode/skills/issue/SKILL.md +++ b/.opencode/skills/issue/SKILL.md @@ -38,6 +38,19 @@ Issue должно содержать всё необходимое, чтобы - `ruff check path/to/file.py` → All checks passed - `mypy path/to/file.py` → no issues +## Acceptance criteria +(явный чек-лист — что должно быть верно в результате, не команды проверки) +- [ ] Эффект A работает в случае B +- [ ] Файл C не содержит паттерн D +- [ ] Тест E покрывает ветку F +- [ ] Coverage ≥ 80% на изменённых файлах + +## Dependencies +(связи с другими issue/PR — блокировки и порядок) +- Blocked by #N (этот PR нельзя начать пока #N не смержен) +- Do not merge until #N merges (этот PR готов, но ждёт #N) +- Part of #N (подзадача родительского issue) + ## Связанные ресурсы - Ref #33 - [PR #34](https://github.com/...) @@ -59,15 +72,18 @@ Issue должно содержать всё необходимое, чтобы ## Использование subagent для создания issue -Когда получает задачу создать issue: +Issue создаёт **subagent** (general type), а не основной агент. Это сохраняет контекст основного агента — длинный body issue не попадает в его историю. +**Main agent** передаёт subagent'у только **intent summary** — короткое описание задачи (1-3 предложения: что и зачем). Subagent делает всё остальное. + +**Subagent (полная ответственность):** 1. Загрузи навык `issue` -2. Собери контекст (прочитай файлы, пойми задачу) -3. **Запусти subagent** для выполнения `gh issue create` — передай ему готовый title и body -4. Subagent создаёт issue и возвращает URL -5. Сообщи URL пользователю +2. Собери контекст — прочитай файлы из intent summary, пойми задачу, оцени объём (правило дробления ниже) +3. Составь self-contained body по шаблону (Контекст → Что сделать → Проверка → Acceptance criteria → Dependencies → Связанные ресурсы) +4. Запусти `gh issue create --title "..." --body "..."` (labels — см. guidance ниже) +5. Верни URL созданного issue основному агенту -Это нужно чтобы длинный body issue не засорял контекст основного агента. +Main agent НЕ пишет body и НЕ запускает `gh issue create` — всё через subagent. Это согласовано с `pipeline-driver` skill (Phase 0: "через subagent с `issue` skill") и `AGENTS.md` (Dev Workflow, step 2: "delegate to `task` subagent"). ## Пример хорошего issue @@ -84,6 +100,14 @@ Zoom breathing падает при включённом geometry crop — crop - `pytest tests/test_effects.py -x -q --no-cov` → all passed - `pytest tests/test_new_effects_real.py::test_geometry_crop_with_zoom_breathing_real` → passed +## Acceptance criteria +- [ ] Geometry crop использует `iw`/`ih`, не `probe.width`/`probe.height` +- [ ] Zoom breathing не падает при включённом geometry crop +- [ ] Регрессионный тест покрывает комбинацию zoom breathing + geometry crop + +## Dependencies +- Closes #33 + ## Связанные ресурсы - Closes #33 ``` @@ -103,19 +127,31 @@ Zoom breathing падает при включённом geometry crop — crop gh issue create \ --title "type(scope): description" \ --body "..." \ - --label "enhancement" + --label "