@gian-tiaga/eda 3.3.1 → 3.5.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
@@ -51,11 +51,11 @@ eda update-all ~/Code
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 перестаёт расти, останавливается и восстанавливает лучшую версию, а не последнюю. По умолчанию две review-итерации. Кросс-CLI strict не используется | `docs/artifacts/plan-reviews/`, `docs/artifacts/plan-review-fixes/` |
54
- | `eda-plan-execute` | Управляет выполнением плана по фазам. Каждую фазу целиком выполняет отдельный изолированный субагент: он читает план, правила, архитектуру и только business/reference-карточки затронутого поведения и компонентов. Фазы проходят строго последовательно и принимаются независимыми проверяющими. Основной агент отмечает подтверждённые задачи и ведёт журнал | `docs/artifacts/executions/` |
54
+ | `eda-plan-execute` | Управляет выполнением плана по фазам в режиме `subagents`, `single` или `auto`. В `subagents` каждую фазу целиком выполняет отдельный изолированный субагент: он читает план, правила, архитектуру и только business/reference-карточки затронутого поведения и компонентов. Фазы проходят строго последовательно и принимаются независимыми проверяющими. В `single` весь план по тем же правилам выполняет и проверяет основной агент в одном контексте, а `auto` выбирает режим по плану. Отметки подтверждённых задач и журнал ведёт основной агент | `docs/artifacts/executions/` |
55
55
  | `eda-fix` | Делает обычные фиксы по короткому контексту, баг-репорту или плану. Перед правками читает правила, архитектуру и только применимые карточки, добавляет нужные тесты, прогоняет проверки и сохраняет историю правок | `docs/artifacts/fixes/` |
56
56
  | `eda-review` | Оркестрирует отдельные read-only проверки корректности, архитектуры, правил, references, business-правил, плана, качества, тестов, безопасности, производительности, frontend/UI/UX, API, БД, документации и предыдущих ревью. Сохраняет только доказанные дефекты, которые обязательно исправить; косметические и спекулятивные предложения отбрасывает. Любая находка даёт `changes-required`, а чистое ревью — `clean` и 100/100. Без аргументов ревьюит `git diff HEAD` | `docs/artifacts/reviews/` |
57
57
  | `eda-fix-by-review` | Применяет все находки из ревью с учётом правил, архитектуры и применимых карточек. Спрашивает только при неоднозначности, конфликте, расширении scope или рискованном действии. В конце ссылается на отчёт прямо в файле ревью | `docs/artifacts/review-fixes/` |
58
- | `eda-manual-test` | Делает ручную smoke/acceptance-проверку после изменений: основной чеклист строит по выполненной задаче и связанному плану/issue/review/fix-отчёту, затем сверяет фактический diff. Применимая business-карточка может добавить только относящийся к задаче инвариант или сценарий; несвязанные карточки не загружаются. Не правит код, не пишет автотесты и не коммитит | `docs/artifacts/manual-tests/` |
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
61
  | `eda-commit` | Работает как лёгкий оркестратор одного `haiku` / `gpt-5.6-luna` агента: тот сам собирает git-контекст, делит выбранный состав на логические коммиты, пишет сообщения, точечно коммитит и выполняет явно заданные push/PR/merge-действия. С явным контекстом охватывает указанный состав; без контекста берёт все tracked-изменения и содержательные untracked-файлы, кроме очевидных кэшей и локальных служебных артефактов. В Claude Code сам оркестратор закреплён за `haiku`; в Codex остаётся на активной модели сессии из-за отсутствия per-skill override. При вероятном секрете агент блокируется до индексации затронутой группы. После любого push всегда возвращает ссылку — на существующий PR или на его создание — и спрашивает, создавать ли PR, если его нет. Если продолжение не задано, предлагает применимые варианты | (git, опционально GitHub PR) |
@@ -124,6 +124,8 @@ eda update-all ~/Code
124
124
 
125
125
  У некоторых скилов есть флаг `strict` — он включает дополнительные тяжёлые проверки. Передаётся как часть запроса агенту, например: `eda-explore strict <тема>`. Также strict можно включить отдельно в `docs/settings.yaml`, например через `explore.strict: true`. У `eda-review` вместо общего режима каждая проверка имеет собственные `mode` и `model`.
126
126
 
127
+ У `eda-plan-execute` есть режимы `subagents` / `single` / `auto`. Режим можно разово указать в вызове, например `eda-plan-execute single docs/artifacts/plans/....md`; без него используется `plan-execute.mode` из настроек, а без настроек — `auto`.
128
+
127
129
  У `eda-aim` есть режимы `automatic` / `manual`. В автоматическом основной агент сам отвечает на безопасные рабочие вопросы по рекомендации субагента и фактам проекта, в ручном передаёт их человеку. Режим можно разово указать в вызове; без него используется `aim.mode` из настроек. Точный список новых целей перед записью в `docs/artifacts/aims/` всё равно один раз подтверждает человек.
128
130
 
129
131
  Скилы, которых нет в таблице ниже, не поддерживают эти флаги. Набор проверок `eda-review` отдельно управляется через `review.agents`.
@@ -135,7 +137,9 @@ eda update-all ~/Code
135
137
  | `eda-explore` | `strict` | После сохранения отчёта отдаёт его соседнему CLI (Claude → Codex или наоборот) на критическое ревью конкретности, фактов, развилок, рисков и версий; затем доправляет отчёт по замечаниям | Серьёзные исследования, которые лягут в основу больших решений; когда хочется второго мнения от другой модели/среды |
136
138
  | `eda-plan` | `strict`, `без ревью плана`, `без проверок` | `strict` независимо включает кросс-CLI проверку; `без ревью плана` отключает встроенный review/fix; `без проверок` отключает оба вида ревью | Когда нужно разделить создание плана и его последующую полировку |
137
139
  | `eda-plan-review` | `threshold N` | Разово меняет долю закрытых пунктов, при которой план считается готовым | Для самостоятельного аудита готового плана |
140
+ | `eda-plan-execute` | `subagents` / `single` / `auto` | Разово меняет, где выполняются фазы, поверх `plan-execute.mode` | `single` для небольшого плана в одном контексте, `subagents` для большого или тяжёлого |
138
141
  | `eda-plan-polish` | `threshold N`, `limit N` | Меняет gate и максимальное число подтверждающих review-итераций | Для доводки ответственных планов перед `eda-plan-execute` |
142
+ | `eda-manual-test` | `full` / `полная проверка`, `smoke` / `быстро` | Разово меняет глубину ручной проверки поверх `manual-test.depth` | `smoke` для короткой правки, `full` — когда нужно закрыть все области после плана |
139
143
 
140
144
  ---
141
145
 
@@ -229,6 +233,18 @@ plan-polish:
229
233
  # Максимальное число подтверждающих review-итераций.
230
234
  limit: 2
231
235
 
236
+ plan-execute:
237
+ # Где eda-plan-execute выполняет фазы плана.
238
+ # subagents — каждая фаза в отдельном субагенте, single — весь план одним контекстом, auto — решает по плану.
239
+ mode: auto
240
+
241
+ manual-test:
242
+ # Глубина ручной проверки в eda-manual-test.
243
+ # full — закрыть все применимые области: API, база, консольные команды, интерфейс, алгоритмы, фон, права, конфигурацию, логи и регрессии рядом.
244
+ # smoke — только запуск и основной сценарий изменённой области.
245
+ # full | smoke | ask_each_time
246
+ depth: full
247
+
232
248
  review:
233
249
  # Каждая проверка имеет собственный режим запуска и модели для обеих сред.
234
250
  agents:
@@ -377,6 +393,8 @@ discover-automations:
377
393
  - `plan.size`, `plan.decision_mode`, `plan.test_strategy`, `plan.logging_strategy` — режим и структура работы `eda-plan`.
378
394
  - `plan-review.threshold` — доля закрытых пунктов чек-листа для статуса `ready`, default `100`. Отдельных агентов у `plan-review` больше нет: проверку целиком делает один субагент.
379
395
  - `plan-polish.limit` — максимальное число подтверждающих review-итераций; default `2`. Цикл останавливается раньше, если score перестал расти.
396
+ - `plan-execute.mode` — где `eda-plan-execute` выполняет фазы: `subagents` — каждая фаза в отдельном изолированном субагенте с независимой проверкой, `single` — весь план одним контекстом без субагентов, `auto` — выбор по плану; default `auto`. Явный режим в вызове имеет приоритет.
397
+ - `manual-test.depth` — глубина ручной проверки в `eda-manual-test`: `full` — закрыть все применимые области матрицы покрытия, `smoke` — только запуск и основной сценарий изменённой области, `ask_each_time` — спрашивать каждый раз; default `full`. Явная глубина в вызове имеет приоритет.
380
398
  - `review.agents.<check>.mode` — запускать проверку всегда, автоматически по контексту или отключить.
381
399
  - `review.agents.<check>.model.claude` и `.codex` — модель конкретной проверки в соответствующей среде.
382
400
  - `eda-review` не делит находки по обязательности: каждый принятый пункт требует исправления, а предложения без доказанного практического дефекта отбрасываются. Score остаётся экспертной оценкой серьёзности; любая находка блокирует `clean` независимо от score.
@@ -438,7 +456,7 @@ plan-polish = специализированный plan-review ─> plan-review-
438
456
  discover-automations может запускаться от review, fix-by-review или fix.
439
457
  ```
440
458
 
441
- `eda-manual-test` обычно ставится после `eda-plan-execute`, `eda-fix` или `eda-fix-by-review`, чтобы руками проверить API/UI перед ревью или коммитом.
459
+ `eda-manual-test` обычно ставится после `eda-plan-execute`, `eda-fix` или `eda-fix-by-review`, чтобы руками проверить API, базу, консольные команды, интерфейс и алгоритмы перед ревью или коммитом.
442
460
 
443
461
  Использовать всю цепочку не обязательно — каждый скил самодостаточен. Для полного прохода одной задачи можно вызвать `eda-orhestra automatic <задача>` или `eda-orhestra manual <задача>`. Разовые варианты: `eda-orhestra automatic без полировки плана <задача>`, `eda-orhestra полировка кода 2 итерации <задача>`, `eda-orhestra без ручных тестов <задача>`. Постоянный порядок и аргументы задаются в `orhestra.steps`. Новый проект можно начать с `eda-new-project`; существующий — с `eda-prepare-ai`, `eda-roadmap`, `eda-explore`, или сразу с `eda-plan-execute` на готовом плане, или просто `eda-commit`, когда правки уже сделаны. Для параллельной работы есть `eda-worktree`, а для возврата ветки из worktree в текущую ветку — `eda-merge-worktree`.
444
462
 
package/lib/install.js CHANGED
@@ -274,6 +274,12 @@ const DEFAULT_SETTINGS = {
274
274
  planPolish: {
275
275
  limit: 2
276
276
  },
277
+ planExecute: {
278
+ mode: 'auto'
279
+ },
280
+ manualTest: {
281
+ depth: 'full'
282
+ },
277
283
  review: {
278
284
  agents: DEFAULT_REVIEW_AGENTS
279
285
  },
@@ -291,6 +297,8 @@ const SETTINGS_SECTION_NAMES = [
291
297
  'plan',
292
298
  'plan-review',
293
299
  'plan-polish',
300
+ 'plan-execute',
301
+ 'manual-test',
294
302
  'review',
295
303
  'send-review',
296
304
  'discover-automations'
@@ -364,6 +372,20 @@ const PLAN_POLISH_LIMIT_CHOICES = [1, 2, 3].map(value => ({
364
372
  value,
365
373
  name: `${value} ${value === 1 ? 'итерация' : value < 5 ? 'итерации' : 'итераций'}`
366
374
  }));
375
+ const PLAN_EXECUTE_MODE_CHOICES = [
376
+ {
377
+ value: 'auto',
378
+ name: 'Решать по плану: один контекст для простого плана, субагенты для остальных'
379
+ },
380
+ {
381
+ value: 'subagents',
382
+ name: 'Каждую фазу выполнять отдельным изолированным субагентом'
383
+ },
384
+ {
385
+ value: 'single',
386
+ name: 'Выполнять весь план одним контекстом без субагентов'
387
+ }
388
+ ];
367
389
  const PLAN_SIZE_CHOICES = [
368
390
  {
369
391
  value: 'normal',
@@ -378,6 +400,20 @@ const PLAN_SIZE_CHOICES = [
378
400
  name: 'Спрашивать размер плана каждый раз'
379
401
  }
380
402
  ];
403
+ const MANUAL_TEST_DEPTH_CHOICES = [
404
+ {
405
+ value: 'full',
406
+ name: 'Полная проверка всех областей: API, база, консоль, интерфейс, алгоритмы'
407
+ },
408
+ {
409
+ value: 'smoke',
410
+ name: 'Только smoke: запуск и основной сценарий изменённой области'
411
+ },
412
+ {
413
+ value: 'ask_each_time',
414
+ name: 'Спрашивать глубину проверки каждый раз'
415
+ }
416
+ ];
381
417
  const DECISION_MODE_CHOICES = [
382
418
  {
383
419
  value: 'recommend_and_ask',
@@ -715,7 +751,9 @@ export async function askSettings({
715
751
  ['plan', 'plan.testStrategy', settings.plan, 'testStrategy', 'Какую стратегию тестов eda-plan использовать по умолчанию?', TEST_STRATEGY_CHOICES],
716
752
  ['plan', 'plan.loggingStrategy', settings.plan, 'loggingStrategy', 'Какую стратегию логирования eda-plan использовать по умолчанию?', LOGGING_STRATEGY_CHOICES],
717
753
  ['plan-review', 'planReview.threshold', settings.planReview, 'threshold', 'Какой порог готовности использовать в eda-plan-review?', PLAN_REVIEW_THRESHOLD_CHOICES],
718
- ['plan-polish', 'planPolish.limit', settings.planPolish, 'limit', 'Сколько review-итераций разрешить eda-plan-polish?', PLAN_POLISH_LIMIT_CHOICES]
754
+ ['plan-polish', 'planPolish.limit', settings.planPolish, 'limit', 'Сколько review-итераций разрешить eda-plan-polish?', PLAN_POLISH_LIMIT_CHOICES],
755
+ ['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]
719
757
  ];
720
758
  for (const [section, key, target, property, message, choices] of scalarPrompts) {
721
759
  if (!requestedSections.has(section) || !shouldAsk(key)) continue;
@@ -1149,6 +1187,22 @@ function migrateSettingsContent(content) {
1149
1187
  const planPolish = objectValue(raw['plan-polish']);
1150
1188
  transfer('planPolish.limit', planPolish.limit, positiveInt, value => { settings.planPolish.limit = value; });
1151
1189
 
1190
+ const planExecute = objectValue(raw['plan-execute']);
1191
+ transfer(
1192
+ 'planExecute.mode',
1193
+ planExecute.mode,
1194
+ oneOf(['subagents', 'single', 'auto']),
1195
+ value => { settings.planExecute.mode = value; }
1196
+ );
1197
+
1198
+ const manualTest = objectValue(raw['manual-test']);
1199
+ transfer(
1200
+ 'manualTest.depth',
1201
+ manualTest.depth,
1202
+ oneOf(['full', 'smoke', 'ask_each_time']),
1203
+ value => { settings.manualTest.depth = value; }
1204
+ );
1205
+
1152
1206
  const review = objectValue(raw.review);
1153
1207
  transferAgentSettings({
1154
1208
  rawAgents: objectValue(review.agents),
@@ -1368,6 +1422,18 @@ plan-polish:
1368
1422
  # Положительное целое число.
1369
1423
  limit: ${settings.planPolish.limit}
1370
1424
 
1425
+ plan-execute:
1426
+ # Где eda-plan-execute выполняет фазы плана.
1427
+ # subagents — каждая фаза в отдельном субагенте, single — весь план одним контекстом, auto — решает по плану.
1428
+ mode: ${settings.planExecute.mode}
1429
+
1430
+ manual-test:
1431
+ # Глубина ручной проверки в eda-manual-test.
1432
+ # full — закрыть все применимые области: API, база, консольные команды, интерфейс, алгоритмы, фон, права, конфигурацию, логи и регрессии рядом.
1433
+ # smoke — только запуск и основной сценарий изменённой области.
1434
+ # full | smoke | ask_each_time
1435
+ depth: ${settings.manualTest.depth}
1436
+
1371
1437
  review:
1372
1438
  # Каждая проверка имеет собственный режим запуска и модели для обеих сред.
1373
1439
  agents:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gian-tiaga/eda",
3
- "version": "3.3.1",
3
+ "version": "3.5.0",
4
4
  "description": "Пакет скилов и специализированных агентов eda-* для Claude Code и Codex CLI",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,30 +1,50 @@
1
1
  ---
2
2
  name: eda-manual-test
3
- description: 'Проводит ручную smoke/acceptance-проверку изменённого API или интерфейса и сохраняет отчёт.'
3
+ description: 'Проводит ручную проверку изменений — API, база, консольные команды, интерфейс и алгоритмы — и сохраняет отчёт.'
4
4
  ---
5
5
 
6
6
  # Скил: Ручное тестирование (eda-manual-test)
7
7
 
8
- Делаешь ручную smoke/acceptance-проверку уже сделанных изменений. Проверяешь не «что тесты зелёные», а что пользовательский или API-сценарий реально работает: страница открывается, действие проходит, endpoint отвечает, ошибки выглядят ожидаемо. Сохраняешь QA-отчёт. Код не правишь.
8
+ Делаешь ручную проверку уже сделанных изменений. Проверяешь не «что тесты зелёные», а что всё реально работает: endpoint отвечает, в базе появились нужные записи, команда отрабатывает, страница открывается, алгоритм проходит по всем веткам. Сохраняешь QA-отчёт. Код не правишь.
9
9
 
10
10
  ## Вход из сообщения пользователя
11
11
 
12
12
  Текст рядом с вызовом скилла в текущем сообщении пользователя — главный вход. Сначала разбери именно его: URL, endpoint, сценарий, план, ревью, issue, ветку, ограничение по окружению, логин/роль без секретов и прямые указания.
13
13
 
14
- Если входа достаточно, продолжай без вопроса. Если входа нет, построй минимальный smoke-чеклист по незакоммиченному `git diff HEAD`, релевантному коду и документации проекта. `AskUserQuestion` задавай только если цель противоречива, найдено несколько равных окружений/URL, нужна авторизация без доступных тестовых данных или есть риск выполнить разрушительное действие. Старое обсуждение в истории не считай входом, если пользователь не связал его с текущим вызовом явно.
14
+ Если входа достаточно, продолжай без вопроса. Если входа нет, построй чеклист по незакоммиченному `git diff HEAD`, релевантному коду и документации проекта; глубину это не меняет. `AskUserQuestion` задавай только если цель противоречива, найдено несколько равных окружений/URL, нужна авторизация без доступных тестовых данных или есть риск выполнить разрушительное действие. Старое обсуждение в истории не считай входом, если пользователь не связал его с текущим вызовом явно.
15
+
16
+ ## Режим запуска
17
+
18
+ Прочитай `docs/settings.yaml`, если файл есть. Прямое указание пользователя в текущем сообщении важнее настроек.
19
+
20
+ Поддерживается только `version: 3`. При другой версии, отсутствующем разделе или неизвестном значении используй дефолт `full`; настройки старого формата не применяй.
21
+
22
+ | Настройка | Значения | Аргументы в сообщении |
23
+ |---|---|---|
24
+ | `manual-test.depth` | `full`, `smoke`, `ask_each_time` | `full`, `полная проверка`; `smoke`, `быстро`, `коротко` |
25
+
26
+ Если итоговое значение `ask_each_time`, задай блокирующий вопрос о глубине, кроме случая, когда пользователь уже выбрал её в текущем сообщении.
27
+
28
+ | Глубина | Что проверяется |
29
+ |---|---|
30
+ | `full` | все применимые области матрицы покрытия целиком, по каждому пункту артефакта и diff |
31
+ | `smoke` | запуск, основной happy path изменённой области и 1–2 негативных сценария |
32
+
33
+ `full` — глубина по умолчанию. Отсутствие плана её не снижает: без артефакта области определяются по `git diff HEAD` и всё равно закрываются целиком. Сузить проверку до главного сценария можно только по явному указанию пользователя или настройке. Полнота считается по областям и пунктам, а не по времени и не по числу шагов.
15
34
 
16
35
  ## Главные правила
17
36
 
18
37
  1. **Ручная проверка, не разработка.** Не правь код, не пиши и не обновляй автотесты, не меняй конфиги, не коммить и не пушь.
19
- 2. **Smoke по умолчанию.** Проверь запуск, основной happy path изменённой области и 1–2 негативных или edge-сценария, которые естественно следуют из задачи.
20
- 3. **API проверяй запросами.** Используй `curl`, встроенный HTTP-клиент, Node `fetch` или проектные scripts. Фиксируй method, URL, важные headers без секретов, body, status code и ключевые поля ответа.
21
- 4. **Фронт проверяй браузером.** Если в проекте есть Playwright — используй Playwright. Если Playwright не установлен, используй доступную browser automation хост-агента. Если браузерной автоматизации нет — спроси через `AskUserQuestion`; не устанавливай зависимости молча.
22
- 5. **Серверы поднимай сам, если это очевидно.** Определи команды по `package.json`, README, docker compose, Makefile или локальным инструкциям. Останавливай только процессы, которые сам запустил.
23
- 6. **Секреты не трогай.** Используй только уже доступные локальные `.env`, тестовые аккаунты и настройки. Не проси пользователя прислать секреты в чат и не печатай токены, cookies, passwords, API keys или Authorization headers в отчёт.
24
- 7. **Разрушительное подтверждай.** Реальные платежи, удаление данных, отправку email/SMS/push, изменение production/staging-данных, миграции, очистку БД и похожие действия выполняй только после `AskUserQuestion`.
25
- 8. **Проверяй фактическое поведение.** Не ограничивайся чтением кода. Если сценарий нельзя выполнить, зафиксируй `blocked` и конкретную причину.
26
- 9. **Отчёт обязателен.** Сохрани результат в `docs/artifacts/manual-tests/`, даже если проверка заблокирована или нашла баги.
27
- 10. **Задача важнее дополнительного контекста.** Основной чеклист строй по выполненной задаче: текущему сообщению и явно связанному плану, issue, review или fix-отчёту. Business-карточки подключай только после определения target и только для непосредственно затронутого поведения.
38
+ 2. **В `full` закрываешь каждую область.** У области либо результат фактической проверки, либо явная причина, почему она не затрагивается или заблокирована. Пустых и молча пропущенных областей быть не может.
39
+ 3. **Проверяй фактическое поведение.** Чтение кода, зелёный `npm test` и «должно работать по плану» проверкой не считаются. Если сценарий нельзя выполнить, зафиксируй `blocked` и конкретную причину.
40
+ 4. **API проверяй запросами.** Используй `curl`, встроенный HTTP-клиент, Node `fetch` или проектные scripts. Фиксируй method, URL, важные headers без секретов, body, status code и ключевые поля ответа.
41
+ 5. **Базу проверяй запросами к базе.** Используй psql/mysql/sqlite-клиент, ORM-консоль или проектные скрипты. Проверяй реальные строки, а не ответ API.
42
+ 6. **Фронт проверяй браузером.** Если в проекте есть Playwright — используй Playwright. Если Playwright не установлен, используй доступную browser automation хост-агента. Если браузерной автоматизации нет — спроси через `AskUserQuestion`; не устанавливай зависимости молча.
43
+ 7. **Серверы поднимай сам, если это очевидно.** Определи команды по `package.json`, README, docker compose, Makefile или локальным инструкциям. Останавливай только процессы, которые сам запустил.
44
+ 8. **Секреты не трогай.** Используй только уже доступные локальные `.env`, тестовые аккаунты и настройки. Не проси пользователя прислать секреты в чат и не печатай токены, cookies, passwords, API keys или Authorization headers в отчёт.
45
+ 9. **Разрушительное подтверждай.** Реальные платежи, удаление данных, отправку email/SMS/push, изменение production/staging-данных, откат миграций, очистку БД и похожие действия выполняй только после `AskUserQuestion`.
46
+ 10. **Отчёт обязателен.** Сохрани результат в `docs/artifacts/manual-tests/`, даже если проверка заблокирована или нашла баги.
47
+ 11. **Задача важнее дополнительного контекста.** Основной чеклист строй по выполненной задаче: текущему сообщению и явно связанному плану, issue, review или fix-отчёту. Business-карточки подключай только после определения target и только для непосредственно затронутого поведения.
28
48
 
29
49
  ## Интерактивные вопросы
30
50
 
@@ -36,56 +56,70 @@ description: 'Проводит ручную smoke/acceptance-проверку и
36
56
 
37
57
  ## Этапы
38
58
 
39
- ### 1. Определить цель проверки
40
- Разбери вход пользователя и зафиксируй `$TASK_CONTEXT`: что было сделано и какие результаты пользователь ожидает проверить. Если указан файл плана, ревью, research, issue, fix-отчёт или другой артефакт — прочитай его. Это главный источник сценариев и критериев. Если входа нет, изучи `git diff HEAD`, изменённые файлы, README и релевантные роуты/страницы/компоненты.
59
+ ### 1. Определить цель и глубину
60
+ Разбери вход пользователя и зафиксируй `$TASK_CONTEXT`: что было сделано и какие результаты пользователь ожидает проверить. Если указан файл плана, ревью, research, issue, fix- или execution-отчёт — прочитай его целиком. Это главный источник сценариев и критериев. Если входа нет, изучи `git diff HEAD`, изменённые файлы, README и релевантные роуты/страницы/компоненты.
41
61
 
42
- Определи `$TEST_TARGET`: `api`, `frontend`, `fullstack` или `other`. Если цель всё ещё неоднозначна и можно проверить не то окружение или не тот сценарий — спроси через `AskUserQuestion`.
62
+ Определи глубину по разделу «Режим запуска» и `$TEST_TARGET`: `api`, `frontend`, `fullstack`, `cli` или `other`. Если цель всё ещё неоднозначна и можно проверить не то окружение или не тот сценарий — спроси через `AskUserQuestion`.
43
63
 
44
64
  ### 2. Прочитать рамку проекта
45
- Прочитай `docs/rules.md` и `docs/arch.md`, если есть. Найди команды запуска, тестовые URL, API-контракты, seed/test users и ограничения окружения в README, package scripts, docker compose, Makefile, OpenAPI/Swagger/Postman-файлах и существующих e2e-тестах.
65
+ Прочитай `docs/rules.md` и `docs/arch.md`, если есть. Найди команды запуска, тестовые URL, API-контракты, миграции, консольные команды, seed/test users и ограничения окружения в README, package scripts, docker compose, Makefile, OpenAPI/Swagger/Postman-файлах и существующих e2e-тестах.
46
66
 
47
- После определения `$TASK_CONTEXT` и фактически изменённого поведения прочитай `docs/business.md`, если индекс существует. По описаниям выбери только карточки, которые прямо относятся к проверяемой задаче. Если таких карточек нет, продолжай без business-контекста и без предупреждения. Не открывай остальные карточки и не расширяй ими smoke-проверку.
67
+ После определения `$TASK_CONTEXT` и фактически изменённого поведения прочитай `docs/business.md`, если индекс существует. По описаниям выбери только карточки, которые прямо относятся к проверяемой задаче. Если таких карточек нет, продолжай без business-контекста и без предупреждения. Не открывай остальные карточки.
48
68
 
49
69
  Если ожидаемый результат задачи противоречит применимой business-карточке, не выбирай правильный вариант самостоятельно. До неоднозначного сценария покажи конфликт и через `AskUserQuestion` спроси: проверять изменённую задачу как новое правило или сначала пересогласовать карточку через `eda-business`. В неинтерактивном режиме зафиксируй `blocked` с этим вопросом.
50
70
 
51
71
  Не устанавливай Playwright, браузеры, пакеты, docker images или системные зависимости молча. Если без этого проверка невозможна — спроси через `AskUserQuestion` или зафиксируй `blocked` в неинтерактивном режиме.
52
72
 
53
- ### 3. Составить smoke-чеклист
54
- Составь короткий чеклист:
55
- - запуск приложения или API;
56
- - явные acceptance criteria и сценарии выполненной задачи;
57
- - основной happy path изменённой области;
58
- - 1–2 негативных или edge-сценария, которые следуют из задачи;
59
- - для фронта: console errors, network errors и видимые regressions на основной странице;
60
- - для API: status code, схема/ключевые поля ответа, обработка неверного ввода или прав доступа, если это относится к задаче.
73
+ ### 3. Разложить задачу на сценарии
74
+ Если дан план или другой артефакт, разбери его по разделам и переведи каждый пункт в проверяемый сценарий. Ни один раздел не остаётся без сценариев.
61
75
 
62
- Применимая business-карточка может добавить важный инвариант, ожидаемый результат или один релевантный негативный сценарий, который задача не сформулировала явно. Она не заменяет критерии задачи и не требует тестировать всю предметную область. Не расширяй проверку до полного exploratory QA, если пользователь не попросил.
63
-
64
- ### 4. Запустить окружение
65
- Если приложение ещё не запущено и команды очевидны, запусти нужные dev/API-серверы. Дождись готовности по логам, healthcheck, открытому порту или успешному запросу. Если порт занят, проверь, подходит ли уже запущенный сервис; если нет — спроси или выбери очевидный альтернативный порт только когда проект это поддерживает.
76
+ | Раздел артефакта | Что из него обязательно проверить |
77
+ |---|---|
78
+ | Задача, критерии готовности | каждый заявленный результат — отдельным сценарием |
79
+ | Целевой алгоритм | каждый путь от входного события до финального состояния, включая ошибочные ветки |
80
+ | Контракты: Данные и БД | каждую таблицу, поле, связь, индекс, unique и миграцию |
81
+ | Контракты: API и внешние контракты | каждый новый и изменённый endpoint, событие, очередь, внешний вызов |
82
+ | Фазы выполнения | `Результат` и `Проверка` каждой фазы |
83
+ | Тесты | сценарии из плана, выполненные руками, а не запуском автотестов |
84
+ | Логирование | что пишется в лог по сценарию и что писать запрещено |
85
+ | Документация и эксплуатация | новые env, миграции, консольные команды, шаги релиза |
86
+ | Принятые решения | видимые последствия решения в работающей системе |
87
+
88
+ Дополни сценариями из фактического `git diff HEAD`: изменения, которых нет в артефакте, тоже проверяются. Если артефакта нет, весь набор сценариев строится по diff тем же способом — по затронутым endpoints, миграциям, командам, экранам и ветвлениям кода. Применимая business-карточка может добавить важный инвариант или релевантный негативный сценарий. Она не заменяет критерии задачи и не требует тестировать всю предметную область.
89
+
90
+ ### 4. Собрать матрицу покрытия
91
+ Для `full` пройди все области. Каждая получает статус `✓ проверено`, `✗ провалено`, `— не затрагивается` с причиной или `? blocked` с причиной.
92
+
93
+ | Область | Что проверяется |
94
+ |---|---|
95
+ | API | все новые и затронутые endpoints: успешный ответ и его поля, валидация неверного ввода, права и auth, несуществующая сущность, коды ошибок, обратная совместимость старых клиентов |
96
+ | База данных | миграции применяются без ошибок; схема совпадает с планом (таблицы, колонки, типы, nullable, default, связи, индексы, unique); после сценария появились, обновились и удалились именно те строки с теми значениями; связанные записи и каскады; нет дублей и осиротевших записей; старые данные читаются |
97
+ | Консольные команды | каждая новая и изменённая команда: запуск с аргументами, поведение без аргументов, exit code, вывод, эффект в базе, повторный запуск |
98
+ | Интерфейс | каждый новый и изменённый экран: основной сценарий до результата, состояния загрузки, пустых данных, ошибки и успеха, валидация форм, видимость по ролям, отсутствие console/network errors, вёрстка на desktop и mobile, если менялась |
99
+ | Алгоритмы | сквозной проход по целевому алгоритму: каждая ветка условий, переход состояний, граничные значения, ошибочные пути и откаты |
100
+ | Фон и интеграции | очереди, воркеры, cron, вебхуки, письма и уведомления, события между модулями: задача ставится, выполняется и даёт ожидаемый эффект |
101
+ | Права и роли | что доступ есть у кого положено и его нет у остальных — на API и в интерфейсе |
102
+ | Конфигурация | новые env-переменные и настройки: значение по умолчанию, поведение при отсутствии и при выключенной фиче |
103
+ | Логи и ошибки | по сценарию пишутся ожидаемые записи с нужными полями; в логах и ответах нет секретов и stack traces наружу |
104
+ | Регрессии рядом | соседние сценарии, которые используют изменённый код или таблицы, продолжают работать |
105
+
106
+ В `smoke` глубоко проверяется только основной сценарий изменённой области; остальные области помечаются `— не проверялось в smoke`.
107
+
108
+ ### 5. Запустить окружение
109
+ Если приложение ещё не запущено и команды очевидны, запусти нужные dev/API-серверы, воркеры и базу. Дождись готовности по логам, healthcheck, открытому порту или успешному запросу. Если порт занят, проверь, подходит ли уже запущенный сервис; если нет — спроси или выбери очевидный альтернативный порт только когда проект это поддерживает.
66
110
 
67
111
  Фиксируй команды запуска в черновике отчёта. Не заверши свой ответ, пока запущенные тобой процессы, нужные только для проверки, ещё работают.
68
112
 
69
- ### 5. Проверить API
70
- Для API-сценариев выполни реальные запросы. Предпочитай воспроизводимые команды `curl`, но можно использовать Node `fetch` или проектный HTTP-клиент, если так безопаснее.
71
-
72
- Проверяй:
73
- - успешный status code и ключевые поля ответа;
74
- - корректную ошибку для неверного ввода, отсутствующих прав или несуществующей сущности, если это относится к задаче;
75
- - отсутствие явных server errors, stack traces и утечек секретов в ответе.
113
+ ### 6. Выполнить проверки
114
+ Иди по областям матрицы. Для каждого сценария сохраняй воспроизводимый способ проверки и фактический результат.
76
115
 
77
- Секретные headers и cookies в отчёт не вставляй: пиши `<redacted>`.
116
+ - **API.** Выполняй реальные запросы, предпочитая воспроизводимые команды `curl`. Секретные headers и cookies пиши как `<redacted>`.
117
+ - **База.** После каждого сценария, который меняет данные, смотри в базу запросом и сверяй значения с контрактом. Схему сверяй отдельно от данных. Откат миграции проверяй только по подтверждению пользователя и только если состояние можно восстановить.
118
+ - **Консоль.** Запускай команды в тестовом окружении и проверяй не только вывод, но и эффект.
119
+ - **Фронт.** Открывай страницу в браузере и проверяй фактический UI, а не только DOM-текст. Скриншоты сохраняй, если инструмент это поддерживает и они подтверждают результат или баг: рядом с отчётом или в `docs/artifacts/manual-tests/assets/`.
120
+ - **Алгоритмы.** Для каждой ветки укажи, каким входом ты её вызвал и в каком состоянии система оказалась.
78
121
 
79
- ### 6. Проверить фронт
80
- Для фронтовых сценариев открой страницу в браузере. Если доступен Playwright, используй его для навигации, кликов, ввода и проверок. Если доступен browser plugin или другой инструмент браузерной автоматизации — используй его. Проверяй фактический UI, а не только DOM-текст.
81
-
82
- Проверяй:
83
- - страница загружается без критических console/network errors;
84
- - основной сценарий пользователя проходит до ожидаемого результата;
85
- - видимые состояния ошибок, пустых данных или невалидного ввода, если они относятся к задаче;
86
- - текст и элементы управления не ломаются на очевидном desktop/mobile viewport, если менялась вёрстка.
87
-
88
- Скриншоты сохраняй только если инструмент это поддерживает и они помогают подтвердить результат или баг. Складывай их рядом с отчётом или в подпапку `docs/artifacts/manual-tests/assets/`.
122
+ Если область нельзя проверить, не заменяй её чтением кода: ставь `? blocked` и пиши, чего конкретно не хватает.
89
123
 
90
124
  ### 7. Сохранить отчёт
91
125
  Сохрани отчёт в `docs/artifacts/manual-tests/{YYYY-MM-DD}_{HH-MM}_{slug}.md`.
@@ -93,8 +127,9 @@ description: 'Проводит ручную smoke/acceptance-проверку и
93
127
  ```markdown
94
128
  ---
95
129
  date: <YYYY-MM-DD HH:MM>
130
+ depth: <full | smoke>
96
131
  source: <text | git diff HEAD | docs/artifacts/plans/... | docs/artifacts/reviews/...>
97
- target: <api | frontend | fullstack | other>
132
+ target: <api | frontend | fullstack | cli | other>
98
133
  status: <passed | failed | blocked>
99
134
  ---
100
135
 
@@ -111,16 +146,34 @@ status: <passed | failed | blocked>
111
146
  |---|---|
112
147
  | Команды запуска | `<command>` |
113
148
  | URL / endpoint | `<url или endpoint>` |
149
+ | База | `<как проверялась>` |
114
150
  | Авторизация | `<не нужна | тестовый пользователь | уже настроена | blocked>` |
115
151
 
152
+ ## Покрытие
153
+ | Область | Статус | Комментарий |
154
+ |---|---|---|
155
+ | API | ✓ / ✗ / — / ? | <что проверено или почему нет> |
156
+ | База данных | | |
157
+ | Консольные команды | | |
158
+ | Интерфейс | | |
159
+ | Алгоритмы | | |
160
+ | Фон и интеграции | | |
161
+ | Права и роли | | |
162
+ | Конфигурация | | |
163
+ | Логи и ошибки | | |
164
+ | Регрессии рядом | | |
165
+
116
166
  ## Чеклист
117
- | # | Сценарий | Способ проверки | Результат | Заметки |
118
- |---|----------|-----------------|-----------|---------|
119
- | 1 | ... | `curl ...` / Playwright / browser | ✓ / ✗ / ? | ... |
167
+ | # | Область | Сценарий | Способ проверки | Результат | Заметки |
168
+ |---|---------|----------|-----------------|-----------|---------|
169
+ | 1 | API | ... | `curl ...` / SQL / Playwright / команда | ✓ / ✗ / ? | ... |
120
170
 
121
171
  ## Найденные проблемы
122
172
  <если нет — «Явных проблем не найдено»; если есть — список с воспроизведением и фактическим/ожидаемым результатом>
123
173
 
174
+ ## Не проверено
175
+ <области и пункты артефакта, оставшиеся без фактической проверки, с причиной; если таких нет — «нет»>
176
+
124
177
  ## Артефакты
125
178
  <ссылки на скриншоты, логи или «Нет»>
126
179
 
@@ -128,16 +181,19 @@ status: <passed | failed | blocked>
128
181
  <passed / failed / blocked и короткое объяснение относительно выполненной задачи>
129
182
  ```
130
183
 
131
- Если найден баг, статус отчёта `failed`. Если проверка невозможна из-за окружения, авторизации, отсутствующих зависимостей или непонятного риска, статус `blocked`.
184
+ `passed` ставится только когда все применимые области закрыты фактической проверкой и проблем нет. Найден баг — `failed`. Есть незакрытая область или проверка невозможна из-за окружения, авторизации, зависимостей или риска — `blocked`, даже если остальное прошло.
132
185
 
133
186
  ### 8. Финал
134
- Короткое сообщение: путь к отчёту, итог `passed` / `failed` / `blocked`, какие сценарии реально проверены, какие процессы остановлены, состояние git («не закоммичено»). Если итог `failed` или `blocked` — предложи дальше `eda-fix`. Если итог `passed` — предложи дальше `eda-review` или `eda-commit`.
187
+ Короткое сообщение: путь к отчёту, итог `passed` / `failed` / `blocked`, глубина, какие области закрыты и какие нет, какие процессы остановлены, состояние git («не закоммичено»). Если итог `failed` или `blocked` — предложи дальше `eda-fix`. Если итог `passed` — предложи дальше `eda-review` или `eda-commit`.
135
188
 
136
189
  ## Чего НЕ делать
137
190
  - Править код, конфиги, миграции, seed-данные или документацию проекта, кроме отчёта в `docs/artifacts/manual-tests/`.
138
191
  - Писать или обновлять unit/e2e/autotests. Это работа `eda-fix`, `eda-plan-execute` или отдельной задачи.
192
+ - Сводить проверку по плану к smoke-проходу основного сценария.
193
+ - Закрывать область чтением кода, ссылкой на автотесты или словами «по плану должно работать».
194
+ - Ставить `passed`, пока хотя бы одна применимая область не закрыта фактической проверкой.
139
195
  - Устанавливать Playwright, браузеры, npm-пакеты, docker images или системные зависимости без явного подтверждения.
140
- - Подменять ручную проверку запуском `npm test` без фактического прохождения API/UI-сценария.
196
+ - Подменять ручную проверку запуском `npm test` без фактического прохождения сценария.
141
197
  - Проверять production или staging с изменением данных без подтверждения пользователя.
142
198
  - Сохранять секреты, cookies, токены или passwords в отчёт.
143
199
  - Коммитить, пушить, создавать PR или отправлять ревью.
@@ -5,24 +5,54 @@ description: 'Выполняет готовый план последовате
5
5
 
6
6
  # Скил: Управляющий выполнением плана (eda-plan-execute)
7
7
 
8
- Оркестрируй выполнение плана. Сам не пиши код и не запускай проверки проекта: передавай каждую фазу целиком отдельному изолированному субагенту, а её приёмку — отдельному проверяющему. Связывай результаты фаз, обновляй прогресс и журнал.
8
+ Веди выполнение плана: фазы строго по порядку, каждая с проверяемым результатом, прогресс и журнал в актуальном состоянии. Где именно выполняются фазы, задаёт режим.
9
+
10
+ ## Настройки
11
+
12
+ Прочитай только раздел `plan-execute` из `docs/settings.yaml`, если файл есть. Применяй только `version: 3`.
13
+
14
+ ```yaml
15
+ plan-execute:
16
+ mode: auto
17
+ ```
18
+
19
+ `plan-execute.mode` принимает `subagents`, `single` или `auto`; при отсутствующем или невалидном значении используй `auto`. Файл настроек не изменяй.
9
20
 
10
21
  ## Вход из сообщения пользователя
11
22
 
12
- Текст рядом с вызовом — главный вход. Разбери тему, путь к файлу, ограничения и прямые указания.
23
+ Текст рядом с вызовом — главный вход. Разбери тему, путь к файлу, ограничения, прямые указания и режим:
24
+
25
+ - `subagents`, `субагенты`, `по фазам`, `изолированно` → `$MODE=subagents`;
26
+ - `single`, `один`, `одним контекстом`, `без субагентов`, `сам` → `$MODE=single`;
27
+ - `auto`, `авто`, `автоматически` → `$MODE=auto`;
28
+ - без явного режима → `$MODE=plan-execute.mode` из валидных настроек, иначе `$MODE=auto`.
29
+
30
+ Режим из вызова важнее настройки, настройка важнее умолчания.
13
31
 
14
32
  Если входа достаточно, продолжай без вопроса. `AskUserQuestion` задавай только если входа нет, он противоречивый, найдено несколько равных планов или есть риск выполнить не тот план.
15
33
 
34
+ ## Режимы выполнения
35
+
36
+ | Режим | Кто выполняет фазу | Кто проверяет фазу и финал |
37
+ |---|---|---|
38
+ | `subagents` | отдельный изолированный субагент на каждую фазу | отдельные субагенты-проверяющие |
39
+ | `single` | основной агент подряд в одном контексте | сам основной агент |
40
+ | `auto` | решает по плану до старта: `single` или `subagents` | по выбранному режиму |
41
+
42
+ `auto` выбирай `single`, только когда весь план реально помещается в один контекст: немного фаз, небольшой объём задач и файлов, одна область кода, нет тяжёлых по контексту фаз вроде крупного рефакторинга, миграции данных или множества карточек. Иначе — `subagents`; при сомнении тоже `subagents`. Решение и его причину запиши в журнал.
43
+
44
+ В `single` следи за собственным контекстом. Если план оказался тяжелее оценки или контекст заканчивается, переключи оставшиеся фазы на `subagents`, запиши переключение в журнал и продолжи с текущей фазы.
45
+
16
46
  ## Главные правила
17
47
 
18
- 1. **Основной агент только управляет.** Ему разрешены чтение контекста, запуск и контроль субагентов, вопросы пользователю, обновление `$PLAN_FILE` и `$EXECUTION_FILE`. Код, тесты, миграции, конфиги, зависимости, документацию и git-состояние меняют только назначенные субагенты.
19
- 2. **Фазы выполняй строго последовательно.** Не запускай следующую, пока текущая не выполнена и её отдельная проверка не прошла.
20
- 3. **Одна фаза — один исполнитель.** Запускай каждую фазу целиком в новом субагенте со свежим контекстом без истории диалога. Идентификатор исполнителя сохраняй и продолжай его же для вопросов и исправлений этой фазы.
21
- 4. **Рамку читает исполнитель фазы.** Каждый исполнитель целиком читает план, `docs/rules.md` и `docs/arch.md`. Для поведения своей фазы он читает карточки из `sources.business`; у старого плана без поля выбирает через `docs/business.md` только непосредственно применимые карточки. Для затронутых компонентов так же выбирает технические карточки через `sources.references` или `docs/references.md`. Если выполнение фазы затрагивает компонент, для которого в `docs/references.md` указана карточка, исполнитель читает эту карточку целиком перед соответствующим изменением. Нерелевантные карточки не загружает.
22
- 5. **Исполнитель не додумывает план.** Если в фазе не хватает решения, он возвращает `needs_input`, а не выбирает сам. Недостающее решение — это вопрос пользователю или возврат в `eda-plan`, но не импровизация в коде.
23
- 6. **Блокируй конфликт.** План задаёт область выполняемой работы, а применимые business-карточки — требования к затронутому поведению. Если план противоречит business-карточке, `rules.md`, `arch.md` или reference-карточке, исполнитель возвращает `blocked`. Основной агент показывает конфликт и через `AskUserQuestion` спрашивает: изменить план через `eda-plan` или сначала пересогласовать правило через `eda-business`.
24
- 7. **Отмечай только подтверждённое.** Фазу закрывай только после `completed` от исполнителя и отдельного `passed` от проверяющего. При последующем опровержении верни отметку в незавершённое состояние.
25
- 8. **Проверки нельзя подавлять.** Не поручай отключать линтеры, тесты, typecheck, static analysis и другие проверки, добавлять игноры или ослаблять команды и правила. Причину падения исправляет исполнитель фазы, затем отдельный субагент повторяет проверку.
48
+ 1. **В `subagents` основной агент только управляет.** Ему разрешены чтение контекста, запуск и контроль субагентов, вопросы пользователю, обновление `$PLAN_FILE` и `$EXECUTION_FILE`. Код, тесты, миграции, конфиги, зависимости, документацию и git-состояние меняют только назначенные субагенты. В `single` основной агент выполняет фазы и проверки сам и остаётся единственным исполнителем.
49
+ 2. **Фазы выполняй строго последовательно.** Не начинай следующую, пока текущая не выполнена и её проверка не прошла.
50
+ 3. **В `subagents` одна фаза — один исполнитель.** Запускай каждую фазу целиком в новом субагенте со свежим контекстом без истории диалога. Идентификатор исполнителя сохраняй и продолжай его же для вопросов и исправлений этой фазы.
51
+ 4. **Рамку читает тот, кто выполняет фазу.** Он целиком читает план, `docs/rules.md` и `docs/arch.md`. Для поведения своей фазы читает карточки из `sources.business`; у старого плана без поля выбирает через `docs/business.md` только непосредственно применимые карточки. Для затронутых компонентов так же выбирает технические карточки через `sources.references` или `docs/references.md`. Если выполнение фазы затрагивает компонент, для которого в `docs/references.md` указана карточка, он читает эту карточку целиком перед соответствующим изменением. Нерелевантные карточки не загружает.
52
+ 5. **Исполнитель не додумывает план.** Если в фазе не хватает решения, это вопрос пользователю или возврат в `eda-plan`, но не импровизация в коде. В `subagents` исполнитель возвращает `needs_input`, в `single` основной агент останавливается и спрашивает.
53
+ 6. **Блокируй конфликт.** План задаёт область выполняемой работы, а применимые business-карточки — требования к затронутому поведению. Если план противоречит business-карточке, `rules.md`, `arch.md` или reference-карточке, останови фазу и через `AskUserQuestion` спроси: изменить план через `eda-plan` или сначала пересогласовать правило через `eda-business`.
54
+ 7. **Отмечай только подтверждённое.** Фазу закрывай только после выполнения и прошедшей проверки: в `subagents` это `completed` от исполнителя и отдельный `passed` от проверяющего, в `single` — пройденные критерии и команды проверки фазы с сохранённым выводом. При последующем опровержении верни отметку в незавершённое состояние.
55
+ 8. **Проверки нельзя подавлять.** Не отключай и не поручай отключать линтеры, тесты, typecheck, static analysis и другие проверки, не добавляй игноры и не ослабляй команды и правила. Сначала исправляется причина падения, затем проверка повторяется.
26
56
  9. **Не коммить, не пушь и не делай ревью.** Это другие скилы.
27
57
 
28
58
  ## Вопросы
@@ -43,7 +73,7 @@ description: 'Выполняет готовый план последовате
43
73
 
44
74
  Через `AskUserQuestion` предложи текущую ветку, новую ветку от `main`, новую ветку от текущей или worktree от `main`. Если вызывающий оркестратор уже передал подтверждённый выбор, не спрашивай повторно.
45
75
 
46
- Сам git-команды не выполняй: для новой ветки или worktree запусти отдельного субагента подготовки окружения. Передай ему только выбранный вариант, slug плана, рабочую директорию и запрет менять код. После успешного создания worktree остановись и дай команду перехода и нового запуска `eda-plan-execute <PLAN_FILE>`.
76
+ В `subagents` git-команды сам не выполняй: для новой ветки или worktree запусти отдельного субагента подготовки окружения; в `single` подготовь окружение сам. Передай ему только выбранный вариант, slug плана, рабочую директорию и запрет менять код. После успешного создания worktree остановись и дай команду перехода и нового запуска `eda-plan-execute <PLAN_FILE>`.
47
77
 
48
78
  ### 3. Прочитать план и проверить фазы
49
79
 
@@ -51,7 +81,9 @@ description: 'Выполняет готовый план последовате
51
81
 
52
82
  Если фаза не описывает проверяемый результат или её проверку нечем выполнить, не достраивай смысл молча: через `AskUserQuestion` предложи вернуть план в `eda-plan` или `eda-plan-polish`.
53
83
 
54
- ### 4. Инициализировать прогресс
84
+ ### 4. Определить режим и инициализировать прогресс
85
+
86
+ Если `$MODE=auto`, сравни разобранные фазы с критериями из «Режимы выполнения» и зафиксируй итоговый режим `single` или `subagents` до первой фазы. Дальше действуй по зафиксированному режиму.
55
87
 
56
88
  Создай `$EXECUTION_FILE` по пути `docs/artifacts/executions/{YYYY-MM-DD}_{HH-MM}_{slug}.md`. В `$PLAN_FILE` добавь или актуализируй один раздел `## Прогресс выполнения` со ссылкой на журнал и списком фаз.
57
89
 
@@ -60,6 +92,7 @@ description: 'Выполняет готовый план последовате
60
92
  plan: <путь>
61
93
  started: <YYYY-MM-DD HH:MM>
62
94
  status: in_progress
95
+ mode: subagents | single
63
96
  current_phase: <номер>
64
97
  ---
65
98
 
@@ -69,8 +102,8 @@ current_phase: <номер>
69
102
  | Фаза | Результат | Проверка | Статус |
70
103
  |---|---|---|---|
71
104
 
72
- ## Запуски субагентов
73
- | Время | Роль | Фаза | Результат | Файлы | Проверки |
105
+ ## Запуски
106
+ | Время | Исполнитель | Фаза | Результат | Файлы | Проверки |
74
107
  |---|---|---|---|---|---|
75
108
 
76
109
  ## Решения и блокеры
@@ -78,10 +111,12 @@ current_phase: <номер>
78
111
  ## Финальная проверка
79
112
  ```
80
113
 
81
- Основной агент пишет только этот журнал и отметки прогресса в плане. Субагентам явно запрети менять `$PLAN_FILE` и `$EXECUTION_FILE`.
114
+ Журнал и отметки прогресса в плане ведёт только основной агент. В `single` записывай выбор режима с причиной, а в колонке «Исполнитель» — `основной агент`; в `subagents` явно запрети субагентам менять `$PLAN_FILE` и `$EXECUTION_FILE`.
82
115
 
83
116
  ### 5. Запускать изолированных субагентов
84
117
 
118
+ Весь этап — только для `subagents`. В `single` пропусти его и выполняй фазы сам; переключился на `subagents` — вернись к нему.
119
+
85
120
  В Codex используй `spawn_agent` с `fork_turns: "none"`, в Claude Code — новый `Agent` с самодостаточным сообщением. Если изоляция или субагенты недоступны, остановись: `blocked: недоступно изолированное выполнение`. Работу основным агентом не делай и CLI-fallback не добавляй.
86
121
 
87
122
  #### Технические остановки субагентов
@@ -121,7 +156,7 @@ questions: [<вопросы или пусто>]
121
156
 
122
157
  ### 6. Выполнять фазы
123
158
 
124
- Для каждой фазы по порядку:
159
+ В `subagents` для каждой фазы по порядку:
125
160
 
126
161
  1. Запусти одного нового изолированного исполнителя и сохрани его идентификатор как исполнителя этой фазы.
127
162
  2. Проверь YAML-контракт, фактический scope файлов и результаты проверок. Запиши запуск в журнал.
@@ -130,9 +165,11 @@ questions: [<вопросы или пусто>]
130
165
  5. `blocked` — останови выполнение. Внешний блокер или изменение scope выноси вопросом; сам его не устраняй.
131
166
  6. После `completed` запусти независимую проверку фазы.
132
167
 
168
+ В `single` перед первой фазой один раз прочитай план целиком, `docs/rules.md` и `docs/arch.md`, а карточки выбирай по правилу 4 под каждую фазу. Затем для каждой фазы по порядку выполни работу фазы, запиши в журнал сделанное, изменённые файлы и результаты проверок и переходи к проверке фазы. Не хватает решения — спроси пользователя; конфликт с правилами или карточками — останови фазу как `blocked`; та же причина падения дважды подряд без содержательного изменения — остановись: `blocked: выполнение не сходится`.
169
+
133
170
  ### 7. Проверять каждую фазу
134
171
 
135
- После `completed` запусти нового изолированного субагента-проверяющего. Он не меняет файлы, целиком читает план, `docs/rules.md` и `docs/arch.md`, читает только применимые карточки, выполняет все проверки фазы и подтверждает критерии результата.
172
+ В `subagents` после `completed` запусти нового изолированного субагента-проверяющего. Он не меняет файлы, целиком читает план, `docs/rules.md` и `docs/arch.md`, читает только применимые карточки, выполняет все проверки фазы и подтверждает критерии результата.
136
173
 
137
174
  ```yaml
138
175
  status: passed | failed | blocked
@@ -146,27 +183,30 @@ business_read: [<пути или пусто>]
146
183
  references_read: [<пути или пусто>]
147
184
  ```
148
185
 
149
- При `failed` передай полный результат исполнителю этой фазы, поручи исправить подтверждённые проблемы и запусти нового проверяющего. Основной агент код не чинит и контекст прежнего проверяющего не переиспользует. При `passed` отметь фазу завершённой и только тогда переходи к следующей.
186
+ При `failed` передай полный результат исполнителю этой фазы, поручи исправить подтверждённые проблемы и запусти нового проверяющего. Основной агент код не чинит и контекст прежнего проверяющего не переиспользует.
187
+
188
+ В `single` сам выполни все проверки фазы и сверь результат с критериями плана, а не с собственным впечатлением. Падение исправляй и повторяй проверку заново целиком.
189
+
190
+ При `passed` отметь фазу завершённой и только тогда переходи к следующей.
150
191
 
151
192
  ### 8. Финальная проверка
152
193
 
153
- После всех фаз запусти отдельного нового субагента для полного набора тестов, линтеров, typecheck, static analysis и других обязательных команд проекта. Он только проверяет, целиком читает план, `docs/rules.md` и `docs/arch.md` и выбирает карточки итогового изменённого поведения.
194
+ После всех фаз прогони полный набор тестов, линтеров, typecheck, static analysis и других обязательных команд проекта. В `subagents` это делает отдельный новый субагент: он только проверяет, целиком читает план, `docs/rules.md` и `docs/arch.md` и выбирает карточки итогового изменённого поведения. В `single` тот же полный набор запускает основной агент.
154
195
 
155
- Падение из-за сделанных изменений сопоставь с фазами и передай каждую группу исполнителю соответствующей фазы по порядку плана, затем повтори всю финальную проверку новым субагентом. Чужую или несвязанную поломку зафиксируй и вынеси вопросом, если без решения нельзя завершить план. Запрещено делать проверки зелёными через подавление ошибок, игноры, исключения, ослабление конфигов или изменение команд проверки.
196
+ Падение из-за сделанных изменений сопоставь с фазами и исправь по порядку плана: в `subagents` передай каждую группу исполнителю соответствующей фазы. Затем повтори всю финальную проверку целиком. Чужую или несвязанную поломку зафиксируй и вынеси вопросом, если без решения нельзя завершить план. Запрещено делать проверки зелёными через подавление ошибок, игноры, исключения, ослабление конфигов или изменение команд проверки.
156
197
 
157
198
  Запиши команды и результаты в `## Финальная проверка`. Только после `passed` поставь `status: done` и время завершения. Если обязательная проверка объективно недоступна, сохрани `status: blocked`, причину и непройденные критерии; выполненным план не объявляй.
158
199
 
159
200
  ### 9. Финал
160
201
 
161
- Коротко сообщи пути к плану и журналу, завершённые фазы, результат фазовых и финальной проверок, оставшиеся блокеры, состояние git «не закоммичено» и следующий шаг: `eda-review` или `eda-commit`.
202
+ Коротко сообщи режим выполнения, пути к плану и журналу, завершённые фазы, результат фазовых и финальной проверок, оставшиеся блокеры, состояние git «не закоммичено» и следующий шаг: `eda-review` или `eda-commit`.
162
203
 
163
204
  ## Чего НЕ делать
164
205
 
165
- - Самому менять код, тесты, миграции, конфиги, зависимости или проектную документацию.
166
- - Самому запускать тесты, линтеры, typecheck, сборку, миграции, серверы и другие команды разработки и проверки.
167
- - Дробить фазу между исполнителями или давать одному исполнителю несколько фаз.
168
- - Запускать следующую фазу до успешной отдельной проверки текущей.
169
- - Позволять исполнителю додумывать недостающее решение вместо вопроса.
170
- - Давать субагентам историю диалога или разрешать менять план и журнал.
206
+ - В `subagents` самому менять код, тесты, миграции, конфиги и зависимости или самому запускать проверки проекта.
207
+ - В `subagents` дробить фазу между исполнителями, давать одному исполнителю несколько фаз, давать субагентам историю диалога или разрешать менять план и журнал.
208
+ - Выполнять большой или тяжёлый по контексту план в `single`, если режим не задан явно.
209
+ - Запускать следующую фазу до успешной проверки текущей.
210
+ - Додумывать недостающее решение вместо вопроса.
171
211
  - Подавлять ошибки проверок, ослаблять правила или менять команды ради зелёного результата.
172
212
  - Коммитить, пушить, создавать PR или делать ревью.