@gian-tiaga/eda 3.11.0 → 3.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/MIGRATION.md CHANGED
@@ -91,6 +91,7 @@ docs/
91
91
  - **У `eda-review` есть режим исполнения.** `review.execution` принимает `subagents` или `main`; default `subagents` сохраняет прежнее поведение. Безусловный Claude `context: fork` удалён, поэтому `main` не создаёт отдельного агента для ревью.
92
92
  - **У `eda-orhestra` появился режим исполнения.** `orhestra.execution` принимает `subagents`, `main` или `main_propagated`; default `subagents` сохраняет прежнее поведение. `main` выполняет верхние этапы текущим агентом, а `main_propagated` дополнительно передаёт `main` совместимым execute/review-этапам.
93
93
  - **У `eda-polish` больше нет порога.** Цикл завершается только при нуле находок и останавливается досрочно, если за круг число открытых находок не сократилось. Аргумент вида `args: "threshold 90 limit 2"` в шаге оркестратора `eda update` приводит к виду `args: "limit 2"`.
94
+ - **У `eda-polish` появилась своя настройка исполнения.** `polish.execution` принимает `subagents` или `main`; default `subagents`. Раньше цикл полировки брал режим из `review.execution`, поэтому в проекте с `review.execution: main` `eda-polish` тоже работал без субагентов. После обновления эти настройки независимы: `review.execution` задаёт только раскладку проверок внутри `eda-review`, а прежнее поведение возвращает `polish.execution: main`.
94
95
  - **Формат ревью дополнен.** У каждой находки появилось поле `repro` — чем проблема воспроизводится, — а в отчёт добавлен раздел «Отклонено» с причинами отклонения. `eda-fix-by-review` может отклонить находку, но только фактически неверную и с обоснованием в отчёте. Старые файлы ревью читаются как есть.
95
96
 
96
97
  ## Проверка миграции
package/README.md CHANGED
@@ -43,7 +43,7 @@ eda update-all ~/Code
43
43
  |---|---|---|
44
44
  | `eda-orhestra` | Выполняет настраиваемую цепочку `eda-*`-скилов. В `subagents` каждый этап получает чистый контекст, в `main` этапы выполняет текущий агент, а `main_propagated` дополнительно передаёт `main` в совместимые execute/review-этапы. По умолчанию: план без проверок → полировка плана → выполнение → автономное ревью и исправления → ручные тесты. Если QA нашёл баг, оркестра запускает fix и повторяет только ручной тест. В `orhestra.steps` шаги можно переставлять, отключать и снабжать `args`. Не коммитит | Артефакты включённых скилов |
45
45
  | `eda-aim` | Сначала через отдельного агента-планировщика согласует с человеком одну или несколько простых проверяемых целей, затем передаёт их агентам-исполнителям и повторяет работу до независимого подтверждения агентом-проверяющим. При необходимости использует установленные скилы в отдельных изолированных субагентах. В `automatic` отвечает на безопасные рабочие вопросы самостоятельно, в `manual` передаёт их человеку; режим задаётся через `aim.mode` или текущий вызов. Точный список новых целей человек подтверждает всегда | `docs/artifacts/aims/` и артефакты задействованных скилов |
46
- | `eda-new-project` | Помогает стартовать новый проект: собирает и согласует требования, функциональность и границы, ограничения и архитектурные драйверы, сравнивает варианты основного стека и фиксирует выбранные компоненты с актуальными стабильными версиями. Не проектирует архитектуру, правила, проверки, AI-скилы или MCP; сохраняет подтверждённый стартовый бриф и всегда без дополнительного вопроса запускает полный технический bootstrap через `eda-prepare-ai` | `docs/artifacts/project-starts/`, затем артефакты `eda-prepare-ai` |
46
+ | `eda-new-project` | Помогает стартовать новый проект: собирает и согласует требования, функциональность и границы, ограничения и архитектурные драйверы, сравнивает варианты основного стека и фиксирует выбранные компоненты с актуальными стабильными версиями. Если у стека есть официальный generator/scaffold CLI, передаёт его как обязательный способ разворачивания вместо ручного создания основы. Не проектирует архитектуру, правила, проверки, AI-скилы или MCP; сохраняет подтверждённый стартовый бриф и всегда без дополнительного вопроса запускает полный технический bootstrap через `eda-prepare-ai` | `docs/artifacts/project-starts/`, затем артефакты `eda-prepare-ai` |
47
47
  | `eda-business` | Совместно с человеком описывает целевое поведение проекта по тематическим карточкам: сложные темы фиксирует подробно, но без шума, соседних модулей и привязки к текущему коду. Может закрепить значимый механизм вроде JWT или серверного хранения токенов, но не язык, библиотеку или конкретную СУБД. `about` содержит лишь короткое описание проекта и основные возможности | `docs/business.md`, `docs/business/` |
48
48
  | `eda-roadmap` | Создаёт roadmap-файл: список будущих задач с короткими, понятными и недвусмысленными описаниями без деталей реализации, файлов, библиотек, API и пошагового плана | `docs/artifacts/roadmaps/` |
49
49
  | `eda-explore` | Исследует тему до конкретного результата: описание проблемы, релевантная архитектура, закрытые развилки, риски внутри решений и короткий выбранный вариант решения без плана. После определения темы читает только применимые business- и reference-карточки. В дефолтном режиме ведёт исследование как диалог; для пакетов и ПО проверяет актуальные стабильные версии | `docs/artifacts/researches/` |
@@ -57,12 +57,12 @@ eda update-all ~/Code
57
57
  | `eda-review` | Оркестрирует отдельные read-only проверки корректности, архитектуры, правил, references, business-правил, плана, качества, тестов, безопасности, производительности, frontend/UI/UX, API, БД, документации и предыдущих ревью. Сохраняет только доказанные дефекты, которые обязательно исправить; косметические и спекулятивные предложения отбрасывает. Любая находка даёт `changes-required`, а чистое ревью — `clean` и 100/100. Без аргументов ревьюит `git diff HEAD` | `docs/artifacts/reviews/` |
58
58
  | `eda-fix-by-review` | Применяет все находки из ревью с учётом правил, архитектуры и применимых карточек. Спрашивает только при неоднозначности, конфликте, расширении scope или рискованном действии. В конце ссылается на отчёт прямо в файле ревью | `docs/artifacts/review-fixes/` |
59
59
  | `eda-manual-test` | Делает ручную проверку после изменений. По умолчанию проверка полная: разбирает план или другой артефакт по разделам, дополняет его фактическим `git diff HEAD` и закрывает матрицу областей — API, база данных, консольные команды, интерфейс, алгоритмы, фон и интеграции, права и роли, конфигурация, логи, регрессии рядом. Область нельзя закрыть чтением кода или зелёными автотестами; незакрытая область даёт `blocked`. Быстрый smoke включается настройкой `manual-test.depth` или словом в запросе. Применимая business-карточка может добавить только относящийся к задаче инвариант или сценарий. Не правит код, не пишет автотесты и не коммитит | `docs/artifacts/manual-tests/` |
60
- | `eda-polish` | Оркестрирует доводку изменений: запускает полное `eda-review`, затем `eda-fix-by-review` и повторяет цикл до `clean` и отсутствия находок либо до лимита 5 итераций. В `main` оба контракта выполняет основной агент без субагентов, в `subagents` каждый шаг получает отдельный изолированный контекст. Все находки исправляются, score остаётся справочным. Не коммитит | `docs/artifacts/reviews/`, `docs/artifacts/review-fixes/` |
61
- | `eda-send-review` | На `sonnet` / `gpt-5.6-terra` отправляет ревью на GitHub PR через `gh` всегда в едином формате: общий комментарий-сводка плюс комментарии к строкам кода. Без явно указанного типа использует `comment`; `approve` и `request-changes` берёт только из контекста текущего вызова. По настройке может скрыть предыдущие сводки eda-send-review и зарезолвить их inline-треды. По умолчанию шлёт все пункты. Claude-модель закрепляется при установке; Codex-модель хранится как рекомендуемый будущий override | (комментарий в PR) |
62
- | `eda-commit` | Работает как лёгкий оркестратор одного `sonnet` / `gpt-5.6-terra` агента: тот сам собирает git-контекст, пишет сообщения и тексты PR по исходному запросу и фактическим изменениям, точечно коммитит и выполняет явно заданные push/PR/merge-действия. Агент экономит время: собирает контекст одним вызовом, не читает кодовую базу и документацию целиком, вместо полного diff берёт сводку `--stat` и дочитывает только неясные файлы, а смысл работы берёт из свежих артефактов `docs/artifacts/**`, если они есть в составе изменений. Весь состав идёт одним коммитом; на несколько логически цельных коммитов он делится только по явной просьбе (`split`, «раздели», «отдельными коммитами») или при явно раздельном scope. Для PR использует шаблон репозитория, отражает все группы изменений и указывает только реально выполненные проверки. С явным контекстом охватывает указанный состав; без контекста коммитит всё — все tracked-изменения и все untracked-файлы независимо от авторства и связи с текущей задачей, кроме очевидных кэшей и локальных служебных артефактов вроде `.DS_Store`. В Claude Code сам оркестратор закреплён за `sonnet`; в Codex остаётся на активной модели сессии из-за отсутствия per-skill override. При вероятном секрете агент блокируется до индексации затронутой группы. После любого push всегда возвращает ссылку — на существующий PR или на его создание — и спрашивает, создавать ли PR, если его нет. Если продолжение не задано, предлагает применимые варианты | (git, опционально GitHub PR) |
60
+ | `eda-polish` | Оркестрирует доводку изменений: запускает полное `eda-review`, затем `eda-fix-by-review` и повторяет цикл до `clean` и отсутствия находок либо до лимита 5 итераций. Режим цикла задаёт `polish.execution`: в `main` оба контракта выполняет основной агент без субагентов, в `subagents` каждый шаг получает отдельный изолированный контекст. Все находки исправляются, score остаётся справочным. Не коммитит | `docs/artifacts/reviews/`, `docs/artifacts/review-fixes/` |
61
+ | `eda-send-review` | На `sonnet` / `gpt-5.6-terra` отправляет ревью на открытый GitHub PR через `gh` всегда в едином формате: общий комментарий-сводка плюс комментарии к строкам кода. Закрытый или смерженный PR не переиспользует и предлагает создать новый либо указать другой открытый PR. Без явно указанного типа использует `comment`; `approve` и `request-changes` берёт только из контекста текущего вызова. По настройке может скрыть предыдущие сводки eda-send-review и зарезолвить их inline-треды. По умолчанию шлёт все пункты. Claude-модель закрепляется при установке; Codex-модель хранится как рекомендуемый будущий override | (комментарий в PR) |
62
+ | `eda-commit` | Работает как лёгкий оркестратор одного `sonnet` / `gpt-5.6-terra` агента: тот сам собирает git-контекст, пишет сообщения и тексты PR по исходному запросу и фактическим изменениям, точечно коммитит и выполняет явно заданные push/PR/merge-действия. Агент экономит время: собирает контекст одним вызовом, не читает кодовую базу и документацию целиком, вместо полного diff берёт сводку `--stat` и дочитывает только неясные файлы, а смысл работы берёт из свежих артефактов `docs/artifacts/**`, если они есть в составе изменений. Весь состав идёт одним коммитом; на несколько логически цельных коммитов он делится только по явной просьбе (`split`, «раздели», «отдельными коммитами») или при явно раздельном scope. Для PR использует шаблон репозитория, отражает все группы изменений и указывает только реально выполненные проверки; существующим считает только открытый PR, а после закрытого или смерженного создаёт новый. С явным контекстом охватывает указанный состав; без контекста коммитит всё — все tracked-изменения и все untracked-файлы независимо от авторства и связи с текущей задачей, кроме очевидных кэшей и локальных служебных артефактов вроде `.DS_Store`. В Claude Code сам оркестратор закреплён за `sonnet`; в Codex остаётся на активной модели сессии из-за отсутствия per-skill override. При вероятном секрете агент блокируется до индексации затронутой группы. После любого push всегда возвращает ссылку — на существующий PR или на его создание — и спрашивает, создавать ли PR, если его нет. Если продолжение не задано, предлагает применимые варианты | (git, опционально GitHub PR) |
63
63
  | `eda-worktree` | На `haiku` / `gpt-5.6-luna` создаёт через пакетного агента git worktree рядом с основным проектом в папке `{name}-work-{n}` и одноимённую ветку. Базу берёт из аргумента или спрашивает | соседняя папка `{name}-work-{n}` |
64
64
  | `eda-merge-worktree` | На `haiku` / `gpt-5.6-luna` мержит через пакетного агента ветку из соседнего worktree в текущую ветку. Принимает номер `1`, короткое имя `work-1` или полное имя `{name}-work-1`. Worktree и ветку после merge не удаляет | (git) |
65
- | `eda-prepare-ai` | Выполняет технический bootstrap нового или существующего проекта: проектирует архитектуру, строгие правила и профиль инструментов, проходит полный каталог автоматических проверок, подбирает применимые AI-скилы, роли и MCP, затем создаёт AI-документацию. Один факт хранит у одного владельца: `docs/rules.md` содержит рабочие действия, запреты и команды проверок, а `docs/arch.md` — топологию исходного кода, ownership, зависимости и потоки без рабочих инструкций. Подтверждённые требования, стек и архитектурные драйверы из `eda-new-project` принимает как обязательный вход и не переоткрывает без обнаруженного конфликта. Для пустого проекта не выдумывает reference-карточки и не выдаёт неустановленные инструменты за доступные | `docs/rules.md`, `docs/arch.md`, `docs/references.md`, `docs/references/`, `AGENTS.md`, `CLAUDE.md` |
65
+ | `eda-prepare-ai` | Выполняет технический bootstrap нового или существующего проекта: проектирует архитектуру, строгие правила и профиль инструментов, проходит полный каталог автоматических проверок, подбирает применимые AI-скилы, роли и MCP, затем создаёт AI-документацию. Для нового проекта фиксирует точную команду официального scaffold CLI выбранного стека, чтобы основа создавалась штатным инструментом, а не вручную. Один факт хранит у одного владельца: `docs/rules.md` содержит рабочие действия, запреты и команды проверок, а `docs/arch.md` — топологию исходного кода, ownership, зависимости и потоки без рабочих инструкций. Подтверждённые требования, стек и архитектурные драйверы из `eda-new-project` принимает как обязательный вход и не переоткрывает без обнаруженного конфликта. Для пустого проекта не выдумывает reference-карточки и не выдаёт неустановленные инструменты за доступные | `docs/rules.md`, `docs/arch.md`, `docs/references.md`, `docs/references/`, `AGENTS.md`, `CLAUDE.md` |
66
66
  | `eda-discover-automations` | Проводит baseline gap-аудит проекта даже без истории, а при наличии анализирует ревью, планы и фиксы. Не ограничивает число предложений: проверяет тесты/e2e, стиль, статанализ, границы модулей, конфиги/IaC, API/БД, security/supply chain, performance, release, эксплуатацию, browser MCP и MCP стека. Для каждой идеи даёт команду, контур запуска и приоритет; ничего не внедряет | `docs/artifacts/automations/` |
67
67
 
68
68
  ### Структура `docs/`
@@ -143,6 +143,7 @@ eda update-all ~/Code
143
143
  | `eda-plan-execute` | `subagents` / `main` / `auto` | Разово меняет, где выполняются фазы, поверх `plan-execute.mode` | `main` для обязательного выполнения основным агентом, `subagents` для изолированных фаз, `auto` для выбора по размеру плана |
144
144
  | `eda-plan-polish` | `threshold N`, `limit N` | Меняет gate и максимальное число итераций «проверка + исправление» | Для доводки ответственных планов перед `eda-plan-execute` |
145
145
  | `eda-manual-test` | `full` / `полная проверка`, `smoke` / `быстро` | Разово меняет глубину ручной проверки поверх `manual-test.depth` | `smoke` для короткой правки, `full` — когда нужно закрыть все области после плана |
146
+ | `eda-polish` | `subagents` / `main`, `limit N` | Разово меняет способ выполнения review и исправлений поверх `polish.execution` и число итераций | `subagents` держит каждый шаг в чистом контексте, `main` экономит контекст на мелкой доводке |
146
147
  | `eda-review` | `subagents` / `main` | Разово меняет способ выполнения выбранных проверок поверх `review.execution` | `main` экономит контекст на частых локальных ревью; `subagents` сохраняет независимость ролей для ответственных изменений |
147
148
 
148
149
  ---
@@ -245,6 +246,11 @@ plan-execute:
245
246
  # subagents — каждая фаза в отдельном субагенте, main — весь план одним контекстом, auto — решает по плану.
246
247
  mode: auto
247
248
 
249
+ polish:
250
+ # Где eda-polish выполняет review и исправления цикла полировки.
251
+ # subagents — каждое review и каждое исправление в отдельном изолированном субагенте, main — оба контракта основным агентом.
252
+ execution: subagents
253
+
248
254
  manual-test:
249
255
  # Глубина ручной проверки в eda-manual-test.
250
256
  # full — закрыть все применимые области: API, база, консольные команды, интерфейс, алгоритмы, фон, права, конфигурацию, логи и регрессии рядом.
@@ -404,6 +410,7 @@ discover-automations:
404
410
  - `plan-review.threshold` — доля закрытых пунктов чек-листа для статуса `ready`, default `100`. Отдельных агентов у `plan-review` больше нет: проверку целиком делает один субагент.
405
411
  - `plan-polish.limit` — максимальное число итераций «проверка + исправление»; default `1`. Отдельного подтверждающего прохода нет: исправление проверяет ревью следующей итерации. Цикл останавливается раньше, если score перестал расти.
406
412
  - `plan-execute.mode` — где `eda-plan-execute` выполняет фазы: `subagents` — каждая фаза в отдельном изолированном субагенте с независимой проверкой, `main` — весь план одним контекстом без субагентов, `auto` — выбор по плану; default `auto`. Явный режим в вызове имеет приоритет.
413
+ - `polish.execution` — где `eda-polish` выполняет review и исправления своего цикла: `subagents` — каждый шаг в отдельном изолированном субагенте, `main` — оба контракта основным агентом; default `subagents`. Настройка независима от `review.execution`, которая задаёт только раскладку проверок внутри `eda-review`. Явный режим в вызове и `main` от `eda-orhestra` в `main_propagated` имеют приоритет.
407
414
  - `manual-test.depth` — глубина ручной проверки в `eda-manual-test`: `full` — закрыть все применимые области матрицы покрытия, `smoke` — только запуск и основной сценарий изменённой области, `ask_each_time` — спрашивать каждый раз; default `full`. Явная глубина в вызове имеет приоритет.
408
415
  - `review.execution` — где выполняются проверки `eda-review`: `subagents` запускает отдельные специализированные роли, `main` выполняет те же выбранные проверки основным агентом без субагентов и с однократной загрузкой общего контекста; default `subagents`. Явный режим в вызове имеет приоритет.
409
416
  - `review.agents.<check>.mode` — запускать проверку всегда, автоматически по контексту или отключить.
@@ -2,6 +2,8 @@
2
2
 
3
3
  Ты — единственный исполнитель `eda-commit`. Собери минимально достаточный git-контекст, определи состав по правилам ниже, закоммить его и выполни только явно разрешённое продолжение.
4
4
 
5
+ Ты уже запущен как `eda-commit-executor`: выполняй работу сам и верни результат вызывающему агенту. Не запускай субагентов и не применяй навык `eda-commit` как оркестратор, даже если он упомянут во входном сообщении или прочитан при сборе контекста.
6
+
5
7
  Работай дёшево: каждое лишнее чтение и каждый лишний вызов команды замедляют коммит. Не читай кодовую базу, документацию проекта и большие файлы целиком, если этого прямо не требует правило ниже.
6
8
 
7
9
  ## Вход
@@ -100,8 +102,8 @@
100
102
  - Передавай многострочное описание через временный файл и `--body-file`, чтобы shell quoting не повредил Markdown. Не оставляй незаполненные placeholder'ы шаблона.
101
103
 
102
104
  - Для push используй существующий upstream, иначе `git push -u origin <branch>`.
103
- - Для PR определи base по `origin/HEAD`, сначала проверь текущую ветку через `gh pr view`; существующий PR не дублируй.
104
- - Если PR отсутствует, создай его через `gh pr create --title <title> --body-file <file>`, затем получи фактические номер и URL через `gh`; не угадывай ссылку. Если PR уже существует, меняй его заголовок или описание только по явному запросу пользователя через `gh pr edit`; обычный push не перезаписывает текст PR.
105
+ - Для PR определи base по `origin/HEAD`, затем получи PR текущей ветки вместе с `state` через `gh pr list --head <branch> --state all --json number,url,state,headRefName,baseRefName`. Существующим считай только PR со `state: OPEN`; его не дублируй.
106
+ - Закрытый или смерженный PR этой ветки не переиспользуй и не считай существующим: если создание PR запрошено, создай новый через `gh pr create --title <title> --body-file <file>`. Если открытого PR нет, действуй как при отсутствии PR. После создания получи фактические номер и URL, а также состояние через `gh`; не угадывай ссылку. Заголовок или описание открытого PR меняй только по явному запросу пользователя через `gh pr edit`; обычный push не перезаписывает текст PR.
105
107
  - После любого выполненного push всегда возвращай ссылку. Если PR текущей ветки есть — `pr.status: existing` и его фактический URL. Если PR нет — `pr.status: absent` и `pr.create_url`: ссылка на создание PR, собранная из фактического URL репозитория (`gh repo view`), base из `origin/HEAD` и имени ветки.
106
108
  - Если PR нет, а его создание не запрошено, сам PR не создавай: верни `completed`, `pr.create_url`, вопрос «Создать PR?» и варианты «создать PR» / «оставить ссылку на создание».
107
109
  - Если репозиторий не на GitHub или `gh` недоступен, верни `pr.create_url: null` и назови причину в `error`.
package/lib/install.js CHANGED
@@ -278,6 +278,9 @@ const DEFAULT_SETTINGS = {
278
278
  planExecute: {
279
279
  mode: 'auto'
280
280
  },
281
+ polish: {
282
+ execution: 'subagents'
283
+ },
281
284
  manualTest: {
282
285
  depth: 'full'
283
286
  },
@@ -300,6 +303,7 @@ const SETTINGS_SECTION_NAMES = [
300
303
  'plan-review',
301
304
  'plan-polish',
302
305
  'plan-execute',
306
+ 'polish',
303
307
  'manual-test',
304
308
  'review',
305
309
  'send-review',
@@ -402,6 +406,16 @@ const PLAN_EXECUTE_MODE_CHOICES = [
402
406
  name: 'Выполнять весь план основным агентом без субагентов'
403
407
  }
404
408
  ];
409
+ const POLISH_EXECUTION_CHOICES = [
410
+ {
411
+ value: 'subagents',
412
+ name: 'Каждое review и исправление выполнять отдельным изолированным субагентом'
413
+ },
414
+ {
415
+ value: 'main',
416
+ name: 'Review и исправления выполнять основным агентом без субагентов'
417
+ }
418
+ ];
405
419
  const PLAN_SIZE_CHOICES = [
406
420
  {
407
421
  value: 'normal',
@@ -788,6 +802,7 @@ export async function askSettings({
788
802
  ['plan-review', 'planReview.threshold', settings.planReview, 'threshold', 'Какой порог готовности использовать в eda-plan-review?', PLAN_REVIEW_THRESHOLD_CHOICES],
789
803
  ['plan-polish', 'planPolish.limit', settings.planPolish, 'limit', 'Сколько итераций «проверка + исправление» разрешить eda-plan-polish?', PLAN_POLISH_LIMIT_CHOICES],
790
804
  ['plan-execute', 'planExecute.mode', settings.planExecute, 'mode', 'Как eda-plan-execute должен выполнять фазы по умолчанию?', PLAN_EXECUTE_MODE_CHOICES],
805
+ ['polish', 'polish.execution', settings.polish, 'execution', 'Как eda-polish должен выполнять review и исправления по умолчанию?', POLISH_EXECUTION_CHOICES],
791
806
  ['manual-test', 'manualTest.depth', settings.manualTest, 'depth', 'Какую глубину ручной проверки использовать в eda-manual-test по умолчанию?', MANUAL_TEST_DEPTH_CHOICES],
792
807
  ['review', 'review.execution', settings.review, 'execution', 'Как eda-review должен выполнять проверки по умолчанию?', REVIEW_EXECUTION_CHOICES]
793
808
  ];
@@ -1268,6 +1283,14 @@ function migrateSettingsContent(content) {
1268
1283
  value => { settings.planExecute.mode = value; }
1269
1284
  );
1270
1285
 
1286
+ const polish = objectValue(raw.polish);
1287
+ transfer(
1288
+ 'polish.execution',
1289
+ normalizeExecutionValue('polish.execution', polish.execution, { single: 'main' }),
1290
+ oneOf(['subagents', 'main']),
1291
+ value => { settings.polish.execution = value; }
1292
+ );
1293
+
1271
1294
  const manualTest = objectValue(raw['manual-test']);
1272
1295
  transfer(
1273
1296
  'manualTest.depth',
@@ -1510,6 +1533,11 @@ plan-execute:
1510
1533
  # subagents — каждая фаза в отдельном субагенте, main — весь план одним контекстом, auto — решает по плану.
1511
1534
  mode: ${settings.planExecute.mode}
1512
1535
 
1536
+ polish:
1537
+ # Где eda-polish выполняет review и исправления цикла полировки.
1538
+ # subagents — каждое review и каждое исправление в отдельном изолированном субагенте, main — оба контракта основным агентом.
1539
+ execution: ${settings.polish.execution ?? 'subagents'}
1540
+
1513
1541
  manual-test:
1514
1542
  # Глубина ручной проверки в eda-manual-test.
1515
1543
  # full — закрыть все применимые области: API, база, консольные команды, интерфейс, алгоритмы, фон, права, конфигурацию, логи и регрессии рядом.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gian-tiaga/eda",
3
- "version": "3.11.0",
3
+ "version": "3.13.0",
4
4
  "description": "Пакет скилов и специализированных агентов eda-* для Claude Code и Codex CLI",
5
5
  "type": "module",
6
6
  "bin": {
@@ -5,6 +5,8 @@ description: 'Коммитит выбранные или все незакомм
5
5
 
6
6
  # Скил: Коммитер (eda-commit)
7
7
 
8
+ Этот навык предназначен для основного агента-оркестратора. Если ты уже запущен в роли `eda-commit-executor`, выполняй инструкции своей роли самостоятельно: не применяй процесс оркестратора ниже и не запускай другого `eda-commit-executor`.
9
+
8
10
  Работай как лёгкий оркестратор установленного агента `eda-commit-executor`. Сам не исследуй diff, не выбирай файлы, не составляй commit message и не выполняй git/GitHub-команды.
9
11
 
10
12
  ## Вход из сообщения пользователя
@@ -133,5 +135,6 @@ COMMIT_SPLIT:
133
135
  - Дробить состав на несколько коммитов, когда пользователь об этом не просил.
134
136
  - Спрашивать про push или PR, если пользователь уже явно приказал выполнить их.
135
137
  - Заканчивать выполненный push без ссылки на PR или на его создание.
138
+ - Переиспользовать закрытый или смерженный PR вместо создания нового открытого PR.
136
139
  - Отключать hooks, использовать `--amend`, делать force-push в `main`/`master` или создавать дубликат PR.
137
140
  - Делать ревью или править логику кода — это другие скилы.
@@ -21,7 +21,8 @@ description: 'Прямо выполняет задачу, указанную п
21
21
  4. **Сохраняй пользовательскую работу.** Перед изменениями проверь текущее состояние рабочей директории и не перезаписывай несвязанные правки.
22
22
  5. **Проверяй результат.** Для изменений поведения добавь или обнови точечные тесты. Выполни применимые тесты, линтеры, typecheck, сборку или предметную проверку; не заявляй о том, что не запускалось.
23
23
  6. **Внешние и git-действия — только по запросу.** Не коммить, не пушь, не создавай PR, не публикуй и не деплой без прямого указания рядом с вызовом. Для необратимого или разрушительного действия нужен однозначный target; при неоднозначности спроси.
24
- 7. **Артефакт обязателен.** Создай отчёт до первого содержательного изменения и поддерживай его в актуальном состоянии. Заверши отчёт даже при частичном результате, блокере или ошибке.
24
+ 7. **Новый проект разворачивай штатным CLI.** Если для выбранного стека существует официальный generator/scaffold CLI, используй его через package manager или runtime (`composer create-project`, `npm create`, `npx`, `cargo new` или реальный аналог), а не создавай генерируемую основу вручную. Затем меняй полученный scaffold в рамках запроса. Если подходящих CLI несколько и выбор меняет результат, задай `AskUserQuestion`.
25
+ 8. **Артефакт обязателен.** Создай отчёт до первого содержательного изменения и поддерживай его в актуальном состоянии. Заверши отчёт даже при частичном результате, блокере или ошибке.
25
26
 
26
27
  ## Как выбрать контекст
27
28
 
@@ -23,6 +23,7 @@ description: 'Собирает и согласует требования, гр
23
23
  6. **Не пишешь код и не ставишь пакеты.** Сам меняй только `docs/artifacts/project-starts/`; не создавай конфиги, CI или проектную AI-документацию.
24
24
  7. **Проверяй версии выбранного стека.** Для каждого подтверждаемого пакета, runtime, framework, СУБД, CLI или сервиса найди актуальную стабильную версию по официальному источнику. Не пиши `latest` без номера версии, источника и даты проверки.
25
25
  8. **Не усиливай требования догадками.** Отделяй прямой факт пользователя от вывода: например, хостинг в конкретной стране сам по себе не означает обязательную резидентность данных. Не подтверждённое следствие запиши как открытый вопрос, а не как принятое ограничение.
26
+ 9. **Передавай штатный способ разворачивания.** Если у выбранного языка, framework или package manager есть официальный CLI для создания проекта, зафиксируй его как обязательный способ последующего bootstrap. Не проектируй файлы scaffold вручную и не запускай CLI внутри этого скила.
26
27
 
27
28
  ## Интерактивные вопросы
28
29
 
@@ -125,6 +126,7 @@ status: ready-for-prepare-ai
125
126
  - <если есть>
126
127
 
127
128
  ## Handoff в eda-prepare-ai
129
+ - Разворачивать основу проекта штатным CLI выбранного стека или package manager, а не создавать доступный ему scaffold вручную.
128
130
  - Спроектировать и согласовать архитектуру.
129
131
  - Сформировать строгие правила проекта и профиль инструментов.
130
132
  - Провести полный аудит автоматических проверок.
@@ -138,6 +140,7 @@ status: ready-for-prepare-ai
138
140
  - выбран один основной стек, а не список равных вариантов;
139
141
  - все значимые решения подтверждены пользователем или явно помечены как автономный выбор;
140
142
  - для каждого выбранного компонента указаны версия, официальный источник и дата проверки;
143
+ - для нового проекта указан официальный CLI bootstrap выбранного стека, если такой CLI существует;
141
144
  - правила, архитектура, проверки и AI/MCP-рекомендации не спроектированы внутри стартового документа.
142
145
 
143
146
  ### 5. Всегда передать стартовый документ `eda-prepare-ai`
@@ -69,7 +69,8 @@ description: 'Создаёт понятный исполнимый план ре
69
69
  12. Один факт — одно место. Поведение описано в `Целевом алгоритме`, контракты — в `Контрактах реализации`, фаза на них опирается и не повторяет их.
70
70
  13. План доводится до первой точки, где результат можно запустить и проверить целиком. Дальше планируй следующей вехой, на фактах.
71
71
  14. Если нужны пакеты, библиотеки, CLI или сервисы, а версия не указана в контексте или lock-файлах, найди последнюю стабильную версию через context7 или web search. Не пиши `latest` без конкретной версии и источника.
72
- 15. Финальный план прост, исполним и без альтернатив вида «выбрать», «решить», «можно так или так», «предпочтительно».
72
+ 15. Если план разворачивает новый проект и у выбранного стека есть официальный generator/scaffold CLI, план обязан использовать точную команду этого CLI или package manager (`composer create-project`, `npm create`, `npx`, `cargo new` или реальный аналог). Не планируй ручное создание файлов, которые штатно генерирует этот инструмент; последующие целевые изменения поверх результата CLI допустимы.
73
+ 16. Финальный план прост, исполним и без альтернатив вида «выбрать», «решить», «можно так или так», «предпочтительно».
73
74
 
74
75
  ## Технические остановки субагентов
75
76
 
@@ -210,6 +211,7 @@ Quality gate перед показом на подтверждение, пере
210
211
  - ни один факт не описан в двух разделах;
211
212
  - `test_strategy` и `logging_strategy` применены;
212
213
  - пакеты имеют конкретные версии или ссылку на существующий lock;
214
+ - bootstrap нового проекта использует существующий официальный CLI выбранного стека, а не ручное воспроизведение scaffold;
213
215
  - нет неподтверждённых существенных решений, неразрешённых альтернатив и открытых вопросов;
214
216
  - нет общих призывов, повторов и пояснений, удаление которых не меняет действия, контракты, проверки или принятые решения;
215
217
  - объём: `normal` — не больше 40 КБ, `short` — не больше 12 КБ и 2 фаз. Это стоп, а не цель: план настолько короткий, насколько позволяет однозначность. При превышении раздели план по вехам и предложи пользователю первую;
@@ -57,7 +57,8 @@ plan-execute:
57
57
  6. **Блокируй конфликт.** План задаёт область выполняемой работы, а применимые business-карточки — требования к затронутому поведению. Если план противоречит business-карточке, `rules.md`, `arch.md` или reference-карточке, останови фазу и через `AskUserQuestion` спроси: изменить план через `eda-plan` или сначала пересогласовать правило через `eda-business`.
58
58
  7. **Отмечай только подтверждённое.** Фазу закрывай только после выполнения и прошедшей проверки: в `subagents` это `completed` от исполнителя и отдельный `passed` от проверяющего, в `main` — пройденные критерии и команды проверки фазы с сохранённым выводом. При последующем опровержении верни отметку в незавершённое состояние.
59
59
  8. **Проверки нельзя подавлять.** Не отключай и не поручай отключать линтеры, тесты, typecheck, static analysis и другие проверки, не добавляй игноры и не ослабляй команды и правила. Сначала исправляется причина падения, затем проверка повторяется.
60
- 9. **Не коммить, не пушь и не делай ревью.** Это другие скилы.
60
+ 9. **Новый проект разворачивай штатным CLI.** Если фаза создаёт основу нового проекта и для выбранного стека существует официальный generator/scaffold CLI, исполнитель обязан вызвать его через подходящий package manager или runtime (`composer create-project`, `npm create`, `npx`, `cargo new` или реальный аналог). Не создавай вручную файлы, которые генерирует CLI; после генерации изменяй результат только в границах плана. Если точная команда отсутствует в плане и проектных правилах, верни фазу в `eda-plan`, а не импровизируй ручной scaffold.
61
+ 10. **Не коммить, не пушь и не делай ревью.** Это другие скилы.
61
62
 
62
63
  ## Вопросы
63
64
 
@@ -9,13 +9,13 @@ description: 'Итеративно ревьюит и исправляет изм
9
9
 
10
10
  ## Вход из сообщения пользователя
11
11
 
12
- Текст рядом с вызовом скилла в текущем сообщении — главный вход. Разбери target, путь к плану, PR/ветку/diff/файл, лимит итераций, ограничения и режим `subagents` или `main`. Явный режим важнее `review.execution` из полного `docs/settings.yaml` версии 3; при отсутствии валидного значения используй `subagents`. Передавай выбранный режим и overrides проверок и моделей в каждый `eda-review`.
12
+ Текст рядом с вызовом скилла в текущем сообщении — главный вход. Разбери target, путь к плану, PR/ветку/diff/файл, лимит итераций, ограничения и режим `subagents` или `main`. Явный режим важнее `polish.execution` из полного `docs/settings.yaml` версии 3; при отсутствующем файле, другой версии или невалидном значении используй `subagents` и добавь предупреждение. `review.execution` режимом цикла не управляет: в `main` передавай `main` каждому `eda-review`, в `subagents` режим его проверок не навязывай — ревью прочитает `review.execution` само. Overrides проверок и моделей передавай в каждый `eda-review`.
13
13
 
14
14
  Лимит по умолчанию — `5` итераций; пользователь может задать `limit N` положительным целым числом. Порога у цикла нет: устаревшие `threshold N`, `до 90` и `цель 90` не применяй и скажи об этом в финале.
15
15
 
16
16
  ## Правила
17
17
 
18
- Зафиксируй режим и его источник до первой итерации. Выбор из вызова, override оркестратора или `review.execution` обязателен на весь цикл: большой diff, число проверок и нехватка контекста не разрешают переход к субагентам. Сохраняй режим и прогресс после сжатия контекста; если продолжить технически невозможно, верни конкретный блокер без смены режима. Менять режим можно только по новому прямому указанию пользователя.
18
+ Зафиксируй режим и его источник до первой итерации. Выбор из вызова, override оркестратора или `polish.execution` обязателен на весь цикл: большой diff, число проверок и нехватка контекста не разрешают переход к субагентам. Сохраняй режим и прогресс после сжатия контекста; если продолжить технически невозможно, верни конкретный блокер без смены режима. Менять режим можно только по новому прямому указанию пользователя.
19
19
 
20
20
  1. В `main` основной агент сам выполняет установленные контракты `eda-review` и `eda-fix-by-review` в текущем контексте. Не запускай для них верхнеуровневых или leaf-субагентов и не заменяй их отдельным CLI.
21
21
  2. В `subagents` каждый вызов `eda-review` и `eda-fix-by-review` запускай отдельным изолированным субагентом. В Claude Code используй `Agent`, в Codex — `spawn_agent` с `fork_turns: "none"`; не оставляй `fork_turns` по умолчанию и не используй `"all"`. Если нативные субагенты недоступны, остановись без CLI-fallback.
@@ -52,7 +52,6 @@ description: 'Итеративно ревьюит и исправляет изм
52
52
  ```text
53
53
  Используй eda-review для <TARGET_CONTEXT>.
54
54
  План: <PLAN_FILE | none>.
55
- Режим исполнения review: <$EXECUTION: main | subagents>.
56
55
  Overrides проверок и моделей: <из запроса | none>.
57
56
  Ранее отклонённые находки: <предыдущий review file и fix report | none>.
58
57
  Верни путь к файлу, status, result, score, находки и coverage.
@@ -80,6 +79,7 @@ description: 'Итеративно ревьюит и исправляет изм
80
79
  ## Чего НЕ делать
81
80
 
82
81
  - В `subagents` делать ревью или исправления основным агентом.
82
+ - Брать режим цикла из `review.execution` или переключать его из-за размера diff.
83
83
  - Запускать отдельный этап проверки готового ревью.
84
84
  - Считать цикл успешным при наличии находок или завершать его по score.
85
85
  - Выбирать или отклонять находки основным агентом: отклонение — работа `eda-fix-by-review`.
@@ -23,6 +23,7 @@ description: 'Готовит проект к работе с AI: проекти
23
23
  8. **Стартовый бриф задаёт цель, а не реализацию.** Подтверждённые требования, основной стек и архитектурные драйверы из `eda-new-project` считай обязательным входом. Не переоткрывай выбор стека без обнаруженного противоречия; архитектуру, правила, проверки и AI/MCP-процесс спроектируй здесь.
24
24
  9. **Максимальная практическая строгость по умолчанию.** Для каждого применимого инструмента предложи самый строгий стабильный полезный профиль. Ослабления показывай как отдельные решения с последствиями и минимальной областью действия.
25
25
  10. **Не внедряй tooling.** Можешь рекомендовать пакеты, команды, конфиги, скилы и MCP, но не устанавливай и не настраивай их; для внедрения предложи `eda-plan`.
26
+ 11. **Новый проект разворачивается штатным CLI.** Для bootstrap из `eda-new-project` найди официальный генератор выбранного стека и точную воспроизводимую команду через его package manager (`composer create-project`, `npm create`, `npx`, `cargo new` или реальный аналог). Зафиксируй эту команду в `docs/rules.md` как обязательную для создания основы проекта; не предлагай вручную воспроизводить файлы, которые создаёт доступный официальный CLI.
26
27
 
27
28
  ## Интерактивные вопросы
28
29
 
@@ -125,6 +126,7 @@ description: 'Готовит проект к работе с AI: проекти
125
126
  В `docs/rules.md` уместны:
126
127
 
127
128
  - обязательные команды и момент их запуска;
129
+ - для нового проекта — точная команда официального scaffold/generator CLI выбранного стека вместо ручного создания его основы;
128
130
  - действующие соглашения об именовании, формате и совместимости;
129
131
  - требования к изменениям, например обязательная миграция при изменении схемы или обновление контракта при изменении публичного API;
130
132
  - точечные запреты небезопасных конструкций, бесконтрольных подавлений, утечки секретов и персональных данных;
@@ -261,6 +263,7 @@ description: 'Готовит проект к работе с AI: проекти
261
263
  - browser MCP и MCP выбранного стека оценены отдельно от детерминированных CLI/CI-проверок;
262
264
  - выбранные инструменты имеют максимальный применимый строгий профиль, а каждое ослабление явно обосновано;
263
265
  - для нового проекта требования, стек и архитектурные драйверы взяты из стартового документа, а архитектура и правила спроектированы внутри `eda-prepare-ai`;
266
+ - для нового проекта с доступным официальным генератором в `docs/rules.md` записана точная bootstrap-команда package manager или CLI;
264
267
  - AI-скилы, роли и MCP разделены на уже доступные и требующие отдельного внедрения;
265
268
  - у каждого факта есть ровно один документ-владелец, а остальные документы при необходимости только ссылаются на него без пересказа;
266
269
  - между документами нет дублей, архитектурных путей в `docs/rules.md`, императивных рабочих инструкций в `docs/arch.md` и противоречий с проектом или друг с другом.
@@ -58,9 +58,9 @@ description: 'Публикует готовое ревью в GitHub PR как
58
58
  **Что отправлять.** По умолчанию — все замечания. Если в тексте указано подмножество, отправь только его. Синтаксис свободный, распознавай по смыслу: по номерам («пункты 1, 3, 5») или по типу («только security» → замечания с этим `Тип`). У находок нет разных степеней обязательности: каждый отправляемый пункт требует исправления. Выбор влияет и на сводку, и на комментарии к строкам. Для старого формата отправляй только раздел `Править обязательно`; предложения из остальных групп отбрасывай.
59
59
 
60
60
  ### 3. Найти целевой PR
61
- Если номер PR указан в тексте пользователя — используй его. Иначе попробуй `gh pr view --json number,url,headRefName` — если у текущей ветки уже есть PR, возьми его номер.
61
+ Если номер PR указан в тексте пользователя — проверь его через `gh pr view <num> --json number,url,state,headRefName`. Иначе найди PR текущей ветки через `gh pr list --head <branch> --state all --json number,url,state,headRefName`.
62
62
 
63
- Если PR нет — `AskUserQuestion`: «PR ещё нет: создать PR из текущей ветки / указать номер существующего PR / прервать». При создании используй `gh pr create` (заголовок и тело — по последним коммитам ветки).
63
+ Целью может быть только PR со `state: OPEN`. Закрытый или смерженный PR не переиспользуй: считай, что подходящего PR нет. Тогда задай `AskUserQuestion`: «Открытого PR нет: создать новый PR из текущей ветки / указать номер другого открытого PR / прервать». При выборе создания используй `gh pr create` (заголовок и тело — по последним коммитам ветки), затем заново получи фактические номер, URL и состояние.
64
64
 
65
65
  ### 4. Выбрать статус review
66
66