@gian-tiaga/eda 3.5.0 → 3.6.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 +2 -0
- package/README.md +21 -13
- package/agents/eda-commit-executor/agent.json +4 -4
- package/agents/eda-commit-executor/prompt.md +12 -3
- package/lib/install.js +57 -8
- package/package.json +1 -1
- package/skills/eda-commit/SKILL.md +2 -2
- package/skills/eda-commit/skill.json +2 -1
- package/skills/eda-orhestra/SKILL.md +16 -12
- package/skills/eda-polish/SKILL.md +2 -1
- package/skills/eda-prepare-ai/SKILL.md +20 -7
- package/skills/eda-review/SKILL.md +41 -16
- package/skills/eda-review/references/review-matrix.md +70 -0
package/MIGRATION.md
CHANGED
|
@@ -87,6 +87,8 @@ docs/
|
|
|
87
87
|
|
|
88
88
|
- **Удалены двенадцать агентов `eda-plan-review-*`.** Проверку плана целиком выполняет один субагент по фиксированному чек-листу. `eda update` стирает файлы этих агентов из `.claude/agents/` и `.codex/agents/`.
|
|
89
89
|
- **Секция `plan-review.agents` больше не читается.** Начиная с 3.1.1 `eda update` находит её в готовом файле настроек и убирает вместе с другими устаревшими ключами — `review-check`, `review.strict`, `review.include_code_quality`. Дефолт `plan-review.threshold` — `100`, `plan-polish.limit` — `2`.
|
|
90
|
+
- **У `eda-review` появился режим исполнения.** `review.execution` принимает `subagents` или `single`; default `subagents` сохраняет прежнее поведение. В `single` все выбранные проверки выполняет один review-runner, поэтому модели отдельных `review.agents` не применяются.
|
|
91
|
+
- **У `eda-orhestra` появился режим исполнения.** `orhestra.execution` принимает `subagents`, `single` или `single_propagated`; default `subagents` сохраняет прежнее поведение. `single` выполняет верхние этапы текущим агентом, а `single_propagated` дополнительно передаёт `single` совместимым execute/review-этапам.
|
|
90
92
|
- **У `eda-polish` больше нет порога.** Цикл завершается только при нуле находок и останавливается досрочно, если за круг число открытых находок не сократилось. Аргумент вида `args: "threshold 90 limit 2"` в шаге оркестратора `eda update` приводит к виду `args: "limit 2"`.
|
|
91
93
|
- **Формат ревью дополнен.** У каждой находки появилось поле `repro` — чем проблема воспроизводится, — а в отчёт добавлен раздел «Отклонено» с причинами отклонения. `eda-fix-by-review` может отклонить находку, но только фактически неверную и с обоснованием в отчёте. Старые файлы ревью читаются как есть.
|
|
92
94
|
|
package/README.md
CHANGED
|
@@ -41,7 +41,7 @@ eda update-all ~/Code
|
|
|
41
41
|
|
|
42
42
|
| Скил | Что делает | Куда складывает |
|
|
43
43
|
|---|---|---|
|
|
44
|
-
| `eda-orhestra` | Выполняет настраиваемую цепочку `eda-*`-скилов.
|
|
44
|
+
| `eda-orhestra` | Выполняет настраиваемую цепочку `eda-*`-скилов. В `subagents` каждый этап получает чистый контекст, в `single` этапы выполняет текущий агент, а `single_propagated` дополнительно передаёт `single` в совместимые execute/review-этапы. По умолчанию: план без проверок → полировка плана → выполнение → автономное ревью и исправления → ручные тесты. Если QA нашёл баг, оркестра запускает fix и повторяет только ручной тест. В `orhestra.steps` шаги можно переставлять, отключать и снабжать `args`. Не коммитит | Артефакты включённых скилов |
|
|
45
45
|
| `eda-aim` | Сначала через отдельного агента-планировщика согласует с человеком одну или несколько простых проверяемых целей, затем передаёт их агентам-исполнителям и повторяет работу до независимого подтверждения агентом-проверяющим. При необходимости использует установленные скилы в отдельных изолированных субагентах. В `automatic` отвечает на безопасные рабочие вопросы самостоятельно, в `manual` передаёт их человеку; режим задаётся через `aim.mode` или текущий вызов. Точный список новых целей человек подтверждает всегда | `docs/artifacts/aims/` и артефакты задействованных скилов |
|
|
46
46
|
| `eda-new-project` | Помогает стартовать новый проект: собирает и согласует требования, функциональность и границы, ограничения и архитектурные драйверы, сравнивает варианты основного стека и фиксирует выбранные компоненты с актуальными стабильными версиями. Не проектирует архитектуру, правила, проверки, AI-скилы или MCP; сохраняет подтверждённый стартовый бриф и всегда без дополнительного вопроса запускает полный технический bootstrap через `eda-prepare-ai` | `docs/artifacts/project-starts/`, затем артефакты `eda-prepare-ai` |
|
|
47
47
|
| `eda-business` | Совместно с человеком описывает целевое поведение проекта по тематическим карточкам: сложные темы фиксирует подробно, но без шума, соседних модулей и привязки к текущему коду. Может закрепить значимый механизм вроде JWT или серверного хранения токенов, но не язык, библиотеку или конкретную СУБД. `about` содержит лишь короткое описание проекта и основные возможности | `docs/business.md`, `docs/business/` |
|
|
@@ -58,10 +58,10 @@ eda update-all ~/Code
|
|
|
58
58
|
| `eda-manual-test` | Делает ручную проверку после изменений. По умолчанию проверка полная: разбирает план или другой артефакт по разделам, дополняет его фактическим `git diff HEAD` и закрывает матрицу областей — API, база данных, консольные команды, интерфейс, алгоритмы, фон и интеграции, права и роли, конфигурация, логи, регрессии рядом. Область нельзя закрыть чтением кода или зелёными автотестами; незакрытая область даёт `blocked`. Быстрый smoke включается настройкой `manual-test.depth` или словом в запросе. Применимая business-карточка может добавить только относящийся к задаче инвариант или сценарий. Не правит код, не пишет автотесты и не коммитит | `docs/artifacts/manual-tests/` |
|
|
59
59
|
| `eda-polish` | Оркестрирует доводку изменений: запускает полное `eda-review`, затем `eda-fix-by-review` и повторяет цикл до `clean` и отсутствия находок либо до лимита 5 итераций. Все находки исправляются, score остаётся справочным. Каждый шаг идёт в изолированном нативном субагенте. Не коммитит | `docs/artifacts/reviews/`, `docs/artifacts/review-fixes/` |
|
|
60
60
|
| `eda-send-review` | На `sonnet` / `gpt-5.6-terra` отправляет ревью на GitHub PR через `gh` всегда в едином формате: общий комментарий-сводка плюс комментарии к строкам кода. Без явно указанного типа использует `comment`; `approve` и `request-changes` берёт только из контекста текущего вызова. По настройке может скрыть предыдущие сводки eda-send-review и зарезолвить их inline-треды. По умолчанию шлёт все пункты. Claude-модель закрепляется при установке; Codex-модель хранится как рекомендуемый будущий override | (комментарий в PR) |
|
|
61
|
-
| `eda-commit` | Работает как лёгкий оркестратор одного `
|
|
61
|
+
| `eda-commit` | Работает как лёгкий оркестратор одного `sonnet` / `gpt-5.6-terra` агента: тот сам собирает git-контекст, делит выбранный состав на логические коммиты, пишет сообщения и тексты PR по исходному запросу и фактическому diff, точечно коммитит и выполняет явно заданные push/PR/merge-действия. Для PR использует шаблон репозитория, отражает все группы изменений и указывает только реально выполненные проверки. С явным контекстом охватывает указанный состав; без контекста берёт все tracked-изменения и содержательные untracked-файлы, кроме очевидных кэшей и локальных служебных артефактов. В Claude Code сам оркестратор закреплён за `sonnet`; в Codex остаётся на активной модели сессии из-за отсутствия per-skill override. При вероятном секрете агент блокируется до индексации затронутой группы. После любого push всегда возвращает ссылку — на существующий PR или на его создание — и спрашивает, создавать ли PR, если его нет. Если продолжение не задано, предлагает применимые варианты | (git, опционально GitHub PR) |
|
|
62
62
|
| `eda-worktree` | На `haiku` / `gpt-5.6-luna` создаёт через пакетного агента git worktree рядом с основным проектом в папке `{name}-work-{n}` и одноимённую ветку. Базу берёт из аргумента или спрашивает | соседняя папка `{name}-work-{n}` |
|
|
63
63
|
| `eda-merge-worktree` | На `haiku` / `gpt-5.6-luna` мержит через пакетного агента ветку из соседнего worktree в текущую ветку. Принимает номер `1`, короткое имя `work-1` или полное имя `{name}-work-1`. Worktree и ветку после merge не удаляет | (git) |
|
|
64
|
-
| `eda-prepare-ai` | Выполняет технический bootstrap нового или существующего проекта: проектирует архитектуру, строгие правила и профиль инструментов, проходит полный каталог автоматических проверок, подбирает применимые AI-скилы, роли и MCP, затем создаёт AI-документацию. Подтверждённые требования, стек и архитектурные драйверы из `eda-new-project` принимает как обязательный вход и не переоткрывает без обнаруженного конфликта. Для пустого проекта не выдумывает reference-карточки и не выдаёт неустановленные инструменты за доступные | `docs/rules.md`, `docs/arch.md`, `docs/references.md`, `docs/references/`, `AGENTS.md`, `CLAUDE.md` |
|
|
64
|
+
| `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
65
|
| `eda-discover-automations` | Проводит baseline gap-аудит проекта даже без истории, а при наличии анализирует ревью, планы и фиксы. Не ограничивает число предложений: проверяет тесты/e2e, стиль, статанализ, границы модулей, конфиги/IaC, API/БД, security/supply chain, performance, release, эксплуатацию, browser MCP и MCP стека. Для каждой идеи даёт команду, контур запуска и приоритет; ничего не внедряет | `docs/artifacts/automations/` |
|
|
66
66
|
|
|
67
67
|
### Структура `docs/`
|
|
@@ -95,7 +95,7 @@ eda update-all ~/Code
|
|
|
95
95
|
| `eda-aim-planner` | `sonnet`, workspace-write | `gpt-5.6-terra`, workspace-write | Задаёт вопросы, формулирует простой проверяемый список и создаёт файл только после подтверждения человека |
|
|
96
96
|
| `eda-aim-executor` | `opus`, workspace-write | `gpt-5.6-sol`, workspace-write | Выполняет назначенные пункты, при необходимости запрашивает установленные скилы для запуска в изолированных субагентах и дополняет общий журнал |
|
|
97
97
|
| `eda-aim-verifier` | `opus`, workspace-write | `gpt-5.6-sol`, workspace-write | Независимо проверяет каждый критерий, отмечает подтверждённые цели и возвращает пробелы на новый круг выполнения |
|
|
98
|
-
| `eda-commit-executor` | `
|
|
98
|
+
| `eda-commit-executor` | `sonnet` | `gpt-5.6-terra` | Собирает git-контекст, пишет сообщения коммитов и PR по запросу и фактическим изменениям, делит выбранный scope на логические коммиты и выполняет явно разрешённые push/PR/merge-действия |
|
|
99
99
|
| `eda-worktree-executor` | `haiku` | `gpt-5.6-luna` | Создаёт соседний worktree и одноимённую ветку, не изменяя файлы проекта |
|
|
100
100
|
| `eda-merge-worktree-executor` | `haiku` | `gpt-5.6-luna` | Мержит ветку из соседнего worktree в текущую без cleanup и ручного разрешения конфликтов |
|
|
101
101
|
| `eda-review-correctness` | `sonnet`, read-only | `gpt-5.6-terra`, read-only | Проверяет функциональную корректность и крайние случаи |
|
|
@@ -114,15 +114,15 @@ eda update-all ~/Code
|
|
|
114
114
|
| `eda-review-documentation` | `haiku`, read-only | `gpt-5.6-luna`, read-only | Проверяет обязательные обновления документации |
|
|
115
115
|
| `eda-review-previous-reviews` | `haiku`, read-only | `gpt-5.6-luna`, read-only | Перепроверяет незакрытые удалённые замечания |
|
|
116
116
|
|
|
117
|
-
Агенты устанавливаются отдельно от скилов. Модели review-агентов в таблице — сбалансированные defaults; `docs/settings.yaml` или прямое указание пользователя может заменить модель конкретной проверки на текущий
|
|
117
|
+
Агенты устанавливаются отдельно от скилов. Модели review-агентов в таблице — сбалансированные defaults; `docs/settings.yaml` или прямое указание пользователя может заменить модель конкретной проверки на текущий запуск в режиме `subagents`. `eda-aim` последовательно разделяет согласование, выполнение и независимую проверку, а при необходимости использует установленные скилы только в отдельных изолированных субагентах; основной агент передаёт вопросы и структурированные результаты. `eda-commit` сохраняет исходный запрос и целиком передаёт сбор контекста, выбор файлов, коммит и разрешённое продолжение одному простому агенту. `eda-worktree` и `eda-merge-worktree` передают одному специализированному агенту git-операцию, обрабатывают его вопрос или результат и сами команды не выполняют. `eda-review` поддерживает два режима: `subagents` параллельно запускает применимых review-агентов, а `single` один раз читает общий контекст и выполняет те же проверки одним агентом по встроенной матрице. В Claude Code установленный `eda-review` всегда выполняется через `context: fork`, в том числе из `eda-polish`. В Codex шаги polish и специализированные review-агенты запускаются с `fork_turns: "none"`, без наследования истории. В `subagents` все выбранные проверки отправляются одним нативным параллельным пакетом без ручных партий и shell-опроса.
|
|
118
118
|
|
|
119
|
-
Для Claude Code
|
|
119
|
+
Для Claude Code установленный `eda-commit` получает `model: sonnet`, а `eda-worktree` и `eda-merge-worktree` — `model: haiku`. В Codex у скилов пока нет отдельного per-skill model override: основной поток остаётся на выбранной пользователем модели, но он выполняет только лёгкую оркестрацию; содержательная работа `eda-commit` закреплена за `gpt-5.6-terra`, а worktree-операции — за `gpt-5.6-luna`.
|
|
120
120
|
|
|
121
121
|
---
|
|
122
122
|
|
|
123
123
|
## 🚩 Флаги скилов
|
|
124
124
|
|
|
125
|
-
У некоторых скилов есть флаг `strict` — он включает дополнительные тяжёлые проверки. Передаётся как часть запроса агенту, например: `eda-explore strict <тема>`. Также strict можно включить отдельно в `docs/settings.yaml`, например через `explore.strict: true`. У `eda-review`
|
|
125
|
+
У некоторых скилов есть флаг `strict` — он включает дополнительные тяжёлые проверки. Передаётся как часть запроса агенту, например: `eda-explore strict <тема>`. Также strict можно включить отдельно в `docs/settings.yaml`, например через `explore.strict: true`. У `eda-review` режим исполнения задаётся через `subagents` / `single`, а состав проверок — через собственные `mode` и `model`.
|
|
126
126
|
|
|
127
127
|
У `eda-plan-execute` есть режимы `subagents` / `single` / `auto`. Режим можно разово указать в вызове, например `eda-plan-execute single docs/artifacts/plans/....md`; без него используется `plan-execute.mode` из настроек, а без настроек — `auto`.
|
|
128
128
|
|
|
@@ -132,7 +132,7 @@ eda update-all ~/Code
|
|
|
132
132
|
|
|
133
133
|
| Скил | Флаг | Что включает | Когда стоит использовать |
|
|
134
134
|
|---|---|---|---|
|
|
135
|
-
| `eda-orhestra` | `automatic` / `manual`, `без полировки плана`, `без полировки кода`, `полировка кода N итераций`, `без ручных тестов` | Разово меняет
|
|
135
|
+
| `eda-orhestra` | `automatic` / `manual`, `subagents` / `single` / `single_propagated`, `без полировки плана`, `без полировки кода`, `полировка кода N итераций`, `без ручных тестов` | Разово меняет вопросы, исполнение, состав цепочки и параметры шагов поверх `docs/settings.yaml` | `single` экономит верхний слой, `single_propagated` также включает single у совместимых execute/review-этапов |
|
|
136
136
|
| `eda-aim` | `automatic` / `manual` | Разово меняет способ ответа на рабочие вопросы поверх `aim.mode`; подтверждение точного списка новых целей остаётся обязательным | Автономная работа или совместное прохождение развилок с человеком |
|
|
137
137
|
| `eda-explore` | `strict` | После сохранения отчёта отдаёт его соседнему CLI (Claude → Codex или наоборот) на критическое ревью конкретности, фактов, развилок, рисков и версий; затем доправляет отчёт по замечаниям | Серьёзные исследования, которые лягут в основу больших решений; когда хочется второго мнения от другой модели/среды |
|
|
138
138
|
| `eda-plan` | `strict`, `без ревью плана`, `без проверок` | `strict` независимо включает кросс-CLI проверку; `без ревью плана` отключает встроенный review/fix; `без проверок` отключает оба вида ревью | Когда нужно разделить создание плана и его последующую полировку |
|
|
@@ -140,6 +140,7 @@ eda update-all ~/Code
|
|
|
140
140
|
| `eda-plan-execute` | `subagents` / `single` / `auto` | Разово меняет, где выполняются фазы, поверх `plan-execute.mode` | `single` для небольшого плана в одном контексте, `subagents` для большого или тяжёлого |
|
|
141
141
|
| `eda-plan-polish` | `threshold N`, `limit N` | Меняет gate и максимальное число подтверждающих review-итераций | Для доводки ответственных планов перед `eda-plan-execute` |
|
|
142
142
|
| `eda-manual-test` | `full` / `полная проверка`, `smoke` / `быстро` | Разово меняет глубину ручной проверки поверх `manual-test.depth` | `smoke` для короткой правки, `full` — когда нужно закрыть все области после плана |
|
|
143
|
+
| `eda-review` | `subagents` / `single` | Разово меняет способ выполнения выбранных проверок поверх `review.execution` | `single` экономит контекст на частых локальных ревью; `subagents` сохраняет независимость ролей для ответственных изменений |
|
|
143
144
|
|
|
144
145
|
---
|
|
145
146
|
|
|
@@ -156,6 +157,9 @@ orhestra:
|
|
|
156
157
|
# Режим полного цикла eda-orhestra.
|
|
157
158
|
# automatic | manual
|
|
158
159
|
mode: automatic
|
|
160
|
+
# Где выполняются этапы и передаётся ли single совместимым вложенным скилам.
|
|
161
|
+
# subagents | single | single_propagated
|
|
162
|
+
execution: subagents
|
|
159
163
|
# Упорядоченная цепочка. Шаги можно отключать, удалять и переставлять.
|
|
160
164
|
steps:
|
|
161
165
|
- id: plan
|
|
@@ -246,7 +250,9 @@ manual-test:
|
|
|
246
250
|
depth: full
|
|
247
251
|
|
|
248
252
|
review:
|
|
249
|
-
#
|
|
253
|
+
# subagents — отдельный специализированный агент на проверку, single — все проверки одним агентом.
|
|
254
|
+
execution: subagents
|
|
255
|
+
# Каждая проверка имеет собственный режим запуска; модели применяются только в subagents.
|
|
250
256
|
agents:
|
|
251
257
|
# Проверяет ошибки в логике, крайние случаи и обработку ошибок.
|
|
252
258
|
# Эта базовая проверка по умолчанию запускается всегда.
|
|
@@ -384,6 +390,7 @@ discover-automations:
|
|
|
384
390
|
|
|
385
391
|
Что означают настройки:
|
|
386
392
|
- `orhestra.mode` — `automatic` безопасно закрывает рабочие вопросы без промежуточных подтверждений; `manual` пишет план вместе с человеком и передаёт ему вопросы.
|
|
393
|
+
- `orhestra.execution` — `subagents` запускает каждый этап отдельно, `single` выполняет верхнюю цепочку текущим агентом, `single_propagated` дополнительно передаёт `single` шагам `eda-plan-execute`, `eda-polish` и прямому `eda-review`; default `subagents`. Другие вложенные скилы сохраняют собственный контракт.
|
|
387
394
|
- `orhestra.steps` — выполняемый сверху вниз workflow. `enabled: false` отключает шаг, а `args` передаёт ему дополнительные параметры. Например, для `eda-polish`: `args: "limit 2"`. Шаги можно переставлять или добавлять, но git/publish-скиллы оркестратор не запускает.
|
|
388
395
|
- Старое значение `steps[].skill: eda-execute` во время запуска автоматически понимается как `eda-plan-execute`; существующий `docs/settings.yaml` установщик не переписывает.
|
|
389
396
|
- `steps[].on_failure` — настраивает исправление failed manual-test прямо рядом с этим шагом: `skill` и `args` задают фикс, `then` — повторяемые id шагов, `max_cycles` — лимит. Если обработчика нет, оркестратор сохраняет failed-отчёт и останавливается.
|
|
@@ -395,8 +402,9 @@ discover-automations:
|
|
|
395
402
|
- `plan-polish.limit` — максимальное число подтверждающих review-итераций; default `2`. Цикл останавливается раньше, если score перестал расти.
|
|
396
403
|
- `plan-execute.mode` — где `eda-plan-execute` выполняет фазы: `subagents` — каждая фаза в отдельном изолированном субагенте с независимой проверкой, `single` — весь план одним контекстом без субагентов, `auto` — выбор по плану; default `auto`. Явный режим в вызове имеет приоритет.
|
|
397
404
|
- `manual-test.depth` — глубина ручной проверки в `eda-manual-test`: `full` — закрыть все применимые области матрицы покрытия, `smoke` — только запуск и основной сценарий изменённой области, `ask_each_time` — спрашивать каждый раз; default `full`. Явная глубина в вызове имеет приоритет.
|
|
405
|
+
- `review.execution` — где выполняются проверки `eda-review`: `subagents` запускает отдельные специализированные роли, `single` выполняет те же выбранные проверки одним агентом с однократной загрузкой общего контекста; default `subagents`. Явный режим в вызове имеет приоритет.
|
|
398
406
|
- `review.agents.<check>.mode` — запускать проверку всегда, автоматически по контексту или отключить.
|
|
399
|
-
- `review.agents.<check>.model.claude` и `.codex` — модель конкретной проверки в соответствующей
|
|
407
|
+
- `review.agents.<check>.model.claude` и `.codex` — модель конкретной проверки в соответствующей среде для `subagents`; в `single` используется текущая модель агента.
|
|
400
408
|
- `eda-review` не делит находки по обязательности: каждый принятый пункт требует исправления, а предложения без доказанного практического дефекта отбрасываются. Score остаётся экспертной оценкой серьёзности; любая находка блокирует `clean` независимо от score.
|
|
401
409
|
- `send-review.close_previous_reviews` — после успешной новой отправки скрывает предыдущие сводки, созданные `eda-send-review` текущим GitHub-пользователем, и резолвит связанные inline-треды; прямое указание в текущем запросе переопределяет настройку.
|
|
402
410
|
- `discover-automations.include_plans` — добавляет `docs/artifacts/plans/` в обычный запуск `eda-discover-automations`.
|
|
@@ -413,7 +421,7 @@ discover-automations:
|
|
|
413
421
|
|
|
414
422
|
`eda-orhestra` по умолчанию запускает основной цикл одной командой:
|
|
415
423
|
|
|
416
|
-
|
|
424
|
+
В default `subagents` каждая стрелка передаёт явный вход и пути к артефактам в новый изолированный субагент. В `single` и `single_propagated` верхние этапы идут последовательно в текущем контексте.
|
|
417
425
|
|
|
418
426
|
```text
|
|
419
427
|
plan без проверок → plan-polish → plan-execute → polish → manual-test ──passed──> готово
|
|
@@ -458,7 +466,7 @@ discover-automations может запускаться от review, fix-by-revie
|
|
|
458
466
|
|
|
459
467
|
`eda-manual-test` обычно ставится после `eda-plan-execute`, `eda-fix` или `eda-fix-by-review`, чтобы руками проверить API, базу, консольные команды, интерфейс и алгоритмы перед ревью или коммитом.
|
|
460
468
|
|
|
461
|
-
Использовать всю цепочку не обязательно — каждый скил самодостаточен. Для полного прохода одной задачи можно вызвать `eda-orhestra automatic <задача>` или `eda-orhestra manual <задача>`. Разовые варианты: `eda-orhestra automatic без полировки плана <задача>`, `eda-orhestra полировка кода 2 итерации <задача>`, `eda-orhestra без ручных тестов <задача>`. Постоянный порядок и аргументы
|
|
469
|
+
Использовать всю цепочку не обязательно — каждый скил самодостаточен. Для полного прохода одной задачи можно вызвать `eda-orhestra automatic <задача>` или `eda-orhestra manual <задача>`. Разовые варианты: `eda-orhestra single <задача>`, `eda-orhestra single_propagated <задача>`, `eda-orhestra automatic без полировки плана <задача>`, `eda-orhestra полировка кода 2 итерации <задача>`, `eda-orhestra без ручных тестов <задача>`. Постоянный режим исполнения задаётся в `orhestra.execution`, порядок и аргументы — в `orhestra.steps`. Новый проект можно начать с `eda-new-project`; существующий — с `eda-prepare-ai`, `eda-roadmap`, `eda-explore`, или сразу с `eda-plan-execute` на готовом плане, или просто `eda-commit`, когда правки уже сделаны. Для параллельной работы есть `eda-worktree`, а для возврата ветки из worktree в текущую ветку — `eda-merge-worktree`.
|
|
462
470
|
|
|
463
471
|
Вызов `eda-commit` без контекста охватывает все незакоммиченные tracked-изменения и содержательные untracked-файлы; очевидные кэши, временные и локальные служебные артефакты остаются вне коммитов. Executor сам делит полный состав на необходимое число логически цельных коммитов — один, три или больше. Например, запрос `eda-commit сразу отправь ветку, создай PR и дай ссылку` использует тот же полный состав и выполняет всю указанную цепочку без отдельного вопроса после серии коммитов.
|
|
464
472
|
|
|
@@ -468,7 +476,7 @@ discover-automations может запускаться от review, fix-by-revie
|
|
|
468
476
|
|
|
469
477
|
- **Простой язык.** Скилы общаются с тобой так, чтобы понял человек без глубоких знаний предмета. Термины — только когда без них нельзя.
|
|
470
478
|
- **Все вопросы — интерактивно.** В Claude Code — через `AskUserQuestion`; в интерактивном Codex — через `request_user_input` или блокирующий вопрос в чат. В `codex exec` и других неинтерактивных запусках скил не имитирует диалог: если без ответа нельзя безопасно продолжать, он завершает работу со статусом `blocked: нужен ответ пользователя`.
|
|
471
|
-
-
|
|
479
|
+
- **Способ review настраивается.** В `subagents` `eda-review` запускает установленных read-only агентов нативным механизмом Claude/Codex и блокируется при их недоступности без CLI-fallback. В `single` один review-runner выполняет те же выбранные проверки по общей матрице без leaf-субагентов и повторной загрузки общего контекста.
|
|
472
480
|
- **Технические остановки обрабатываются по причине.** Оркестраторы ждут свободный слот при лимите параллельности, запрашивают недостающее разрешение, один раз продолжают агента после временной API-ошибки и без бессмысленных retry останавливаются при лимите глубины, исчерпанной квоте или неизвестном сбое.
|
|
473
481
|
- **Повторяемые роли — в пакетных агентах.** Скилы управляют процессом, а стабильные изолированные роли получают собственный prompt, модель и доступ. Полные review-prompts не дублируются в оркестраторе.
|
|
474
482
|
- **Артефакты по папкам.** Исследования отдельно, планы отдельно, ревью отдельно. Между файлами — ссылки. Через месяц легко найти, кто что когда решал.
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
"name": "eda-commit-executor",
|
|
4
4
|
"description": "Самостоятельно собирает git-контекст, делит выбранные или все незакоммиченные изменения на логические коммиты и выполняет явно разрешённые push, PR или merge-действия для eda-commit.",
|
|
5
5
|
"models": {
|
|
6
|
-
"claude": "
|
|
7
|
-
"codex": "gpt-5.6-
|
|
6
|
+
"claude": "sonnet",
|
|
7
|
+
"codex": "gpt-5.6-terra"
|
|
8
8
|
},
|
|
9
9
|
"reasoning": {
|
|
10
|
-
"claude": "
|
|
11
|
-
"codex": "
|
|
10
|
+
"claude": "medium",
|
|
11
|
+
"codex": "medium"
|
|
12
12
|
},
|
|
13
13
|
"access": "git-write"
|
|
14
14
|
}
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
2. Прочитай последние 5–10 коммитов и определи наблюдаемый стиль сообщений.
|
|
38
38
|
3. Получи текущую ветку, upstream, remotes и основную ветку из `origin/HEAD`.
|
|
39
39
|
4. Прочитай `AGENTS.md`, `CLAUDE.md`, `docs/rules.md`, `docs/arch.md` и связанные артефакты из `docs/**`, если они есть и применимы к изменениям.
|
|
40
|
-
5. Проверяй существующий PR текущей ветки, когда `USER_REQUEST` или `REQUESTED_ACTIONS` упоминает PR или push.
|
|
40
|
+
5. Проверяй существующий PR текущей ветки, когда `USER_REQUEST` или `REQUESTED_ACTIONS` упоминает PR или push. Если предстоит создание или обновление PR, найди применимый шаблон PR в репозитории и прочитай его целиком.
|
|
41
41
|
6. Определи состав коммита:
|
|
42
42
|
- если `COMMIT_SCOPE` непустой, выбери соответствующий ему логический набор и отдели несвязанные пользовательские изменения;
|
|
43
43
|
- если `COMMIT_SCOPE` пустой, выбери все незакоммиченные tracked-изменения — staged, unstaged и удаления — и все содержательные untracked-файлы во всём репозитории. Несколько задач или несвязанных изменений в этом режиме охватываются одной серией коммитов и не требуют вопроса;
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
1. Непосредственно перед индексацией повторно проверь `git status` и diff оставшихся изменений. Если состояние неожиданно изменилось или при непустом `COMMIT_SCOPE` состав стал неоднозначным, верни `blocked` до `git add` этой группы.
|
|
61
61
|
2. Добавляй новые файлы и подготавливай обычный изолированный индекс только точечно через `git add -- <paths>`; не используй `git add -A` или `git add .`. Если в индексе остаются файлы других групп или изменения вне scope, используй `git commit --only -- <paths>` либо эквивалентную безопасную path-limited стратегию: чужие staged-изменения не должны попасть в текущий коммит, исчезнуть из индекса или расшириться за счёт их unstaged-части.
|
|
62
62
|
3. Проверь точный кандидат текущего коммита: `git diff --cached` для изолированного индекса или соответствующий path-limited diff для `--only`. Убедись, что кандидат содержит только текущую логическую группу без служебных артефактов или секретных файлов. При обнаружении проблемы не коммить и верни `blocked` с точным состоянием индекса и списком уже созданных коммитов.
|
|
63
|
-
4. Составь отдельное сообщение в стиле истории
|
|
63
|
+
4. Составь отдельное сообщение в стиле истории проекта. Заголовок до примерно 70 символов должен конкретно называть результат группы, а не повторять имя ветки, список файлов или общие слова вроде `changes`, `updates` и «правки». Если причина или важное изменение поведения не очевидны из заголовка, добавь короткое тело. Описывай только фактический кандидат коммита и не приписывай ему изменения или проверки из других групп.
|
|
64
64
|
5. Выполни `git commit` выбранным изолированным способом без `--amend`, `--no-verify` и `--no-gpg-sign`. Проверь фактический состав нового commit, сохрани hash, subject и files, затем переходи к следующей группе.
|
|
65
65
|
|
|
66
66
|
После последнего коммита проверь, что из выбранного состава ничего не осталось. Только затем выполняй действия после коммитов.
|
|
@@ -71,9 +71,18 @@
|
|
|
71
71
|
|
|
72
72
|
Выполни `REQUESTED_ACTIONS` по порядку без повторного вопроса. Явное «создай PR» разрешает обычный push текущей ветки как необходимую предпосылку.
|
|
73
73
|
|
|
74
|
+
Для создания или явно запрошенного обновления PR составь заголовок и описание по полному `USER_REQUEST`, фактическим коммитам текущей ветки относительно base и итоговому diff. Не своди PR к копии последнего commit message, если коммитов несколько.
|
|
75
|
+
|
|
76
|
+
- Явно заданные пользователем заголовок, текст или обязательные разделы имеют приоритет. Иначе следуй найденному шаблону PR; если шаблона нет, дай короткое описание цели, список фактических изменений и раздел проверки.
|
|
77
|
+
- Заголовок должен описывать общий результат PR конкретно и без имени ветки, номера коммита, служебных префиксов или общих формулировок вроде `updates` и «изменения».
|
|
78
|
+
- В описании объясни, зачем нужен PR и что изменилось с точки зрения проверяемого поведения или контракта. Не пересказывай diff по файлам и не добавляй ритуальные разделы без содержательной информации.
|
|
79
|
+
- В разделе проверки перечисли только реально выполненные команды и их результат. Если проверки не запускались, так и напиши; не выдумывай тесты, issue, метрики, совместимость или breaking changes.
|
|
80
|
+
- Перед отправкой сверь текст с base...HEAD diff: каждое утверждение должно подтверждаться текущим PR, а все основные логические группы коммитов должны быть отражены.
|
|
81
|
+
- Передавай многострочное описание через временный файл и `--body-file`, чтобы shell quoting не повредил Markdown. Не оставляй незаполненные placeholder'ы шаблона.
|
|
82
|
+
|
|
74
83
|
- Для push используй существующий upstream, иначе `git push -u origin <branch>`.
|
|
75
84
|
- Для PR определи base по `origin/HEAD`, сначала проверь текущую ветку через `gh pr view`; существующий PR не дублируй.
|
|
76
|
-
- Если PR отсутствует, создай его через `gh pr create
|
|
85
|
+
- Если PR отсутствует, создай его через `gh pr create --title <title> --body-file <file>`, затем получи фактические номер и URL через `gh`; не угадывай ссылку. Если PR уже существует, меняй его заголовок или описание только по явному запросу пользователя через `gh pr edit`; обычный push не перезаписывает текст PR.
|
|
77
86
|
- После любого выполненного push всегда возвращай ссылку. Если PR текущей ветки есть — `pr.status: existing` и его фактический URL. Если PR нет — `pr.status: absent` и `pr.create_url`: ссылка на создание PR, собранная из фактического URL репозитория (`gh repo view`), base из `origin/HEAD` и имени ветки.
|
|
78
87
|
- Если PR нет, а его создание не запрошено, сам PR не создавай: верни `completed`, `pr.create_url`, вопрос «Создать PR?» и варианты «создать PR» / «оставить ссылку на создание».
|
|
79
88
|
- Если репозиторий не на GitHub или `gh` недоступен, верни `pr.create_url: null` и назови причину в `error`.
|
package/lib/install.js
CHANGED
|
@@ -251,6 +251,7 @@ const DEFAULT_ORHESTRA_STEPS = ORHESTRA_STEP_DEFINITIONS.map(({ name, ...step })
|
|
|
251
251
|
const DEFAULT_SETTINGS = {
|
|
252
252
|
orhestra: {
|
|
253
253
|
mode: 'automatic',
|
|
254
|
+
execution: 'subagents',
|
|
254
255
|
steps: DEFAULT_ORHESTRA_STEPS
|
|
255
256
|
},
|
|
256
257
|
aim: {
|
|
@@ -281,6 +282,7 @@ const DEFAULT_SETTINGS = {
|
|
|
281
282
|
depth: 'full'
|
|
282
283
|
},
|
|
283
284
|
review: {
|
|
285
|
+
execution: 'subagents',
|
|
284
286
|
agents: DEFAULT_REVIEW_AGENTS
|
|
285
287
|
},
|
|
286
288
|
sendReview: {
|
|
@@ -350,6 +352,20 @@ const ORHESTRA_MODE_CHOICES = [
|
|
|
350
352
|
name: 'Писать план вместе с человеком и передавать ему вопросы'
|
|
351
353
|
}
|
|
352
354
|
];
|
|
355
|
+
const ORHESTRA_EXECUTION_CHOICES = [
|
|
356
|
+
{
|
|
357
|
+
value: 'subagents',
|
|
358
|
+
name: 'Каждый этап выполнять отдельным изолированным субагентом'
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
value: 'single',
|
|
362
|
+
name: 'Все этапы выполнять текущим агентом без передачи режима внутрь'
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
value: 'single_propagated',
|
|
366
|
+
name: 'Все этапы выполнять текущим агентом и передавать single совместимым скилам'
|
|
367
|
+
}
|
|
368
|
+
];
|
|
353
369
|
const AIM_MODE_CHOICES = [
|
|
354
370
|
{
|
|
355
371
|
value: 'automatic',
|
|
@@ -465,6 +481,16 @@ const REVIEW_MODE_CHOICES = [
|
|
|
465
481
|
{ value: 'auto', name: 'auto — запускать только когда проверка применима' },
|
|
466
482
|
{ value: 'off', name: 'off — отключить проверку' }
|
|
467
483
|
];
|
|
484
|
+
const REVIEW_EXECUTION_CHOICES = [
|
|
485
|
+
{
|
|
486
|
+
value: 'subagents',
|
|
487
|
+
name: 'Каждую review-проверку выполнять отдельным специализированным субагентом'
|
|
488
|
+
},
|
|
489
|
+
{
|
|
490
|
+
value: 'single',
|
|
491
|
+
name: 'Все review-проверки выполнять одним агентом в общем контексте'
|
|
492
|
+
}
|
|
493
|
+
];
|
|
468
494
|
const CLAUDE_REVIEW_MODEL_CHOICES = [
|
|
469
495
|
{ value: 'haiku', name: 'haiku — быстрая проверка' },
|
|
470
496
|
{ value: 'sonnet', name: 'sonnet — сильная проверка кода' },
|
|
@@ -744,6 +770,7 @@ export async function askSettings({
|
|
|
744
770
|
}
|
|
745
771
|
|
|
746
772
|
const scalarPrompts = [
|
|
773
|
+
['orhestra', 'orhestra.execution', settings.orhestra, 'execution', 'Как eda-orhestra должен выполнять этапы по умолчанию?', ORHESTRA_EXECUTION_CHOICES],
|
|
747
774
|
['aim', 'aim.mode', settings.aim, 'mode', 'Как eda-aim должен отвечать на рабочие вопросы по умолчанию?', AIM_MODE_CHOICES],
|
|
748
775
|
['explore', 'explore.decisionMode', settings.explore, 'decisionMode', 'Как принимать важные решения в eda-explore?', DECISION_MODE_CHOICES],
|
|
749
776
|
['plan', 'plan.size', settings.plan, 'size', 'Какой размер плана eda-plan использовать по умолчанию?', PLAN_SIZE_CHOICES],
|
|
@@ -753,7 +780,8 @@ export async function askSettings({
|
|
|
753
780
|
['plan-review', 'planReview.threshold', settings.planReview, 'threshold', 'Какой порог готовности использовать в eda-plan-review?', PLAN_REVIEW_THRESHOLD_CHOICES],
|
|
754
781
|
['plan-polish', 'planPolish.limit', settings.planPolish, 'limit', 'Сколько review-итераций разрешить eda-plan-polish?', PLAN_POLISH_LIMIT_CHOICES],
|
|
755
782
|
['plan-execute', 'planExecute.mode', settings.planExecute, 'mode', 'Как eda-plan-execute должен выполнять фазы по умолчанию?', PLAN_EXECUTE_MODE_CHOICES],
|
|
756
|
-
['manual-test', 'manualTest.depth', settings.manualTest, 'depth', 'Какую глубину ручной проверки использовать в eda-manual-test по умолчанию?', MANUAL_TEST_DEPTH_CHOICES]
|
|
783
|
+
['manual-test', 'manualTest.depth', settings.manualTest, 'depth', 'Какую глубину ручной проверки использовать в eda-manual-test по умолчанию?', MANUAL_TEST_DEPTH_CHOICES],
|
|
784
|
+
['review', 'review.execution', settings.review, 'execution', 'Как eda-review должен выполнять проверки по умолчанию?', REVIEW_EXECUTION_CHOICES]
|
|
757
785
|
];
|
|
758
786
|
for (const [section, key, target, property, message, choices] of scalarPrompts) {
|
|
759
787
|
if (!requestedSections.has(section) || !shouldAsk(key)) continue;
|
|
@@ -766,7 +794,8 @@ export async function askSettings({
|
|
|
766
794
|
output,
|
|
767
795
|
selectPrompt,
|
|
768
796
|
seedAgents: settings.review.agents,
|
|
769
|
-
missingKeys
|
|
797
|
+
missingKeys,
|
|
798
|
+
skipModels: settings.review.execution === 'single'
|
|
770
799
|
});
|
|
771
800
|
}
|
|
772
801
|
return settings;
|
|
@@ -777,7 +806,8 @@ export async function askReviewAgentSettings({
|
|
|
777
806
|
output = process.stdout,
|
|
778
807
|
selectPrompt = select,
|
|
779
808
|
seedAgents = DEFAULT_REVIEW_AGENTS,
|
|
780
|
-
missingKeys = null
|
|
809
|
+
missingKeys = null,
|
|
810
|
+
skipModels = false
|
|
781
811
|
} = {}) {
|
|
782
812
|
return askAgentSettings({
|
|
783
813
|
input,
|
|
@@ -787,11 +817,12 @@ export async function askReviewAgentSettings({
|
|
|
787
817
|
seedAgents,
|
|
788
818
|
missingKeys,
|
|
789
819
|
keyPrefix: 'review.agents',
|
|
790
|
-
label: 'review'
|
|
820
|
+
label: 'review',
|
|
821
|
+
skipModels
|
|
791
822
|
});
|
|
792
823
|
}
|
|
793
824
|
|
|
794
|
-
async function askAgentSettings({ input, output, selectPrompt, definitions, seedAgents, missingKeys, keyPrefix, label }) {
|
|
825
|
+
async function askAgentSettings({ input, output, selectPrompt, definitions, seedAgents, missingKeys, keyPrefix, label, skipModels = false }) {
|
|
795
826
|
const configuredAgents = structuredClone(seedAgents);
|
|
796
827
|
const shouldAsk = key => missingKeys === null || missingKeys.has(key);
|
|
797
828
|
for (const agent of definitions) {
|
|
@@ -809,14 +840,14 @@ async function askAgentSettings({ input, output, selectPrompt, definitions, seed
|
|
|
809
840
|
|
|
810
841
|
let claude = configuredAgents[agent.key].model.claude;
|
|
811
842
|
let codex = configuredAgents[agent.key].model.codex;
|
|
812
|
-
if (mode !== 'off' && shouldAsk(claudeKey)) {
|
|
843
|
+
if (!skipModels && mode !== 'off' && shouldAsk(claudeKey)) {
|
|
813
844
|
claude = await selectPrompt({
|
|
814
845
|
message: `Какой моделью Claude проверять ${agent.key}?`,
|
|
815
846
|
choices: CLAUDE_REVIEW_MODEL_CHOICES,
|
|
816
847
|
default: claude
|
|
817
848
|
}, { input, output });
|
|
818
849
|
}
|
|
819
|
-
if (mode !== 'off' && shouldAsk(codexKey)) {
|
|
850
|
+
if (!skipModels && mode !== 'off' && shouldAsk(codexKey)) {
|
|
820
851
|
codex = await selectPrompt({
|
|
821
852
|
message: `Какой моделью Codex проверять ${agent.key}?`,
|
|
822
853
|
choices: CODEX_REVIEW_MODEL_CHOICES,
|
|
@@ -1137,6 +1168,12 @@ function migrateSettingsContent(content) {
|
|
|
1137
1168
|
const legacyDefaults = objectValue(raw.defaults);
|
|
1138
1169
|
const orhestra = objectValue(raw.orhestra);
|
|
1139
1170
|
transfer('orhestra.mode', orhestra.mode, oneOf(['automatic', 'manual']), value => { settings.orhestra.mode = value; });
|
|
1171
|
+
transfer(
|
|
1172
|
+
'orhestra.execution',
|
|
1173
|
+
orhestra.execution,
|
|
1174
|
+
oneOf(['subagents', 'single', 'single_propagated']),
|
|
1175
|
+
value => { settings.orhestra.execution = value; }
|
|
1176
|
+
);
|
|
1140
1177
|
const steps = normalizeStoredOrhestraSteps(orhestra.steps);
|
|
1141
1178
|
transfer('orhestra.steps', steps, value => Array.isArray(value), value => { settings.orhestra.steps = value; });
|
|
1142
1179
|
|
|
@@ -1204,6 +1241,12 @@ function migrateSettingsContent(content) {
|
|
|
1204
1241
|
);
|
|
1205
1242
|
|
|
1206
1243
|
const review = objectValue(raw.review);
|
|
1244
|
+
transfer(
|
|
1245
|
+
'review.execution',
|
|
1246
|
+
review.execution,
|
|
1247
|
+
oneOf(['subagents', 'single']),
|
|
1248
|
+
value => { settings.review.execution = value; }
|
|
1249
|
+
);
|
|
1207
1250
|
transferAgentSettings({
|
|
1208
1251
|
rawAgents: objectValue(review.agents),
|
|
1209
1252
|
settingsAgents: settings.review.agents,
|
|
@@ -1375,6 +1418,9 @@ orhestra:
|
|
|
1375
1418
|
# Режим полного цикла eda-orhestra.
|
|
1376
1419
|
# automatic | manual
|
|
1377
1420
|
mode: ${orhestra.mode ?? 'automatic'}
|
|
1421
|
+
# Где выполняются этапы и передаётся ли single совместимым вложенным скилам.
|
|
1422
|
+
# subagents | single | single_propagated
|
|
1423
|
+
execution: ${orhestra.execution ?? 'subagents'}
|
|
1378
1424
|
# Упорядоченная цепочка. Шаги можно отключать, удалять и переставлять.
|
|
1379
1425
|
steps:
|
|
1380
1426
|
${orhestraSteps}
|
|
@@ -1435,7 +1481,10 @@ manual-test:
|
|
|
1435
1481
|
depth: ${settings.manualTest.depth}
|
|
1436
1482
|
|
|
1437
1483
|
review:
|
|
1438
|
-
#
|
|
1484
|
+
# Где eda-review выполняет выбранные проверки.
|
|
1485
|
+
# subagents — отдельный специализированный агент на проверку, single — все проверки одним агентом.
|
|
1486
|
+
execution: ${settings.review.execution ?? 'subagents'}
|
|
1487
|
+
# Каждая проверка имеет собственный режим запуска; модели применяются только в subagents.
|
|
1439
1488
|
agents:
|
|
1440
1489
|
${reviewAgents}
|
|
1441
1490
|
|
package/package.json
CHANGED
|
@@ -23,7 +23,7 @@ description: 'Коммитит выбранные или все незакомм
|
|
|
23
23
|
|
|
24
24
|
| Агент | Claude Code | Codex | Доступ |
|
|
25
25
|
|---|---|---|---|
|
|
26
|
-
| `eda-commit-executor` | `
|
|
26
|
+
| `eda-commit-executor` | `sonnet` | `gpt-5.6-terra` | git-write |
|
|
27
27
|
|
|
28
28
|
- В Claude Code запускай установленный custom agent через `Agent` tool по имени.
|
|
29
29
|
- В Codex запускай установленный custom agent через `spawn_agent` или аналог по имени.
|
|
@@ -75,7 +75,7 @@ COMMIT_SCOPE:
|
|
|
75
75
|
Верни результат строго по YAML-контракту агента.
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
-
Агент сам собирает git-контекст, читает правила и историю, формирует
|
|
78
|
+
Агент сам собирает git-контекст, читает правила и историю, формирует сообщения коммитов и тексты PR по исходному запросу и фактическому diff, точечно коммитит и выполняет разрешённое продолжение. При непустом `$COMMIT_SCOPE` он выбирает соответствующий состав. При пустом `$COMMIT_SCOPE` включает все tracked-изменения и содержательные untracked-файлы, исключая только очевидные кэши, временные, системные и локальные служебные артефакты. Выбранный состав он сам делит на необходимое число логически цельных коммитов и создаёт их по порядку; несколько задач в полном дефолтном наборе не являются причиной для вопроса. При вероятном секрете или другой реальной небезопасности он обязан вернуть `blocked` до индексации затронутой группы.
|
|
79
79
|
|
|
80
80
|
Явная команда пользователя разрешает обычные ожидаемые действия и безопасные предпосылки в её рамках. Например, «создай PR» разрешает обычный push текущей ветки, если без него PR создать нельзя. Она не разрешает force-push, публикацию секретов или другое не названное рискованное действие.
|
|
81
81
|
|
|
@@ -11,11 +11,12 @@ description: 'Выполняет настраиваемую цепочку `eda-
|
|
|
11
11
|
|
|
12
12
|
Прочитай только раздел `orhestra` из `docs/settings.yaml`, если файл есть. Прямое указание пользователя в текущем сообщении важнее любого поля настроек.
|
|
13
13
|
|
|
14
|
-
Поддерживается только `version: 3`. При другой версии, отсутствующем `orhestra.steps` или невалидном значении используй дефолты ниже; настройки старого формата не применяй.
|
|
14
|
+
Поддерживается только `version: 3`. При другой версии, отсутствующем `orhestra.steps` или невалидном значении используй дефолты ниже; настройки старого формата не применяй. Дефолты: `orhestra.mode: automatic`, `orhestra.execution: subagents`.
|
|
15
15
|
|
|
16
16
|
```yaml
|
|
17
17
|
orhestra:
|
|
18
18
|
mode: automatic
|
|
19
|
+
execution: subagents
|
|
19
20
|
steps:
|
|
20
21
|
- id: plan
|
|
21
22
|
skill: eda-plan
|
|
@@ -48,6 +49,7 @@ orhestra:
|
|
|
48
49
|
Правила схемы:
|
|
49
50
|
|
|
50
51
|
- `mode`: только `automatic` или `manual`; дефолт `automatic`.
|
|
52
|
+
- `execution`: `subagents`, `single` или `single_propagated`; дефолт `subagents`.
|
|
51
53
|
- `steps`: упорядоченный непустой список. Выполняй сверху вниз только элементы с `enabled: true`; отсутствующий `enabled` считай `true`.
|
|
52
54
|
- `id`: уникальное непустое имя шага для ссылок из `on_failure.then`.
|
|
53
55
|
- `skill`: имя установленного `eda-*`-скила. Не разрешай `eda-orhestra`, `eda-aim`, `eda-commit`, `eda-send-review`, `eda-worktree` и `eda-merge-worktree`.
|
|
@@ -63,7 +65,9 @@ orhestra:
|
|
|
63
65
|
|
|
64
66
|
## Вход из сообщения пользователя
|
|
65
67
|
|
|
66
|
-
Сохрани весь текст рядом с вызовом в `$USER_REQUEST`. Извлеки задачу, пути к готовым артефактам, режим и разовые изменения цепочки.
|
|
68
|
+
Сохрани весь текст рядом с вызовом в `$USER_REQUEST`. Извлеки задачу, пути к готовым артефактам, режим вопросов, режим исполнения и разовые изменения цепочки.
|
|
69
|
+
|
|
70
|
+
Явные `subagents`, `single` или `single_propagated` рядом с вызовом `eda-orhestra` задают `$EXECUTION` только для текущего запуска и важнее настроек. Поддерживай также формулировки «одним агентом» для `single` и «одним агентом с передачей» для `single_propagated`. Не принимай режим, явно адресованный отдельному шагу, за режим самого оркестратора.
|
|
67
71
|
|
|
68
72
|
Поддерживай естественные overrides: `без полировки плана`, `без полировки кода`, `полировка кода 2 итерации`, `без ручных тестов`, `только plan и execute`, `plan-polish threshold 95 limit 3`, `для manual-test <args>`. Явное перечисление порядка заменяет порядок из настроек; локальное включение, отключение или параметры меняют только названный шаг. Фразу `полировка кода N итераций` нормализуй в `limit N` внутри `args` шага `eda-polish`; аналогичную фразу о плане — в `args` шага `eda-plan-polish`. Не принимай слово из описания самой задачи за override без явной связи с цепочкой.
|
|
69
73
|
|
|
@@ -71,10 +75,10 @@ orhestra:
|
|
|
71
75
|
|
|
72
76
|
## Подготовка цепочки
|
|
73
77
|
|
|
74
|
-
1.
|
|
78
|
+
1. Определи `$EXECUTION` по явному режиму оркестратора, затем по `orhestra.execution`, иначе `subagents`; нормализуй настройки и overrides в `$STEPS` с `id`, `skill`, `enabled` и `args`.
|
|
75
79
|
2. Проверь уникальность id, наличие скилов, `on_failure`-инварианты и положительные числовые лимиты. Неизвестный id в `on_failure.then`, запрещённый скилл, handler без повторного manual-test, пустая активная цепочка или отсутствующий установленный скилл — `blocked: некорректная конфигурация orhestra` с точным полем.
|
|
76
80
|
3. Не исправляй подозрительный порядок молча. Если шаг очевидно требует ещё не созданный артефакт, в automatic остановись только когда вход нельзя безопасно получить из `$USER_REQUEST` или предыдущих результатов; в manual задай один вопрос о порядке или входе.
|
|
77
|
-
4. Сформируй для каждого шага итоговый ввод: `$USER_REQUEST` + пути ко всем артефактам предыдущих шагов + `args`.
|
|
81
|
+
4. Сформируй для каждого шага итоговый ввод: задача из `$USER_REQUEST` без orchestration-only указания `$EXECUTION` + пути ко всем артефактам предыдущих шагов + `args`. Явно адресованный режим отдельного шага сохрани.
|
|
78
82
|
5. Прямые параметры текущего вызова всегда ставь выше противоречащих `args` и настроек.
|
|
79
83
|
|
|
80
84
|
## Режимы и вопросы
|
|
@@ -104,15 +108,14 @@ orhestra:
|
|
|
104
108
|
## Вызов вложенных скилов
|
|
105
109
|
|
|
106
110
|
1. Загружай установленный `SKILL.md` каждого шага как источник правды. Не копируй его процедуру в этот скилл.
|
|
107
|
-
2.
|
|
108
|
-
3.
|
|
109
|
-
4.
|
|
110
|
-
5.
|
|
111
|
-
6. Если чистый контекст, субагент этапа или нужная составному скилу вложенная делегация недоступны, остановись с `blocked: недоступна изоляция этапа`. Не выполняй этап основным агентом и не вводи новый CLI-fallback, которого нет в инструкции вызываемого скилла.
|
|
111
|
+
2. В `single_propagated` добавь `single` к итоговому вводу только совместимых шагов `eda-plan-execute`, `eda-polish` и `eda-review`, если пользователь не задал этому шагу собственный режим. Не передавай его другим скилам: `eda-polish` уже передаст режим своему `eda-review`, а остальные продолжат по собственному контракту.
|
|
112
|
+
3. В `subagents` каждый активный шаг, повтор и `on_failure.skill` запускай в отдельном изолированном субагенте. Передавай только рабочую директорию, имя скилла, итоговый ввод и пути к нужным артефактам. В Codex используй `spawn_agent` с `fork_turns: "none"` или точный аналог; в Claude Code — новый `Agent` с самодостаточным task-сообщением.
|
|
113
|
+
4. В `single` и `single_propagated` выполняй контракт каждого активного шага, повтора и `on_failure.skill` сам в текущем контексте, строго последовательно. Не создавай для них верхнеуровневых субагентов; собственные правила вложенной делегации вызываемого скилла сохраняются.
|
|
114
|
+
5. Не переключай `$EXECUTION` автоматически. В `subagents` при недоступной изоляции остановись с `blocked: недоступна изоляция этапа`; в single-режимах блокируйся только тогда, когда обязательная вложенная делегация недоступна по контракту самого шага.
|
|
112
115
|
|
|
113
116
|
## Технические остановки субагентов
|
|
114
117
|
|
|
115
|
-
|
|
118
|
+
В `subagents` техническую ошибку инструмента субагентов не смешивай со статусами `failed` и `blocked` содержательного контракта. Сохрани полный исходный текст ошибки и обработай её по причине:
|
|
116
119
|
|
|
117
120
|
- лимит параллельности или отсутствие свободного слота — дождись уже запущенного этим workflow агента, при необходимости закрой завершённые потоки и повтори тот же запуск; если управляемых активных агентов нет, заверши `blocked: заняты слоты субагентов`;
|
|
118
121
|
- лимит глубины вложения — не повторяй запуск и не выполняй этап сам; заверши `blocked: достигнут лимит глубины субагентов`, указав наблюдаемую и требуемую глубину;
|
|
@@ -148,13 +151,14 @@ orhestra:
|
|
|
148
151
|
|
|
149
152
|
## Финал
|
|
150
153
|
|
|
151
|
-
Сообщи
|
|
154
|
+
Сообщи режим вопросов, `$EXECUTION`, переданные вложенным шагам overrides, фактически выполненную цепочку с args и лимитами, пропущенные шаги и причины, пути ко всем артефактам, последний review score при наличии, результат manual-test при наличии, число QA-циклов и состояние git «не закоммичено».
|
|
152
155
|
|
|
153
156
|
Успех означает, что все включённые шаги завершились по собственным контрактам. Если manual-test был включён, после последних изменений обязателен `passed`; если он отключён, явно напиши «ручные тесты пропущены настройкой». Если отключён `eda-plan-polish`, явно напиши «полировка плана пропущена настройкой». Если отключён `eda-polish`, явно напиши «полировка кода пропущена настройкой».
|
|
154
157
|
|
|
155
158
|
## Чего НЕ делать
|
|
156
159
|
|
|
157
|
-
-
|
|
160
|
+
- Обходить или сокращать контракт настроенного скилла из-за выбранного режима исполнения.
|
|
161
|
+
- Передавать `single` скилам вне allowlist `eda-plan-execute`, `eda-polish`, `eda-review`.
|
|
158
162
|
- Запускать отключённый или отсутствующий в цепочке шаг, кроме явно настроенного `on_failure.skill`.
|
|
159
163
|
- Терять `args`, порядок или пути к артефактам при передаче.
|
|
160
164
|
- Считать автоматические тесты заменой включённого `eda-manual-test`.
|
|
@@ -9,7 +9,7 @@ description: 'Итеративно ревьюит и исправляет изм
|
|
|
9
9
|
|
|
10
10
|
## Вход из сообщения пользователя
|
|
11
11
|
|
|
12
|
-
Текст рядом с вызовом скилла в текущем сообщении — главный вход. Разбери target, путь к плану, PR/ветку/diff/файл, лимит итераций и ограничения. Передавай в каждый `eda-review`
|
|
12
|
+
Текст рядом с вызовом скилла в текущем сообщении — главный вход. Разбери target, путь к плану, PR/ветку/diff/файл, лимит итераций и ограничения. Передавай в каждый `eda-review` разовый режим `subagents` или `single`, overrides проверок и моделей из запроса пользователя.
|
|
13
13
|
|
|
14
14
|
Лимит по умолчанию — `5` итераций; пользователь может задать `limit N` положительным целым числом. Порога у цикла нет: устаревшие `threshold N`, `до 90` и `цель 90` не применяй и скажи об этом в финале.
|
|
15
15
|
|
|
@@ -52,6 +52,7 @@ description: 'Итеративно ревьюит и исправляет изм
|
|
|
52
52
|
```text
|
|
53
53
|
Используй eda-review для <TARGET_CONTEXT>.
|
|
54
54
|
План: <PLAN_FILE | none>.
|
|
55
|
+
Режим исполнения review: <single | subagents | из настроек>.
|
|
55
56
|
Overrides проверок и моделей: <из запроса | none>.
|
|
56
57
|
Ранее отклонённые находки: <предыдущий review file и fix report | none>.
|
|
57
58
|
Верни путь к файлу, status, result, score, находки и coverage.
|
|
@@ -15,7 +15,7 @@ description: 'Готовит проект к работе с AI: проекти
|
|
|
15
15
|
|
|
16
16
|
1. **Не правишь код.** Меняй только `docs/rules.md`, `docs/arch.md`, `docs/references.md`, `docs/references/*.md`, `AGENTS.md` и `CLAUDE.md`; не ставь пакеты и не меняй конфиги.
|
|
17
17
|
2. **Опирайся на проект.** Читай код, структуру, зависимости, команды, тесты, инфраструктуру, git-историю и существующие документы. Не генерируй универсальный шаблон.
|
|
18
|
-
3. **Разделяй документы по назначению.** Business-карточки задают подтверждённое целевое поведение и редактируются только через `eda-business`; `docs/rules.md` задаёт
|
|
18
|
+
3. **Разделяй документы по назначению.** Business-карточки задают подтверждённое целевое поведение и редактируются только через `eda-business`; `docs/rules.md` задаёт действия, запреты, команды проверки и требования к процессу, совместимости и безопасности; `docs/arch.md` фиксирует структуру исходного кода, назначение каталогов, модули и слои, ownership, зависимости, runtime/data-flow, данные и интеграции; references показывают уже устоявшуюся форму реализации; `AGENTS.md` объясняет, что это за проект и где читать обязательную рамку. У каждого факта должен быть ровно один документ-владелец: допустима ссылка на другой документ, но не вторая копия содержания даже в иной формулировке. Архитектурное решение не становится правилом только потому, что его удалось сформулировать как запрет.
|
|
19
19
|
4. **Обновляй осмысленно.** Сохраняй актуальное, исправляй неверное, удаляй устаревшее и перестраивай документ настолько сильно, насколько требует проект. Не спрашивай отдельно, что делать с каждым существующим файлом.
|
|
20
20
|
5. **Не выдавай предположение за факт.** Значимые неподтверждённые архитектурные решения предложи пользователю; после выбора зафиксируй принятый вариант.
|
|
21
21
|
6. **Предлагай экстремальный профиль проверок.** Не ограничивайся уже установленными командами или базовыми lint/test. Пройди весь каталог ниже, предложи все применимые проверки и объясни каждое `не применимо`; в документацию переноси только подтверждённые правила.
|
|
@@ -125,20 +125,29 @@ description: 'Готовит проект к работе с AI: проекти
|
|
|
125
125
|
В `docs/rules.md` уместны:
|
|
126
126
|
|
|
127
127
|
- обязательные команды и момент их запуска;
|
|
128
|
-
- действующие соглашения об именовании,
|
|
128
|
+
- действующие соглашения об именовании, формате и совместимости;
|
|
129
129
|
- требования к изменениям, например обязательная миграция при изменении схемы или обновление контракта при изменении публичного API;
|
|
130
130
|
- точечные запреты небезопасных конструкций, бесконтрольных подавлений, утечки секретов и персональных данных;
|
|
131
131
|
- строгие режимы уже внедрённых инструментов.
|
|
132
132
|
|
|
133
|
+
Пути допустимы в `docs/rules.md` только как операнды точных команд или указатели на конфиги и создаваемые артефакты. Не описывай в `docs/rules.md` топологию исходного кода, назначение каталогов, размещение компонентов или границы модулей.
|
|
134
|
+
|
|
133
135
|
Не помещай в `docs/rules.md`:
|
|
134
136
|
|
|
135
137
|
- выбор архитектурного подхода, слоёв, модулей и CQRS;
|
|
138
|
+
- дерево и топологию исходного кода, назначение каталогов и размещение компонентов;
|
|
136
139
|
- владение данными и ответственностью, направления зависимостей, transaction boundaries, persistence boundaries, trust boundaries и runtime/data-flow;
|
|
137
140
|
- решение, в каком слое выполняются валидация, преобразование типов, авторизация или управление транзакцией;
|
|
138
141
|
- форму controller, handler, repository, DTO, entity, теста, атрибута или другого компонента;
|
|
139
142
|
- желаемое будущее состояние, рекомендации и правила для ещё не внедрённых инструментов.
|
|
140
143
|
|
|
141
|
-
Если утверждение определяет, **где** находится ответственность или **какая часть системы** может зависеть от другой, запиши его в `docs/arch.md`, даже если его можно переписать как «не вызывай X из Y». Если утверждение показывает, **как именно выглядит код**, оно относится к применимой reference-карточке.
|
|
144
|
+
Если утверждение определяет, **где** находится ответственность или **какая часть системы** может зависеть от другой, запиши его в `docs/arch.md`, даже если его можно переписать как «не вызывай X из Y». Если утверждение показывает, **как именно выглядит код**, оно относится к применимой reference-карточке. Если утверждение задаёт **целевое поведение продукта**, оно относится к применимой business-карточке. При дубле перенеси утверждение к единственному владельцу и удали пересказ из остальных документов; не сохраняй вторую копию даже другими словами.
|
|
145
|
+
|
|
146
|
+
Пограничные случаи разделяй так:
|
|
147
|
+
|
|
148
|
+
- запрет зависимости `X → Y` хранится в `docs/arch.md`; обязательный запуск проверки границ хранится в `docs/rules.md` без пересказа самой границы;
|
|
149
|
+
- требование добавить миграцию при изменении схемы хранится в `docs/rules.md`; владение данными и расположение persistence-компонентов — в `docs/arch.md`;
|
|
150
|
+
- путь к конфигу или каталогу артефактов может быть операндом рабочего правила, но путь исходного компонента и его место в системе описываются только в `docs/arch.md`.
|
|
142
151
|
|
|
143
152
|
Используй эту границу для типичных спорных тем:
|
|
144
153
|
|
|
@@ -164,6 +173,8 @@ description: 'Готовит проект к работе с AI: проекти
|
|
|
164
173
|
|
|
165
174
|
Опиши устройство проекта, не повторяя рабочие правила из `docs/rules.md`. Документ должен позволять понять, где находится нужная часть системы, за что она отвечает и как связана с остальными.
|
|
166
175
|
|
|
176
|
+
`docs/arch.md` не должен содержать команды, чек-листы разработки, настройки линтеров и других инструментов или иные рабочие правила. Если архитектурную границу проверяет конкретная команда, в `docs/arch.md` оставь только саму границу, а требование и момент запуска команды запиши в `docs/rules.md` без пересказа границы.
|
|
177
|
+
|
|
167
178
|
Включи релевантные проекту сведения:
|
|
168
179
|
- выбранный архитектурный подход, например модульный монолит, слоистая архитектура или набор сервисов, и коротко почему он подходит проекту;
|
|
169
180
|
- дерево основных папок с назначением каждой значимой части;
|
|
@@ -193,7 +204,7 @@ description: 'Готовит проект к работе с AI: проекти
|
|
|
193
204
|
|
|
194
205
|
Индекс содержит ссылки только на карточки. В каждой карточке должны быть:
|
|
195
206
|
|
|
196
|
-
- назначение и
|
|
207
|
+
- назначение эталона и показываемая форма реализации без пересказа архитектурных границ компонента;
|
|
197
208
|
- условия, при которых пример применим;
|
|
198
209
|
- один минимальный, законченный и синтаксически цельный пример в fenced code block с указанием языка;
|
|
199
210
|
- короткий разбор элементов примера, которые нужно повторять;
|
|
@@ -237,9 +248,10 @@ description: 'Готовит проект к работе с AI: проекти
|
|
|
237
248
|
|
|
238
249
|
Убедись, что:
|
|
239
250
|
- `docs/rules.md` содержит только лаконичные действующие правила;
|
|
240
|
-
- каждое правило задаёт проверяемое действие или запрет, а архитектурные границы не продублированы в форме императива;
|
|
241
|
-
- `docs/arch.md` объясняет подход, структуру папок, части системы и их связи без повторения правил;
|
|
251
|
+
- каждое правило задаёт проверяемое действие или запрет, пути используются только как операнды команд или указатели на конфиги и артефакты, а топология исходного кода и архитектурные границы не продублированы в форме императива;
|
|
252
|
+
- `docs/arch.md` объясняет подход, структуру папок, части системы и их связи без команд, чек-листов разработки, tooling-политик и повторения правил;
|
|
242
253
|
- `docs/references.md` ссылается на все актуальные карточки и не содержит самих примеров;
|
|
254
|
+
- reference-карточки описывают форму реализации, business-карточки — целевое поведение, а архитектурные факты из `docs/arch.md` в них не пересказаны;
|
|
243
255
|
- существующий `docs/business.md` учтён как вход, не изменён этим скилом и указан в `AGENTS.md`;
|
|
244
256
|
- каждая карточка самодостаточна, содержит законченный пример кода и не содержит ссылок или неподтверждённых элементов;
|
|
245
257
|
- для нового проекта без нескольких устойчивых реализаций не созданы выдуманные reference-карточки;
|
|
@@ -250,7 +262,8 @@ description: 'Готовит проект к работе с AI: проекти
|
|
|
250
262
|
- выбранные инструменты имеют максимальный применимый строгий профиль, а каждое ослабление явно обосновано;
|
|
251
263
|
- для нового проекта требования, стек и архитектурные драйверы взяты из стартового документа, а архитектура и правила спроектированы внутри `eda-prepare-ai`;
|
|
252
264
|
- AI-скилы, роли и MCP разделены на уже доступные и требующие отдельного внедрения;
|
|
253
|
-
- документы
|
|
265
|
+
- у каждого факта есть ровно один документ-владелец, а остальные документы при необходимости только ссылаются на него без пересказа;
|
|
266
|
+
- между документами нет дублей, архитектурных путей в `docs/rules.md`, императивных рабочих инструкций в `docs/arch.md` и противоречий с проектом или друг с другом.
|
|
254
267
|
|
|
255
268
|
### 13. Финал
|
|
256
269
|
|
|
@@ -5,21 +5,28 @@ description: 'Проводит полное read-only ревью diff, ветк
|
|
|
5
5
|
|
|
6
6
|
# Скил: Ревьюер (eda-review)
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Проводи одно полное read-only ревью в выбранном режиме исполнения. В `subagents` оркестрируй установленных `eda-review-*` агентов и сам не выполняй их специализированные роли. В `single` выполни те же выбранные проверки самостоятельно по общей матрице, не запуская leaf-субагентов. В обоих режимах сохрани один итоговый отчёт с одинаковыми требованиями к доказательствам и результату.
|
|
9
9
|
|
|
10
10
|
## Вход из сообщения пользователя
|
|
11
11
|
|
|
12
|
-
Текст рядом с вызовом скилла в текущем сообщении — главный вход. Сначала разбери target, план, ссылку, ограничения, отключённые или принудительно включённые проверки и разовые модели.
|
|
12
|
+
Текст рядом с вызовом скилла в текущем сообщении — главный вход. Сначала разбери target, план, ссылку, ограничения, режим `subagents` или `single`, отключённые или принудительно включённые проверки и разовые модели.
|
|
13
13
|
|
|
14
14
|
Если входа достаточно, продолжай без вопроса. Без аргументов ревьюй незакоммиченный `git diff HEAD`. Ссылка на PR/MR задаёт target однозначно. Если пользователь дал только корень удалённого репозитория, обязательно попроси указать PR/MR, ветку, коммит или файлы; весь репозиторий и последний PR автоматически не выбирай.
|
|
15
15
|
|
|
16
|
-
Разовые указания вида «без performance», «без business», «включи database», «включи business», «architecture на opus» или «tests на gpt-5.6-sol» важнее
|
|
16
|
+
Явное слово `subagents` или `single` задаёт режим только для текущего запуска и важнее `docs/settings.yaml`. Разовые указания вида «без performance», «без business», «включи database», «включи business», «architecture на opus» или «tests на gpt-5.6-sol» также важнее настроек.
|
|
17
17
|
|
|
18
18
|
Если во входе даны ранее отклонённые находки или путь к предыдущему ревью, прочитай их раздел «Отклонено» и не принимай эти находки повторно без нового доказательства.
|
|
19
19
|
|
|
20
20
|
## Настройки
|
|
21
21
|
|
|
22
|
-
Прочитай `docs/settings.yaml`, если файл есть. Поддерживается только `version: 3`. Используй `review.agents.<check>.mode` и `review.agents.<check>.model.<platform>`. Если файла нет или версия отличается, используй defaults и добавь предупреждение; старые настройки не применяй.
|
|
22
|
+
Прочитай `docs/settings.yaml`, если файл есть. Поддерживается только `version: 3`. Используй `review.execution`, `review.agents.<check>.mode` и `review.agents.<check>.model.<platform>`. Если файла нет или версия отличается, используй defaults и добавь предупреждение; старые настройки не применяй.
|
|
23
|
+
|
|
24
|
+
`review.execution` принимает:
|
|
25
|
+
|
|
26
|
+
- `subagents` — каждая выбранная проверка выполняется отдельным установленным агентом;
|
|
27
|
+
- `single` — все выбранные проверки выполняет текущий агент в одном контексте.
|
|
28
|
+
|
|
29
|
+
Default — `subagents`. При неизвестном или отсутствующем значении используй default и добавь предупреждение. Сначала выбери `$EXECUTION` по явному режиму из текущего сообщения, затем по настройке, иначе по default.
|
|
23
30
|
|
|
24
31
|
Допустимые режимы:
|
|
25
32
|
|
|
@@ -27,7 +34,9 @@ description: 'Проводит полное read-only ревью diff, ветк
|
|
|
27
34
|
- `auto` — запускать только когда проверка применима;
|
|
28
35
|
- `off` — не запускать.
|
|
29
36
|
|
|
30
|
-
Допустимые модели по
|
|
37
|
+
Допустимые модели по умолчанию для `subagents`: Claude Code — `haiku`, `sonnet`, `opus`; Codex — `gpt-5.6-luna`, `gpt-5.6-terra`, `gpt-5.6-sol`. Неизвестное или отсутствующее значение замени default-значением конкретного агента и добавь предупреждение в покрытие.
|
|
38
|
+
|
|
39
|
+
В `single` все проверки выполняются текущей моделью агента. Настройки и разовые overrides моделей отдельных проверок не применяются; добавь об этом один warning в покрытие, только если пользователь явно передал такой override. Для completed-проверок укажи фактическую текущую модель, если хост её сообщает, иначе `current`.
|
|
31
40
|
|
|
32
41
|
Если `version: 3` существует, но раздела `review.agents` нет, используй defaults ниже и добавь предупреждение. Устаревшие поля `review.strict`, `review.include_code_quality` и раздел `review-check` не применяй. Существующий файл настроек не переписывай.
|
|
33
42
|
|
|
@@ -60,7 +69,7 @@ description: 'Проводит полное read-only ревью diff, ветк
|
|
|
60
69
|
## Подготовить контекст
|
|
61
70
|
|
|
62
71
|
1. Определи `$TARGET`: явный файл, папка, URL PR/MR, ветка, коммит, указанный diff или `git diff HEAD` без аргументов. Для GitHub/GitLab URL получи metadata и diff read-only командами `gh`/`glab`; для другого сервиса используй доступное read-only средство. Если основной diff недоступен, остановись: warning разрешён только для недоступных прошлых обсуждений, а не для самого target.
|
|
63
|
-
2. Прочитай `AGENTS.md`, `CLAUDE.md`, `docs/rules.md`, `docs/arch.md` и сам target настолько, чтобы выбрать проверки и
|
|
72
|
+
2. Прочитай `AGENTS.md`, `CLAUDE.md`, `docs/rules.md`, `docs/arch.md` и сам target настолько, чтобы выбрать проверки и сформировать точный контекст. В `subagents` на этом шаге не делай собственное code review; в `single` эти документы и target станут общей основой всех проходов и не должны загружаться заново для каждой проверки.
|
|
64
73
|
3. Определи `$PLAN_FILE`. Если его нет, используй `none` и не пытайся восстановить последний план наугад.
|
|
65
74
|
4. Определи `$REFERENCE_FILES`: если план содержит `sources.references`, используй их; иначе через `docs/references.md` выбери только применимые карточки для компонентов target. Если карточек нет, используй `none`.
|
|
66
75
|
5. Определи `$BUSINESS_FILES`: сначала установи исходную задачу и фактически затронутое пользовательское или доменное поведение по текущему сообщению, плану и target. Если план содержит `sources.business`, используй только относящиеся к этому поведению пути; иначе прочитай `docs/business.md` и по описаниям выбери только применимые карточки. Если индекс отсутствует, подходящих карточек нет или изменения не затрагивают бизнес-поведение, используй `none`. Не загружай все карточки только потому, что индекс существует.
|
|
@@ -87,7 +96,21 @@ description: 'Проводит полное read-only ревью diff, ветк
|
|
|
87
96
|
|
|
88
97
|
Для каждой проверки сохрани причину `selected` или `skipped`; она попадёт в покрытие.
|
|
89
98
|
|
|
90
|
-
##
|
|
99
|
+
## Выполнить проверки
|
|
100
|
+
|
|
101
|
+
### Режим single
|
|
102
|
+
|
|
103
|
+
Всю работу выполни сам в текущем контексте. Не запускай `eda-review-*` агентов, другие субагенты или отдельный CLI. Если `eda-review` вызван из `eda-polish`, `eda-orhestra` или другого внешнего workflow в одном изолированном субагенте, это не нарушает `single`: запрет относится к leaf-субагентам отдельных проверок внутри текущего review-runner.
|
|
104
|
+
|
|
105
|
+
Прочитай [references/review-matrix.md](references/review-matrix.md) целиком. Это обязательный контракт всех специализированных проходов в `single`; не читай packaged prompts из `agents/eda-review-*` и не пытайся вызвать их как скилы.
|
|
106
|
+
|
|
107
|
+
1. Прочитай target и общий код вокруг изменений один раз. Применимые инструкции, `$PLAN_FILE`, `$REFERENCE_FILES` и `$BUSINESS_FILES` также загрузи один раз и только когда соответствующая проверка выбрана.
|
|
108
|
+
2. Последовательно выполни отдельный проход по каждой выбранной проверке из матрицы. Не смешивай области и не пропускай проход из-за того, что соседняя проверка уже изучала тот же код.
|
|
109
|
+
3. Для каждого прохода сохрани внутренний результат: `check`, `status`, `summary` и кандидаты в находки с `severity`, `explanation`, `evidence`, `repro`, `fix` и `tests`. YAML между проходами не нужен.
|
|
110
|
+
4. Если проверка оказалась неприменима, перенеси её в skipped с конкретной причиной. Если обязательную проверку невозможно выполнить из-за недоступного target или контекста, остановись без итогового файла. Недоступные предыдущие удалённые обсуждения преврати в warning и продолжай.
|
|
111
|
+
5. После всех проходов проверь доказательства, дедуплицируй кандидатов, выставь score и сохрани итог по общим правилам ниже. Не запускай отдельный редакторский или подтверждающий проход.
|
|
112
|
+
|
|
113
|
+
### Режим subagents
|
|
91
114
|
|
|
92
115
|
Имя агента получается из имени проверки:
|
|
93
116
|
|
|
@@ -131,7 +154,7 @@ REVIEW_CONTEXT: <краткий общий контекст>
|
|
|
131
154
|
|
|
132
155
|
Не вставляй системный prompt агента в task-сообщение.
|
|
133
156
|
|
|
134
|
-
|
|
157
|
+
### Проверить ответы и обработать сбои subagents
|
|
135
158
|
|
|
136
159
|
Проверь для каждого ответа `status`, `check`, фактически запрошенный `model` и структуру `находки`. Несовпадение модели считай ошибкой контракта. Каждая находка означает дефект, который обязательно исправить. Находка без точного места, конкретного достижимого риска, доказательства, способа воспроизведения (`repro`) и проверяемого способа исправления не подтверждена.
|
|
137
160
|
|
|
@@ -143,7 +166,7 @@ REVIEW_CONTEXT: <краткий общий контекст>
|
|
|
143
166
|
|
|
144
167
|
## Собрать итог
|
|
145
168
|
|
|
146
|
-
|
|
169
|
+
В `subagents` главный агент выполняет только редакторскую работу над результатами. В `single` эти же правила применяются к кандидатам, собранным в специализированных проходах:
|
|
147
170
|
|
|
148
171
|
1. Проверь находки по указанным evidence и отклони неподтверждённые.
|
|
149
172
|
2. Объедини дубли разных агентов в один пункт, сохранив все полезные доказательства.
|
|
@@ -153,18 +176,19 @@ REVIEW_CONTEXT: <краткий общий контекст>
|
|
|
153
176
|
6. Каждую отклонённую находку запиши в раздел «Отклонено» с проверкой-источником и причиной. В число находок и в score отклонённые не входят.
|
|
154
177
|
7. Сам выставь итоговый `score` от 0 до 100 по серьёзности, влиянию и общему качеству реализации. Не используй фиксированные вычеты, среднее или минимум оценок агентов. Ориентир: `100` — находок нет; `95–99` — только low; `80–94` — medium или несколько low; `60–79` — high; ниже `60` — critical или нужна существенная переработка. Любое снижение score связывай с принятыми находками; если находок нет, score равен `100`. Добавь короткое обоснование числа.
|
|
155
178
|
8. Установи `result: clean`, только если находок нет; при любой находке используй `result: changes-required` независимо от score.
|
|
156
|
-
9. Не выполняй дополнительное
|
|
179
|
+
9. Не выполняй дополнительное ревью после специализированных проходов и не добавляй находки вне выбранных проверок.
|
|
157
180
|
|
|
158
181
|
Ревью содержит только проблемы. Не перечисляй выполненную работу, похвалу и успешные проверки. Исключение — короткие технические разделы покрытия и «Отклонено».
|
|
159
182
|
|
|
160
183
|
## Сохранить ревью
|
|
161
184
|
|
|
162
|
-
Создай файл `docs/artifacts/reviews/{YYYY-MM-DD}_{HH-MM}_{slug}.md` только после успешной обработки всех обязательных
|
|
185
|
+
Создай файл `docs/artifacts/reviews/{YYYY-MM-DD}_{HH-MM}_{slug}.md` только после успешной обработки всех обязательных проверок. Для недоступного `previous_reviews` или другого разрешённого warning используй `status: reviewed-with-warnings`, иначе `status: reviewed`.
|
|
163
186
|
|
|
164
187
|
```markdown
|
|
165
188
|
---
|
|
166
189
|
target: <что проверено>
|
|
167
190
|
plan: <docs/artifacts/plans/... | none>
|
|
191
|
+
execution: <subagents | single>
|
|
168
192
|
score: <0..100>
|
|
169
193
|
status: <reviewed | reviewed-with-warnings>
|
|
170
194
|
result: <clean | changes-required>
|
|
@@ -184,6 +208,7 @@ checks:
|
|
|
184
208
|
|
|
185
209
|
## Покрытие
|
|
186
210
|
|
|
211
|
+
- **Execution:** <subagents | single>
|
|
187
212
|
- **Completed:** <проверки и модели>
|
|
188
213
|
- **Skipped:** <проверки и причины>
|
|
189
214
|
- **Warnings:** <предупреждения или «нет»>
|
|
@@ -216,7 +241,7 @@ checks:
|
|
|
216
241
|
|
|
217
242
|
## Отклонено
|
|
218
243
|
|
|
219
|
-
|
|
244
|
+
<Кандидаты, отклонённые при сверке: короткая формулировка, проверка-источник и причина. Если отклонённых нет — «нет».>
|
|
220
245
|
|
|
221
246
|
```
|
|
222
247
|
|
|
@@ -224,14 +249,14 @@ checks:
|
|
|
224
249
|
|
|
225
250
|
## Финал
|
|
226
251
|
|
|
227
|
-
Коротко сообщи путь к ревью, status, result, score, количество принятых и отклонённых находок, completed/skipped/warnings. При `changes-required` предложи `eda-fix-by-review`; при `clean` — `eda-commit`.
|
|
252
|
+
Коротко сообщи путь к ревью, execution, status, result, score, количество принятых и отклонённых находок, completed/skipped/warnings. При `changes-required` предложи `eda-fix-by-review`; при `clean` — `eda-commit`.
|
|
228
253
|
|
|
229
254
|
## Чего НЕ делать
|
|
230
255
|
|
|
231
256
|
- Править код, настройки проекта или удалённые обсуждения.
|
|
232
|
-
-
|
|
233
|
-
-
|
|
234
|
-
- Записывать итоговый файл после повторного сбоя обязательного
|
|
257
|
+
- В `subagents` выполнять специализированную роль главным агентом или подменять отсутствующих субагентов одним общим ревью.
|
|
258
|
+
- В `single` запускать leaf-субагентов, другой CLI или читать packaged prompts вместо `references/review-matrix.md`.
|
|
259
|
+
- Записывать итоговый файл после повторного сбоя обязательного агента в `subagents` или незавершённой обязательной проверки в `single`.
|
|
235
260
|
- Выбирать последний PR или весь репозиторий по ссылке на корень.
|
|
236
261
|
- Загружать все карточки references без отбора.
|
|
237
262
|
- Усреднять оценки агентов или считать score по фиксированной формуле.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Матрица проверок single-режима
|
|
2
|
+
|
|
3
|
+
Этот файл используется только при `review.execution: single`. Выполни отдельный проход по каждой выбранной проверке, но читай общий target и проектные инструкции один раз. Не смешивай области: одна проблема должна остаться в наиболее точной проверке.
|
|
4
|
+
|
|
5
|
+
Для любой находки обязательны точное место, достижимый на текущем коде сценарий, практический ущерб, доказательство, `repro`, способ исправления и нужный тест. Не принимай вкусовой рефакторинг, косметику, спекулятивное усиление, необязательный тест или проблему, которая появится только после гипотетического будущего изменения. Не перечисляй удачные решения и выполненные пункты.
|
|
6
|
+
|
|
7
|
+
## correctness
|
|
8
|
+
|
|
9
|
+
Ищи реальные ошибки поведения: неверную логику, потерю данных, неправильные состояния, пропущенные крайние случаи и некорректную обработку ошибок. Архитектуру, стиль, документацию, безопасность и план упоминай только когда они прямо доказывают функциональную ошибку.
|
|
10
|
+
|
|
11
|
+
## architecture
|
|
12
|
+
|
|
13
|
+
Проверяй границы модулей и слоёв, направление зависимостей, ответственность компонентов, публичные контракты и соответствие `docs/arch.md`. Находка допустима только когда решение уже создаёт неправильную связанность, нарушение границы или несовместимый контракт с конкретным практическим риском.
|
|
14
|
+
|
|
15
|
+
## rules
|
|
16
|
+
|
|
17
|
+
Проверяй только применимые инструкции из `AGENTS.md`, `CLAUDE.md` и `docs/rules.md` с учётом области действия и приоритета. Не выдумывай правила и не превращай предпочтение в нарушение. В evidence укажи правило и код, который ему противоречит.
|
|
18
|
+
|
|
19
|
+
## references
|
|
20
|
+
|
|
21
|
+
Проверяй только карточки из `$REFERENCE_FILES`; не загружай остальные `docs/references/` и внешние источники. Подтверждённое решение пользователя, правила и архитектура имеют приоритет. Отличие от примера без практического риска не является проблемой.
|
|
22
|
+
|
|
23
|
+
## business
|
|
24
|
+
|
|
25
|
+
Проверяй изменённое пользовательское и доменное поведение только по `$BUSINESS_FILES`. Не расширяй target требованиями соседних карточек. Различай:
|
|
26
|
+
|
|
27
|
+
- реализация нарушает действующее правило, которое задача или план не меняют — дефект бизнес-логики;
|
|
28
|
+
- задача или план явно меняют правило, но карточка не обновлена — рассинхронизация business-документации, которую нужно пересогласовать через `eda-business`.
|
|
29
|
+
|
|
30
|
+
Если задача неизвестна, не объявляй правило намеренно изменённым, но продолжай сверку с действующей карточкой.
|
|
31
|
+
|
|
32
|
+
## plan_alignment
|
|
33
|
+
|
|
34
|
+
Проверяй только конкретный `$PLAN_FILE`: невыполненные или частично выполненные пункты, рискованные отклонения, забытые тесты, миграции и документацию, изменённые вопреки плану контракты. Не требуй буквального совпадения, если цель плана сохранена без дополнительного риска.
|
|
35
|
+
|
|
36
|
+
## code_quality
|
|
37
|
+
|
|
38
|
+
Проверяй читаемость, сложность, дублирование, имена, размер и ответственность функций или классов и сцепление модулей. Находка допустима только когда структура уже создаёт конкретный риск ошибок или тестовых пробелов и код обязательно нужно исправить; мелкие стилистические предпочтения не принимай.
|
|
39
|
+
|
|
40
|
+
## tests
|
|
41
|
+
|
|
42
|
+
Ищи пропущенные регрессии, неверные ожидания, неподходящий уровень теста, хрупкие проверки и изменённое поведение без защиты. Не требуй тест на каждую строку. Находка должна назвать конкретную регрессию, которую текущие тесты не поймают, либо ошибку в самих тестах. Для подтверждения разрешены только безопасные проверки, не меняющие tracked-файлы.
|
|
43
|
+
|
|
44
|
+
## security
|
|
45
|
+
|
|
46
|
+
Проверяй аутентификацию, авторизацию, границы доверия, валидацию внешнего ввода, инъекции, секреты, файлы, сеть, криптографию и утечки чувствительных данных. Учитывай реальную модель угроз и достижимость. Не проводи активные атаки и не принимай общий hardening без конкретного пути эксплуатации или нарушенного защитного инварианта.
|
|
47
|
+
|
|
48
|
+
## performance
|
|
49
|
+
|
|
50
|
+
Ищи N+1, лишние запросы и проходы, неограниченную обработку, чрезмерные аллокации, блокировки, ошибки кеширования и конкурентности. Свяжи риск с фактическим размером данных или частотой вызова. Не принимай микроптимизацию без измеримого или очевидного эффекта; безопасные измерения разрешены, если они не меняют tracked-файлы.
|
|
51
|
+
|
|
52
|
+
## frontend
|
|
53
|
+
|
|
54
|
+
Проверяй по исходникам компоненты, состояние, формы, действия, клиентские данные, loading/error/empty/success, адаптивность, стили и очевидные проблемы доступности. Рассмотри основные и ошибочные пользовательские сценарии. Не утверждай, что интерфейс проверен визуально: браузерная проверка относится к `eda-manual-test`.
|
|
55
|
+
|
|
56
|
+
## api
|
|
57
|
+
|
|
58
|
+
Проверяй обе стороны публичных и внутренних API-контрактов: методы и пути, request/query/body, response, коды ошибок, валидацию, auth, совместимость, идемпотентность и версионирование. Находка должна назвать нарушенный контракт и достижимо затронутого потребителя.
|
|
59
|
+
|
|
60
|
+
## database
|
|
61
|
+
|
|
62
|
+
Проверяй схемы, миграции, nullable/default, обратимость и совместимость выкладки, запросы, индексы, транзакции, блокировки и целостность данных. Учитывай существующие данные, конкурентные операции и порядок деплоя. Не выполняй миграции, не изменяй базу и не требуй индекс без обоснованного запроса и нагрузки.
|
|
63
|
+
|
|
64
|
+
## documentation
|
|
65
|
+
|
|
66
|
+
Ищи только обязательные обновления документации из-за изменившегося публичного API, CLI, конфигурации, установки, пользовательского сценария или проектного контракта. Сравни фактическое поведение с документами, которые его описывают. Не требуй комментарии для очевидных внутренних изменений и не проводи редакторское ревью текста.
|
|
67
|
+
|
|
68
|
+
## previous_reviews
|
|
69
|
+
|
|
70
|
+
Для удалённого PR/MR read-only средствами найди незакрытые комментарии и треды и сверь их с текущим кодом. Классифицируй их как актуальные, исправленные, но открытые, или недоступные для проверки. В находки включай только всё ещё существующие проблемы; исправленные открытые треды перенеси в покрытие. Не отправляй комментарии, не скрывай сводки, не resolve/close треды. Если сервис, авторизация или формат обсуждений недоступны, верни warning и не утверждай, что история проверена.
|