@gian-tiaga/eda 3.8.0 → 3.9.1

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/MIGRATION.md CHANGED
@@ -86,7 +86,7 @@ docs/
86
86
  Что в 3.x изменится в уже настроенном проекте:
87
87
 
88
88
  - **Удалены двенадцать агентов `eda-plan-review-*`.** Проверку плана целиком выполняет один субагент по фиксированному чек-листу. `eda update` стирает файлы этих агентов из `.claude/agents/` и `.codex/agents/`.
89
- - **Секция `plan-review.agents` больше не читается.** Начиная с 3.1.1 `eda update` находит её в готовом файле настроек и убирает вместе с другими устаревшими ключами — `review-check`, `review.strict`, `review.include_code_quality`. Дефолт `plan-review.threshold` — `100`, `plan-polish.limit` — `2`.
89
+ - **Секция `plan-review.agents` больше не читается.** Начиная с 3.1.1 `eda update` находит её в готовом файле настроек и убирает вместе с другими устаревшими ключами — `review-check`, `review.strict`, `review.include_code_quality`. Дефолт `plan-review.threshold` — `100`, `plan-polish.limit` — `1`: с 3.9.0 лимит считает итерации «проверка + исправление», а не review-проходы, поэтому сохранённое значение `2` теперь означает два круга правок вместо одного.
90
90
  - **Режим `single` переименован в `main`.** `eda update` переносит `review.execution: single` и `plan-execute.mode: single` в `main`, а `orhestra.execution: single` и `single_propagated` — в `main` и `main_propagated`. В `main` работу выполняет основной агент без субагентов; модели отдельных `review.agents` не применяются.
91
91
  - **У `eda-review` есть режим исполнения.** `review.execution` принимает `subagents` или `main`; default `subagents` сохраняет прежнее поведение. Безусловный Claude `context: fork` удалён, поэтому `main` не создаёт отдельного агента для ревью.
92
92
  - **У `eda-orhestra` появился режим исполнения.** `orhestra.execution` принимает `subagents`, `main` или `main_propagated`; default `subagents` сохраняет прежнее поведение. `main` выполняет верхние этапы текущим агентом, а `main_propagated` дополнительно передаёт `main` совместимым execute/review-этапам.
package/README.md CHANGED
@@ -47,10 +47,10 @@ eda update-all ~/Code
47
47
  | `eda-business` | Совместно с человеком описывает целевое поведение проекта по тематическим карточкам: сложные темы фиксирует подробно, но без шума, соседних модулей и привязки к текущему коду. Может закрепить значимый механизм вроде JWT или серверного хранения токенов, но не язык, библиотеку или конкретную СУБД. `about` содержит лишь короткое описание проекта и основные возможности | `docs/business.md`, `docs/business/` |
48
48
  | `eda-roadmap` | Создаёт roadmap-файл: список будущих задач с короткими, понятными и недвусмысленными описаниями без деталей реализации, файлов, библиотек, API и пошагового плана | `docs/artifacts/roadmaps/` |
49
49
  | `eda-explore` | Исследует тему до конкретного результата: описание проблемы, релевантная архитектура, закрытые развилки, риски внутри решений и короткий выбранный вариант решения без плана. После определения темы читает только применимые business- и reference-карточки. В дефолтном режиме ведёт исследование как диалог; для пакетов и ПО проверяет актуальные стабильные версии | `docs/artifacts/researches/` |
50
- | `eda-plan` | Пишет план реализации через Plan Mode: фиксирует решения, БД/API-контракты и фазы, каждую из которых один агент выполняет и проверяет за один проход. Задач с идентификаторами внутри фаз нет. Реализацию не описывает — её задают `docs/rules.md`, `docs/arch.md` и карточки. Если целевое поведение ещё не описано в business-карточках, до реализации добавляет `Дополнить бизнесовые правила`; если решение противоречит правилам или архитектуре, сначала меняет сам документ. По `plan.review` запускает изолированный `eda-plan-polish`; `plan.strict` независимо включает кросс-CLI ревью | `docs/artifacts/plans/`, опционально plan-review артефакты |
50
+ | `eda-plan` | Пишет план реализации через Plan Mode: фиксирует решения, БД/API-контракты и фазы, каждую из которых один агент выполняет и проверяет за один проход. На подтверждение показывает полный план в формате скила, включая метаданные, разделы и структуру фаз; сохраняет тот же текст. Задач с идентификаторами внутри фаз нет. Реализацию не описывает — её задают `docs/rules.md`, `docs/arch.md` и карточки. Если целевое поведение ещё не описано в business-карточках, до реализации добавляет `Дополнить бизнесовые правила`; если решение противоречит правилам или архитектуре, сначала меняет сам документ. По `plan.review` запускает изолированный `eda-plan-polish` ровно на одну итерацию полировки (`limit 1`); `plan.strict` независимо включает кросс-CLI ревью | `docs/artifacts/plans/`, опционально plan-review артефакты |
51
51
  | `eda-plan-review` | Одним read-only проходом проверяет план по фиксированному чек-листу из 16 пунктов: покрытие запроса, отсутствие развилок, соответствие правилам и архитектуре, дубли, регистр текста, фазы и объём. Замечания вне списка не принимает. Оценка — доля закрытых пунктов, поэтому растёт монотонно. План не меняет | `docs/artifacts/plan-reviews/` |
52
52
  | `eda-plan-review-fix` | Закрывает проваленные пункты чек-листа минимальным изменением плана с совпадающим SHA-256. План не растёт: сначала удаление и замена, прирост объёма за один заход не больше 3%. Новое ревью не делает и код не меняет | `docs/artifacts/plan-review-fixes/` |
53
- | `eda-plan-polish` | Оркестрирует изолированный цикл plan-review → plan-review-fix. Хранит снапшот лучшей версии плана: как только score перестаёт расти, останавливается и восстанавливает лучшую версию, а не последнюю. По умолчанию две review-итерации. Кросс-CLI strict не используется | `docs/artifacts/plan-reviews/`, `docs/artifacts/plan-review-fixes/` |
53
+ | `eda-plan-polish` | Оркестрирует изолированный цикл plan-review → plan-review-fix. Хранит снапшот лучшей версии плана: как только score перестаёт расти, останавливается и восстанавливает лучшую версию, а не последнюю. По умолчанию одна итерация: проверка и исправление. Исправление проверяет ревью следующей итерации, поэтому при `limit 1` последняя правка остаётся неперепроверенной. Кросс-CLI strict не используется | `docs/artifacts/plan-reviews/`, `docs/artifacts/plan-review-fixes/` |
54
54
  | `eda-plan-execute` | Управляет выполнением плана по фазам в режиме `subagents`, `main` или `auto`. В `subagents` каждую фазу целиком выполняет отдельный изолированный субагент: он читает план, правила, архитектуру и только business/reference-карточки затронутого поведения и компонентов. Фазы проходят строго последовательно и принимаются независимыми проверяющими. В `main` весь план по тем же правилам выполняет и проверяет основной агент в одном контексте, а `auto` выбирает режим по плану. Отметки подтверждённых задач и журнал ведёт основной агент | `docs/artifacts/executions/` |
55
55
  | `eda-just-do-it` | Сразу выполняет задачу из текста рядом с вызовом: определяет scope, загружает только необходимые проектные инструкции, business/reference-карточки, код и тесты, вносит нужные изменения и проверяет результат. Не подменяет выполнение планом и не делает git- или внешние действия без прямого указания | `docs/artifacts/just-do-it/` |
56
56
  | `eda-fix` | Делает обычные фиксы по короткому контексту, баг-репорту или плану. Перед правками читает правила, архитектуру и только применимые карточки, добавляет нужные тесты, прогоняет проверки и сохраняет историю правок | `docs/artifacts/fixes/` |
@@ -139,7 +139,7 @@ eda update-all ~/Code
139
139
  | `eda-plan` | `strict`, `без ревью плана`, `без проверок` | `strict` независимо включает кросс-CLI проверку; `без ревью плана` отключает встроенный review/fix; `без проверок` отключает оба вида ревью | Когда нужно разделить создание плана и его последующую полировку |
140
140
  | `eda-plan-review` | `threshold N` | Разово меняет долю закрытых пунктов, при которой план считается готовым | Для самостоятельного аудита готового плана |
141
141
  | `eda-plan-execute` | `subagents` / `main` / `auto` | Разово меняет, где выполняются фазы, поверх `plan-execute.mode` | `main` для небольшого плана в одном контексте, `subagents` для большого или тяжёлого |
142
- | `eda-plan-polish` | `threshold N`, `limit N` | Меняет gate и максимальное число подтверждающих review-итераций | Для доводки ответственных планов перед `eda-plan-execute` |
142
+ | `eda-plan-polish` | `threshold N`, `limit N` | Меняет gate и максимальное число итераций «проверка + исправление» | Для доводки ответственных планов перед `eda-plan-execute` |
143
143
  | `eda-manual-test` | `full` / `полная проверка`, `smoke` / `быстро` | Разово меняет глубину ручной проверки поверх `manual-test.depth` | `smoke` для короткой правки, `full` — когда нужно закрыть все области после плана |
144
144
  | `eda-review` | `subagents` / `main` | Разово меняет способ выполнения выбранных проверок поверх `review.execution` | `main` экономит контекст на частых локальных ревью; `subagents` сохраняет независимость ролей для ответственных изменений |
145
145
 
@@ -235,8 +235,8 @@ plan-review:
235
235
  threshold: 100
236
236
 
237
237
  plan-polish:
238
- # Максимальное число подтверждающих review-итераций.
239
- limit: 2
238
+ # Максимальное число итераций «проверка + исправление».
239
+ limit: 1
240
240
 
241
241
  plan-execute:
242
242
  # Где eda-plan-execute выполняет фазы плана.
@@ -397,10 +397,10 @@ discover-automations:
397
397
  - `steps[].on_failure` — настраивает исправление failed manual-test прямо рядом с этим шагом: `skill` и `args` задают фикс, `then` — повторяемые id шагов, `max_cycles` — лимит. Если обработчика нет, оркестратор сохраняет failed-отчёт и останавливается.
398
398
  - `aim.mode` — `automatic` самостоятельно выбирает безопасные ответы на рабочие вопросы; `manual` передаёт вопросы человеку. Явный режим в текущем вызове имеет приоритет.
399
399
  - `explore.strict` и `explore.decision_mode` — кросс-CLI ревью и способ выбора по исследовательским развилкам в `eda-explore`.
400
- - `plan.review` — изолированный цикл `eda-plan-polish` внутри `eda-plan`; `plan.strict` независимо управляет кросс-CLI ревью.
400
+ - `plan.review` — изолированный цикл `eda-plan-polish` внутри `eda-plan`, ровно одна итерация полировки (`limit 1`); `plan.strict` независимо управляет кросс-CLI ревью.
401
401
  - `plan.size`, `plan.decision_mode`, `plan.test_strategy`, `plan.logging_strategy` — режим и структура работы `eda-plan`.
402
402
  - `plan-review.threshold` — доля закрытых пунктов чек-листа для статуса `ready`, default `100`. Отдельных агентов у `plan-review` больше нет: проверку целиком делает один субагент.
403
- - `plan-polish.limit` — максимальное число подтверждающих review-итераций; default `2`. Цикл останавливается раньше, если score перестал расти.
403
+ - `plan-polish.limit` — максимальное число итераций «проверка + исправление»; default `1`. Отдельного подтверждающего прохода нет: исправление проверяет ревью следующей итерации. Цикл останавливается раньше, если score перестал расти.
404
404
  - `plan-execute.mode` — где `eda-plan-execute` выполняет фазы: `subagents` — каждая фаза в отдельном изолированном субагенте с независимой проверкой, `main` — весь план одним контекстом без субагентов, `auto` — выбор по плану; default `auto`. Явный режим в вызове имеет приоритет.
405
405
  - `manual-test.depth` — глубина ручной проверки в `eda-manual-test`: `full` — закрыть все применимые области матрицы покрытия, `smoke` — только запуск и основной сценарий изменённой области, `ask_each_time` — спрашивать каждый раз; default `full`. Явная глубина в вызове имеет приоритет.
406
406
  - `review.execution` — где выполняются проверки `eda-review`: `subagents` запускает отдельные специализированные роли, `main` выполняет те же выбранные проверки основным агентом без субагентов и с однократной загрузкой общего контекста; default `subagents`. Явный режим в вызове имеет приоритет.
@@ -460,7 +460,7 @@ roadmap ────────> explore ─────> plan ───> plan-
460
460
  fix ─────────────> manual-test
461
461
 
462
462
  polish = полное review ─> fix-by-review всех находок ─> подтверждающий review до clean и нужной оценки
463
- plan-polish = специализированный plan-review ─> plan-review-fix всех находок ─> подтверждающий review до gate или limit
463
+ plan-polish = итерации «plan-review ─> plan-review-fix всех находок» до gate или limit
464
464
 
465
465
  discover-automations может запускаться от review, fix-by-review или fix.
466
466
  ```
@@ -34,9 +34,9 @@
34
34
  До любых изменений индекса:
35
35
 
36
36
  1. Проверь `git status`, staged и unstaged diff, включая содержимое релевантных untracked-файлов.
37
- 2. Прочитай последние 5–10 коммитов и определи наблюдаемый стиль сообщений.
38
- 3. Получи текущую ветку, upstream, remotes и основную ветку из `origin/HEAD`.
39
- 4. Прочитай `AGENTS.md`, `CLAUDE.md`, `docs/rules.md`, `docs/arch.md` и связанные артефакты из `docs/**`, если они есть и применимы к изменениям.
37
+ 2. Получи текущую ветку, upstream, remotes и основную ветку из `origin/HEAD`.
38
+ 3. Прочитай `AGENTS.md`, `CLAUDE.md`, `docs/rules.md`, `docs/arch.md` и связанные артефакты из `docs/**`, если они есть и применимы к изменениям.
39
+ 4. Определи форму сообщений по разделу «Форма сообщений».
40
40
  5. Проверяй существующий PR текущей ветки, когда `USER_REQUEST` или `REQUESTED_ACTIONS` упоминает PR или push. Если предстоит создание или обновление PR, найди применимый шаблон PR в репозитории и прочитай его целиком.
41
41
  6. Определи состав коммита:
42
42
  - если `COMMIT_SCOPE` непустой, выбери соответствующий ему логический набор и отдели несвязанные пользовательские изменения;
@@ -53,6 +53,17 @@
53
53
  2. Определи порядок по зависимостям: базовые изменения раньше потребителей. Каждый выбранный файл должен попасть ровно в одну группу. Если один файл содержит изменения нескольких групп и безопасно разделить его без правки рабочего дерева нельзя, помести файл в наиболее подходящую группу и не блокируй весь дефолтный запуск только из-за этого.
54
54
  3. Зафиксируй исходное состояние индекса. Уже staged-файлы могут относиться к разным будущим группам или лежать вне `COMMIT_SCOPE`; их staging нельзя потерять или случайно включить не в тот коммит.
55
55
 
56
+ ## Форма сообщений
57
+
58
+ Форму сообщения задаёт проект, а не ты.
59
+
60
+ - Бери форму только из `AGENTS.md`, `CLAUDE.md` и `docs/rules.md`: язык текста, вид заголовка, префиксы вроде `feat:`, структуру и обязательные части тела.
61
+ - Если ни один из этих трёх файлов о сообщениях не говорит, повтори форму 2–3 последних коммитов.
62
+ - Остальные документы проекта форму не задают. Язык твоих инструкций и общения с пользователем — тоже.
63
+ - Та же форма действует для заголовка и описания PR.
64
+
65
+ Форма отвечает только на вопрос «как написано». Что написать, бери из фактического кандидата коммита: что в этой группе стало другим и зачем.
66
+
56
67
  ## Создать коммиты
57
68
 
58
69
  Для каждой группы последовательно:
@@ -60,7 +71,7 @@
60
71
  1. Непосредственно перед индексацией повторно проверь `git status` и diff оставшихся изменений. Если состояние неожиданно изменилось или при непустом `COMMIT_SCOPE` состав стал неоднозначным, верни `blocked` до `git add` этой группы.
61
72
  2. Добавляй новые файлы и подготавливай обычный изолированный индекс только точечно через `git add -- <paths>`; не используй `git add -A` или `git add .`. Если в индексе остаются файлы других групп или изменения вне scope, используй `git commit --only -- <paths>` либо эквивалентную безопасную path-limited стратегию: чужие staged-изменения не должны попасть в текущий коммит, исчезнуть из индекса или расшириться за счёт их unstaged-части.
62
73
  3. Проверь точный кандидат текущего коммита: `git diff --cached` для изолированного индекса или соответствующий path-limited diff для `--only`. Убедись, что кандидат содержит только текущую логическую группу без служебных артефактов или секретных файлов. При обнаружении проблемы не коммить и верни `blocked` с точным состоянием индекса и списком уже созданных коммитов.
63
- 4. Составь отдельное сообщение в стиле истории проекта. Заголовок до примерно 70 символов должен конкретно называть результат группы, а не повторять имя ветки, список файлов или общие слова вроде `changes`, `updates` и «правки». Если причина или важное изменение поведения не очевидны из заголовка, добавь короткое тело. Описывай только фактический кандидат коммита и не приписывай ему изменения или проверки из других групп.
74
+ 4. Составь отдельное сообщение: форма — по разделу «Форма сообщений», содержание — по фактическому кандидату. Заголовок до примерно 70 символов должен конкретно называть результат группы, а не повторять имя ветки, список файлов или общие слова вроде `changes`, `updates` и «правки». Если причина или важное изменение поведения не очевидны из заголовка, добавь короткое тело. Описывай только фактический кандидат коммита и не приписывай ему изменения или проверки из других групп.
64
75
  5. Выполни `git commit` выбранным изолированным способом без `--amend`, `--no-verify` и `--no-gpg-sign`. Проверь фактический состав нового commit, сохрани hash, subject и files, затем переходи к следующей группе.
65
76
 
66
77
  После последнего коммита проверь, что из выбранного состава ничего не осталось. Только затем выполняй действия после коммитов.
@@ -71,7 +82,7 @@
71
82
 
72
83
  Выполни `REQUESTED_ACTIONS` по порядку без повторного вопроса. Явное «создай PR» разрешает обычный push текущей ветки как необходимую предпосылку.
73
84
 
74
- Для создания или явно запрошенного обновления PR составь заголовок и описание по полному `USER_REQUEST`, фактическим коммитам текущей ветки относительно base и итоговому diff. Не своди PR к копии последнего commit message, если коммитов несколько.
85
+ Для создания или явно запрошенного обновления PR составь заголовок и описание по полному `USER_REQUEST`, фактическим коммитам текущей ветки относительно base и итоговому diff. Форму текста бери из раздела «Форма сообщений», состав разделов — из шаблона PR. Не своди PR к копии последнего commit message, если коммитов несколько.
75
86
 
76
87
  - Явно заданные пользователем заголовок, текст или обязательные разделы имеют приоритет. Иначе следуй найденному шаблону PR; если шаблона нет, дай короткое описание цели, список фактических изменений и раздел проверки.
77
88
  - Заголовок должен описывать общий результат PR конкретно и без имени ветки, номера коммита, служебных префиксов или общих формулировок вроде `updates` и «изменения».
package/lib/install.js CHANGED
@@ -273,7 +273,7 @@ const DEFAULT_SETTINGS = {
273
273
  threshold: 100
274
274
  },
275
275
  planPolish: {
276
- limit: 2
276
+ limit: 1
277
277
  },
278
278
  planExecute: {
279
279
  mode: 'auto'
@@ -785,7 +785,7 @@ export async function askSettings({
785
785
  ['plan', 'plan.testStrategy', settings.plan, 'testStrategy', 'Какую стратегию тестов eda-plan использовать по умолчанию?', TEST_STRATEGY_CHOICES],
786
786
  ['plan', 'plan.loggingStrategy', settings.plan, 'loggingStrategy', 'Какую стратегию логирования eda-plan использовать по умолчанию?', LOGGING_STRATEGY_CHOICES],
787
787
  ['plan-review', 'planReview.threshold', settings.planReview, 'threshold', 'Какой порог готовности использовать в eda-plan-review?', PLAN_REVIEW_THRESHOLD_CHOICES],
788
- ['plan-polish', 'planPolish.limit', settings.planPolish, 'limit', 'Сколько review-итераций разрешить eda-plan-polish?', PLAN_POLISH_LIMIT_CHOICES],
788
+ ['plan-polish', 'planPolish.limit', settings.planPolish, 'limit', 'Сколько итераций «проверка + исправление» разрешить eda-plan-polish?', PLAN_POLISH_LIMIT_CHOICES],
789
789
  ['plan-execute', 'planExecute.mode', settings.planExecute, 'mode', 'Как eda-plan-execute должен выполнять фазы по умолчанию?', PLAN_EXECUTE_MODE_CHOICES],
790
790
  ['manual-test', 'manualTest.depth', settings.manualTest, 'depth', 'Какую глубину ручной проверки использовать в eda-manual-test по умолчанию?', MANUAL_TEST_DEPTH_CHOICES],
791
791
  ['review', 'review.execution', settings.review, 'execution', 'Как eda-review должен выполнять проверки по умолчанию?', REVIEW_EXECUTION_CHOICES]
@@ -1485,7 +1485,7 @@ plan-review:
1485
1485
  threshold: ${settings.planReview.threshold}
1486
1486
 
1487
1487
  plan-polish:
1488
- # Максимальное число подтверждающих review-итераций.
1488
+ # Максимальное число итераций «проверка + исправление».
1489
1489
  # Положительное целое число.
1490
1490
  limit: ${settings.planPolish.limit}
1491
1491
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gian-tiaga/eda",
3
- "version": "3.8.0",
3
+ "version": "3.9.1",
4
4
  "description": "Пакет скилов и специализированных агентов eda-* для Claude Code и Codex CLI",
5
5
  "type": "module",
6
6
  "bin": {
@@ -75,7 +75,7 @@ COMMIT_SCOPE:
75
75
  Верни результат строго по YAML-контракту агента.
76
76
  ```
77
77
 
78
- Агент сам собирает git-контекст, читает правила и историю, формирует сообщения коммитов и тексты PR по исходному запросу и фактическому diff, точечно коммитит и выполняет разрешённое продолжение. При непустом `$COMMIT_SCOPE` он выбирает соответствующий состав. При пустом `$COMMIT_SCOPE` включает все tracked-изменения и содержательные untracked-файлы, исключая только очевидные кэши, временные, системные и локальные служебные артефакты. Выбранный состав он сам делит на необходимое число логически цельных коммитов и создаёт их по порядку; несколько задач в полном дефолтном наборе не являются причиной для вопроса. При вероятном секрете или другой реальной небезопасности он обязан вернуть `blocked` до индексации затронутой группы.
78
+ Агент сам собирает git-контекст, читает правила и историю, формирует сообщения коммитов и тексты PR по исходному запросу и фактическому diff, точечно коммитит и выполняет разрешённое продолжение. Форму этих текстов — язык, вид заголовка, префиксы, части тела — он берёт из `AGENTS.md`, `CLAUDE.md` и `docs/rules.md`, а если там о сообщениях ничего нет — из последних коммитов. Содержание берётся из фактического diff. При непустом `$COMMIT_SCOPE` он выбирает соответствующий состав. При пустом `$COMMIT_SCOPE` включает все tracked-изменения и содержательные untracked-файлы, исключая только очевидные кэши, временные, системные и локальные служебные артефакты. Выбранный состав он сам делит на необходимое число логически цельных коммитов и создаёт их по порядку; несколько задач в полном дефолтном наборе не являются причиной для вопроса. При вероятном секрете или другой реальной небезопасности он обязан вернуть `blocked` до индексации затронутой группы.
79
79
 
80
80
  Явная команда пользователя разрешает обычные ожидаемые действия и безопасные предпосылки в её рамках. Например, «создай PR» разрешает обычный push текущей ветки, если без него PR создать нельзя. Она не разрешает force-push, публикацию секретов или другое не названное рискованное действие.
81
81
 
@@ -5,7 +5,7 @@ description: 'Создаёт понятный исполнимый план ре
5
5
 
6
6
  # Скил: Планировщик (eda-plan)
7
7
 
8
- Собираешь контекст, запускаешь стандартный Plan Mode хост-агента, нормализуешь результат в файл `docs/artifacts/plans/` и делишь работу на фазы, каждую из которых один агент выполняет и проверяет за один проход. По настройкам запускаешь `eda-plan-polish`, а в strict — независимую кросс-CLI проверку.
8
+ Собираешь контекст, запускаешь стандартный Plan Mode хост-агента, приводишь план к формату скила до подтверждения пользователем и сохраняешь подтверждённый текст в `docs/artifacts/plans/`. Делишь работу на фазы, каждую из которых один агент выполняет и проверяет за один проход. По настройкам запускаешь `eda-plan-polish`, а в strict — независимую кросс-CLI проверку.
9
9
 
10
10
  ## Режим запуска
11
11
 
@@ -98,14 +98,16 @@ description: 'Создаёт понятный исполнимый план ре
98
98
  4. Найденные версии пакетов и источники.
99
99
  5. Пути к `docs/rules.md`, `docs/arch.md`, применимым карточкам и research с выпиской обязательных требований рамки.
100
100
  6. Требование: план следует правилам, архитектуре и применимым эталонам. Если нужное решение им противоречит, план сначала меняет сам документ отдельным пунктом, а не отклоняется от него.
101
- 7. Требование: план нормализуется в структуру ниже и делится на фазы, каждую из которых один агент выполняет и проверяет за один проход.
101
+ 7. Требование: уже на подтверждение пользователь получает полный план по шаблону этапа 3, включая YAML front matter, все разделы в заданном порядке и фазы с полями «Цель», «Что сделать», «Результат», «Проверка». Это формат и показа в Plan Mode, и сохраняемого файла.
102
102
  8. Требование: конкретика не равна максимальной подробности. План описывает, что и зачем меняется, а не как это написать: не пересказывать запрос и существующий код, не повторять один контракт в нескольких разделах, не выдумывать пути, символы или API ради видимости конкретики. Реализацию задают `docs/rules.md`, `docs/arch.md` и карточки.
103
103
 
104
- Не выходи из Plan Mode, пока пользователь не подтвердил план.
104
+ До запроса подтверждения нормализуй план и прогони quality gate из этапа 3. Покажи полный текст плана в формате скила; краткое резюме, список главных шагов или ссылка на файл не заменяют план на подтверждение. При правках пользователя обнови план и снова предъяви его целиком в том же формате. Не выходи из Plan Mode, пока пользователь не подтвердил план.
105
105
 
106
- ### 3. Нормализовать и сохранить
106
+ ### 3. Сохранить подтверждённый план
107
107
 
108
- Сохрани подтверждённый план в `docs/artifacts/plans/{YYYY-MM-DD}_{HH-MM}_{slug}.md`. Смысл решений не меняй без вопроса, форму и ясность правь обязательно.
108
+ Сохрани подтверждённый план в `docs/artifacts/plans/{YYYY-MM-DD}_{HH-MM}_{slug}.md` с теми же содержанием и структурой, которые показал пользователю. Нормализация формы и ясности должна быть завершена до подтверждения.
109
+
110
+ Единый шаблон для показа на подтверждение и сохранения:
109
111
 
110
112
  ```markdown
111
113
  ---
@@ -179,7 +181,7 @@ sources:
179
181
  - Риски и порядок выполнения отдельными разделами не выносятся: закрытые риски встраиваются в решения, фазы, тесты и проверки.
180
182
  - Раздела `Открытые вопросы` в плане нет. Незакрытая развилка — это блокирующий вопрос пользователю до сохранения, а не пункт в файле.
181
183
 
182
- Quality gate перед сохранением и после каждой включённой проверки:
184
+ Quality gate перед показом на подтверждение, перед сохранением и после каждой включённой проверки:
183
185
 
184
186
  - есть `Целевой алгоритм` и `Контракты реализации` с обоими подразделами;
185
187
  - применимые business-карточки выбраны после определения scope, записаны в `sources.business` и отражены в критериях приёмки;
@@ -201,10 +203,13 @@ Quality gate перед сохранением и после каждой вкл
201
203
 
202
204
  Иначе запусти `eda-plan-polish` в отдельном изолированном субагенте с чистым контекстом. Основной планировщик не делает review или fix сам.
203
205
 
206
+ Прогоняется ровно одна итерация полировки — `limit 1`: одна проверка и одно исправление. Второй круг здесь не нужен: план уже прошёл quality gate, и лишние итерации чаще раздувают текст, чем улучшают его. Плата за это — исправление остаётся неперепроверенным, поэтому `status: reviewed` появится только если ревью сразу вернуло `ready`.
207
+
204
208
  1. Запусти один `eda-plan-polish`:
205
209
 
206
210
  ```text
207
- Используй eda-plan-polish для <PLAN_FILE>.
211
+ Используй eda-plan-polish для <PLAN_FILE> с limit 1.
212
+ Прогони ровно одну итерацию полировки: проверка и исправление. Дальше не иди.
208
213
  Исходная задача и решения: <текущий запрос и ответы пользователя>.
209
214
  Верни результат, последний review/fix, score, threshold и открытые ID.
210
215
  ```
@@ -227,7 +232,7 @@ codex exec "Прочитай $PLAN_FILE, docs/rules.md, docs/arch.md и прим
227
232
 
228
233
  ### 6. Финал
229
234
 
230
- Коротко сообщи режим, выполнялись ли polish и strict, путь к плану, пути к последним артефактам проверок, итоговый статус, открытые вопросы, 3–5 главных шагов и что дальше делает `eda-plan-execute`.
235
+ Коротко сообщи режим, выполнялись ли polish и strict, путь к плану, пути к последним артефактам проверок, итоговый статус, открытые вопросы, 3–5 главных шагов и что дальше делает `eda-plan-execute`. Если требуется повторное подтверждение плана, предъяви полный актуальный текст по шаблону этапа 3.
231
236
 
232
237
  ## Чего НЕ делать
233
238
 
@@ -5,7 +5,7 @@ description: 'Доводит план циклом ревью и исправл
5
5
 
6
6
  # Скил: Полировка плана (eda-plan-polish)
7
7
 
8
- Оркестрируй цикл `eda-plan-review` → `eda-plan-review-fix` → подтверждающий `eda-plan-review`. Сам план не правь и score не выставляй: ты выбираешь план, запускаешь каждый скил в отдельном изолированном субагенте, следишь за ростом оценки и решаешь, когда остановиться.
8
+ Оркестрируй цикл `eda-plan-review` → `eda-plan-review-fix`. Сам план не правь и score не выставляй: ты выбираешь план, запускаешь каждый скил в отдельном изолированном субагенте, следишь за ростом оценки и решаешь, когда остановиться.
9
9
 
10
10
  Главное отличие от простого повторения итераций: **цикл останавливается, как только оценка перестаёт расти, и оставляет лучшую версию плана, а не последнюю.**
11
11
 
@@ -20,7 +20,7 @@ description: 'Доводит план циклом ревью и исправл
20
20
  Прочитай `docs/settings.yaml`, если есть. Поддерживается только `version: 3`; иначе defaults и предупреждение.
21
21
 
22
22
  - `plan-review.threshold` — доля закрытых пунктов для `ready`, default `100`;
23
- - `plan-polish.limit` — максимум подтверждающих review-итераций, default `2`;
23
+ - `plan-polish.limit` — максимум итераций «проверка + исправление», default `1`;
24
24
  - прямые `threshold N` и `limit N` в сообщении важнее файла.
25
25
 
26
26
  `strict` и кросс-CLI здесь не поддерживаются.
@@ -29,7 +29,7 @@ description: 'Доводит план циклом ревью и исправл
29
29
 
30
30
  1. Каждый вызов `eda-plan-review` и `eda-plan-review-fix` запускай отдельным изолированным субагентом с чистым контекстом.
31
31
  2. Если нативные субагенты недоступны, остановись. Не делай review или fix сам и не используй CLI-fallback.
32
- 3. Успех — только review со статусом `ready`.
32
+ 3. Успех — только review со статусом `ready`. Остановка сразу после fix успехом не считается.
33
33
  4. Основной агент не меняет содержание плана. После `ready` он может обновить только front matter: `status`, `plan_review`, `plan_review_fix`.
34
34
  5. Не запускай проверки проекта и не коммить.
35
35
 
@@ -44,7 +44,7 @@ description: 'Доводит план циклом ревью и исправл
44
44
  - временная API-, server-, overload- или network-ошибка — один раз продолжи того же агента; если resume недоступен, один раз запусти ту же роль с исходным входом, полным частичным результатом и требованием сначала сверить текущее состояние; повторный такой сбой заверши как `blocked` с исходной ошибкой;
45
45
  - неизвестная техническая ошибка — не угадывай причину и не зацикливай retry; заверши `blocked: техническая ошибка субагента` с полным исходным текстом.
46
46
 
47
- Ожидание слота и один технический retry не расходуют `$LIMIT` и не считаются новой review-итерацией.
47
+ Ожидание слота и один технический retry не расходуют `$LIMIT` и не считаются новой итерацией.
48
48
 
49
49
  ## Снапшот лучшей версии
50
50
 
@@ -52,10 +52,12 @@ description: 'Доводит план циклом ревью и исправл
52
52
 
53
53
  Дальше на каждой итерации: если новый score выше лучшего — перезапиши снапшот и обнови лучший score. Если ниже или равен — снапшот не трогай.
54
54
 
55
- При остановке без `ready`: если последний score ниже лучшего, восстанови план из снапшота и скажи об этом прямо. После успешного `ready` удали снапшот.
55
+ При остановке без `ready`: если последний score ниже лучшего, восстанови план из снапшота и скажи об этом прямо. Если цикл кончился сразу после fix, score этой версии не измерен — план не откатывай, но скажи, что последнее исправление не перепроверялось. После успешного `ready` удали снапшот.
56
56
 
57
57
  ## Цикл
58
58
 
59
+ Итерация — это `eda-plan-review` плюс `eda-plan-review-fix`. `$LIMIT` считает именно их, поэтому `limit 1` означает одну проверку и одно исправление. Отдельного подтверждающего прохода нет: исправление проверяет review следующей итерации, а после последнего исправления цикл заканчивается непроверенным — это цена низкого лимита.
60
+
59
61
  Сформируй `$PLAN_FILE`, `$THRESHOLD`, `$LIMIT` и журнал: итерация, путь review, SHA-256 плана, score, открытые пункты, путь fix.
60
62
 
61
63
  Для `$ITERATION` от `1` до `$LIMIT`:
@@ -73,8 +75,7 @@ description: 'Доводит план циклом ревью и исправл
73
75
  4. Если статус `ready` — обнови front matter плана (`status: reviewed`, последние `plan_review` и `plan_review_fix`), удали снапшот, заверши успешно.
74
76
  5. **Стоп по отсутствию роста.** Если это не первая итерация и score не вырос относительно предыдущей — останови цикл, восстанови лучшую версию и сообщи, какая итерация была лучшей. Дальнейшие круги только ухудшают план.
75
77
  6. Если статус `changes-required`, но проваленных пунктов нет — остановись: `blocked: ревью нарушает контракт gate`.
76
- 7. Если это последняя разрешённая итерация — остановись с причиной `достигнут limit`; fix не запускай, перепроверить его будет нечем.
77
- 8. Запусти новый изолированный субагент:
78
+ 7. Запусти новый изолированный субагент:
78
79
 
79
80
  ```text
80
81
  Используй eda-plan-review-fix для <REVIEW_FILE>.
@@ -82,9 +83,9 @@ description: 'Доводит план циклом ревью и исправл
82
83
  Верни путь к fix, before_sha256, after_sha256, before_bytes, after_bytes и закрытые пункты.
83
84
  ```
84
85
 
85
- 9. Проверь, что `before_sha256` равен `plan_sha256` из review. Если `after_sha256` равен `before_sha256` — остановись: `blocked: fix не изменил план`.
86
- 10. Если план вырос больше чем на 3%, зафиксируй это в журнале как предупреждение: рост объёма — причина следующих находок.
87
- 11. Сохрани review и fix как предыдущую цепочку и переходи к следующей итерации.
86
+ 8. Проверь, что `before_sha256` равен `plan_sha256` из review. Если `after_sha256` равен `before_sha256` — остановись: `blocked: fix не изменил план`.
87
+ 9. Если план вырос больше чем на 3%, зафиксируй это в журнале как предупреждение: рост объёма — причина следующих находок.
88
+ 10. Сохрани review и fix как предыдущую цепочку. Есть неизрасходованные итерации — начни следующую: её review заодно проверит это исправление. Иначе остановись с причиной `достигнут limit`.
88
89
 
89
90
  Score сам не считай и не корректируй: он приходит только из `eda-plan-review`.
90
91
 
@@ -92,7 +93,7 @@ Score сам не считай и не корректируй: он приход
92
93
 
93
94
  Сообщи:
94
95
 
95
- - результат: `ready`, `limit`, `нет роста` или `blocked`;
96
+ - результат: `ready`, `limit`, `нет роста` или `blocked`, и было ли последнее исправление перепроверено;
96
97
  - путь к плану и какая версия в нём осталась — последняя или восстановленная лучшая;
97
98
  - траекторию score по итерациям и номер лучшей;
98
99
  - последние review и fix, порог, открытые пункты;
@@ -105,6 +106,6 @@ Score сам не считай и не корректируй: он приход
105
106
  - Делать review, выставлять score или править содержание плана самому.
106
107
  - Продолжать цикл, когда score не растёт.
107
108
  - Оставлять последнюю версию, если лучшая была раньше.
108
- - Запускать fix после последней разрешённой итерации.
109
+ - Выдавать план за подтверждённый, когда после последнего исправления review не было.
109
110
  - Запускать кросс-CLI, `strict`, `codex exec` или `claude -p`.
110
111
  - Писать журнал полировки в тело плана, менять код или запускать проверки проекта.