@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 +21 -3
- package/lib/install.js +67 -1
- package/package.json +1 -1
- package/skills/eda-manual-test/SKILL.md +110 -54
- package/skills/eda-plan-execute/SKILL.md +67 -27
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` | Управляет выполнением плана по
|
|
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` | Делает ручную
|
|
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
|
|
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,30 +1,50 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: eda-manual-test
|
|
3
|
-
description: 'Проводит ручную
|
|
3
|
+
description: 'Проводит ручную проверку изменений — API, база, консольные команды, интерфейс и алгоритмы — и сохраняет отчёт.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Скил: Ручное тестирование (eda-manual-test)
|
|
7
7
|
|
|
8
|
-
Делаешь ручную
|
|
8
|
+
Делаешь ручную проверку уже сделанных изменений. Проверяешь не «что тесты зелёные», а что всё реально работает: endpoint отвечает, в базе появились нужные записи, команда отрабатывает, страница открывается, алгоритм проходит по всем веткам. Сохраняешь QA-отчёт. Код не правишь.
|
|
9
9
|
|
|
10
10
|
## Вход из сообщения пользователя
|
|
11
11
|
|
|
12
12
|
Текст рядом с вызовом скилла в текущем сообщении пользователя — главный вход. Сначала разбери именно его: URL, endpoint, сценарий, план, ревью, issue, ветку, ограничение по окружению, логин/роль без секретов и прямые указания.
|
|
13
13
|
|
|
14
|
-
Если входа достаточно, продолжай без вопроса. Если входа нет, построй
|
|
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.
|
|
20
|
-
3.
|
|
21
|
-
4.
|
|
22
|
-
5.
|
|
23
|
-
6.
|
|
24
|
-
7.
|
|
25
|
-
8.
|
|
26
|
-
9.
|
|
27
|
-
10.
|
|
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
|
|
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-контекста и без предупреждения. Не открывай остальные
|
|
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.
|
|
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
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
###
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
Проверяй:
|
|
73
|
-
- успешный status code и ключевые поля ответа;
|
|
74
|
-
- корректную ошибку для неверного ввода, отсутствующих прав или несуществующей сущности, если это относится к задаче;
|
|
75
|
-
- отсутствие явных server errors, stack traces и утечек секретов в ответе.
|
|
113
|
+
### 6. Выполнить проверки
|
|
114
|
+
Иди по областям матрицы. Для каждого сценария сохраняй воспроизводимый способ проверки и фактический результат.
|
|
76
115
|
|
|
77
|
-
Секретные headers и cookies
|
|
116
|
+
- **API.** Выполняй реальные запросы, предпочитая воспроизводимые команды `curl`. Секретные headers и cookies пиши как `<redacted>`.
|
|
117
|
+
- **База.** После каждого сценария, который меняет данные, смотри в базу запросом и сверяй значения с контрактом. Схему сверяй отдельно от данных. Откат миграции проверяй только по подтверждению пользователя и только если состояние можно восстановить.
|
|
118
|
+
- **Консоль.** Запускай команды в тестовом окружении и проверяй не только вывод, но и эффект.
|
|
119
|
+
- **Фронт.** Открывай страницу в браузере и проверяй фактический UI, а не только DOM-текст. Скриншоты сохраняй, если инструмент это поддерживает и они подтверждают результат или баг: рядом с отчётом или в `docs/artifacts/manual-tests/assets/`.
|
|
120
|
+
- **Алгоритмы.** Для каждой ветки укажи, каким входом ты её вызвал и в каком состоянии система оказалась.
|
|
78
121
|
|
|
79
|
-
|
|
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 /
|
|
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
|
-
|
|
184
|
+
`passed` ставится только когда все применимые области закрыты фактической проверкой и проблем нет. Найден баг — `failed`. Есть незакрытая область или проверка невозможна из-за окружения, авторизации, зависимостей или риска — `blocked`, даже если остальное прошло.
|
|
132
185
|
|
|
133
186
|
### 8. Финал
|
|
134
|
-
Короткое сообщение: путь к отчёту, итог `passed` / `failed` / `blocked`, какие
|
|
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` без фактического прохождения
|
|
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.
|
|
19
|
-
2. **Фазы выполняй строго последовательно.** Не
|
|
20
|
-
3.
|
|
21
|
-
4. **Рамку читает
|
|
22
|
-
5. **Исполнитель не додумывает план.** Если в фазе не хватает решения,
|
|
23
|
-
6. **Блокируй конфликт.** План задаёт область выполняемой работы, а применимые business-карточки — требования к затронутому поведению. Если план противоречит business-карточке, `rules.md`, `arch.md` или reference-карточке,
|
|
24
|
-
7. **Отмечай только подтверждённое.** Фазу закрывай только после `completed` от исполнителя и
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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` передай полный результат исполнителю этой фазы, поручи исправить подтверждённые проблемы и запусти нового проверяющего. Основной агент код не чинит и контекст прежнего проверяющего не переиспользует.
|
|
186
|
+
При `failed` передай полный результат исполнителю этой фазы, поручи исправить подтверждённые проблемы и запусти нового проверяющего. Основной агент код не чинит и контекст прежнего проверяющего не переиспользует.
|
|
187
|
+
|
|
188
|
+
В `single` сам выполни все проверки фазы и сверь результат с критериями плана, а не с собственным впечатлением. Падение исправляй и повторяй проверку заново целиком.
|
|
189
|
+
|
|
190
|
+
При `passed` отметь фазу завершённой и только тогда переходи к следующей.
|
|
150
191
|
|
|
151
192
|
### 8. Финальная проверка
|
|
152
193
|
|
|
153
|
-
После всех фаз
|
|
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
|
-
-
|
|
167
|
-
-
|
|
168
|
-
- Запускать следующую фазу до успешной
|
|
169
|
-
-
|
|
170
|
-
- Давать субагентам историю диалога или разрешать менять план и журнал.
|
|
206
|
+
- В `subagents` самому менять код, тесты, миграции, конфиги и зависимости или самому запускать проверки проекта.
|
|
207
|
+
- В `subagents` дробить фазу между исполнителями, давать одному исполнителю несколько фаз, давать субагентам историю диалога или разрешать менять план и журнал.
|
|
208
|
+
- Выполнять большой или тяжёлый по контексту план в `single`, если режим не задан явно.
|
|
209
|
+
- Запускать следующую фазу до успешной проверки текущей.
|
|
210
|
+
- Додумывать недостающее решение вместо вопроса.
|
|
171
211
|
- Подавлять ошибки проверок, ослаблять правила или менять команды ради зелёного результата.
|
|
172
212
|
- Коммитить, пушить, создавать PR или делать ревью.
|