@gian-tiaga/eda 3.9.1 → 3.10.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/README.md CHANGED
@@ -47,7 +47,7 @@ eda update-all ~/Code
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/` |
50
- | `eda-plan` | Пишет план реализации через Plan Mode: фиксирует решения, БД/API-контракты и фазы, каждую из которых один агент выполняет и проверяет за один проход. На подтверждение показывает полный план в формате скила, включая метаданные, разделы и структуру фаз; сохраняет тот же текст. Задач с идентификаторами внутри фаз нет. Реализацию не описывает — её задают `docs/rules.md`, `docs/arch.md` и карточки. Если целевое поведение ещё не описано в business-карточках, до реализации добавляет `Дополнить бизнесовые правила`; если решение противоречит правилам или архитектуре, сначала меняет сам документ. По `plan.review` запускает изолированный `eda-plan-polish` ровно на одну итерацию полировки (`limit 1`); `plan.strict` независимо включает кросс-CLI ревью | `docs/artifacts/plans/`, опционально plan-review артефакты |
50
+ | `eda-plan` | Пишет план реализации через Plan Mode: фиксирует решения, контракты БД и API, устройство и дизайн интерфейса, консольные команды и фазы, каждую из которых один агент выполняет и проверяет за один проход. На подтверждение показывает полный план в формате скила, включая метаданные, разделы и структуру фаз; сохраняет тот же текст. Задач с идентификаторами внутри фаз нет. Реализацию не описывает — её задают `docs/rules.md`, `docs/arch.md` и карточки. Если целевое поведение ещё не описано в business-карточках, до реализации добавляет `Дополнить бизнесовые правила`; если решение противоречит правилам или архитектуре, сначала меняет сам документ. По `plan.review` запускает изолированный `eda-plan-polish` ровно на одну итерацию полировки (`limit 1`); `plan.strict` независимо включает кросс-CLI ревью | `docs/artifacts/plans/`, опционально plan-review артефакты |
51
51
  | `eda-plan-review` | Одним read-only проходом проверяет план по фиксированному чек-листу из 16 пунктов: покрытие запроса, отсутствие развилок, соответствие правилам и архитектуре, дубли, регистр текста, фазы и объём. Замечания вне списка не принимает. Оценка — доля закрытых пунктов, поэтому растёт монотонно. План не меняет | `docs/artifacts/plan-reviews/` |
52
52
  | `eda-plan-review-fix` | Закрывает проваленные пункты чек-листа минимальным изменением плана с совпадающим SHA-256. План не растёт: сначала удаление и замена, прирост объёма за один заход не больше 3%. Новое ревью не делает и код не меняет | `docs/artifacts/plan-review-fixes/` |
53
53
  | `eda-plan-polish` | Оркестрирует изолированный цикл plan-review → plan-review-fix. Хранит снапшот лучшей версии плана: как только score перестаёт расти, останавливается и восстанавливает лучшую версию, а не последнюю. По умолчанию одна итерация: проверка и исправление. Исправление проверяет ревью следующей итерации, поэтому при `limit 1` последняя правка остаётся неперепроверенной. Кросс-CLI strict не используется | `docs/artifacts/plan-reviews/`, `docs/artifacts/plan-review-fixes/` |
@@ -127,6 +127,8 @@ eda update-all ~/Code
127
127
 
128
128
  У `eda-plan-execute` есть режимы `subagents` / `main` / `auto`. Режим можно разово указать в вызове, например `eda-plan-execute main docs/artifacts/plans/....md`; без него используется `plan-execute.mode` из настроек, а без настроек — `auto`.
129
129
 
130
+ Выбранный режим исполнения обязателен для `eda-plan-execute`, `eda-review`, `eda-polish` и `eda-orhestra`. При `main` из вызова или настроек агент не может перейти к субагентам из-за большого плана, diff или нехватки контекста. Прогресс и режим сохраняются для продолжения после сжатия контекста; при технической невозможности продолжить агент сообщает блокер. Выбор по размеру плана разрешён только в `eda-plan-execute auto` до начала выполнения. Зафиксированный режим меняется только по новому прямому указанию пользователя; `automatic` оркестратора такого права не даёт. У оркестратора `main` по-прежнему управляет только верхней цепочкой, а `main_propagated` также передаёт `main` совместимым execute/review-этапам; остальные вложенные контракты сохраняются.
131
+
130
132
  У `eda-aim` есть режимы `automatic` / `manual`. В автоматическом основной агент сам отвечает на безопасные рабочие вопросы по рекомендации субагента и фактам проекта, в ручном передаёт их человеку. Режим можно разово указать в вызове; без него используется `aim.mode` из настроек. Точный список новых целей перед записью в `docs/artifacts/aims/` всё равно один раз подтверждает человек.
131
133
 
132
134
  Скилы, которых нет в таблице ниже, не поддерживают эти флаги. Набор проверок `eda-review` отдельно управляется через `review.agents`.
@@ -138,7 +140,7 @@ eda update-all ~/Code
138
140
  | `eda-explore` | `strict` | После сохранения отчёта отдаёт его соседнему CLI (Claude → Codex или наоборот) на критическое ревью конкретности, фактов, развилок, рисков и версий; затем доправляет отчёт по замечаниям | Серьёзные исследования, которые лягут в основу больших решений; когда хочется второго мнения от другой модели/среды |
139
141
  | `eda-plan` | `strict`, `без ревью плана`, `без проверок` | `strict` независимо включает кросс-CLI проверку; `без ревью плана` отключает встроенный review/fix; `без проверок` отключает оба вида ревью | Когда нужно разделить создание плана и его последующую полировку |
140
142
  | `eda-plan-review` | `threshold N` | Разово меняет долю закрытых пунктов, при которой план считается готовым | Для самостоятельного аудита готового плана |
141
- | `eda-plan-execute` | `subagents` / `main` / `auto` | Разово меняет, где выполняются фазы, поверх `plan-execute.mode` | `main` для небольшого плана в одном контексте, `subagents` для большого или тяжёлого |
143
+ | `eda-plan-execute` | `subagents` / `main` / `auto` | Разово меняет, где выполняются фазы, поверх `plan-execute.mode` | `main` для обязательного выполнения основным агентом, `subagents` для изолированных фаз, `auto` для выбора по размеру плана |
142
144
  | `eda-plan-polish` | `threshold N`, `limit N` | Меняет gate и максимальное число итераций «проверка + исправление» | Для доводки ответственных планов перед `eda-plan-execute` |
143
145
  | `eda-manual-test` | `full` / `полная проверка`, `smoke` / `быстро` | Разово меняет глубину ручной проверки поверх `manual-test.depth` | `smoke` для короткой правки, `full` — когда нужно закрыть все области после плана |
144
146
  | `eda-review` | `subagents` / `main` | Разово меняет способ выполнения выбранных проверок поверх `review.execution` | `main` экономит контекст на частых локальных ревью; `subagents` сохраняет независимость ролей для ответственных изменений |
@@ -223,8 +225,8 @@ plan:
223
225
  # Определяет, как eda-plan принимает существенные решения.
224
226
  # autonomous | recommend_and_ask | ask_each_time
225
227
  decision_mode: recommend_and_ask
226
- # Задаёт стратегию тестов.
227
- # after_each_phase | tdd_each_phase | end_of_plan | ask_each_time
228
+ # Задаёт стратегию тестов и автоматических проверок.
229
+ # after_each_phase | phase_tests_final_checks | tdd_each_phase | end_of_plan | ask_each_time
228
230
  test_strategy: ask_each_time
229
231
  # Задаёт стратегию логирования.
230
232
  # debug_precise | standard | ask_each_time
@@ -398,7 +400,7 @@ discover-automations:
398
400
  - `aim.mode` — `automatic` самостоятельно выбирает безопасные ответы на рабочие вопросы; `manual` передаёт вопросы человеку. Явный режим в текущем вызове имеет приоритет.
399
401
  - `explore.strict` и `explore.decision_mode` — кросс-CLI ревью и способ выбора по исследовательским развилкам в `eda-explore`.
400
402
  - `plan.review` — изолированный цикл `eda-plan-polish` внутри `eda-plan`, ровно одна итерация полировки (`limit 1`); `plan.strict` независимо управляет кросс-CLI ревью.
401
- - `plan.size`, `plan.decision_mode`, `plan.test_strategy`, `plan.logging_strategy` — режим и структура работы `eda-plan`.
403
+ - `plan.size`, `plan.decision_mode`, `plan.test_strategy`, `plan.logging_strategy` — режим и структура работы `eda-plan`. Имя `test_strategy` сохранено для совместимости, но настройка управляет и тестами, и автоматическими проверками: `after_each_phase` запускает их после каждой фазы, `tdd_each_phase` сначала пишет тесты и после реализации запускает все проверки фазы, `phase_tests_final_checks` в фазе запускает только добавленные или изменённые ею тесты, а остальные проверки оставляет финалу, `end_of_plan` переносит тесты и автоматические проверки в конец плана.
402
404
  - `plan-review.threshold` — доля закрытых пунктов чек-листа для статуса `ready`, default `100`. Отдельных агентов у `plan-review` больше нет: проверку целиком делает один субагент.
403
405
  - `plan-polish.limit` — максимальное число итераций «проверка + исправление»; default `1`. Отдельного подтверждающего прохода нет: исправление проверяет ревью следующей итерации. Цикл останавливается раньше, если score перестал расти.
404
406
  - `plan-execute.mode` — где `eda-plan-execute` выполняет фазы: `subagents` — каждая фаза в отдельном изолированном субагенте с независимой проверкой, `main` — весь план одним контекстом без субагентов, `auto` — выбор по плану; default `auto`. Явный режим в вызове имеет приоритет.
package/lib/install.js CHANGED
@@ -447,19 +447,23 @@ const DECISION_MODE_CHOICES = [
447
447
  const TEST_STRATEGY_CHOICES = [
448
448
  {
449
449
  value: 'after_each_phase',
450
- name: 'Писать и запускать тесты после каждой фазы'
450
+ name: 'Писать тесты и запускать все проверки после каждой фазы'
451
+ },
452
+ {
453
+ value: 'phase_tests_final_checks',
454
+ name: 'Писать тесты в фазах, запускать только их, остальные проверки — в конце'
451
455
  },
452
456
  {
453
457
  value: 'tdd_each_phase',
454
- name: 'В каждой фазе сначала тесты, затем код'
458
+ name: 'В каждой фазе сначала тесты, затем код и все проверки фазы'
455
459
  },
456
460
  {
457
461
  value: 'end_of_plan',
458
- name: 'Писать тесты в конце плана отдельной фазой'
462
+ name: 'Писать тесты и запускать все проверки в конце плана'
459
463
  },
460
464
  {
461
465
  value: 'ask_each_time',
462
- name: 'Спрашивать стратегию тестов каждый раз'
466
+ name: 'Спрашивать стратегию тестов и проверок каждый раз'
463
467
  }
464
468
  ];
465
469
  const LOGGING_STRATEGY_CHOICES = [
@@ -782,7 +786,7 @@ export async function askSettings({
782
786
  ['explore', 'explore.decisionMode', settings.explore, 'decisionMode', 'Как принимать важные решения в eda-explore?', DECISION_MODE_CHOICES],
783
787
  ['plan', 'plan.size', settings.plan, 'size', 'Какой размер плана eda-plan использовать по умолчанию?', PLAN_SIZE_CHOICES],
784
788
  ['plan', 'plan.decisionMode', settings.plan, 'decisionMode', 'Как принимать важные решения в eda-plan?', DECISION_MODE_CHOICES],
785
- ['plan', 'plan.testStrategy', settings.plan, 'testStrategy', 'Какую стратегию тестов eda-plan использовать по умолчанию?', TEST_STRATEGY_CHOICES],
789
+ ['plan', 'plan.testStrategy', settings.plan, 'testStrategy', 'Какую стратегию тестов и проверок eda-plan использовать по умолчанию?', TEST_STRATEGY_CHOICES],
786
790
  ['plan', 'plan.loggingStrategy', settings.plan, 'loggingStrategy', 'Какую стратегию логирования eda-plan использовать по умолчанию?', LOGGING_STRATEGY_CHOICES],
787
791
  ['plan-review', 'planReview.threshold', settings.planReview, 'threshold', 'Какой порог готовности использовать в eda-plan-review?', PLAN_REVIEW_THRESHOLD_CHOICES],
788
792
  ['plan-polish', 'planPolish.limit', settings.planPolish, 'limit', 'Сколько итераций «проверка + исправление» разрешить eda-plan-polish?', PLAN_POLISH_LIMIT_CHOICES],
@@ -1228,7 +1232,7 @@ function migrateSettingsContent(content) {
1228
1232
  transfer(
1229
1233
  'plan.testStrategy',
1230
1234
  plan.test_strategy ?? legacyDefaults.test_strategy,
1231
- oneOf(['after_each_phase', 'tdd_each_phase', 'end_of_plan', 'ask_each_time']),
1235
+ oneOf(['after_each_phase', 'phase_tests_final_checks', 'tdd_each_phase', 'end_of_plan', 'ask_each_time']),
1232
1236
  value => { settings.plan.testStrategy = value; }
1233
1237
  );
1234
1238
  transfer(
@@ -1472,8 +1476,8 @@ plan:
1472
1476
  # Определяет, как eda-plan принимает существенные решения.
1473
1477
  # autonomous | recommend_and_ask | ask_each_time
1474
1478
  decision_mode: ${settings.plan.decisionMode}
1475
- # Задаёт стратегию тестов.
1476
- # after_each_phase | tdd_each_phase | end_of_plan | ask_each_time
1479
+ # Задаёт стратегию тестов и автоматических проверок.
1480
+ # after_each_phase | phase_tests_final_checks | tdd_each_phase | end_of_plan | ask_each_time
1477
1481
  test_strategy: ${settings.plan.testStrategy}
1478
1482
  # Задаёт стратегию логирования.
1479
1483
  # debug_precise | standard | ask_each_time
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gian-tiaga/eda",
3
- "version": "3.9.1",
3
+ "version": "3.10.0",
4
4
  "description": "Пакет скилов и специализированных агентов eda-* для Claude Code и Codex CLI",
5
5
  "type": "module",
6
6
  "bin": {
@@ -89,6 +89,7 @@ orhestra:
89
89
  - Для `eda-plan` добавь `decision_mode: autonomous`; значения `ask_each_time` для размера, тестов и логирования замени соответственно на `normal`, `after_each_phase`, `standard`, если текущий вызов не задаёт другое.
90
90
  - Для вопроса `eda-plan-execute` о месте выполнения выбирай текущую ветку, если пользователь явно не запросил ветку или worktree.
91
91
  - Не спрашивай о переходе между успешными шагами.
92
+ - `automatic` управляет ответами на рабочие вопросы и не разрешает менять выбранный режим исполнения оркестратора или вложенного скила. Не передавай от себя `auto` или `subagents` вместо заданного `main` из-за размера плана, diff или нехватки контекста.
92
93
 
93
94
  Автоматический режим не разрешает необратимые внешние действия, расширение scope, публикацию, расходы, удаление данных, ослабление проверок вне настроенной цепочки или изменение production/staging. Дефолтное `без проверок` у `eda-plan` не считай ослаблением: следующий обязательный `eda-plan-polish` выполняет проверку и доводку плана. Подтверждение из-за риска передай человеку; в неинтерактивной среде остановись с `blocked: нужен ответ пользователя`. Обратимые решения плана, включая БД/API-контракты и подтверждение готового плана, выбирай сам.
94
95
 
@@ -111,7 +112,7 @@ orhestra:
111
112
  2. В `main_propagated` добавь `main` к итоговому вводу только совместимых шагов `eda-plan-execute`, `eda-polish` и `eda-review`, если пользователь не задал этому шагу собственный режим. Не передавай его другим скилам: `eda-polish` уже передаст режим своему `eda-review`, а остальные продолжат по собственному контракту.
112
113
  3. В `subagents` каждый активный шаг, повтор и `on_failure.skill` запускай в отдельном изолированном субагенте. Передавай только рабочую директорию, имя скилла, итоговый ввод и пути к нужным артефактам. В Codex используй `spawn_agent` с `fork_turns: "none"` или точный аналог; в Claude Code — новый `Agent` с самодостаточным task-сообщением.
113
114
  4. В `main` и `main_propagated` выполняй контракт каждого активного шага, повтора и `on_failure.skill` сам в текущем контексте, строго последовательно. Не создавай для них верхнеуровневых субагентов; собственные правила вложенной делегации вызываемого скилла сохраняются.
114
- 5. Не переключай `$EXECUTION` автоматически. В `subagents` при недоступной изоляции остановись с `blocked: недоступна изоляция этапа`; в main-режимах блокируйся только тогда, когда обязательная вложенная делегация недоступна по контракту самого шага.
115
+ 5. Не переключай `$EXECUTION` автоматически. Зафиксируй режим и его источник до первого шага и сохраняй их после сжатия контекста. Размер задачи и нехватка контекста не разрешают делегацию вопреки выбранному режиму; сменить его может только новое прямое указание пользователя. В `subagents` при недоступной изоляции остановись с `blocked: недоступна изоляция этапа`; в main-режимах при технической невозможности продолжить сохрани прогресс и конкретный блокер без смены режима. Обязательная вложенная делегация по контракту самого шага сохраняется.
115
116
 
116
117
  ## Технические остановки субагентов
117
118
 
@@ -19,14 +19,21 @@ description: 'Создаёт понятный исполнимый план ре
19
19
  | `plan.review` | `true`, `false` | включение: `с ревью плана`, `с plan-review`; выключение: `без ревью плана`, `без plan-review` |
20
20
  | `plan.size` | `normal`, `short`, `ask_each_time` | `short`; обычный: `обычный план`, `не short` |
21
21
  | `plan.decision_mode` | `autonomous`, `recommend_and_ask`, `ask_each_time` | `autonomous`, `recommend_and_ask`, `ask_each_time`, «сам выбирай», «рекомендуй и спрашивай», «спрашивай всё» |
22
- | `plan.test_strategy` | `after_each_phase`, `tdd_each_phase`, `end_of_plan`, `ask_each_time` | явное указание стратегии тестов |
22
+ | `plan.test_strategy` | `after_each_phase`, `phase_tests_final_checks`, `tdd_each_phase`, `end_of_plan`, `ask_each_time` | явное указание стратегии тестов и проверок |
23
23
  | `plan.logging_strategy` | `debug_precise`, `standard`, `ask_each_time` | явное указание стратегии логирования |
24
24
 
25
25
  Если итоговое значение `plan.size`, `plan.test_strategy` или `plan.logging_strategy` равно `ask_each_time`, задай блокирующий вопрос, кроме случая, когда пользователь уже выбрал значение в текущем сообщении.
26
26
 
27
- Варианты вопросов: размер плана — `normal` / `short`; тесты — `after_each_phase` / `tdd_each_phase` / `end_of_plan`; логирование — `debug_precise` / `standard`.
27
+ Варианты вопросов: размер плана — `normal` / `short`; тесты и проверки — `after_each_phase` / `phase_tests_final_checks` / `tdd_each_phase` / `end_of_plan`; логирование — `debug_precise` / `standard`.
28
28
 
29
- `test_strategy` обязан менять план: `tdd_each_phase` начинает каждую фазу с тестов, `after_each_phase` добавляет тесты после реализации каждой фазы, `end_of_plan` выносит тесты в отдельную финальную фазу. `logging_strategy` обязан отражаться в алгоритме, фазах и разделе `Логирование`.
29
+ Имя `test_strategy` сохраняется для совместимости, но настройка управляет и написанием тестов, и моментом запуска автоматических проверок. Она обязана менять план:
30
+
31
+ - `tdd_each_phase` начинает каждую фазу с тестов, затем выполняет реализацию и запускает написанные тесты вместе со всеми применимыми проверками фазы;
32
+ - `after_each_phase` сначала выполняет реализацию, затем добавляет тесты и запускает их вместе со всеми применимыми проверками фазы;
33
+ - `phase_tests_final_checks` добавляет тесты в ту же фазу, что и реализацию; в `Проверке` фазы оставляет только точечный запуск добавленных или изменённых в ней тестов, а полный набор тестов, линтеры, typecheck, static analysis и остальные обязательные проверки переносит в финальную проверку всего плана;
34
+ - `end_of_plan` выносит написание тестов и первый запуск всех автоматических проверок в отдельную финальную фазу; предыдущие фазы подтверждаются только указанными неавтоматическими критериями готовности.
35
+
36
+ `logging_strategy` обязан отражаться в алгоритме, фазах и разделе `Логирование`.
30
37
 
31
38
  `без проверок` одновременно устанавливает `plan.review: false` и `plan.strict: false`. `plan.review` и `plan.strict` независимы.
32
39
 
@@ -120,7 +127,7 @@ status: <draft | meta-reviewed | reviewed>
120
127
  reviewer: <pending | none | claude | codex>
121
128
  plan_review: <docs/artifacts/plan-reviews/... | none>
122
129
  plan_review_fix: <docs/artifacts/plan-review-fixes/... | none>
123
- test_strategy: <after_each_phase | tdd_each_phase | end_of_plan>
130
+ test_strategy: <after_each_phase | phase_tests_final_checks | tdd_each_phase | end_of_plan>
124
131
  logging_strategy: <debug_precise | standard>
125
132
  sources:
126
133
  rules: <путь или —>
@@ -146,6 +153,17 @@ sources:
146
153
  ### API и внешние контракты
147
154
  Если не меняются: `Не затрагивается`. Иначе метод и путь, auth/permissions, request/query/body, response, ошибки и status codes, события, очереди и внешние сервисы.
148
155
 
156
+ ### Интерфейс и дизайн
157
+ Если интерфейс не меняется: `Не затрагивается`. Иначе опиши состав и организацию затронутых страниц или экранов: основные области и элементы, их расположение, назначение и взаимосвязи. Используй заданные макеты или референсы; если их нет — текущий дизайн проекта. Формат выбирай по содержанию: свободный текст или таблица `Страница | Описание дизайна`.
158
+
159
+ Не повторяй здесь целевой алгоритм и содержание фаз. Поведение упоминай только тогда, когда без него нельзя понять состав или организацию интерфейса.
160
+
161
+ ### Консольные команды
162
+ Если команды не меняются: `Не затрагивается`. Иначе перечисли точки входа и команды в таблице:
163
+
164
+ | Команда | Аргументы и опции | Назначение |
165
+ |---|---|---|
166
+
149
167
  ## Фазы выполнения
150
168
 
151
169
  ### 1. <Название фазы>
@@ -158,8 +176,8 @@ sources:
158
176
  Проверка:
159
177
  - команда или критерий готовности.
160
178
 
161
- ## Тесты
162
- Стратегия и сценарии по поведению — в одном месте, а не внутри каждой фазы.
179
+ ## Тесты и проверки
180
+ Стратегия, сценарии по поведению, фазовые и финальные команды — в одном месте, а не дублируются внутри каждой фазы. В поле `Проверка` фазы остаётся только применимый к ней запуск или критерий согласно `test_strategy`.
163
181
 
164
182
  ## Логирование
165
183
  Стратегия, уровни, обязательные поля и что писать запрещено.
@@ -183,7 +201,7 @@ sources:
183
201
 
184
202
  Quality gate перед показом на подтверждение, перед сохранением и после каждой включённой проверки:
185
203
 
186
- - есть `Целевой алгоритм` и `Контракты реализации` с обоими подразделами;
204
+ - есть `Целевой алгоритм` и `Контракты реализации` с подразделами `Данные и БД`, `API и внешние контракты`, `Интерфейс и дизайн` и `Консольные команды`;
187
205
  - применимые business-карточки выбраны после определения scope, записаны в `sources.business` и отражены в критериях приёмки;
188
206
  - каждый отсутствующий, неполный или расширяемый пункт целевого поведения покрыт отдельной задачей `Дополнить бизнесовые правила` до зависимой реализации; для чисто технических изменений такая задача не добавлена;
189
207
  - план строго следует `docs/rules.md` и `docs/arch.md`, а также применимым reference-карточкам; там, где нужно другое поведение, есть отдельный пункт на изменение самого документа до зависимой реализации;
@@ -22,13 +22,15 @@ plan-execute:
22
22
 
23
23
  Текст рядом с вызовом — главный вход. Разбери тему, путь к файлу, ограничения, прямые указания и режим:
24
24
 
25
- - `subagents`, `субагенты`, `по фазам`, `изолированно` → `$MODE=subagents`;
25
+ - `subagents`, `субагенты`, `изолированно` → `$MODE=subagents`;
26
26
  - `main`, `один`, `одним контекстом`, `без субагентов`, `сам` → `$MODE=main`;
27
27
  - `auto`, `авто`, `автоматически` → `$MODE=auto`;
28
28
  - без явного режима → `$MODE=plan-execute.mode` из валидных настроек, иначе `$MODE=auto`.
29
29
 
30
30
  Режим из вызова важнее настройки, настройка важнее умолчания.
31
31
 
32
+ Считай override только прямым указанием способа выполнения этого скила. «По фазам» описывает порядок работы, а `automatic` оркестратора и слово «автоматически» без явного выбора режима исполнения не задают `$MODE=auto`.
33
+
32
34
  Если входа достаточно, продолжай без вопроса. `AskUserQuestion` задавай только если входа нет, он противоречивый, найдено несколько равных планов или есть риск выполнить не тот план.
33
35
 
34
36
  ## Режимы выполнения
@@ -41,7 +43,9 @@ plan-execute:
41
43
 
42
44
  `auto` выбирай `main`, только когда весь план реально помещается в один контекст: немного фаз, небольшой объём задач и файлов, одна область кода, нет тяжёлых по контексту фаз вроде крупного рефакторинга, миграции данных или множества карточек. Иначе — `subagents`; при сомнении тоже `subagents`. Решение и его причину запиши в журнал.
43
45
 
44
- В `main` следи за собственным контекстом. Если план оказался тяжелее оценки или контекст заканчивается, переключи оставшиеся фазы на `subagents`, запиши переключение в журнал и продолжи с текущей фазы.
46
+ Выбранный режим обязателен: `main` из вызова, `plan-execute.mode` или переданного оркестратором override запрещает делегацию независимо от размера плана. Критерии объёма выше применяй только при `$MODE=auto`; не переоценивай по ним явно заданный режим. После выбора в `auto` итоговый режим также зафиксирован. Менять его можно только по новому прямому указанию пользователя; решение оркестратора в `automatic` не заменяет такого указания.
47
+
48
+ В `main` не запускай `spawn_agent`, `Agent`, аналогичные инструменты или отдельный CLI для делегирования подготовки, фаз и проверок. При нехватке контекста сохрани текущую фазу, незавершённую работу, результаты проверок и режим в журнале; после сжатия контекста продолжай основным агентом с этого места. Если продолжить в выбранном режиме технически невозможно, сохрани `status: blocked` с причиной. Размер плана, желание ускорить работу и предположение о нехватке контекста сами по себе не являются блокером или разрешением сменить режим.
45
49
 
46
50
  ## Главные правила
47
51
 
@@ -77,13 +81,24 @@ plan-execute:
77
81
 
78
82
  ### 3. Прочитать план и проверить фазы
79
83
 
80
- Прочитай `$PLAN_FILE`. Для каждой фазы извлеки цель, что сделать, результат и проверку. До запуска убедись, что у каждой фазы есть проверяемый результат и команда или критерий проверки.
84
+ Прочитай `$PLAN_FILE`, включая `test_strategy`. Для каждой фазы извлеки цель, что сделать, результат и проверку. До запуска убедись, что у каждой фазы есть проверяемый результат и команда или критерий проверки.
85
+
86
+ `test_strategy` управляет не только написанием тестов, но и фазовыми проверками:
87
+
88
+ | Стратегия | Фазовый прогон |
89
+ |---|---|
90
+ | `tdd_each_phase` | сначала написать тесты, после реализации запустить их и все применимые проверки фазы |
91
+ | `after_each_phase` | после реализации написать тесты и запустить их и все применимые проверки фазы |
92
+ | `phase_tests_final_checks` | написать тесты в фазе, но запустить только добавленные или изменённые этой фазой тесты; остальные проверки отложить |
93
+ | `end_of_plan` | до финальной фазы использовать только указанные неавтоматические критерии готовности; тесты и автоматические проверки не запускать |
94
+
95
+ Полный набор тестов и обязательных проверок всё равно запускается в финале. Если план не соответствует своей стратегии, верни его в `eda-plan` или `eda-plan-polish`, а не меняй стратегию при выполнении.
81
96
 
82
97
  Если фаза не описывает проверяемый результат или её проверку нечем выполнить, не достраивай смысл молча: через `AskUserQuestion` предложи вернуть план в `eda-plan` или `eda-plan-polish`.
83
98
 
84
99
  ### 4. Определить режим и инициализировать прогресс
85
100
 
86
- Если `$MODE=auto`, сравни разобранные фазы с критериями из «Режимы выполнения» и зафиксируй итоговый режим `main` или `subagents` до первой фазы. Дальше действуй по зафиксированному режиму.
101
+ Если `$MODE=auto`, сравни разобранные фазы с критериями из «Режимы выполнения» и зафиксируй итоговый режим `main` или `subagents` до первой фазы. Дальше действуй по зафиксированному режиму. Перед выполнением коротко сообщи режим и его источник: вызов, override оркестратора, `plan-execute.mode` или default; сохрани их в журнале. Для `auto` также запиши причину выбора. При продолжении после сжатия контекста восстанови зафиксированный режим из журнала, если пользователь не изменил его прямо.
87
102
 
88
103
  Создай `$EXECUTION_FILE` по пути `docs/artifacts/executions/{YYYY-MM-DD}_{HH-MM}_{slug}.md`. В `$PLAN_FILE` добавь или актуализируй один раздел `## Прогресс выполнения` со ссылкой на журнал и списком фаз.
89
104
 
@@ -115,7 +130,7 @@ current_phase: <номер>
115
130
 
116
131
  ### 5. Запускать изолированных субагентов
117
132
 
118
- Весь этап — только для `subagents`. В `main` пропусти его и выполняй фазы сам; переключился на `subagents` — вернись к нему.
133
+ Весь этап — только для `subagents`. В `main` пропусти его и выполняй фазы сам.
119
134
 
120
135
  В Codex используй `spawn_agent` с `fork_turns: "none"`, в Claude Code — новый `Agent` с самодостаточным сообщением. Если изоляция или субагенты недоступны, остановись: `blocked: недоступно изолированное выполнение`. Работу основным агентом не делай и CLI-fallback не добавляй.
121
136
 
@@ -132,7 +147,7 @@ current_phase: <номер>
132
147
 
133
148
  Ожидание слота и один технический retry не считаются попыткой исправления фазы и не расходуют её лимит сходимости.
134
149
 
135
- Каждому исполнителю фазы передай: рабочую директорию, `$PLAN_FILE`, номер и полный текст фазы, краткие результаты завершённых фаз, пути к `docs/rules.md`, `docs/arch.md`, `docs/business.md` и `docs/references.md`, ограничения пользователя, критерии проверки фазы и запрет коммитить и менять план и журнал.
150
+ Каждому исполнителю фазы передай: рабочую директорию, `$PLAN_FILE`, номер и полный текст фазы, `test_strategy`, краткие результаты завершённых фаз, пути к `docs/rules.md`, `docs/arch.md`, `docs/business.md` и `docs/references.md`, ограничения пользователя, критерии проверки фазы и запрет коммитить и менять план и журнал. Явно передай разрешённый фазовый прогон из таблицы стратегии; не разрешай запускать отложенные ею проверки досрочно.
136
151
 
137
152
  Требуй YAML-результат:
138
153
 
@@ -169,7 +184,7 @@ questions: [<вопросы или пусто>]
169
184
 
170
185
  ### 7. Проверять каждую фазу
171
186
 
172
- В `subagents` после `completed` запусти нового изолированного субагента-проверяющего. Он не меняет файлы, целиком читает план, `docs/rules.md` и `docs/arch.md`, читает только применимые карточки, выполняет все проверки фазы и подтверждает критерии результата.
187
+ В `subagents` после `completed` запусти нового изолированного субагента-проверяющего. Он не меняет файлы, целиком читает план, `docs/rules.md` и `docs/arch.md`, читает только применимые карточки, выполняет разрешённый стратегией фазовый прогон и подтверждает критерии результата. При `phase_tests_final_checks` он запускает только тесты, добавленные или изменённые в этой фазе. При `end_of_plan` он не запускает автоматические команды и проверяет только указанные неавтоматические критерии готовности.
173
188
 
174
189
  ```yaml
175
190
  status: passed | failed | blocked
@@ -185,13 +200,13 @@ references_read: [<пути или пусто>]
185
200
 
186
201
  При `failed` передай полный результат исполнителю этой фазы, поручи исправить подтверждённые проблемы и запусти нового проверяющего. Основной агент код не чинит и контекст прежнего проверяющего не переиспользует.
187
202
 
188
- В `main` сам выполни все проверки фазы и сверь результат с критериями плана, а не с собственным впечатлением. Падение исправляй и повторяй проверку заново целиком.
203
+ В `main` сам выполни разрешённый стратегией фазовый прогон и сверь результат с критериями плана, а не с собственным впечатлением. Для `phase_tests_final_checks` запускай только добавленные или изменённые текущей фазой тесты; для `end_of_plan` не запускай автоматические команды до финальной фазы. Падение исправляй и повторяй проверку заново целиком.
189
204
 
190
205
  При `passed` отметь фазу завершённой и только тогда переходи к следующей.
191
206
 
192
207
  ### 8. Финальная проверка
193
208
 
194
- После всех фаз прогони полный набор тестов, линтеров, typecheck, static analysis и других обязательных команд проекта. В `subagents` это делает отдельный новый субагент: он только проверяет, целиком читает план, `docs/rules.md` и `docs/arch.md` и выбирает карточки итогового изменённого поведения. В `main` тот же полный набор запускает основной агент.
209
+ После всех фаз прогони полный набор тестов, линтеров, typecheck, static analysis и других обязательных команд проекта. Для `phase_tests_final_checks` и `end_of_plan` это первый полный прогон; он обязан включить созданные по фазам и существующие тесты проекта вместе со всеми отложенными проверками. Для `after_each_phase` и `tdd_each_phase` это итоговый повтор полного набора после интеграции всех фаз. В `subagents` это делает отдельный новый субагент: он только проверяет, целиком читает план, `docs/rules.md` и `docs/arch.md` и выбирает карточки итогового изменённого поведения. В `main` тот же полный набор запускает основной агент.
195
210
 
196
211
  Падение из-за сделанных изменений сопоставь с фазами и исправь по порядку плана: в `subagents` передай каждую группу исполнителю соответствующей фазы. Затем повтори всю финальную проверку целиком. Чужую или несвязанную поломку зафиксируй и вынеси вопросом, если без решения нельзя завершить план. Запрещено делать проверки зелёными через подавление ошибок, игноры, исключения, ослабление конфигов или изменение команд проверки.
197
212
 
@@ -205,7 +220,7 @@ references_read: [<пути или пусто>]
205
220
 
206
221
  - В `subagents` самому менять код, тесты, миграции, конфиги и зависимости или самому запускать проверки проекта.
207
222
  - В `subagents` дробить фазу между исполнителями, давать одному исполнителю несколько фаз, давать субагентам историю диалога или разрешать менять план и журнал.
208
- - Выполнять большой или тяжёлый по контексту план в `main`, если режим не задан явно.
223
+ - Самостоятельно менять зафиксированный режим или применять критерии `auto` к `main` из вызова, настроек либо override оркестратора.
209
224
  - Запускать следующую фазу до успешной проверки текущей.
210
225
  - Додумывать недостающее решение вместо вопроса.
211
226
  - Подавлять ошибки проверок, ослаблять правила или менять команды ради зелёного результата.
@@ -42,7 +42,7 @@ Read-only проверка одного плана по списку ниже.
42
42
  | 5 | Все существенные решения имеют источник подтверждения: ответ пользователя, research или `autonomous` с причиной |
43
43
  | 6 | В плане не осталось решений, которые придётся принимать исполнителю |
44
44
  | 7 | Пакеты, библиотеки и сервисы имеют конкретные версии или ссылку на существующий lock |
45
- | 8 | Есть `Целевой алгоритм` и `Контракты реализации` с подразделами `Данные и БД` и `API и внешние контракты` |
45
+ | 8 | Есть `Целевой алгоритм` и `Контракты реализации` с подразделами `Данные и БД`, `API и внешние контракты`, `Интерфейс и дизайн` и `Консольные команды` |
46
46
  | 9 | Ни один факт не описан в двух разделах |
47
47
  | 10 | В плане нет сигнатур чужих методов, приведений типов, формы классов, внутренних вычислений без контрактного смысла и пересказа кодовых примеров карточек; формулы, задающие обязательное поведение, допустимы |
48
48
  | 11 | У каждой фазы есть цель, что сделать, результат и проверка |
@@ -15,6 +15,8 @@ description: 'Итеративно ревьюит и исправляет изм
15
15
 
16
16
  ## Правила
17
17
 
18
+ Зафиксируй режим и его источник до первой итерации. Выбор из вызова, override оркестратора или `review.execution` обязателен на весь цикл: большой diff, число проверок и нехватка контекста не разрешают переход к субагентам. Сохраняй режим и прогресс после сжатия контекста; если продолжить технически невозможно, верни конкретный блокер без смены режима. Менять режим можно только по новому прямому указанию пользователя.
19
+
18
20
  1. В `main` основной агент сам выполняет установленные контракты `eda-review` и `eda-fix-by-review` в текущем контексте. Не запускай для них верхнеуровневых или leaf-субагентов и не заменяй их отдельным CLI.
19
21
  2. В `subagents` каждый вызов `eda-review` и `eda-fix-by-review` запускай отдельным изолированным субагентом. В Claude Code используй `Agent`, в Codex — `spawn_agent` с `fork_turns: "none"`; не оставляй `fork_turns` по умолчанию и не используй `"all"`. Если нативные субагенты недоступны, остановись без CLI-fallback.
20
22
  3. Успех требует одновременно: полный review со статусом `reviewed` или `reviewed-with-warnings`, `result: clean` и ноль находок. Score — только справочное число, условием завершения он не является.
@@ -50,7 +52,7 @@ description: 'Итеративно ревьюит и исправляет изм
50
52
  ```text
51
53
  Используй eda-review для <TARGET_CONTEXT>.
52
54
  План: <PLAN_FILE | none>.
53
- Режим исполнения review: <main | subagents | из настроек>.
55
+ Режим исполнения review: <$EXECUTION: main | subagents>.
54
56
  Overrides проверок и моделей: <из запроса | none>.
55
57
  Ранее отклонённые находки: <предыдущий review file и fix report | none>.
56
58
  Верни путь к файлу, status, result, score, находки и coverage.
@@ -28,6 +28,8 @@ description: 'Проводит полное read-only ревью diff, ветк
28
28
 
29
29
  Default — `subagents`. При неизвестном или отсутствующем значении используй default и добавь предупреждение. Сначала выбери `$EXECUTION` по явному режиму из текущего сообщения, затем по настройке, иначе по default.
30
30
 
31
+ Зафиксируй режим и его источник до первой проверки. Выбор из вызова, override оркестратора или `review.execution` обязателен: большой diff, число проверок и нехватка контекста не разрешают переход к субагентам. Сохраняй режим и прогресс после сжатия контекста; если продолжить технически невозможно, верни конкретный блокер без смены режима. Менять режим можно только по новому прямому указанию пользователя. `auto` у отдельной проверки ниже определяет её применимость и не меняет `$EXECUTION`.
32
+
31
33
  Допустимые режимы:
32
34
 
33
35
  - `always` — запускать при каждом ревью;