@gian-tiaga/eda 3.14.0 → 4.0.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.
Files changed (78) hide show
  1. package/MIGRATION.md +23 -2
  2. package/README.md +131 -223
  3. package/agents/eda-aim-executor/prompt.md +2 -0
  4. package/agents/eda-aim-verifier/prompt.md +2 -0
  5. package/agents/eda-review-api/prompt.md +4 -4
  6. package/agents/eda-review-architecture/prompt.md +4 -4
  7. package/agents/eda-review-business/prompt.md +5 -12
  8. package/agents/eda-review-code-quality/prompt.md +4 -4
  9. package/agents/eda-review-correctness/prompt.md +3 -3
  10. package/agents/eda-review-database/prompt.md +4 -4
  11. package/agents/eda-review-documentation/prompt.md +4 -4
  12. package/agents/eda-review-frontend/prompt.md +4 -4
  13. package/agents/eda-review-infra/agent.json +14 -0
  14. package/agents/eda-review-infra/prompt.md +36 -0
  15. package/agents/eda-review-performance/prompt.md +7 -7
  16. package/agents/eda-review-plan-alignment/prompt.md +4 -4
  17. package/agents/eda-review-previous-reviews/prompt.md +5 -4
  18. package/agents/eda-review-references/prompt.md +4 -4
  19. package/agents/eda-review-rules/prompt.md +4 -4
  20. package/agents/eda-review-security/prompt.md +4 -4
  21. package/agents/eda-review-seo/agent.json +14 -0
  22. package/agents/eda-review-seo/prompt.md +36 -0
  23. package/agents/eda-review-tests/prompt.md +4 -4
  24. package/agents/eda-review-triage/agent.json +14 -0
  25. package/agents/eda-review-triage/prompt.md +38 -0
  26. package/lib/catalog.js +28 -1
  27. package/lib/install.js +221 -590
  28. package/lib/prompts.js +53 -0
  29. package/lib/renderers/codex-agent.js +3 -1
  30. package/lib/renderers/codex-skill.js +21 -1
  31. package/lib/renderers/opencode-skill.js +2 -2
  32. package/package.json +2 -3
  33. package/skills/_shared/done.md +15 -0
  34. package/skills/_shared/questions.md +9 -0
  35. package/skills/eda-aim/SKILL.md +2 -3
  36. package/skills/eda-business/SKILL.md +5 -6
  37. package/skills/eda-commit/SKILL.md +2 -3
  38. package/skills/eda-discover-automations/SKILL.md +6 -7
  39. package/skills/eda-explore/SKILL.md +28 -15
  40. package/skills/eda-fix/SKILL.md +7 -7
  41. package/skills/eda-fix-by-review/SKILL.md +4 -3
  42. package/skills/eda-just-do-it/SKILL.md +4 -4
  43. package/skills/eda-manual-test/SKILL.md +7 -5
  44. package/skills/eda-merge-worktree/SKILL.md +2 -3
  45. package/skills/eda-new-project/SKILL.md +3 -5
  46. package/skills/eda-orhestra/SKILL.md +3 -4
  47. package/skills/eda-plan/SKILL.md +126 -168
  48. package/skills/eda-plan-execute/SKILL.md +72 -92
  49. package/skills/eda-plan-polish/SKILL.md +14 -14
  50. package/skills/eda-plan-review/SKILL.md +25 -10
  51. package/skills/eda-plan-review-fix/SKILL.md +10 -7
  52. package/skills/eda-polish/SKILL.md +9 -6
  53. package/skills/eda-prepare-ai/SKILL.md +35 -15
  54. package/skills/eda-prod-check/SKILL.md +129 -0
  55. package/skills/eda-review/SKILL.md +92 -64
  56. package/skills/eda-review/references/checks/api.md +18 -0
  57. package/skills/eda-review/references/checks/architecture.md +16 -0
  58. package/skills/eda-review/references/checks/business.md +13 -0
  59. package/skills/eda-review/references/checks/code-quality.md +18 -0
  60. package/skills/eda-review/references/checks/correctness.md +19 -0
  61. package/skills/eda-review/references/checks/database.md +17 -0
  62. package/skills/eda-review/references/checks/documentation.md +13 -0
  63. package/skills/eda-review/references/checks/frontend.md +19 -0
  64. package/skills/eda-review/references/checks/infra.md +16 -0
  65. package/skills/eda-review/references/checks/performance.md +21 -0
  66. package/skills/eda-review/references/checks/plan-alignment.md +16 -0
  67. package/skills/eda-review/references/checks/previous-reviews.md +9 -0
  68. package/skills/eda-review/references/checks/references.md +11 -0
  69. package/skills/eda-review/references/checks/rules.md +16 -0
  70. package/skills/eda-review/references/checks/security.md +26 -0
  71. package/skills/eda-review/references/checks/seo.md +16 -0
  72. package/skills/eda-review/references/checks/tests.md +18 -0
  73. package/skills/eda-review/references/defects.md +24 -0
  74. package/skills/eda-review/references/triage.md +23 -0
  75. package/skills/eda-roadmap/SKILL.md +2 -4
  76. package/skills/eda-send-review/SKILL.md +3 -5
  77. package/skills/eda-worktree/SKILL.md +2 -3
  78. package/skills/eda-review/references/review-matrix.md +0 -72
package/lib/prompts.js ADDED
@@ -0,0 +1,53 @@
1
+ import { cancel, intro, isCancel, log, multiselect, outro, select, updateSettings } from '@clack/prompts';
2
+
3
+ updateSettings({ messages: { cancel: 'Отменено', error: 'Ошибка' } });
4
+
5
+ // Промпты принимают { message, choices: [{ value, name, description, checked }], default },
6
+ // поэтому установщик и тесты не зависят от API конкретной TUI-библиотеки.
7
+ // Подсказки clack по клавишам англоязычные, поэтому они отключены и заменены своими.
8
+
9
+ export async function selectPrompt({ message, choices, default: initialValue }, { input, output } = {}) {
10
+ const value = await select({
11
+ message,
12
+ options: choices.map(toOption),
13
+ initialValue,
14
+ showInstructions: false,
15
+ input,
16
+ output
17
+ });
18
+ return unlessCancelled(value, output);
19
+ }
20
+
21
+ export async function checkboxPrompt({ message, choices, required = false }, { input, output } = {}) {
22
+ for (;;) {
23
+ const value = unlessCancelled(await multiselect({
24
+ message: `${message}\nПробел — отметить, Enter — продолжить`,
25
+ options: choices.map(toOption),
26
+ initialValues: choices.filter(choice => choice.checked).map(choice => choice.value),
27
+ required: false,
28
+ showInstructions: false,
29
+ input,
30
+ output
31
+ }), output);
32
+ if (!required || value.length > 0) return value;
33
+ log.warn('Отметьте хотя бы один вариант.', { output });
34
+ }
35
+ }
36
+
37
+ export function startPrompts(title, { output } = {}) {
38
+ intro(title, { output });
39
+ }
40
+
41
+ export function finishPrompts(message, { output } = {}) {
42
+ outro(message, { output });
43
+ }
44
+
45
+ function toOption({ value, name, description }) {
46
+ return { value, label: name, ...(description ? { hint: description } : {}) };
47
+ }
48
+
49
+ function unlessCancelled(value, output) {
50
+ if (!isCancel(value)) return value;
51
+ cancel('Установка прервана.', { output });
52
+ throw new Error('Установка прервана пользователем.');
53
+ }
@@ -1,3 +1,5 @@
1
+ import { CODEX_READING_RULE } from './codex-skill.js';
2
+
1
3
  function tomlString(value) {
2
4
  return JSON.stringify(value);
3
5
  }
@@ -19,6 +21,6 @@ export function renderCodexAgent(agent, prompt) {
19
21
  if (agent.access === 'read-only') lines.push('sandbox_mode = "read-only"');
20
22
  if (agent.access === 'workspace-write') lines.push('sandbox_mode = "workspace-write"');
21
23
 
22
- lines.push('developer_instructions = """', prompt.trimEnd(), '"""', '');
24
+ lines.push('developer_instructions = """', prompt.trimEnd(), '', `## Чтение файлов\n\n${CODEX_READING_RULE}`, '"""', '');
23
25
  return lines.join('\n');
24
26
  }
@@ -1,3 +1,23 @@
1
+ // Codex обрезает середину длинного вывода команды, и агент принимает остаток за прочитанный файл.
2
+ // Блок вставляется после front matter каждого скила, как адаптер OpenCode.
3
+ export const CODEX_READING_RULE = 'Читай файлы полностью. Вывод с пометкой `tokens truncated` или `truncated output` — не прочитанный файл: дочитай пропущенный диапазон по строкам (`sed -n \'A,Bp\'`) до последней строки. Файл больше 400 строк или 20 КБ сразу читай частями. Документы рамки (`AGENTS.md`, `docs/rules*`, `docs/arch*`, карточки `docs/business/` и `docs/references/`) и план — только целиком.';
4
+
5
+ const CODEX_INSTRUCTIONS = `## Среда исполнения: Codex
6
+
7
+ Этот раздел адаптирует только платформенные механизмы инструкции ниже; её scope, режимы исполнения, подтверждения и контракты результатов сохраняются.
8
+
9
+ - ${CODEX_READING_RULE}
10
+ - \`AskUserQuestion\` в инструкции — блокирующий вопрос: \`request_user_input\`, если инструмент доступен, иначе короткий вопрос с вариантами в чат и остановка до ответа. В \`codex exec\` не читай stdin, верни \`blocked: нужен ответ пользователя\`.
11
+ - \`Agent\` в инструкции — \`spawn_agent\` с \`fork_turns: "none"\`.
12
+ - Если инструкция требует Plan Mode, а Plan mode не включён, покажи полный текст в чате и остановись до подтверждения. План — документ из инструкции; \`update_plan\` его не заменяет.
13
+
14
+ `;
15
+
1
16
  export function renderCodexSkill(content) {
2
- return content;
17
+ const closingMarker = content.indexOf('\n---', 4);
18
+ if (!content.startsWith('---\n') || closingMarker === -1) {
19
+ throw new Error('Не удалось добавить настройки Codex: некорректный front matter скила.');
20
+ }
21
+ const bodyStart = closingMarker + '\n---'.length;
22
+ return `${content.slice(0, bodyStart)}\n\n${CODEX_INSTRUCTIONS}${content.slice(bodyStart).trimStart()}`;
3
23
  }
@@ -6,8 +6,8 @@ const OPEN_CODE_INSTRUCTIONS = `## Среда исполнения: OpenCode V2
6
6
  - Установленного агента запускай через \`subagent\` с \`agent: <имя>\` и \`prompt: <вход>\`. Для изолированного выполнения скила используй установленного \`eda-skill-runner\` с указанием загрузить нужный скил. Дочерние сессии получают свежий контекст: передавай весь необходимый вход явно. Не передавай Codex-параметр \`fork_turns\`.
7
7
  - Для параллельных проверок отправь независимые вызовы одновременно, используй background только при независимой работе; ожидай уведомления, не опрашивай shell или файлы. Для продолжения передай \`sessionID\` того же агента.
8
8
  - Не заменяй \`eda-skill-runner\` встроенным general: general не может запускать субагентов. При недоступности нужной роли, вложенного запуска или инструмента верни конкретный \`blocked\`, не меняй режим и не подменяй работу отдельным CLI или основным агентом.
9
- - Вместо \`AskUserQuestion\` / \`request_user_input\` используй \`question\`; если интерактивный инструмент недоступен, задай короткий вопрос и остановись. В неинтерактивном запуске не читай stdin, верни \`blocked: нужен ответ пользователя\`.
10
- - Модели из колонок Claude/Codex и \`review.agents.*.model.claude/codex\` не относятся к OpenCode. По умолчанию используй модель установленного агента или наследуемую модель сессии; в поле MODEL передавай фактическую модель, иначе \`current\`. Явный runtime override должен иметь формат \`provider/model#variant\` (variant необязателен); если хост не может его применить, верни \`blocked\`. Не выдумывай provider ID и не переписывай настройки проекта.
9
+ - Вместо \`AskUserQuestion\` используй \`question\`; если интерактивный инструмент недоступен, задай короткий вопрос и остановись. В неинтерактивном запуске не читай stdin, верни \`blocked: нужен ответ пользователя\`.
10
+ - Модели из колонок Claude/Codex в таблицах скилов не относятся к OpenCode. По умолчанию используй модель установленного агента или наследуемую модель сессии; в поле MODEL передавай фактическую модель, иначе \`current\`. Явный runtime override должен иметь формат \`provider/model#variant\` (variant необязателен); если хост не может его применить, верни \`blocked\`. Исключение — \`review.agents\` в \`eda-review\`: значение \`provider/model#variant\` передавай как есть, а неприменимое заменяй моделью агента с warning по правилам скила. Не выдумывай provider ID и не переписывай настройки проекта.
11
11
  - Read-only агенты не имеют shell, редакторов, MCP и субагентов. Оркестратор заранее получает diff и нужные git/CI-данные разрешёнными read-only командами и передаёт их вместе с исходным target в prompt. Агент может дочитывать исходники; отсутствие shell не означает, что тесты были выполнены. Если доказательств недостаточно, сообщи блокер.
12
12
  - Если инструкция требует Plan Mode, используй доступный нативный режим планирования без изменения кода. Если его нет либо он запрещает сохранение подтверждённого плана в требуемый каталог, остановись с конкретным блокером, не обходи permissions.
13
13
  - Для strict кросс-CLI ревью из OpenCode попроси выбрать Claude Code или Codex CLI, если CLI не указан явно. Не считай OpenCode автоматически одной из двух сторон и не пропускай включённый strict.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gian-tiaga/eda",
3
- "version": "3.14.0",
3
+ "version": "4.0.0",
4
4
  "description": "Пакет скилов и специализированных агентов eda-* для Claude Code, Codex CLI и OpenCode",
5
5
  "type": "module",
6
6
  "bin": {
@@ -40,8 +40,7 @@
40
40
  "url": "https://github.com/falur/eda/issues"
41
41
  },
42
42
  "dependencies": {
43
- "@inquirer/checkbox": "^4.3.2",
44
- "@inquirer/select": "^5.1.5",
43
+ "@clack/prompts": "^1.8.1",
45
44
  "yaml": "^2.9.0"
46
45
  }
47
46
  }
@@ -0,0 +1,15 @@
1
+ ## Доказательство готовности
2
+
3
+ «Готово», «исправлено», «тесты проходят» пиши только с доказательством из текущего запуска: команда и итог из её вывода — число прошедших и упавших тестов, код выхода, ошибки.
4
+
5
+ | Утверждение | Доказательство | Не доказательство |
6
+ |---|---|---|
7
+ | Тесты, линтер, typecheck или сборка проходят | команда в этом запуске и её итог: 0 падений, код выхода 0 | прошлый запуск; «должно пройти»; линтер вместо сборки |
8
+ | Ошибка исправлена | исходный симптом воспроизведён до правки и не воспроизводится после той же проверкой | код изменён |
9
+ | Регрессионный тест ловит ошибку | тест падает на коде до исправления и проходит после | тест один раз прошёл |
10
+ | Пункт плана или задачи выполнен | сверка изменений с текстом пункта | зелёные тесты |
11
+ | Субагент выполнил работу | diff и проверка результата | отчёт субагента |
12
+
13
+ - Проверку, которую не удалось запустить, называй невыполненной с причиной, а не пройденной.
14
+ - Новые предупреждения и ошибки в выводе проверок — тоже результат: сообщи о них.
15
+ - **Не перебирай исправления.** Если три попытки исправить одну и ту же проблему не помогли, четвёртую не делай: остановись и сообщи, что пробовал, что наблюдал и какую причину подозреваешь — вероятно, неверен сам подход. Если скил задаёт свой лимит повторов или порядок продолжения, действует он.
@@ -0,0 +1,9 @@
1
+ ## Как задавать вопросы
2
+
3
+ Пользователю — только решения. Факты из кода, документов, истории и внешних источников выясняй сам. Какие решения выносить на вопрос, задают правила этого скила и его режим решений, если он есть; здесь — как спрашивать.
4
+
5
+ 1. **Дерево решений.** Выпиши открытые решения и для каждого — какие другие решения нужны, чтобы его задать. Граница — решения, у которых все такие предпосылки уже закрыты.
6
+ 2. **Раунд — вся граница сразу.** Задай все вопросы границы одним раундом, а не по одному. Вопрос, варианты которого зависят от ответа на другой вопрос этого же раунда, переносится в следующий. Если инструмент принимает меньше вопросов за вызов, задай раунд несколькими вызовами подряд. Каждый вопрос — внутри инструмента вопросов, а не дополнительным абзацем рядом с ним: такой вопрос теряется.
7
+ 3. **Вопрос с рекомендацией.** В каждом вопросе: суть одной фразой; почему это важно — что изменится в результате; 2–4 варианта; рекомендованный вариант первым с пометкой «(рекомендую)» и причиной. Формулируй так, чтобы согласие принимало рекомендацию.
8
+ 4. **Следующий раунд.** Ответы закрывают решения и открывают зависящие от них: пересчитай границу и задай следующий раунд. Не переспрашивай то, на что уже ответили, и не повторяй вопрос другими словами.
9
+ 5. **Конец вопросов.** Вопросы заканчиваются, когда граница пуста: каждое решение закрыто ответом, выяснено по фактам или выбрано самостоятельно там, где режим это разрешает. Только после этого переходи к результату.
@@ -62,9 +62,8 @@ aim:
62
62
 
63
63
  В ручном режиме передай вопрос пользователю:
64
64
 
65
- - Claude Code: используй `AskUserQuestion`;
66
- - Интерактивный Codex: используй `request_user_input`, если доступен; иначе задай короткий вопрос с вариантами и остановись до ответа;
67
- - Неинтерактивный Codex: не читай stdin; заверши `blocked: нужен ответ пользователя` и перечисли вопрос с вариантами.
65
+ - интерактивный запуск: `AskUserQuestion`, затем остановись до ответа;
66
+ - неинтерактивный запуск: не читай stdin; заверши `blocked: нужен ответ пользователя` и перечисли вопрос с вариантами.
68
67
 
69
68
  В автоматическом режиме не спрашивай пользователя: выбери `recommended_answer`, если он не противоречит исходному запросу, правилам или безопасности; иначе выбери лучший безопасный вариант по фактам проекта. Запиши автоматический ответ в данные продолжения и передай тому же агенту. Не принимай автоматически необратимые внешние действия, расширение цели, публикацию, расходы, удаление данных или ослабление проверок — для них нужен человек.
70
69
 
@@ -32,17 +32,16 @@ description: 'Создаёт и обновляет согласованное о
32
32
  11. **`about` — только обзор.** Это не сводная бизнес-спецификация и не каталог остальных карточек. Кратко опиши сам проект и перечисли его основные пользовательские возможности; не раскладывай их по модулям и не детализируй правила, сценарии и исключения других тем.
33
33
  12. **Карточка не привязана к коду.** Код, тесты и конфиги используй для поиска вопросов и проверки текущего поведения, но пиши карточку устойчивым предметным языком. Не включай пути и строки исходников, имена классов, функций, файлов и внутренних модулей — в том числе в `about` и `Расхождения с реализацией`.
34
34
  13. **Алгоритм допустим, стек — нет.** Фиксируй выбранный функциональный или security-механизм, если он определяет поведение продукта: например, JWT либо непрозрачные токены с хранением в базе данных, правила выпуска, срока действия, обновления и отзыва. Не регламентируй язык, framework, библиотеку, конкретную СУБД, таблицы и способ программной сборки механизма, если это не отдельное подтверждённое ограничение продукта.
35
+ 14. **Карточка не больше 20 КБ.** Тему, которая не помещается, раздели на самостоятельные подтемы с отдельными карточками и строками индекса, а не урезай правила. Карточка описывает текущее согласованное поведение: изменение вносится в раздел-владелец на месте, без датированных дополнений и журнала изменений.
35
36
 
36
37
  ## Интерактивные вопросы
37
38
 
38
- Когда инструкция говорит `AskUserQuestion`, это означает блокирующий интерактивный вопрос.
39
+ Когда инструкция говорит `AskUserQuestion`, это означает блокирующий интерактивный вопрос: задай его и остановись до ответа.
39
40
 
40
- - Claude Code: используй `AskUserQuestion`.
41
- - Codex interactive: если доступен `request_user_input`, используй его. Если tool недоступен, задай один короткий вопрос с 2–3 вариантами, рекомендацией и остановись до ответа.
42
- - Codex exec / неинтерактивный запуск: не читай stdin. Если требуется решение или подтверждение, заверши `blocked: нужен ответ пользователя`, перечисли варианты и не записывай неподтверждённые файлы.
41
+ - Неинтерактивный запуск: не читай stdin. Если требуется решение или подтверждение, заверши `blocked: нужен ответ пользователя`, перечисли варианты и не записывай неподтверждённые файлы.
43
42
  - Не запускай команды, ожидающие интерактивный ввод в терминале.
44
43
 
45
- Задавай пакетами не больше трёх связанных вопросов. Не спрашивай факты, которые можно надёжно выяснить из проекта.
44
+ <!-- include: skills/_shared/questions.md -->
46
45
 
47
46
  ## Процесс
48
47
 
@@ -133,7 +132,7 @@ description: 'Создаёт и обновляет согласованное о
133
132
  Убедись, что:
134
133
 
135
134
  - индекс содержит только существующие согласованные карточки и ровно две колонки `Описание` и `Карточка`;
136
- - новая или обновлённая карточка соответствует подтверждённому содержанию;
135
+ - новая или обновлённая карточка соответствует подтверждённому содержанию, не больше 20 КБ и без датированных дополнений;
137
136
  - карточка не содержит сведений о соседних темах и не раздута необязательными разделами;
138
137
  - `about` остаётся коротким обзором проекта и его основных возможностей без описания внутренних модулей;
139
138
  - сложная тема подробно фиксирует все значимые подтверждённые правила, алгоритмы, состояния и исключения;
@@ -52,9 +52,8 @@ description: 'Коммитит выбранные или все незакомм
52
52
 
53
53
  Когда агент вернул `blocked`, задай его один конкретный вопрос пользователю.
54
54
 
55
- - Claude Code: используй `AskUserQuestion`.
56
- - Codex interactive: используй `request_user_input`, если доступен; иначе задай короткий вопрос с вариантами 1–3 и остановись до ответа.
57
- - Codex exec / неинтерактивный запуск: не читай stdin; заверши со статусом `blocked: нужен ответ пользователя`, перечисли вопрос и варианты.
55
+ - Интерактивный запуск: `AskUserQuestion`, затем остановись до ответа.
56
+ - Неинтерактивный запуск: не читай stdin; заверши со статусом `blocked: нужен ответ пользователя`, перечисли вопрос и варианты.
58
57
  - Никогда не задавай общий вопрос о дальнейших действиях, если `$REQUESTED_ACTIONS` уже содержит их.
59
58
 
60
59
  После ответа сохрани исходный `$USER_REQUEST`, добавь новый ответ и продолжи того же агента, если хост это поддерживает. Иначе запусти этого же custom agent заново с предыдущим результатом, актуальным состоянием и ответом.
@@ -36,10 +36,8 @@ description: 'Аудирует автоматические проверки п
36
36
 
37
37
  ## Интерактивные вопросы
38
38
 
39
- Когда инструкция говорит `AskUserQuestion`, это означает блокирующий интерактивный вопрос.
40
- - Claude Code: используй `AskUserQuestion`.
41
- - Codex interactive: если доступен `request_user_input`, используй его. Если tool недоступен, задай один короткий вопрос в чат, дай варианты 1–3, напиши «Ответь номером или своим вариантом. Я продолжу только после ответа.» и остановись.
42
- - Codex exec / неинтерактивный запуск: не задавай вопросы и не пытайся читать stdin. Если без ответа нельзя безопасно продолжать, заверши работу со статусом `blocked: нужен ответ пользователя`, перечисли вопросы и варианты, не выполняй рискованные действия.
39
+ Когда инструкция говорит `AskUserQuestion`, это означает блокирующий интерактивный вопрос: задай его и остановись до ответа.
40
+ - Неинтерактивный запуск: не задавай вопросы и не пытайся читать stdin. Если без ответа нельзя безопасно продолжать, заверши работу со статусом `blocked: нужен ответ пользователя`, перечисли вопросы и варианты, не выполняй рискованные действия.
43
41
  - Не запускай команды, которые ждут интерактивного ввода в терминале; перед такими командами спроси в хост-интерфейсе или остановись с `blocked`.
44
42
 
45
43
  ## Этапы
@@ -69,18 +67,19 @@ description: 'Аудирует автоматические проверки п
69
67
  4. **Стиль и качество:** formatter, linter, naming, complexity, duplication, dead code, unused exports/dependencies, forbidden patterns, TODO/FIXME policy и лимиты размера.
70
68
  5. **Статический анализ:** typecheck, nullability, data-flow/taint, API misuse, unreachable code, unsafe/undefined behavior, memory/thread/address sanitizers и анализаторы выбранного языка.
71
69
  6. **Границы кода:** forbidden imports, dependency direction, cycles, layers, public API, ownership, package/module boundaries, generated-code boundaries и architecture fitness functions.
72
- 7. **Конфиги и инфраструктура:** schema/parse для env, YAML/JSON/TOML, CI, Docker/Compose, Kubernetes/Helm, Terraform/IaC, proxy, feature flags, IAM, observability и env-example drift.
70
+ 7. **Конфиги и инфраструктура:** schema/parse для env, YAML/JSON/TOML, CI, Docker/Compose и Dockerfile lint, Kubernetes/Helm, Terraform/IaC, proxy и его анализатор конфигурации, редиректы на HTTPS и канонический хост, HSTS, feature flags, IAM, observability и env-example drift.
73
71
  8. **API и совместимость:** OpenAPI/GraphQL/Proto, breaking changes, generated-code drift, serialization, backward/forward compatibility, idempotency, pagination/filter/sort.
74
72
  9. **БД и данные:** migration lint/forward/rollback/dry-run, schema drift, constraints, fixtures, transactions, concurrency, query plans/N+1, backup/restore, retention/anonymization и data invariants.
75
73
  10. **Безопасность и supply chain:** secrets, SAST, DAST, dependency/container/IaC scan, licenses, SBOM, lockfile integrity, provenance/signatures, authn/authz negative tests, injection, XSS/CSRF/SSRF, CORS/CSP/headers, rate limits и PII leakage.
76
- 11. **Производительность и надёжность:** benchmarks/budgets, bundle size, load/stress/spike/soak, leaks, startup, timeouts/retries/circuit breakers, graceful shutdown, fault injection/chaos и recovery.
74
+ 11. **Производительность и надёжность:** benchmarks/budgets, тесты на число запросов к БД и внешних вызовов на операцию, bundle size и бюджет веса CSS/JS, проверка сжатия и кеш-заголовков production после деплоя, load/stress/spike/soak, leaks, startup, timeouts/retries/circuit breakers, graceful shutdown, fault injection/chaos и recovery.
77
75
  12. **Сборка и релиз:** clean-clone/reproducible build, generated artifacts, package contents, runtime/OS/architecture matrix, install/upgrade/downgrade, semver/changelog, release dry-run, canary/rollback и post-deploy smoke.
78
76
  13. **Документация:** Markdown/style/spell, links, executable snippets, CLI help/API docs drift, diagrams/schemas и migration/release notes.
79
77
  14. **Эксплуатация:** health/readiness/liveness, metrics/log/trace schemas, no secrets/PII in logs, alert rules, dashboards as code, SLO/error budgets, disaster recovery и restore drills.
80
78
  15. **Доменные проверки:** платежи, почта, очереди, jobs, webhooks, поиск, файлы/media, mobile signing, offline/sync, localization, analytics events и другие инварианты продукта.
81
79
  16. **AI-функции:** prompt/output schemas, evals, prompt injection/jailbreak, data leakage, tool permissions, nondeterminism, latency и token/cost budgets.
82
80
  17. **MCP:** browser/Playwright MCP для сценариев и визуальных доказательств; MCP для БД, API, документации, GitHub/GitLab, cloud, observability и выбранного языка/фреймворка. Укажи точный сценарий, минимальные права и почему CLI/CI недостаточно.
83
- 18. **Агентный процесс и планы:** чтение обязательных источников, формат артефактов, проверка критериев готовности, файлов/модулей и зависимостей задач, rollback/backup для рискованных действий, запрет пропуска команд и повторяющиеся ошибки агентов.
81
+ 18. **SEO и индексация:** для публичных страниц — коды ответов и редиректы, canonical, robots и `noindex` в production, sitemap, title/description, hreflang, структурированные данные и SEO-аудит страниц в CI.
82
+ 19. **Агентный процесс и планы:** чтение обязательных источников, формат артефактов, проверка критериев готовности, файлов/модулей и зависимостей задач, rollback/backup для рискованных действий, запрет пропуска команд и повторяющиеся ошибки агентов.
84
83
 
85
84
  Для каждого паттерна собери: доказательство из истории либо baseline-пробел в текущем проекте, затронутые файлы, возможный ущерб, вероятность, надёжность проверки и стоимость внедрения. Повторяющиеся паттерны обычно приоритетнее, но не отбрасывай сильного кандидата из-за одного случая или потому, что ошибка ещё не произошла.
86
85
 
@@ -34,27 +34,33 @@ description: 'Исследует техническую тему или зада
34
34
 
35
35
  Всегда значимые развилки: новые зависимости и сервисы; БД/ORM/очереди/кэш/storage/search/background jobs; миграции и формат хранения; auth/permissions/payments/secrets/персональные данные; cloud/provider/cost/lock-in/SLA; архитектурные паттерны и публичные контракты; продуктовые компромиссы скорости, качества, UX, стоимости, срока или объёма; выбор, который влияет на то, какой результат будет передан в `eda-plan`.
36
36
 
37
- Не начинай с вопросов, если можно сначала быстро собрать факты. После первичного контекста сгруппируй близкие развилки в пакет из 1–3 вопросов. Если выбрать нельзя без пользовательского решения, задай `AskUserQuestion` и не продолжай финализацию.
37
+ Не начинай с вопросов, если можно сначала быстро собрать факты. Если выбрать нельзя без пользовательского решения, задай вопрос по разделу «Как задавать вопросы» и не продолжай финализацию.
38
+
39
+ <!-- include: skills/_shared/questions.md -->
38
40
 
39
41
  ## Главные правила
40
42
 
41
43
  1. **Никаких правок кода.** Запись только в `docs/artifacts/researches/`.
42
44
  2. **Итог — конкретика.** Нельзя заканчивать абстрактными описаниями, списком возможностей или «можно выбрать один из вариантов».
43
45
  3. **Развилки закрывай по `decision_mode`.** Значимые развилки подтверждай до финализации, мелкие локальные решения выбирай сам и не создавай шум.
44
- 4. **Риски вплетай в исследование.** Не создавай отдельный обязательный раздел или этап рисков. Если риск влияет на выбор, источник, ограничение или будущую проверку, фиксируй его рядом с соответствующим решением: что может пойти не так и как это учитывается — снимаем, принимаем или выносим за рамки.
45
- 5. **Версии проверяй.** Если речь о пакетах, библиотеках, CLI, сервисах или другом ПО, а версия не задана контекстом, проверь последнюю стабильную версию через context7, если он доступен, или через web search по официальным источникам.
46
- 6. **Прочитай рамку проекта.** Прочитай `docs/rules.md` и `docs/arch.md`, если есть. Сначала определи исследуемую задачу, затем через `docs/business.md` выбери только карточки затронутого поведения, а через `docs/references.md` — только карточки затронутых компонентов. Нерелевантные карточки не загружай.
47
- 7. **Разделяй источники.** Текущий запрос задаёт область исследования; применимые business-карточки — требования к затронутому поведению; rules, architecture и references — техническая рамка. Если запрос противоречит business-карточке, остановись и через `AskUserQuestion` спроси, изменить задачу или пересогласовать правило через `eda-business`. Не рекомендуй отклонение от технического эталона без явной причины и подтверждения пользователя.
48
- 7. **Каждое фактическое утверждение — со ссылкой** (`file.ext:42`, URL, коммит). Без ссылки — помечай как «гипотеза» и не делай её основанием выбранного решения.
49
- 8. **Простой язык.** Термины — только когда без них нельзя, сразу с пояснением.
50
- 9. **Таблицы > сплошной текст** для фактов, развилок, сравнений, версий и источников.
46
+ 4. **Все открытые вопросы закрываются до сохранения.** Открытый вопрос — любое невыясненное место, от которого зависят выбранное решение, границы задачи, контракт или следующий шаг: развилка без выбора, непроверенный факт, недостающее требование, гипотеза в основании решения, условная рекомендация «если X — A, иначе B» без выясненного X, «уточнить позже», «требует дополнительного исследования», «TBD». Каждый такой вопрос закрой одним из способов:
47
+ - выясни по коду, документам или источникам и дай ссылку;
48
+ - реши по `decision_mode`: в `autonomous` выбери сам и запиши причину, в остальных режимах спроси пользователя через `AskUserQuestion`;
49
+ - вынеси за границы исследования только с подтверждением пользователя (в `autonomous` — с записанной причиной) и запиши границу в `Суть`.
50
+
51
+ Вопрос, который не меняет решение, границы, контракт или следующий шаг, не поднимай и в отчёт не пиши. Раздела «Открытые вопросы» в отчёте нет. Если вопрос нельзя закрыть без пользователя, а спросить нельзя, заверши `blocked: нужен ответ пользователя` и перечисли вопросы; отчёт с открытыми вопросами не выдавай за готовый.
52
+ 5. **Риски вплетай в исследование.** Не создавай отдельный обязательный раздел или этап рисков. Если риск влияет на выбор, источник, ограничение или будущую проверку, фиксируй его рядом с соответствующим решением: что может пойти не так и как это учитывается — снимаем, принимаем или выносим за рамки.
53
+ 6. **Версии проверяй.** Если речь о пакетах, библиотеках, CLI, сервисах или другом ПО, а версия не задана контекстом, проверь последнюю стабильную версию через context7, если он доступен, или через web search по официальным источникам.
54
+ 7. **Прочитай рамку проекта.** Прочитай `docs/rules.md` и `docs/arch.md`, если есть. Сначала определи исследуемую задачу, затем через `docs/business.md` выбери только карточки затронутого поведения, а через `docs/references.md` — только карточки затронутых компонентов. Нерелевантные карточки не загружай.
55
+ 8. **Разделяй источники.** Текущий запрос задаёт область исследования; применимые business-карточки — требования к затронутому поведению; rules, architecture и references — техническая рамка. Если запрос противоречит business-карточке, остановись и через `AskUserQuestion` спроси, изменить задачу или пересогласовать правило через `eda-business`. Не рекомендуй отклонение от технического эталона без явной причины и подтверждения пользователя.
56
+ 9. **Каждое фактическое утверждение — со ссылкой** (`file.ext:42`, URL, коммит). Без ссылки — помечай как «гипотеза» и не делай её основанием выбранного решения.
57
+ 10. **Простой язык.** Термины — только когда без них нельзя, сразу с пояснением.
58
+ 11. **Таблицы > сплошной текст** для фактов, развилок, сравнений, версий и источников.
51
59
 
52
60
  ## Интерактивные вопросы
53
61
 
54
- Когда инструкция говорит `AskUserQuestion`, это означает блокирующий интерактивный вопрос.
55
- - Claude Code: используй `AskUserQuestion`.
56
- - Codex interactive: если доступен `request_user_input`, используй его. Если tool недоступен, задай один короткий вопрос в чат, дай варианты 1–3, напиши «Ответь номером или своим вариантом. Я продолжу только после ответа.» и остановись.
57
- - Codex exec / неинтерактивный запуск: не задавай вопросы и не пытайся читать stdin. Если без ответа нельзя безопасно продолжать, заверши работу со статусом `blocked: нужен ответ пользователя`, перечисли вопросы и варианты, не выполняй рискованные действия.
62
+ Когда инструкция говорит `AskUserQuestion`, это означает блокирующий интерактивный вопрос: задай его и остановись до ответа.
63
+ - Неинтерактивный запуск: не задавай вопросы и не пытайся читать stdin. Если без ответа нельзя безопасно продолжать, заверши работу со статусом `blocked: нужен ответ пользователя`, перечисли вопросы и варианты, не выполняй рискованные действия.
58
64
  - Не запускай команды, которые ждут интерактивного ввода в терминале.
59
65
 
60
66
  ## Этапы
@@ -66,6 +72,8 @@ description: 'Исследует техническую тему или зада
66
72
  - какой результат нужен пользователю;
67
73
  - какие вопросы должны быть закрыты, чтобы можно было переходить к плану или реализации.
68
74
 
75
+ Запиши эти вопросы в рабочий список открытых вопросов и дополняй его всем, что всплывает при сборе контекста и сравнении вариантов. Список — внутренний инструмент: в отчёт он не идёт, туда попадают только закрывающие его факты, решения и ответы.
76
+
69
77
  Если тема неоднозначна или критерий готовности нельзя вывести из запроса — задай `AskUserQuestion` и остановись до ответа.
70
78
 
71
79
  ### 2. Собрать контекст
@@ -79,12 +87,14 @@ description: 'Исследует техническую тему или зада
79
87
  - выбирай последнюю стабильную версию, не preview/beta/rc, если пользователь явно не попросил иначе;
80
88
  - запиши источник, дату проверки и причину выбора.
81
89
 
82
- ### 3. Закрыть развилки
90
+ ### 3. Закрыть развилки и открытые вопросы
83
91
 
84
92
  Собери значимые развилки: архитектурные, продуктовые, технические, миграционные, по зависимостям и совместимости. Для каждой дай варианты, выбранный вариант или рекомендацию, источник, причину и важные риски рядом с решением.
85
93
 
86
94
  Не прячь значимый выбор внутри текста: если нужен пакет, БД или другой ключевой компонент, сначала сравни 2–3 подходящих варианта, затем закрой выбор по `decision_mode`. Если появляется высокий риск без понятного решения, это блокер: задай `AskUserQuestion` или заверши со статусом `blocked`. Не выноси риски в отдельную секцию ради формы; они должны лежать в `Решении`, причинах выбора, ограничениях, проверках версий или итоговом выводе.
87
95
 
96
+ Перед отчётом пройди весь рабочий список открытых вопросов — из критерия готовности этапа 1 и найденных по ходу — и закрой каждый по правилу 4. Не переходи к этапу 4, пока в списке остаётся хотя бы один незакрытый вопрос.
97
+
88
98
  ### 4. Собрать отчёт
89
99
 
90
100
  Сохрани отчёт в `docs/artifacts/researches/{YYYY-MM-DD}_{HH-MM}_{slug}.md`.
@@ -133,7 +143,9 @@ Quality gate перед сохранением:
133
143
  - в `Решение` есть описание архитектуры или явно сказано, почему архитектурный слой не затронут;
134
144
  - в `Ответы на вопросы` записаны все вопросы и пользовательские выборы по развилкам, заданные в процессе исследования, чтобы `eda-plan` не задавал их повторно;
135
145
  - в `Итог` есть короткая конкретика, что делать дальше на уровне подхода, без пошагового плана;
136
- - нет незакрытых развилок;
146
+ - нет незакрытых развилок и открытых вопросов: каждый вопрос из критерия готовности этапа 1 и найденный по ходу закрыт фактом со ссылкой, решением или подтверждённой границей;
147
+ - в отчёте нет «уточнить позже», «требует дополнительного исследования», «TBD», «на усмотрение», раздела «Открытые вопросы» и условных рекомендаций без выясненного условия;
148
+ - выбранное решение не опирается на гипотезу;
137
149
  - нет рисков, которые перечислены отдельно от решения и никак не влияют на выбор, ограничения или будущие проверки;
138
150
  - нет высокого риска без понятного решения;
139
151
  - версии пакетов/ПО проверены или объяснено, почему это не требуется;
@@ -162,7 +174,7 @@ CLI нет — `AskUserQuestion`: продолжать без ревью или
162
174
 
163
175
  ### 6. Допилить по ревью — только в `strict`
164
176
 
165
- Бесспорные замечания → правь. Спорные → `AskUserQuestion`. Отклонённые → оставь с причиной. В конец отчёта добавь раздел `## Реакция на ревью` (Принято / Отклонено / Спорное). `status: reviewed`. Покажи дифф.
177
+ Бесспорные замечания → правь. Спорные → `AskUserQuestion`. Отклонённые → оставь с причиной. Новые открытые вопросы из ревью закрой по правилу 4 до `status: reviewed`. В конец отчёта добавь раздел `## Реакция на ревью` (Принято / Отклонено / Спорное). `status: reviewed`. Покажи дифф.
166
178
 
167
179
  ### 7. Финал
168
180
 
@@ -172,6 +184,7 @@ CLI нет — `AskUserQuestion`: продолжать без ревью или
172
184
 
173
185
  - Править код, миграции, конфиги или зависимости.
174
186
  - Оставлять несколько равных вариантов «на выбор» в итоговом отчёте.
187
+ - Сохранять отчёт с открытыми вопросами, «уточнить позже», «TBD» или разделом «Открытые вопросы».
175
188
  - Писать общий обзор вместо конкретного описания проблемы, архитектуры и решения.
176
189
  - Перечислять риски без выбранного закрытия.
177
190
  - Планировать реализацию по шагам — это работа `eda-plan`.
@@ -23,12 +23,12 @@ description: 'Вносит изменения в код по плану или
23
23
  6. **Историю фиксируй в `docs/artifacts/fixes/`.** Отчёт обязателен даже для маленькой правки.
24
24
  7. **Не коммить и не пушь.** Это `eda-commit`. Не делай ревью — это `eda-review`.
25
25
 
26
+ <!-- include: skills/_shared/done.md -->
27
+
26
28
  ## Интерактивные вопросы
27
29
 
28
- Когда инструкция говорит `AskUserQuestion`, это означает блокирующий интерактивный вопрос.
29
- - Claude Code: используй `AskUserQuestion`.
30
- - Codex interactive: если доступен `request_user_input`, используй его. Если tool недоступен, задай один короткий вопрос в чат, дай варианты 1–3, напиши «Ответь номером или своим вариантом. Я продолжу только после ответа.» и остановись.
31
- - Codex exec / неинтерактивный запуск: не задавай вопросы и не пытайся читать stdin. Если без ответа нельзя безопасно продолжать, заверши работу со статусом `blocked: нужен ответ пользователя`, перечисли вопросы и варианты, не выполняй рискованные действия.
30
+ Когда инструкция говорит `AskUserQuestion`, это означает блокирующий интерактивный вопрос: задай его и остановись до ответа.
31
+ - Неинтерактивный запуск: не задавай вопросы и не пытайся читать stdin. Если без ответа нельзя безопасно продолжать, заверши работу со статусом `blocked: нужен ответ пользователя`, перечисли вопросы и варианты, не выполняй рискованные действия.
32
32
  - Не запускай команды, которые ждут интерактивного ввода в терминале; перед такими командами спроси в хост-интерфейсе или остановись с `blocked`.
33
33
 
34
34
  ## Этапы
@@ -40,13 +40,13 @@ description: 'Вносит изменения в код по плану или
40
40
  Прочитай `docs/rules.md` и `docs/arch.md`, если есть. Сначала определи задачу фикса и затронутое поведение. Если связанный план содержит `sources.business`, прочитай только перечисленные применимые карточки; иначе через `docs/business.md` выбери по описаниям только карточки этой темы. Если подходящих карточек нет, продолжай без business-контекста. Если существует `docs/references.md`, выбери по индексу только применимые технические карточки и используй их примеры как ожидаемую форму реализации. Если `$FIX_CONTEXT` ссылается на research, review, issue или другой файл — прочитай и его.
41
41
 
42
42
  ### 3. Сделать фикс
43
- Найди релевантный код и внеси минимальные правки. Текущая задача задаёт scope, применимая business-карточка — требования к затронутому поведению, reference-карточка — форму реализации. Если задача противоречит business-карточке, остановись, покажи конфликт и через `AskUserQuestion` спроси: изменить задачу или сначала пересогласовать правило через `eda-business`. Следуй применимому техническому примеру; отклоняйся только по причине, подтверждённой пользователем или уже записанной во входном плане. Если задача состоит из нескольких пунктов, иди по ним последовательно. Останавливайся и спрашивай также при рискованной операции, миграции, удалении данных или работе с секретами.
43
+ Если задача — ошибка, сначала воспроизведи её симптом тестом, командой или запросом и сохрани вывод. Если воспроизвести нельзя, напиши в отчёте, что пробовал и по каким признакам выбрано исправление. Затем найди релевантный код и внеси минимальные правки. Текущая задача задаёт scope, применимая business-карточка — требования к затронутому поведению, reference-карточка — форму реализации. Если задача противоречит business-карточке, остановись, покажи конфликт и через `AskUserQuestion` спроси: изменить задачу или сначала пересогласовать правило через `eda-business`. Следуй применимому техническому примеру; отклоняйся только по причине, подтверждённой пользователем или уже записанной во входном плане. Если задача состоит из нескольких пунктов, иди по ним последовательно. Останавливайся и спрашивай также при рискованной операции, миграции, удалении данных или работе с секретами.
44
44
 
45
45
  ### 4. Добавить или обновить тесты
46
- Если фикс меняет поведение — добавь тест рядом с изменением или обнови существующий. Если тесты не нужны, в отчёте коротко объясни почему.
46
+ Если фикс меняет поведение — добавь тест рядом с изменением или обнови существующий. Тест на исправленную ошибку должен падать на коде до исправления. Если тесты не нужны, в отчёте коротко объясни почему.
47
47
 
48
48
  ### 5. Финальная проверка
49
- Прогони подходящие тесты и линтеры. Команды определи по стеку проекта. Свои поломки — исправь и повтори. Чужие или несвязанные поломки — зафиксируй в отчёте и спроси через `AskUserQuestion`, если без решения нельзя продолжать.
49
+ Повтори проверку, которой воспроизводил ошибку: симптом больше не воспроизводится. Прогони подходящие тесты и линтеры. Команды определи по стеку проекта. Свои поломки — исправь и повтори. Чужие или несвязанные поломки — зафиксируй в отчёте и спроси через `AskUserQuestion`, если без решения нельзя продолжать.
50
50
 
51
51
  ### 6. Сохранить отчёт
52
52
  Сохрани отчёт в `docs/artifacts/fixes/{YYYY-MM-DD}_{HH-MM}_{slug}.md`.
@@ -24,13 +24,14 @@ description: 'Исправляет код по готовому ревью из
24
24
  7. В конце обязательно прогони полный набор тестов и линтеров один раз.
25
25
  8. Пиши просто и конкретно; в отчёте используй таблицу.
26
26
 
27
+ <!-- include: skills/_shared/done.md -->
28
+
27
29
  ## Интерактивные вопросы
28
30
 
29
31
  Когда без ответа нельзя безопасно продолжать:
30
32
 
31
- - Claude Code: используй `AskUserQuestion`.
32
- - Codex interactive: используй `request_user_input`, если доступен; иначе задай один короткий вопрос с 2–3 вариантами и остановись до ответа.
33
- - Codex exec и другой неинтерактивный запуск: не читай stdin; верни `blocked: нужен ответ пользователя`, перечисли вопрос и варианты, не выполняй рискованное действие.
33
+ - Интерактивный запуск: `AskUserQuestion`, затем остановись до ответа.
34
+ - Неинтерактивный запуск: не читай stdin; верни `blocked: нужен ответ пользователя`, перечисли вопрос и варианты, не выполняй рискованное действие.
34
35
 
35
36
  Не запускай команды, которые ждут интерактивного ввода в терминале. Вопрос не разрешает молча заменить находку другой правкой или исправлять несвязанные поломки.
36
37
 
@@ -24,6 +24,8 @@ description: 'Прямо выполняет задачу, указанную п
24
24
  7. **Новый проект разворачивай штатным CLI.** Если для выбранного стека существует официальный generator/scaffold CLI, используй его через package manager или runtime (`composer create-project`, `npm create`, `npx`, `cargo new` или реальный аналог), а не создавай генерируемую основу вручную. Затем меняй полученный scaffold в рамках запроса. Если подходящих CLI несколько и выбор меняет результат, задай `AskUserQuestion`.
25
25
  8. **Артефакт обязателен.** Создай отчёт до первого содержательного изменения и поддерживай его в актуальном состоянии. Заверши отчёт даже при частичном результате, блокере или ошибке.
26
26
 
27
+ <!-- include: skills/_shared/done.md -->
28
+
27
29
  ## Как выбрать контекст
28
30
 
29
31
  1. Прочитай применимые `AGENTS.md` и другие проектные инструкции для затронутых путей.
@@ -46,11 +48,9 @@ description: 'Прямо выполняет задачу, указанную п
46
48
 
47
49
  ## Интерактивные вопросы
48
50
 
49
- Когда инструкция говорит `AskUserQuestion`, это означает блокирующий интерактивный вопрос.
51
+ Когда инструкция говорит `AskUserQuestion`, это означает блокирующий интерактивный вопрос: задай его и остановись до ответа.
50
52
 
51
- - Claude Code: используй `AskUserQuestion`.
52
- - Codex interactive: если доступен `request_user_input`, используй его. Если tool недоступен, задай один короткий вопрос в чат, дай варианты 1–3, напиши «Ответь номером или своим вариантом. Я продолжу только после ответа.» и остановись.
53
- - Codex exec / неинтерактивный запуск: не задавай вопросы и не пытайся читать stdin. Если без ответа нельзя безопасно продолжать, заверши работу со статусом `blocked: нужен ответ пользователя`, запиши вопрос и варианты в отчёт.
53
+ - Неинтерактивный запуск: не задавай вопросы и не пытайся читать stdin. Если без ответа нельзя безопасно продолжать, заверши работу со статусом `blocked: нужен ответ пользователя`, запиши вопрос и варианты в отчёт.
54
54
  - Не запускай команды, которые ждут интерактивного ввода в терминале.
55
55
 
56
56
  ## Артефакт
@@ -48,10 +48,8 @@ description: 'Проводит ручную проверку изменений
48
48
 
49
49
  ## Интерактивные вопросы
50
50
 
51
- Когда инструкция говорит `AskUserQuestion`, это означает блокирующий интерактивный вопрос.
52
- - Claude Code: используй `AskUserQuestion`.
53
- - Codex interactive: если доступен `request_user_input`, используй его. Если tool недоступен, задай один короткий вопрос в чат, дай варианты 1–3, напиши «Ответь номером или своим вариантом. Я продолжу только после ответа.» и остановись.
54
- - Codex exec / неинтерактивный запуск: не задавай вопросы и не пытайся читать stdin. Если без ответа нельзя безопасно продолжать, заверши работу со статусом `blocked: нужен ответ пользователя`, перечисли вопросы и варианты, не выполняй рискованные действия.
51
+ Когда инструкция говорит `AskUserQuestion`, это означает блокирующий интерактивный вопрос: задай его и остановись до ответа.
52
+ - Неинтерактивный запуск: не задавай вопросы и не пытайся читать stdin. Если без ответа нельзя безопасно продолжать, заверши работу со статусом `blocked: нужен ответ пользователя`, перечисли вопросы и варианты, не выполняй рискованные действия.
55
53
  - Не запускай команды, которые ждут интерактивного ввода в терминале; перед такими командами спроси в хост-интерфейсе или остановись с `blocked`.
56
54
 
57
55
  ## Этапы
@@ -76,7 +74,7 @@ description: 'Проводит ручную проверку изменений
76
74
  | Раздел артефакта | Что из него обязательно проверить |
77
75
  |---|---|
78
76
  | Задача, критерии готовности | каждый заявленный результат — отдельным сценарием |
79
- | Целевой алгоритм | каждый путь от входного события до финального состояния, включая ошибочные ветки |
77
+ | Целевой алгоритм | каждый сценарий от первого шага до результата, включая ветки «Если …» и ошибки |
80
78
  | Контракты: Данные и БД | каждую таблицу, поле, связь, индекс, unique и миграцию |
81
79
  | Контракты: API и внешние контракты | каждый новый и изменённый endpoint, событие, очередь, внешний вызов |
82
80
  | Фазы выполнения | `Результат` и `Проверка` каждой фазы |
@@ -101,6 +99,8 @@ description: 'Проводит ручную проверку изменений
101
99
  | Права и роли | что доступ есть у кого положено и его нет у остальных — на API и в интерфейсе |
102
100
  | Конфигурация | новые env-переменные и настройки: значение по умолчанию, поведение при отсутствии и при выключенной фиче |
103
101
  | Логи и ошибки | по сценарию пишутся ожидаемые записи с нужными полями; в логах и ответах нет секретов и stack traces наружу |
102
+ | Скорость и отдача | изменённые страницы и endpoints: время ответа сервера и полной загрузки, вес HTML, CSS, JS и изображений; сжатие (`Content-Encoding`) и кеширование статики (`Cache-Control`) по заголовкам ответа; рост относительно состояния до изменения, если его можно замерить |
103
+ | Ответ наружу | ошибка и несуществующий адрес не показывают stack trace, текст SQL и пути к файлам; debug выключен; заголовки безопасности, которые ставит проект, на месте; в консоли браузера нет отладочного вывода |
104
104
  | Регрессии рядом | соседние сценарии, которые используют изменённый код или таблицы, продолжают работать |
105
105
 
106
106
  В `smoke` глубоко проверяется только основной сценарий изменённой области; остальные области помечаются `— не проверялось в smoke`.
@@ -161,6 +161,8 @@ status: <passed | failed | blocked>
161
161
  | Права и роли | | |
162
162
  | Конфигурация | | |
163
163
  | Логи и ошибки | | |
164
+ | Скорость и отдача | | |
165
+ | Ответ наружу | | |
164
166
  | Регрессии рядом | | |
165
167
 
166
168
  ## Чеклист
@@ -42,9 +42,8 @@ description: 'Мержит ветку из соседнего git worktree в т
42
42
 
43
43
  Когда агент вернул `blocked`, задай его один конкретный вопрос пользователю через общий паттерн `AskUserQuestion`.
44
44
 
45
- - Claude Code: используй `AskUserQuestion`.
46
- - Codex interactive: используй `request_user_input`, если доступен; иначе задай один короткий вопрос с 1–3 вариантами и остановись до ответа.
47
- - Codex exec / неинтерактивный запуск: не читай stdin; заверши со статусом `blocked: нужен ответ пользователя`, перечисли вопрос и варианты.
45
+ - Интерактивный запуск: `AskUserQuestion`, затем остановись до ответа.
46
+ - Неинтерактивный запуск: не читай stdin; заверши со статусом `blocked: нужен ответ пользователя`, перечисли вопрос и варианты.
48
47
  - Не запускай команды, которые ждут интерактивного ввода в терминале.
49
48
 
50
49
  После ответа продолжи того же агента, если хост это поддерживает. Иначе запусти `eda-merge-worktree-executor` заново с исходным запросом, полным предыдущим результатом и ответом пользователя.
@@ -27,13 +27,11 @@ description: 'Собирает и согласует требования, гр
27
27
 
28
28
  ## Интерактивные вопросы
29
29
 
30
- Когда инструкция говорит `AskUserQuestion`, это означает блокирующий интерактивный вопрос.
31
- - Claude Code: используй `AskUserQuestion`.
32
- - Codex interactive: если доступен `request_user_input`, используй его. Если tool недоступен, задай один короткий вопрос в чат, дай варианты 1–3, напиши «Ответь номером или своим вариантом. Я продолжу только после ответа.» и остановись.
33
- - Codex exec / неинтерактивный запуск: не задавай вопросы и не пытайся читать stdin. Если без ответа нельзя безопасно продолжать, заверши работу со статусом `blocked: нужен ответ пользователя`, перечисли вопросы и варианты, не выполняй рискованные действия.
30
+ Когда инструкция говорит `AskUserQuestion`, это означает блокирующий интерактивный вопрос: задай его и остановись до ответа.
31
+ - Неинтерактивный запуск: не задавай вопросы и не пытайся читать stdin. Если без ответа нельзя безопасно продолжать, заверши работу со статусом `blocked: нужен ответ пользователя`, перечисли вопросы и варианты, не выполняй рискованные действия.
34
32
  - Не запускай команды, которые ждут интерактивного ввода в терминале.
35
33
 
36
- Вопросы задавай пакетами по 1–3 решения за раз. Считай каждую отдельную развилку, включая вопрос без номера и уточнение после списка; не добавляй четвёртый вопрос другим абзацем. Сначала спрашивай только то, без чего следующий шаг будет гаданием. После каждого пакета используй ответ, обновляй рекомендацию и продолжай.
34
+ <!-- include: skills/_shared/questions.md -->
37
35
 
38
36
  ## Этапы
39
37