@gian-tiaga/eda 3.4.0 → 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
@@ -55,7 +55,7 @@ eda update-all ~/Code
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) |
@@ -139,6 +139,7 @@ eda update-all ~/Code
139
139
  | `eda-plan-review` | `threshold N` | Разово меняет долю закрытых пунктов, при которой план считается готовым | Для самостоятельного аудита готового плана |
140
140
  | `eda-plan-execute` | `subagents` / `single` / `auto` | Разово меняет, где выполняются фазы, поверх `plan-execute.mode` | `single` для небольшого плана в одном контексте, `subagents` для большого или тяжёлого |
141
141
  | `eda-plan-polish` | `threshold N`, `limit N` | Меняет gate и максимальное число подтверждающих review-итераций | Для доводки ответственных планов перед `eda-plan-execute` |
142
+ | `eda-manual-test` | `full` / `полная проверка`, `smoke` / `быстро` | Разово меняет глубину ручной проверки поверх `manual-test.depth` | `smoke` для короткой правки, `full` — когда нужно закрыть все области после плана |
142
143
 
143
144
  ---
144
145
 
@@ -237,6 +238,13 @@ plan-execute:
237
238
  # subagents — каждая фаза в отдельном субагенте, single — весь план одним контекстом, auto — решает по плану.
238
239
  mode: auto
239
240
 
241
+ manual-test:
242
+ # Глубина ручной проверки в eda-manual-test.
243
+ # full — закрыть все применимые области: API, база, консольные команды, интерфейс, алгоритмы, фон, права, конфигурацию, логи и регрессии рядом.
244
+ # smoke — только запуск и основной сценарий изменённой области.
245
+ # full | smoke | ask_each_time
246
+ depth: full
247
+
240
248
  review:
241
249
  # Каждая проверка имеет собственный режим запуска и модели для обеих сред.
242
250
  agents:
@@ -386,6 +394,7 @@ discover-automations:
386
394
  - `plan-review.threshold` — доля закрытых пунктов чек-листа для статуса `ready`, default `100`. Отдельных агентов у `plan-review` больше нет: проверку целиком делает один субагент.
387
395
  - `plan-polish.limit` — максимальное число подтверждающих review-итераций; default `2`. Цикл останавливается раньше, если score перестал расти.
388
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`. Явная глубина в вызове имеет приоритет.
389
398
  - `review.agents.<check>.mode` — запускать проверку всегда, автоматически по контексту или отключить.
390
399
  - `review.agents.<check>.model.claude` и `.codex` — модель конкретной проверки в соответствующей среде.
391
400
  - `eda-review` не делит находки по обязательности: каждый принятый пункт требует исправления, а предложения без доказанного практического дефекта отбрасываются. Score остаётся экспертной оценкой серьёзности; любая находка блокирует `clean` независимо от score.
@@ -447,7 +456,7 @@ plan-polish = специализированный plan-review ─> plan-review-
447
456
  discover-automations может запускаться от review, fix-by-review или fix.
448
457
  ```
449
458
 
450
- `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, базу, консольные команды, интерфейс и алгоритмы перед ревью или коммитом.
451
460
 
452
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`.
453
462
 
package/lib/install.js CHANGED
@@ -277,6 +277,9 @@ const DEFAULT_SETTINGS = {
277
277
  planExecute: {
278
278
  mode: 'auto'
279
279
  },
280
+ manualTest: {
281
+ depth: 'full'
282
+ },
280
283
  review: {
281
284
  agents: DEFAULT_REVIEW_AGENTS
282
285
  },
@@ -295,6 +298,7 @@ const SETTINGS_SECTION_NAMES = [
295
298
  'plan-review',
296
299
  'plan-polish',
297
300
  'plan-execute',
301
+ 'manual-test',
298
302
  'review',
299
303
  'send-review',
300
304
  'discover-automations'
@@ -396,6 +400,20 @@ const PLAN_SIZE_CHOICES = [
396
400
  name: 'Спрашивать размер плана каждый раз'
397
401
  }
398
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
+ ];
399
417
  const DECISION_MODE_CHOICES = [
400
418
  {
401
419
  value: 'recommend_and_ask',
@@ -734,7 +752,8 @@ export async function askSettings({
734
752
  ['plan', 'plan.loggingStrategy', settings.plan, 'loggingStrategy', 'Какую стратегию логирования eda-plan использовать по умолчанию?', LOGGING_STRATEGY_CHOICES],
735
753
  ['plan-review', 'planReview.threshold', settings.planReview, 'threshold', 'Какой порог готовности использовать в eda-plan-review?', PLAN_REVIEW_THRESHOLD_CHOICES],
736
754
  ['plan-polish', 'planPolish.limit', settings.planPolish, 'limit', 'Сколько review-итераций разрешить eda-plan-polish?', PLAN_POLISH_LIMIT_CHOICES],
737
- ['plan-execute', 'planExecute.mode', settings.planExecute, 'mode', 'Как eda-plan-execute должен выполнять фазы по умолчанию?', PLAN_EXECUTE_MODE_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]
738
757
  ];
739
758
  for (const [section, key, target, property, message, choices] of scalarPrompts) {
740
759
  if (!requestedSections.has(section) || !shouldAsk(key)) continue;
@@ -1176,6 +1195,14 @@ function migrateSettingsContent(content) {
1176
1195
  value => { settings.planExecute.mode = value; }
1177
1196
  );
1178
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
+
1179
1206
  const review = objectValue(raw.review);
1180
1207
  transferAgentSettings({
1181
1208
  rawAgents: objectValue(review.agents),
@@ -1400,6 +1427,13 @@ plan-execute:
1400
1427
  # subagents — каждая фаза в отдельном субагенте, single — весь план одним контекстом, auto — решает по плану.
1401
1428
  mode: ${settings.planExecute.mode}
1402
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
+
1403
1437
  review:
1404
1438
  # Каждая проверка имеет собственный режим запуска и модели для обеих сред.
1405
1439
  agents:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gian-tiaga/eda",
3
- "version": "3.4.0",
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 или отправлять ревью.