@gian-tiaga/eda 0.4.1 → 0.4.3

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
@@ -64,19 +64,32 @@ eda init
64
64
  version: 1
65
65
 
66
66
  defaults:
67
+ # true | false
67
68
  strict: false
69
+ # normal | short | ask_each_time
68
70
  plan_size: normal
71
+ # autonomous | recommend_and_ask | ask_each_time
72
+ decision_mode: recommend_and_ask
73
+ # after_each_phase | tdd_each_phase | end_of_plan | ask_each_time
74
+ test_strategy: ask_each_time
75
+ # debug_precise | standard | ask_each_time
76
+ logging_strategy: ask_each_time
69
77
 
70
78
  automate:
79
+ # true | false
71
80
  include_plans: false
72
81
 
73
82
  review:
83
+ # true | false
74
84
  include_code_quality: true
75
85
  ```
76
86
 
77
87
  Что означают настройки:
78
88
  - `defaults.strict` — включает strict-режим по умолчанию для `eda-explore`, `eda-plan` и `eda-review`.
79
89
  - `defaults.plan_size` — размер плана для `eda-plan`: `normal`, `short` или `ask_each_time`.
90
+ - `defaults.decision_mode` — как `eda-explore` и `eda-plan` принимают существенные решения: `autonomous` выбирает сам, `recommend_and_ask` рекомендует и спрашивает, `ask_each_time` спрашивает по каждой значимой развилке.
91
+ - `defaults.test_strategy` — стратегия тестов для `eda-plan`: `after_each_phase`, `tdd_each_phase`, `end_of_plan` или `ask_each_time`.
92
+ - `defaults.logging_strategy` — стратегия логирования для `eda-plan`: `debug_precise`, `standard` или `ask_each_time`.
80
93
  - `automate.include_plans` — добавляет `docs/plans/` в обычный запуск `eda-automate`.
81
94
  - `review.include_code_quality` — добавляет в `eda-review` проверку качества кода и отдельного мета-ревьюера `quality-check`.
82
95
 
package/lib/install.js CHANGED
@@ -17,6 +17,9 @@ const RETIRED_SKILLS = ['eda-research'];
17
17
  const DEFAULT_SETTINGS = {
18
18
  strict: false,
19
19
  planSize: 'normal',
20
+ decisionMode: 'recommend_and_ask',
21
+ testStrategy: 'ask_each_time',
22
+ loggingStrategy: 'ask_each_time',
20
23
  includePlans: false,
21
24
  includeCodeQuality: true
22
25
  };
@@ -51,6 +54,52 @@ const PLAN_SIZE_CHOICES = [
51
54
  name: 'Спрашивать размер плана каждый раз'
52
55
  }
53
56
  ];
57
+ const DECISION_MODE_CHOICES = [
58
+ {
59
+ value: 'recommend_and_ask',
60
+ name: 'Рекомендовать вариант и спрашивать по важным развилкам'
61
+ },
62
+ {
63
+ value: 'autonomous',
64
+ name: 'Самостоятельно выбирать по коду, правилам и рискам'
65
+ },
66
+ {
67
+ value: 'ask_each_time',
68
+ name: 'Спрашивать по каждой значимой развилке'
69
+ }
70
+ ];
71
+ const TEST_STRATEGY_CHOICES = [
72
+ {
73
+ value: 'after_each_phase',
74
+ name: 'Писать и запускать тесты после каждой фазы'
75
+ },
76
+ {
77
+ value: 'tdd_each_phase',
78
+ name: 'В каждой фазе сначала тесты, затем код'
79
+ },
80
+ {
81
+ value: 'end_of_plan',
82
+ name: 'Писать тесты в конце плана отдельной фазой'
83
+ },
84
+ {
85
+ value: 'ask_each_time',
86
+ name: 'Спрашивать стратегию тестов каждый раз'
87
+ }
88
+ ];
89
+ const LOGGING_STRATEGY_CHOICES = [
90
+ {
91
+ value: 'standard',
92
+ name: 'Стандартные info / warning / error по необходимости'
93
+ },
94
+ {
95
+ value: 'debug_precise',
96
+ name: 'Подробные debug-логи на важных шагах'
97
+ },
98
+ {
99
+ value: 'ask_each_time',
100
+ name: 'Спрашивать стратегию логирования каждый раз'
101
+ }
102
+ ];
54
103
 
55
104
  export async function init({ cwd, input = process.stdin, output = process.stdout }) {
56
105
  const targets = await askTargets({ input, output });
@@ -117,9 +166,39 @@ export async function askSettings({ input = process.stdin, output = process.stdo
117
166
  output
118
167
  });
119
168
 
169
+ const decisionMode = await select({
170
+ message: 'Как принимать важные решения в eda-explore и eda-plan?',
171
+ choices: DECISION_MODE_CHOICES,
172
+ default: DEFAULT_SETTINGS.decisionMode
173
+ }, {
174
+ input,
175
+ output
176
+ });
177
+
178
+ const testStrategy = await select({
179
+ message: 'Какую стратегию тестов eda-plan использовать по умолчанию?',
180
+ choices: TEST_STRATEGY_CHOICES,
181
+ default: DEFAULT_SETTINGS.testStrategy
182
+ }, {
183
+ input,
184
+ output
185
+ });
186
+
187
+ const loggingStrategy = await select({
188
+ message: 'Какую стратегию логирования eda-plan использовать по умолчанию?',
189
+ choices: LOGGING_STRATEGY_CHOICES,
190
+ default: DEFAULT_SETTINGS.loggingStrategy
191
+ }, {
192
+ input,
193
+ output
194
+ });
195
+
120
196
  return {
121
197
  strict: selected.includes('strict'),
122
198
  planSize,
199
+ decisionMode,
200
+ testStrategy,
201
+ loggingStrategy,
123
202
  includePlans: selected.includes('includePlans'),
124
203
  includeCodeQuality: selected.includes('includeCodeQuality')
125
204
  };
@@ -158,6 +237,8 @@ async function ensureSettings(cwd, { input = process.stdin, output = process.std
158
237
  const settingsPath = path.join(cwd, SETTINGS_RELATIVE_PATH);
159
238
  if (await fileExists(settingsPath)) {
160
239
  output.write(`Настройки уже есть: ${SETTINGS_RELATIVE_PATH}\n`);
240
+ output.write('Существующий файл не перезаписываю. Актуальный формат:\n\n');
241
+ output.write(formatSettings(DEFAULT_SETTINGS));
161
242
  return;
162
243
  }
163
244
 
@@ -171,13 +252,23 @@ function formatSettings(settings) {
171
252
  return `version: 1
172
253
 
173
254
  defaults:
255
+ # true | false
174
256
  strict: ${settings.strict ? 'true' : 'false'}
257
+ # normal | short | ask_each_time
175
258
  plan_size: ${settings.planSize}
259
+ # autonomous | recommend_and_ask | ask_each_time
260
+ decision_mode: ${settings.decisionMode}
261
+ # after_each_phase | tdd_each_phase | end_of_plan | ask_each_time
262
+ test_strategy: ${settings.testStrategy}
263
+ # debug_precise | standard | ask_each_time
264
+ logging_strategy: ${settings.loggingStrategy}
176
265
 
177
266
  automate:
267
+ # true | false
178
268
  include_plans: ${settings.includePlans ? 'true' : 'false'}
179
269
 
180
270
  review:
271
+ # true | false
181
272
  include_code_quality: ${settings.includeCodeQuality ? 'true' : 'false'}
182
273
  `;
183
274
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gian-tiaga/eda",
3
- "version": "0.4.1",
3
+ "version": "0.4.3",
4
4
  "description": "Набор скилов eda-* для Claude Code и Codex CLI: explore, plan, execute, fix, review, fix-by-review, send-review, commit, docs, automate",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: eda-explore
3
- description: 'Исследует тему или задачу до конкретного результата: проясняет проблему, архитектуру, развилки, риски и короткий выбранный вариант решения без плана реализации. Работает read-only, задаёт блокирующие вопросы, когда без ответа нельзя выбрать решение, и не оставляет неразрешённых альтернатив. Если исследование касается пакетов, библиотек, CLI, сервисов или другого ПО, проверяет актуальные стабильные версии через context7, если он доступен, или через web search по официальным источникам. Итог сохраняет в docs/researches/. Кросс-ревью соседним агентом (Claude ↔ Codex) включается флагом `strict` или настройкой `defaults.strict: true` в `docs/settings.yaml`.'
3
+ description: 'Исследует тему или задачу до конкретного результата: проясняет проблему, архитектуру, развилки, риски и короткий выбранный вариант решения без плана реализации. Работает read-only, задаёт блокирующие вопросы, когда без ответа нельзя выбрать решение, а существенные решения подтверждает по `defaults.decision_mode` из `docs/settings.yaml`. Если исследование касается пакетов, библиотек, CLI, сервисов или другого ПО, проверяет актуальные стабильные версии через context7, если он доступен, или через web search по официальным источникам. Итог сохраняет в docs/researches/. Кросс-ревью соседним агентом (Claude ↔ Codex) включается флагом `strict` или настройкой `defaults.strict: true` в `docs/settings.yaml`.'
4
4
  ---
5
5
 
6
6
  # Скил: Исследователь решений (eda-explore)
@@ -28,14 +28,33 @@ description: 'Исследует тему или задачу до конкре
28
28
 
29
29
  Если файла нет — используй значение по умолчанию:
30
30
  - `defaults.strict: false`
31
+ - `defaults.decision_mode: recommend_and_ask`
31
32
 
32
33
  Прямое указание пользователя в текущем сообщении важнее `docs/settings.yaml`.
33
34
 
35
+ Поддерживаемые режимы принятия решений:
36
+
37
+ | Ключ | Значения | Что значит |
38
+ |---|---|---|
39
+ | `defaults.decision_mode` | `autonomous` | Агент сам выбирает по коду, правилам, архитектуре, источникам и рискам, затем записывает причину. |
40
+ | `defaults.decision_mode` | `recommend_and_ask` | Агент исследует варианты, рекомендует один, но по существенным решениям задаёт блокирующий вопрос до финализации. |
41
+ | `defaults.decision_mode` | `ask_each_time` | Агент спрашивает по каждой значимой развилке, даже если есть сильная рекомендация. |
42
+
43
+ Если `defaults.decision_mode` отсутствует или неизвестен, считай его `recommend_and_ask`.
44
+
45
+ Существенные решения — это решения, которые меняют архитектуру, зависимости, стоимость, безопасность, эксплуатацию или будущую миграцию проекта. Всегда считай существенными:
46
+ - выбор нового пакета, библиотеки, фреймворка, SDK, CLI или сервиса;
47
+ - выбор базы данных, ORM/query builder, очереди, кэша, storage, search, background jobs;
48
+ - миграции данных, изменение схемы, формат хранения или стратегия совместимости;
49
+ - auth, permissions, payments, crypto, secrets, персональные данные и другие security-sensitive решения;
50
+ - cloud/provider choices, managed services, лицензии, cost/lock-in и SLA;
51
+ - архитектурные паттерны, затрагивающие несколько модулей или публичные контракты.
52
+
34
53
  ## Главные правила
35
54
 
36
55
  1. **Никаких правок кода.** Запись только в `docs/researches/`.
37
56
  2. **Итог — конкретика.** Нельзя заканчивать абстрактными описаниями, списком возможностей или «можно выбрать один из вариантов».
38
- 3. **Развилки решай.** Если можно выбрать по коду, правилам, архитектуре, источникам и рискам выбери сам и запиши почему. Если выбор зависит только от пользователя — задай блокирующий вопрос.
57
+ 3. **Развилки закрывай по `decision_mode`.** Обычные локальные развилки можно выбрать по коду, правилам, архитектуре, источникам и рискам. Существенные решения в `recommend_and_ask` и `ask_each_time` подтверждай у пользователя до финализации. Если выбор зависит только от пользователя — задай блокирующий вопрос в любом режиме.
39
58
  4. **Риски закрывай.** Для каждого риска зафиксируй решение: mitigation, acceptance или out of scope. Нельзя оставлять риск просто перечисленным.
40
59
  5. **Версии проверяй.** Если речь о пакетах, библиотеках, CLI, сервисах или другом ПО, а версия не задана контекстом, проверь последнюю стабильную версию через context7, если он доступен, или через web search по официальным источникам.
41
60
  6. **Прочитай `docs/rules.md` и `docs/arch.md`**, если есть, и используй их как рамку.
@@ -79,10 +98,15 @@ description: 'Исследует тему или задачу до конкре
79
98
 
80
99
  Для каждой развилки:
81
100
  - перечисли варианты;
82
- - выбери один вариант;
101
+ - выбери один вариант или подготовь рекомендацию;
83
102
  - запиши источник и причину выбора;
103
+ - если развилка существенная и `decision_mode: recommend_and_ask` — задай `AskUserQuestion`: 2–3 варианта, первым рекомендованный, короткая причина рекомендации, вариант «свой вариант», фраза «Я продолжу только после ответа.»;
104
+ - если развилка значимая и `decision_mode: ask_each_time` — задай `AskUserQuestion` даже при сильной рекомендации;
105
+ - если `decision_mode: autonomous` и выбор можно обосновать кодом, правилами, архитектурой, источниками и рисками — выбери сам и запиши почему;
84
106
  - если выбрать нельзя без пользовательского решения — задай `AskUserQuestion` и не продолжай финализацию.
85
107
 
108
+ Не прячь существенный выбор внутри текста. Например, если нужен пакет для базы данных, сначала сравни 2–3 подходящих варианта, затем в `recommend_and_ask` спроси подтверждение выбора пакета/БД до записи финального решения.
109
+
86
110
  ### 4. Закрыть риски
87
111
 
88
112
  Для каждого риска зафиксируй:
@@ -104,6 +128,7 @@ description: 'Исследует тему или задачу до конкре
104
128
  title: <заголовок>
105
129
  date: <YYYY-MM-DD HH:MM>
106
130
  mode: <normal | strict>
131
+ decision_mode: <autonomous | recommend_and_ask | ask_each_time>
107
132
  status: <draft | reviewed | blocked>
108
133
  reviewer: <pending | none | claude | codex>
109
134
  sources:
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: eda-plan
3
- description: 'Пишет план реализации по тексту рядом с вызовом или указанному research-файлу через стандартный Plan Mode (Claude Code / Codex). Перед планированием читает docs/rules.md, docs/arch.md и строго следует им; research подтягивает без вопроса, если он указан или явно нужен. Поддерживает параметр `short` для небольших фич: 1–2 фазы и компактный ревьюируемый объём. В самом начале фиксирует стратегию тестов и логирования из docs/settings.yaml или уточняет их у пользователя. Нормализует результат в исполнимый план с целевым алгоритмом, фазами, проверками и без неразрешённых альтернатив. Согласованный план сохраняется в docs/plans/. Всегда проверяет план тремя параллельными моделями (слабая, средняя, мощная) на реалистичность, пропущенные шаги, нарушения правил и риски. Кросс-CLI (Claude ↔ Codex) включается флагом `strict` или настройкой `defaults.strict: true` в `docs/settings.yaml`. Вопросы задаёт только когда без ответа нельзя безопасно продолжать или когда настройки требуют спрашивать каждый раз.'
3
+ description: 'Пишет план реализации по тексту рядом с вызовом или указанному research-файлу через стандартный Plan Mode (Claude Code / Codex). Перед планированием читает docs/rules.md, docs/arch.md и строго следует им; research подтягивает без вопроса, если он указан или явно нужен. Поддерживает параметр `short` для небольших фич: 1–2 фазы и компактный ревьюируемый объём. В самом начале фиксирует режим принятия решений, стратегию тестов и логирования из docs/settings.yaml или уточняет их у пользователя. Существенные решения подтверждает по `defaults.decision_mode`. Нормализует результат в исполнимый план с целевым алгоритмом, фазами, проверками и без неразрешённых альтернатив. Согласованный план сохраняется в docs/plans/. Всегда проверяет план тремя параллельными моделями (слабая, средняя, мощная) на реалистичность, пропущенные шаги, нарушения правил и риски. Кросс-CLI (Claude ↔ Codex) включается флагом `strict` или настройкой `defaults.strict: true` в `docs/settings.yaml`. Вопросы задаёт только когда без ответа нельзя безопасно продолжать, когда настройки требуют спрашивать или когда существенное решение требует подтверждения.'
4
4
  ---
5
5
 
6
6
  # Скил: Планировщик (eda-plan)
@@ -33,6 +33,7 @@ description: 'Пишет план реализации по тексту ряд
33
33
  Если файла нет — используй значение по умолчанию:
34
34
  - `defaults.strict: false`
35
35
  - `defaults.plan_size: normal`
36
+ - `defaults.decision_mode: recommend_and_ask`
36
37
  - `defaults.test_strategy: ask_each_time`
37
38
  - `defaults.logging_strategy: ask_each_time`
38
39
 
@@ -44,6 +45,7 @@ description: 'Пишет план реализации по тексту ряд
44
45
  |---|---|---|
45
46
  | `defaults.strict` | `true`, `false` | Включает или выключает строгий режим по умолчанию. |
46
47
  | `defaults.plan_size` | `normal`, `short`, `ask_each_time` | Размер плана по умолчанию для `eda-plan`: обычный, короткий или спрашивать каждый раз. |
48
+ | `defaults.decision_mode` | `autonomous`, `recommend_and_ask`, `ask_each_time` | Как `eda-explore` и `eda-plan` закрывают существенные решения: сами, через рекомендацию с подтверждением или через вопрос по каждой значимой развилке. |
47
49
  | `defaults.test_strategy` | `after_each_phase` | Тесты пишутся и запускаются после каждой фазы плана. |
48
50
  | `defaults.test_strategy` | `tdd_each_phase` | В начале каждой фазы сначала пишутся тесты, затем код под них. |
49
51
  | `defaults.test_strategy` | `end_of_plan` | Тесты пишутся в конце плана отдельной финальной фазой. |
@@ -54,14 +56,17 @@ description: 'Пишет план реализации по тексту ряд
54
56
 
55
57
  Если `defaults.plan_size` отсутствует или неизвестен, считай его `normal`. Если настройка равна `ask_each_time`, в начале каждого планирования задай пользователю вопрос о размере плана.
56
58
 
59
+ Если `defaults.decision_mode` отсутствует или неизвестен, считай его `recommend_and_ask`.
60
+
57
61
  Если `defaults.test_strategy` или `defaults.logging_strategy` отсутствует или неизвестен, считай его `ask_each_time`.
58
62
 
59
63
  В самом начале составления плана, после чтения текущего сообщения и `docs/settings.yaml`, но до Plan Mode и до содержательного планирования, зафиксируй:
60
64
  - размер плана;
65
+ - режим принятия решений;
61
66
  - стратегию тестов;
62
67
  - стратегию логирования.
63
68
 
64
- Если в настройках стоит `ask_each_time`, задай блокирующий `AskUserQuestion` с вариантами. Если пользователь уже явно выбрал размер плана или стратегию в текущем сообщении, используй её без дополнительного вопроса.
69
+ Если в `defaults.plan_size`, `defaults.test_strategy` или `defaults.logging_strategy` стоит `ask_each_time`, задай блокирующий `AskUserQuestion` с вариантами для этой настройки. Если пользователь уже явно выбрал размер плана или стратегию в текущем сообщении, используй её без дополнительного вопроса.
65
70
 
66
71
  Варианты вопроса про размер плана:
67
72
  1. `normal` — обычный план без искусственного ограничения по количеству фаз.
@@ -78,6 +83,24 @@ description: 'Пишет план реализации по тексту ряд
78
83
 
79
84
  Выбранные значения передай в Plan Mode и обязательно зафиксируй в финальном плане в YAML-шапке, `Принятых решениях`, `Фазах выполнения`, `Тестах` и `Логировании`.
80
85
 
86
+ ## Режим принятия решений
87
+
88
+ `decision_mode: autonomous` — агент сам выбирает по коду, правилам, архитектуре, источникам и рискам, затем записывает причину.
89
+
90
+ `decision_mode: recommend_and_ask` — дефолт. Агент исследует варианты, рекомендует один, но по существенным решениям задаёт блокирующий вопрос до Plan Mode или до финализации.
91
+
92
+ `decision_mode: ask_each_time` — агент спрашивает по каждой значимой развилке, даже если есть сильная рекомендация.
93
+
94
+ Существенные решения — это решения, которые меняют архитектуру, зависимости, стоимость, безопасность, эксплуатацию или будущую миграцию проекта. Всегда считай существенными:
95
+ - выбор нового пакета, библиотеки, фреймворка, SDK, CLI или сервиса;
96
+ - выбор базы данных, ORM/query builder, очереди, кэша, storage, search, background jobs;
97
+ - миграции данных, изменение схемы, формат хранения или стратегия совместимости;
98
+ - auth, permissions, payments, crypto, secrets, персональные данные и другие security-sensitive решения;
99
+ - cloud/provider choices, managed services, лицензии, cost/lock-in и SLA;
100
+ - архитектурные паттерны, затрагивающие несколько модулей или публичные контракты.
101
+
102
+ Если research уже содержит вопрос и ответ пользователя по конкретному существенному решению, используй этот ответ без повторного вопроса. Если research содержит только рекомендацию или выбор агента без ответа пользователя, в `recommend_and_ask` и `ask_each_time` спроси подтверждение до Plan Mode.
103
+
81
104
  ## Главные правила
82
105
 
83
106
  1. **Никаких правок кода.** Запись только в `docs/plans/`.
@@ -89,7 +112,7 @@ description: 'Пишет план реализации по тексту ряд
89
112
  7. **Диаграммы — желательно, не любой ценой.** Линейный план — диаграмма не нужна.
90
113
  8. **Таблицы > сплошной текст** для структурируемых данных.
91
114
  9. **Финальный план — не исследование.** Исследовательские факты идут в контекст, выбранные подходы — в решения, исполнимые шаги — в фазы.
92
- 10. **Не оставляй неоднозначности.** Если в плане остаётся «выбрать», «решить», «можно так или так», «предпочтительно» — задай вопрос до финализации или зафиксируй одно принятое решение.
115
+ 10. **Не оставляй неоднозначности.** Если в плане остаётся «выбрать», «решить», «можно так или так», «предпочтительно» — задай вопрос до финализации или зафиксируй одно принятое решение. Существенные решения фиксируй только по правилам `decision_mode`.
93
116
  11. **Версии пакетов и ПО проверяй до планирования.** Если для задачи нужно устанавливать пакет, библиотеку, сервис, CLI или другое ПО, а версия не указана в контексте, используй `context7`, если он доступен, или веб-поиск, чтобы найти актуальную последнюю стабильную версию. Зафиксируй найденную версию и источник в контексте/решениях плана. Не оставляй в плане «установить latest» без конкретной версии.
94
117
 
95
118
  ## Размер плана
@@ -133,6 +156,11 @@ description: 'Пишет план реализации по тексту ряд
133
156
  - если значение равно `ask_each_time` — задай `AskUserQuestion` с двумя вариантами: `normal`, `short`;
134
157
  - если значение отсутствует или неизвестно — `normal`.
135
158
 
159
+ Определи `decision_mode`:
160
+ - если пользователь явно указал `autonomous`, `recommend_and_ask`, `ask_each_time`, «сам выбирай», «рекомендуй и спрашивай» или «спрашивай всё» в текущем сообщении — используй это;
161
+ - иначе возьми `defaults.decision_mode` из `docs/settings.yaml`;
162
+ - если значение отсутствует или неизвестно — `recommend_and_ask`.
163
+
136
164
  Прочитай `docs/rules.md`, `docs/arch.md` (если есть) и строго следуй им при планировании.
137
165
 
138
166
  Research подтягивай так:
@@ -148,6 +176,16 @@ Research подтягивай так:
148
176
  - сохрани название, выбранную версию и источник — это пойдёт в Plan Mode и финальный план;
149
177
  - если источники противоречат друг другу или последняя версия нестабильна/preview, задай блокирующий вопрос.
150
178
 
179
+ До Plan Mode закрой существенные решения:
180
+ - выпиши существенные развилки, которые следуют из задачи и контекста;
181
+ - если research содержит подтверждённый ответ пользователя по развилке — используй его и запиши как подтверждённое решение;
182
+ - если `decision_mode: autonomous` и выбор можно обосновать кодом, правилами, архитектурой, источниками и рисками — выбери сам и запиши почему;
183
+ - если `decision_mode: recommend_and_ask` — задай `AskUserQuestion`: 2–3 варианта, первым рекомендованный, короткая причина рекомендации, вариант «свой вариант», фраза «Я продолжу только после ответа.»;
184
+ - если `decision_mode: ask_each_time` — задай `AskUserQuestion` по каждой значимой развилке, даже при сильной рекомендации;
185
+ - если выбор зависит только от пользователя — задай `AskUserQuestion` в любом режиме.
186
+
187
+ Не запускай Plan Mode, пока в `recommend_and_ask` или `ask_each_time` есть неподтверждённое существенное решение. Например, если нужен пакет для базы данных, сначала сравни 2–3 варианта и получи подтверждение выбора БД/пакета.
188
+
151
189
  Если `plan_size: short`, до Plan Mode оцени задачу по найденному контексту:
152
190
  - можно ли уложиться в 1–2 фазы;
153
191
  - ожидается ли не больше 5–10 затронутых файлов или есть понятное объяснение для большего числа маленьких однотипных правок;
@@ -187,15 +225,17 @@ Research подтягивай так:
187
225
  Войди в Plan Mode хост-агента (`EnterPlanMode` в Claude Code, встроенный план-режим в Codex). На вход:
188
226
  1. Дословный запрос пользователя.
189
227
  2. Зафиксированный `plan_size`.
190
- 3. Зафиксированные `test_strategy` и `logging_strategy`.
191
- 4. Найденные версии пакетов/ПО и источники, если задача требует установки.
192
- 5. Пары «вопрос ответ» из этапа 3.
193
- 6. Ссылки на `docs/rules.md`, `docs/arch.md`, исследование (без пересказа — Plan Mode прочитает сам) и явное требование строго следовать правилам и архитектуре.
194
- 7. Инструкция: «все вопросы пользователю только по разделу "Интерактивные вопросы", никаких догадок и продолжения без ответа».
195
- 8. Инструкция: «финальный план должен иметь раздел "Целевой алгоритм", фазы с целью/результатом/проверкой и не должен смешивать исследование с планом исполнения».
196
- 9. Инструкция: «стратегии тестов и логирования обязательны: они должны быть отражены в решениях, фазах, проверках, разделах "Тесты" и "Логирование"».
197
- 10. Инструкция: «если `plan_size: short`, план обязан уложиться в 1–2 фазы, компактный ревьюируемый объём и объяснение ожидаемого объёма изменений».
198
- 11. Инструкция: «если нужны пакеты или ПО, используй только конкретные версии; если версия не задана контекстом, она должна быть проверена через context7 или поиск и указана с источником».
228
+ 3. Зафиксированный `decision_mode` и все подтверждённые пользователем существенные решения.
229
+ 4. Зафиксированные `test_strategy` и `logging_strategy`.
230
+ 5. Найденные версии пакетов/ПО и источники, если задача требует установки.
231
+ 6. Пары «вопрос ответ» из этапа 3 и подтверждения существенных решений из research.
232
+ 7. Ссылки на `docs/rules.md`, `docs/arch.md`, исследование (без пересказа Plan Mode прочитает сам) и явное требование строго следовать правилам и архитектуре.
233
+ 8. Инструкция: «все вопросы пользователю только по разделу "Интерактивные вопросы", никаких догадок и продолжения без ответа».
234
+ 9. Инструкция: «финальный план должен иметь раздел "Целевой алгоритм", фазы с целью/результатом/проверкой и не должен смешивать исследование с планом исполнения».
235
+ 10. Инструкция: «стратегии тестов и логирования обязательны: они должны быть отражены в решениях, фазах, проверках, разделах "Тесты" и "Логирование"».
236
+ 11. Инструкция: «если `plan_size: short`, план обязан уложиться в 1–2 фазы, компактный ревьюируемый объём и объяснение ожидаемого объёма изменений».
237
+ 12. Инструкция: «если нужны пакеты или ПО, используй только конкретные версии; если версия не задана контекстом, она должна быть проверена через context7 или поиск и указана с источником».
238
+ 13. Инструкция: «не добавляй неподтверждённые существенные решения в финальный план; если они возникли внутри Plan Mode, остановись и спроси пользователя».
199
239
 
200
240
  Не выходи, пока пользователь не подтвердил план.
201
241
 
@@ -210,6 +250,7 @@ title: <заголовок>
210
250
  date: <YYYY-MM-DD HH:MM>
211
251
  mode: <normal | strict>
212
252
  plan_size: <normal | short>
253
+ decision_mode: <autonomous | recommend_and_ask | ask_each_time>
213
254
  status: <draft | meta-reviewed | reviewed>
214
255
  reviewer: <pending | none | claude | codex>
215
256
  meta_reviewers: []
@@ -230,7 +271,7 @@ sources:
230
271
  Факты из кода, правил, архитектуры и исследований. Здесь можно объяснять причины, но не хранить исполнимые шаги.
231
272
 
232
273
  ## Принятые решения
233
- Список зафиксированных архитектурных и продуктовых решений. Без вариантов «или».
274
+ Список зафиксированных архитектурных и продуктовых решений. Без вариантов «или». Для существенных решений укажи источник подтверждения: ответ пользователя, research с ответом пользователя или `decision_mode: autonomous` с причиной.
234
275
 
235
276
  Если `plan_size: short`, добавь решение про ожидаемый объём: сколько фаз, сколько примерно файлов и строк осмысленного diff.
236
277
 
@@ -272,6 +313,7 @@ sources:
272
313
  Правила структуры:
273
314
  - В `Контекст` попадают исследовательские наблюдения и ограничения.
274
315
  - В `Принятые решения` попадают только выбранные решения, без альтернатив.
316
+ - Существенные решения в `Принятых решениях` имеют источник подтверждения или явное обоснование автономного выбора.
275
317
  - В `Целевой алгоритм` попадает сквозная картина процесса.
276
318
  - В `Фазы выполнения` попадают только исполнимые шаги.
277
319
  - Каждая фаза обязана иметь `Цель`, `Что сделать`, `Результат`, `Сценарии тестирования`, `Проверка`.
@@ -293,6 +335,7 @@ sources:
293
335
  - тесты связаны с ключевыми сценариями и рисками;
294
336
  - если `plan_size: short`, фаз не больше 2, ожидаемый объём укладывается в ориентиры short или исключение явно объяснено;
295
337
  - все пакеты/ПО, которые нужно установить, имеют конкретные версии или явное объяснение, почему версия берётся из существующего lock/config-файла;
338
+ - нет неподтверждённых существенных решений при `decision_mode: recommend_and_ask` или `decision_mode: ask_each_time`;
296
339
  - план можно передать в `eda-execute` без нового исследования.
297
340
 
298
341
  Сохрани файл и покажи путь.