@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
@@ -5,7 +5,7 @@ description: 'Выполняет готовый план последовате
5
5
 
6
6
  # Скил: Управляющий выполнением плана (eda-plan-execute)
7
7
 
8
- Веди выполнение плана: фазы строго по порядку, каждая с проверяемым результатом, прогресс и журнал в актуальном состоянии. Где именно выполняются фазы, задаёт режим.
8
+ Веди выполнение плана: фазы строго по порядку, каждая с проверяемым результатом и сверкой с рамкой, прогресс и журнал в актуальном состоянии. Где именно выполняются фазы, задаёт режим.
9
9
 
10
10
  ## Настройки
11
11
 
@@ -13,25 +13,21 @@ description: 'Выполняет готовый план последовате
13
13
 
14
14
  ```yaml
15
15
  plan-execute:
16
- mode: auto
16
+ mode: main
17
17
  ```
18
18
 
19
- `plan-execute.mode` принимает `subagents`, `main` или `auto`; при отсутствующем или невалидном значении используй `auto`. Файл настроек не изменяй.
19
+ `plan-execute.mode` принимает `main`, `auto` или `subagents`; при отсутствующем или невалидном значении используй `main`. Файл настроек не изменяй.
20
20
 
21
21
  ## Вход из сообщения пользователя
22
22
 
23
- Текст рядом с вызовом — главный вход. Разбери тему, путь к файлу, ограничения, прямые указания и режим:
23
+ Текст рядом с вызовом — главный вход: план, ограничения, прямые указания и режим:
24
24
 
25
25
  - `subagents`, `субагенты`, `изолированно` → `$MODE=subagents`;
26
26
  - `main`, `один`, `одним контекстом`, `без субагентов`, `сам` → `$MODE=main`;
27
27
  - `auto`, `авто`, `автоматически` → `$MODE=auto`;
28
- - без явного режима → `$MODE=plan-execute.mode` из валидных настроек, иначе `$MODE=auto`.
28
+ - без явного режима → `$MODE=plan-execute.mode` из валидных настроек, иначе `$MODE=main`.
29
29
 
30
- Режим из вызова важнее настройки, настройка важнее умолчания.
31
-
32
- Считай override только прямым указанием способа выполнения этого скила. «По фазам» описывает порядок работы, а `automatic` оркестратора и слово «автоматически» без явного выбора режима исполнения не задают `$MODE=auto`.
33
-
34
- Если входа достаточно, продолжай без вопроса. `AskUserQuestion` задавай только если входа нет, он противоречивый, найдено несколько равных планов или есть риск выполнить не тот план.
30
+ Режим из вызова важнее настройки, настройка важнее умолчания. Override — только прямое указание способа выполнения этого скила: «по фазам» и `automatic` оркестратора режим не задают.
35
31
 
36
32
  ## Режимы выполнения
37
33
 
@@ -41,48 +37,43 @@ plan-execute:
41
37
  | `main` | основной агент подряд в одном контексте | сам основной агент |
42
38
  | `auto` | решает по плану до старта: `main` или `subagents` | по выбранному режиму |
43
39
 
44
- `auto` выбирай `main`, только когда весь план реально помещается в один контекст: немного фаз, небольшой объём задач и файлов, одна область кода, нет тяжёлых по контексту фаз вроде крупного рефакторинга, миграции данных или множества карточек. Иначе — `subagents`; при сомнении тоже `subagents`. Решение и его причину запиши в журнал.
45
-
46
- Выбранный режим обязателен: `main` из вызова, `plan-execute.mode` или переданного оркестратором override запрещает делегацию независимо от размера плана. Критерии объёма выше применяй только при `$MODE=auto`; не переоценивай по ним явно заданный режим. После выбора в `auto` итоговый режим также зафиксирован. Менять его можно только по новому прямому указанию пользователя; решение оркестратора в `automatic` не заменяет такого указания.
40
+ `auto` выбирай `main`, только когда весь план реально помещается в один контекст: немного фаз, небольшой объём задач и файлов, одна область кода, нет тяжёлых по контексту фаз вроде крупного рефакторинга, миграции данных или множества карточек. Иначе — `subagents`; при сомнении тоже `subagents`.
47
41
 
48
- В `main` не запускай `spawn_agent`, `Agent`, аналогичные инструменты или отдельный CLI для делегирования подготовки, фаз и проверок. При нехватке контекста сохрани текущую фазу, незавершённую работу, результаты проверок и режим в журнале; после сжатия контекста продолжай основным агентом с этого места. Если продолжить в выбранном режиме технически невозможно, сохрани `status: blocked` с причиной. Размер плана, желание ускорить работу и предположение о нехватке контекста сами по себе не являются блокером или разрешением сменить режим.
42
+ Выбранный режим обязателен до конца: `main` из вызова, настройки или override оркестратора запрещает делегацию независимо от размера плана, критерии объёма применяются только к `auto`. Менять режим можно только по новому прямому указанию пользователя. В `main` не запускай `spawn_agent`, `Agent` или отдельный CLI; при нехватке контекста сохрани текущую фазу, незавершённую работу и режим в журнале и продолжай с этого места. Если продолжить в выбранном режиме технически невозможно, сохрани `status: blocked` с причиной.
49
43
 
50
- ## Главные правила
44
+ ## Правила
51
45
 
52
- 1. **В `subagents` основной агент только управляет.** Ему разрешены чтение контекста, запуск и контроль субагентов, вопросы пользователю, обновление `$PLAN_FILE` и `$EXECUTION_FILE`. Код, тесты, миграции, конфиги, зависимости, документацию и git-состояние меняют только назначенные субагенты. В `main` основной агент выполняет фазы и проверки сам и остаётся единственным исполнителем.
46
+ 1. **В `subagents` основной агент только управляет.** Ему разрешены чтение контекста, запуск и контроль субагентов, вопросы пользователю, обновление `$PLAN_FILE` и `$EXECUTION_FILE`. Код, тесты, миграции, конфиги, зависимости, документацию и git-состояние меняют только назначенные субагенты. В `main` основной агент выполняет фазы и проверки сам.
53
47
  2. **Фазы выполняй строго последовательно.** Не начинай следующую, пока текущая не выполнена и её проверка не прошла.
54
- 3. **В `subagents` одна фаза — один исполнитель.** Запускай каждую фазу целиком в новом субагенте со свежим контекстом без истории диалога. Идентификатор исполнителя сохраняй и продолжай его же для вопросов и исправлений этой фазы.
55
- 4. **Рамку читает тот, кто выполняет фазу.** Он целиком читает план, `docs/rules.md` и `docs/arch.md`. Для поведения своей фазы читает карточки из `sources.business`; у старого плана без поля выбирает через `docs/business.md` только непосредственно применимые карточки. Для затронутых компонентов так же выбирает технические карточки через `sources.references` или `docs/references.md`. Если выполнение фазы затрагивает компонент, для которого в `docs/references.md` указана карточка, он читает эту карточку целиком перед соответствующим изменением. Нерелевантные карточки не загружает.
56
- 5. **Исполнитель не додумывает план.** Если в фазе не хватает решения, это вопрос пользователю или возврат в `eda-plan`, но не импровизация в коде. В `subagents` исполнитель возвращает `needs_input`, в `main` основной агент останавливается и спрашивает.
57
- 6. **Блокируй конфликт.** План задаёт область выполняемой работы, а применимые business-карточки — требования к затронутому поведению. Если план противоречит business-карточке, `rules.md`, `arch.md` или reference-карточке, останови фазу и через `AskUserQuestion` спроси: изменить план через `eda-plan` или сначала пересогласовать правило через `eda-business`.
58
- 7. **Отмечай только подтверждённое.** Фазу закрывай только после выполнения и прошедшей проверки: в `subagents` это `completed` от исполнителя и отдельный `passed` от проверяющего, в `main` — пройденные критерии и команды проверки фазы с сохранённым выводом. При последующем опровержении верни отметку в незавершённое состояние.
59
- 8. **Проверки нельзя подавлять.** Не отключай и не поручай отключать линтеры, тесты, typecheck, static analysis и другие проверки, не добавляй игноры и не ослабляй команды и правила. Сначала исправляется причина падения, затем проверка повторяется.
60
- 9. **Новый проект разворачивай штатным CLI.** Если фаза создаёт основу нового проекта и для выбранного стека существует официальный generator/scaffold CLI, исполнитель обязан вызвать его через подходящий package manager или runtime (`composer create-project`, `npm create`, `npx`, `cargo new` или реальный аналог). Не создавай вручную файлы, которые генерирует CLI; после генерации изменяй результат только в границах плана. Если точная команда отсутствует в плане и проектных правилах, верни фазу в `eda-plan`, а не импровизируй ручной scaffold.
61
- 10. **Не коммить, не пушь и не делай ревью.** Это другие скилы.
62
-
63
- ## Вопросы
64
-
65
- Блокирующий вопрос: Claude Code — `AskUserQuestion`; Codex interactive — `request_user_input` или короткий вопрос с вариантами 1–3; Codex exec — не читай stdin, заверши со статусом `blocked: нужен ответ пользователя`. Не запускай команды, ждущие интерактивного ввода.
48
+ 3. **В `subagents` одна фаза — один исполнитель.** Запускай каждую фазу целиком в новом субагенте со свежим контекстом без истории диалога. Его идентификатор сохраняй и продолжай его же для вопросов и исправлений этой фазы.
49
+ 4. **Рамку читает тот, кто выполняет фазу.** Он полностью читает план, его раздел `Рамка` и все файлы из `sources`; большой файл — частями до последней строки, обрезанный вывод не считается прочитанным файлом. План без раздела `Рамка` — старый: исполнитель читает `docs/rules.md` и `docs/arch.md` и выбирает по их таблицам карточки областей фазы, у старого плана без поля выбирает через `docs/business.md` только непосредственно применимые карточки, а через `docs/references.md` — карточки затронутых компонентов. Если фаза затрагивает компонент, для которого в `docs/references.md` указана карточка, он читает эту карточку целиком перед соответствующим изменением.
50
+ 5. **План исполняется буквально.** Пункты `Рамки` и `Принятых решений` обязательны так же, как фазы. Не хватает решения — вопрос пользователю или возврат в `eda-plan`, а не импровизация. Не добавляй механизмов, которых нет в плане: шифрование, повторные проверки типизированных ответов, обёртки, сервисы, скрипты, контейнеры, повторы, кэши и ожидания. В `subagents` исполнитель возвращает `needs_input`, в `main` основной агент спрашивает.
51
+ 6. **Блокируй конфликт.** План задаёт область выполняемой работы, а применимые business-карточки — требования к затронутому поведению. Если план противоречит business-карточке, правилу, архитектуре или эталону, останови фазу и спроси: изменить план через `eda-plan` или сначала пересогласовать правило через `eda-business`.
52
+ 7. **Согласование — остановка.** Фаза с полем `Согласование` показывает пользователю указанный результат и ждёт ответа: в `subagents` исполнитель готовит его и возвращает `needs_input`. До ответа работа, которая от него зависит, не начинается, фаза не завершается и следующая не стартует.
53
+ 8. **Сверка с рамкой.** Перед сдачей фазы исполнитель проходит её изменения по каждому пункту `Рамки` и `Принятых решений`: `соблюдено`, `нарушено` с файлом и строкой или `не затронуто`. Нарушение исправляется до сдачи фазы.
54
+ 9. **Документы рамки правятся на месте.** Изменение `docs/rules*`, `docs/arch*`, `docs/references*` вносится в раздел-владелец по структуре документа и в пределах его лимита, без датированных дополнений и журналов изменений.
55
+ 10. **Отмечай только подтверждённое.** Фазу закрывай только после выполнения и прошедшей проверки: в `subagents` — `completed` от исполнителя и `passed` от проверяющего, в `main` — пройденные критерии и команды с сохранённым выводом. При опровержении верни отметку в незавершённое состояние.
56
+ 11. **Проверки нельзя подавлять.** Не отключай и не поручай отключать линтеры, тесты, typecheck, static analysis и другие проверки, не добавляй игноры и не ослабляй команды и правила. Сначала исправляется причина падения, затем проверка повторяется.
57
+ 12. **Новый проект разворачивай штатным CLI.** Если фаза создаёт основу нового проекта и для стека есть официальный generator/scaffold CLI, вызови его через подходящий package manager или runtime (`composer create-project`, `npm create`, `npx`, `cargo new` или реальный аналог). Не создавай вручную файлы, которые генерирует CLI. Если точной команды нет в плане и правилах, верни фазу в `eda-plan`.
58
+ 13. **Не коммить, не пушь и не делай ревью.** Это другие скилы.
59
+
60
+ Блокирующий вопрос — `AskUserQuestion`: задав его, остановись до ответа. В неинтерактивном запуске не читай stdin и заверши `blocked: нужен ответ пользователя`. Не запускай команды, ждущие интерактивного ввода.
61
+
62
+ <!-- include: skills/_shared/done.md -->
66
63
 
67
64
  ## Этапы
68
65
 
69
66
  ### 1. Выбрать план
70
67
 
71
- Путь — используй как есть. Название или его часть — ищи совпадение в `docs/artifacts/plans/`. «Последний план» — бери самый новый файл. Вставленный текст плана сначала сохрани или однозначно привяжи к файлу.
72
-
73
- Один план — продолжай без вопроса. Несколько равных — `AskUserQuestion`. Плана нет — `blocked: нужен план`.
74
-
75
- Не исполняй план с открытыми вопросами или неразрешёнными развилками: сначала заверши `eda-plan` или `eda-plan-polish`.
68
+ Путь — используй как есть. Название или его часть — ищи в `docs/artifacts/plans/`. «Последний план» — самый новый файл. Вставленный текст плана сначала сохрани или однозначно привяжи к файлу. Несколько равных — спроси; плана нет — `blocked: нужен план`. План с открытыми вопросами или неразрешёнными развилками не исполняй: сначала `eda-plan` или `eda-plan-polish`.
76
69
 
77
70
  ### 2. Выбрать место выполнения
78
71
 
79
- Через `AskUserQuestion` предложи текущую ветку, новую ветку от `main`, новую ветку от текущей или worktree от `main`. Если вызывающий оркестратор уже передал подтверждённый выбор, не спрашивай повторно.
80
-
81
- В `subagents` git-команды сам не выполняй: для новой ветки или worktree запусти отдельного субагента подготовки окружения; в `main` подготовь окружение сам. Передай ему только выбранный вариант, slug плана, рабочую директорию и запрет менять код. После успешного создания worktree остановись и дай команду перехода и нового запуска `eda-plan-execute <PLAN_FILE>`.
72
+ Спроси: текущая ветка, новая ветка от `main`, новая ветка от текущей или worktree от `main`. Подтверждённый выбор вызывающего оркестратора повторно не спрашивай. В `subagents` ветку или worktree готовит отдельный субагент без права менять код; в `main` — ты сам. После создания worktree остановись и дай команду перехода и нового запуска `eda-plan-execute <PLAN_FILE>`.
82
73
 
83
74
  ### 3. Прочитать план и проверить фазы
84
75
 
85
- Прочитай `$PLAN_FILE`, включая `test_strategy`. Для каждой фазы извлеки цель, что сделать, результат и проверку. До запуска убедись, что у каждой фазы есть проверяемый результат и команда или критерий проверки.
76
+ Прочитай `$PLAN_FILE` полностью. Для каждой фазы извлеки цель, что сделать, согласование, результат и проверку. Фаза без проверяемого результата или исполнимой проверки — предложи вернуть план в `eda-plan` или `eda-plan-polish`, смысл не достраивай.
86
77
 
87
78
  `test_strategy` управляет не только написанием тестов, но и фазовыми проверками:
88
79
 
@@ -93,15 +84,13 @@ plan-execute:
93
84
  | `phase_tests_final_checks` | написать тесты в фазе, но запустить только добавленные или изменённые этой фазой тесты; остальные проверки отложить |
94
85
  | `end_of_plan` | до финальной фазы использовать только указанные неавтоматические критерии готовности; тесты и автоматические проверки не запускать |
95
86
 
96
- Полный набор тестов и обязательных проверок всё равно запускается в финале. Если план не соответствует своей стратегии, верни его в `eda-plan` или `eda-plan-polish`, а не меняй стратегию при выполнении.
87
+ Полный набор проверок всё равно запускается в финале. План, не соответствующий своей стратегии, возвращается в `eda-plan` или `eda-plan-polish`; стратегию при выполнении не меняй.
97
88
 
98
- Если фаза не описывает проверяемый результат или её проверку нечем выполнить, не достраивай смысл молча: через `AskUserQuestion` предложи вернуть план в `eda-plan` или `eda-plan-polish`.
89
+ ### 4. Зафиксировать режим и завести журнал
99
90
 
100
- ### 4. Определить режим и инициализировать прогресс
91
+ Если `$MODE=auto`, сравни разобранные фазы с критериями из «Режимы выполнения» и зафиксируй итоговый режим до первой фазы. Сообщи режим и источник — вызов, override оркестратора, `plan-execute.mode` или default — и запиши их в журнал, для `auto` с причиной. После сжатия контекста восстанови режим из журнала.
101
92
 
102
- Если `$MODE=auto`, сравни разобранные фазы с критериями из «Режимы выполнения» и зафиксируй итоговый режим `main` или `subagents` до первой фазы. Дальше действуй по зафиксированному режиму. Перед выполнением коротко сообщи режим и его источник: вызов, override оркестратора, `plan-execute.mode` или default; сохрани их в журнале. Для `auto` также запиши причину выбора. При продолжении после сжатия контекста восстанови зафиксированный режим из журнала, если пользователь не изменил его прямо.
103
-
104
- Создай `$EXECUTION_FILE` по пути `docs/artifacts/executions/{YYYY-MM-DD}_{HH-MM}_{slug}.md`. В `$PLAN_FILE` добавь или актуализируй один раздел `## Прогресс выполнения` со ссылкой на журнал и списком фаз.
93
+ Создай `$EXECUTION_FILE` в `docs/artifacts/executions/{YYYY-MM-DD}_{HH-MM}_{slug}.md`, а в `$PLAN_FILE` — один раздел `## Прогресс выполнения` со ссылкой на журнал и списком фаз.
105
94
 
106
95
  ```markdown
107
96
  ---
@@ -115,8 +104,8 @@ current_phase: <номер>
115
104
  # Журнал выполнения: <заголовок>
116
105
 
117
106
  ## Фазы
118
- | Фаза | Результат | Проверка | Статус |
119
- |---|---|---|---|
107
+ | Фаза | Результат | Проверка | Сверка с рамкой | Статус |
108
+ |---|---|---|---|---|
120
109
 
121
110
  ## Запуски
122
111
  | Время | Исполнитель | Фаза | Результат | Файлы | Проверки |
@@ -127,30 +116,15 @@ current_phase: <номер>
127
116
  ## Финальная проверка
128
117
  ```
129
118
 
130
- Журнал и отметки прогресса в плане ведёт только основной агент. В `main` записывай выбор режима с причиной, а в колонке «Исполнитель» — `основной агент`; в `subagents` явно запрети субагентам менять `$PLAN_FILE` и `$EXECUTION_FILE`.
119
+ Журнал и отметки прогресса в плане ведёт только основной агент; в `main` в колонке «Исполнитель» пиши `основной агент`.
131
120
 
132
- ### 5. Запускать изолированных субагентов
121
+ ### 5. Выполнить фазу
133
122
 
134
- Весь этап — только для `subagents`. В `main` пропусти его и выполняй фазы сам.
123
+ В `main` выполни фазу сам по правилам 4–9, запиши в журнал сделанное, файлы, сверку и проверки и переходи к проверке фазы.
135
124
 
136
- В Codex используй `spawn_agent` с `fork_turns: "none"`, в Claude Code — новый `Agent` с самодостаточным сообщением. Если изоляция или субагенты недоступны, остановись: `blocked: недоступно изолированное выполнение`. Работу основным агентом не делай и CLI-fallback не добавляй.
125
+ Дальше весь этап — только для `subagents`. Используй в Codex `spawn_agent` с `fork_turns: "none"`, в Claude Code — новый `Agent` с самодостаточным сообщением. Если изоляция недоступна, остановись: `blocked: недоступно изолированное выполнение`; работу основным агентом не делай и CLI-fallback не добавляй.
137
126
 
138
- #### Технические остановки субагентов
139
-
140
- Техническую ошибку инструмента субагентов не смешивай со статусами `failed` и `blocked` содержательного контракта. Сохрани полный исходный текст ошибки и обработай её по причине:
141
-
142
- - лимит параллельности или отсутствие свободного слота — дождись уже запущенного этим workflow агента, при необходимости закрой завершённые потоки и повтори тот же запуск; если управляемых активных агентов нет, заверши `blocked: заняты слоты субагентов`;
143
- - лимит глубины вложения — не повторяй запуск и не выполняй этап сам; заверши `blocked: достигнут лимит глубины субагентов`, указав наблюдаемую и требуемую глубину;
144
- - исчерпана usage-квота — не делай автоматических повторов; заверши `blocked: исчерпана квота`, сохрани время reset или условие продолжения, если хост его сообщил;
145
- - не хватает разрешения — запроси одно конкретное разрешение по правилам текущей среды и после ответа продолжи того же агента; в неинтерактивной среде заверши `blocked: нужно разрешение пользователя`;
146
- - временная API-, server-, overload- или network-ошибка — один раз продолжи того же агента; если resume недоступен, один раз запусти ту же роль с исходным входом, полным частичным результатом и требованием сначала сверить текущее состояние; повторный такой сбой заверши как `blocked` с исходной ошибкой;
147
- - неизвестная техническая ошибка — не угадывай причину и не зацикливай retry; заверши `blocked: техническая ошибка субагента` с полным исходным текстом.
148
-
149
- Ожидание слота и один технический retry не считаются попыткой исправления фазы и не расходуют её лимит сходимости.
150
-
151
- Каждому исполнителю фазы передай: рабочую директорию, `$PLAN_FILE`, номер и полный текст фазы, `test_strategy`, краткие результаты завершённых фаз, пути к `docs/rules.md`, `docs/arch.md`, `docs/business.md` и `docs/references.md`, ограничения пользователя, критерии проверки фазы и запрет коммитить и менять план и журнал. Явно передай разрешённый фазовый прогон из таблицы стратегии; не разрешай запускать отложенные ею проверки досрочно.
152
-
153
- Требуй YAML-результат:
127
+ Запусти одного нового изолированного исполнителя и сохрани его идентификатор как исполнителя этой фазы. Передай рабочую директорию, `$PLAN_FILE`, номер и полный текст фазы, `test_strategy` и разрешённый фазовый прогон, краткие результаты завершённых фаз, ограничения пользователя, раздел «Доказательство готовности» целиком и запрет коммитить и менять план и журнал. Требуй YAML:
154
128
 
155
129
  ```yaml
156
130
  status: completed | needs_input | failed | blocked
@@ -159,33 +133,43 @@ summary: <что сделано>
159
133
  files_changed: [<пути>]
160
134
  business_read: [<пути или пусто>]
161
135
  references_read: [<пути или пусто>]
136
+ frame_check:
137
+ - item: <пункт Рамки или Принятых решений>
138
+ status: соблюдено | нарушено | не затронуто
139
+ evidence: <файл:строка или пусто>
162
140
  checks:
163
141
  - command: <команда или критерий>
164
142
  status: passed | failed | not_run
165
143
  result: <кратко>
166
144
  deviations: [<отклонения от плана или пусто>]
167
- risks: [<остаточные риски или пусто>]
168
145
  questions: [<вопросы или пусто>]
169
146
  ```
170
147
 
171
- Не принимай `completed`, если обязательная проверка фазы не прошла, исполнитель вышел за назначенный scope, молча отклонился от рамки или изменил план либо журнал.
148
+ Не принимай `completed`, если проверка фазы не прошла, в сверке есть `нарушено`, исполнитель вышел за scope или изменил план либо журнал. Дальше:
172
149
 
173
- ### 6. Выполнять фазы
150
+ - `needs_input` — один блокирующий вопрос пользователю, затем продолжи того же исполнителя фазы с ответом; если продолжить нельзя, запусти нового с полным предыдущим результатом;
151
+ - `failed` — продолжи того же исполнителя фазы с полным результатом и поручением исправить причину; две попытки подряд с той же причиной без содержательного изменения — `blocked: выполнение не сходится`;
152
+ - `blocked` — останови выполнение и вынеси блокер вопросом;
153
+ - `completed` — переходи к проверке фазы.
174
154
 
175
- В `subagents` для каждой фазы по порядку:
155
+ #### Технические остановки субагентов
156
+
157
+ Техническую ошибку инструмента субагентов не смешивай со статусами контракта; сохрани исходный текст и обработай по причине:
176
158
 
177
- 1. Запусти одного нового изолированного исполнителя и сохрани его идентификатор как исполнителя этой фазы.
178
- 2. Проверь YAML-контракт, фактический scope файлов и результаты проверок. Запиши запуск в журнал.
179
- 3. `needs_input` передай пользователю одним блокирующим вопросом, затем продолжи того же исполнителя фазы с ответом и его предыдущим результатом. Если среда не умеет продолжать завершённого субагента, запусти нового с полным предыдущим результатом.
180
- 4. `failed` — продолжи того же исполнителя фазы с полным неуспешным результатом и поручением исправить причину и повторить проверки. Если две попытки подряд дают ту же причину без содержательного изменения, остановись: `blocked: выполнение не сходится`.
181
- 5. `blocked` — останови выполнение. Внешний блокер или изменение scope выноси вопросом; сам его не устраняй.
182
- 6. После `completed` запусти независимую проверку фазы.
159
+ - нет свободного слота — дождись запущенного этим workflow агента, закрой завершённые и повтори; если управляемых активных агентов нет — `blocked: заняты слоты субагентов`;
160
+ - лимит глубины — не повторяй и не выполняй сам: `blocked: достигнут лимит глубины субагентов` с наблюдаемой и требуемой глубиной;
161
+ - исчерпана квота — без повторов: `blocked: исчерпана квота` с временем reset, если хост его сообщил;
162
+ - нет разрешения — запроси одно конкретное разрешение и продолжи того же агента; в неинтерактивной среде — `blocked: нужно разрешение пользователя`;
163
+ - временная API-, server-, overload- или network-ошибка — один раз продолжи того же агента, иначе один раз запусти ту же роль с исходным входом и частичным результатом; повторный сбой — `blocked` с исходной ошибкой;
164
+ - неизвестная ошибка — не угадывай причину и не зацикливай retry: `blocked: техническая ошибка субагента` с полным текстом.
183
165
 
184
- В `main` перед первой фазой один раз прочитай план целиком, `docs/rules.md` и `docs/arch.md`, а карточки выбирай по правилу 4 под каждую фазу. Затем для каждой фазы по порядку выполни работу фазы, запиши в журнал сделанное, изменённые файлы и результаты проверок и переходи к проверке фазы. Не хватает решения — спроси пользователя; конфликт с правилами или карточками — останови фазу как `blocked`; та же причина падения дважды подряд без содержательного изменения — остановись: `blocked: выполнение не сходится`.
166
+ Ожидание слота и один технический retry не расходуют лимит сходимости фазы.
185
167
 
186
- ### 7. Проверять каждую фазу
168
+ ### 6. Проверить фазу
187
169
 
188
- В `subagents` после `completed` запусти нового изолированного субагента-проверяющего. Он не меняет файлы, целиком читает план, `docs/rules.md` и `docs/arch.md`, читает только применимые карточки, выполняет разрешённый стратегией фазовый прогон и подтверждает критерии результата. При `phase_tests_final_checks` он запускает только тесты, добавленные или изменённые в этой фазе. При `end_of_plan` он не запускает автоматические команды и проверяет только указанные неавтоматические критерии готовности.
170
+ Проверка выполняет разрешённый стратегией фазовый прогон, подтверждает критерии `Результата` и заново сверяет изменения фазы с `Рамкой` и `Принятыми решениями`, не доверяя сверке исполнителя. При `phase_tests_final_checks` запускаются только добавленные или изменённые фазой тесты, при `end_of_plan` — только неавтоматические критерии.
171
+
172
+ В `subagents` проверяет новый изолированный субагент-проверяющий: он не меняет файлы, читает рамку по правилу 4 и получает раздел «Доказательство готовности» целиком.
189
173
 
190
174
  ```yaml
191
175
  status: passed | failed | blocked
@@ -194,35 +178,31 @@ checks:
194
178
  - command: <команда или критерий>
195
179
  status: passed | failed
196
180
  result: <кратко>
181
+ frame_violations: [<пункт, файл:строка или пусто>]
197
182
  failures: [<проблемы с доказательствами или пусто>]
198
183
  business_read: [<пути или пусто>]
199
184
  references_read: [<пути или пусто>]
200
185
  ```
201
186
 
202
- При `failed` передай полный результат исполнителю этой фазы, поручи исправить подтверждённые проблемы и запусти нового проверяющего. Основной агент код не чинит и контекст прежнего проверяющего не переиспользует.
203
-
204
- В `main` сам выполни разрешённый стратегией фазовый прогон и сверь результат с критериями плана, а не с собственным впечатлением. Для `phase_tests_final_checks` запускай только добавленные или изменённые текущей фазой тесты; для `end_of_plan` не запускай автоматические команды до финальной фазы. Падение исправляй и повторяй проверку заново целиком.
187
+ При `failed` передай результат исполнителю этой фазы и после исправления запусти нового проверяющего; основной агент код не чинит. В `main` проверяешь сам по критериям плана, а не по впечатлению; падение исправляешь и повторяешь проверку целиком.
205
188
 
206
- При `passed` отметь фазу завершённой и только тогда переходи к следующей.
189
+ При `passed` отметь фазу завершённой и переходи к следующей.
207
190
 
208
- ### 8. Финальная проверка
191
+ ### 7. Финальная проверка
209
192
 
210
- После всех фаз прогони полный набор тестов, линтеров, typecheck, static analysis и других обязательных команд проекта. Для `phase_tests_final_checks` и `end_of_plan` это первый полный прогон; он обязан включить созданные по фазам и существующие тесты проекта вместе со всеми отложенными проверками. Для `after_each_phase` и `tdd_each_phase` это итоговый повтор полного набора после интеграции всех фаз. В `subagents` это делает отдельный новый субагент: он только проверяет, целиком читает план, `docs/rules.md` и `docs/arch.md` и выбирает карточки итогового изменённого поведения. В `main` тот же полный набор запускает основной агент.
193
+ После всех фаз прогони полный набор тестов, линтеров, typecheck, static analysis и других обязательных команд проекта и сверь всё изменение с `Рамкой` и `Принятыми решениями`. Для `phase_tests_final_checks` и `end_of_plan` это первый полный прогон; он включает тесты всех фаз, существующие тесты и отложенные проверки. Для `after_each_phase` и `tdd_each_phase` — итоговый повтор после интеграции. В `subagents` это делает отдельный новый субагент, который только проверяет.
211
194
 
212
- Падение из-за сделанных изменений сопоставь с фазами и исправь по порядку плана: в `subagents` передай каждую группу исполнителю соответствующей фазы. Затем повтори всю финальную проверку целиком. Чужую или несвязанную поломку зафиксируй и вынеси вопросом, если без решения нельзя завершить план. Запрещено делать проверки зелёными через подавление ошибок, игноры, исключения, ослабление конфигов или изменение команд проверки.
195
+ Падение из-за изменений сопоставь с фазами и исправь по порядку плана, затем повтори финальную проверку целиком. Чужую поломку зафиксируй и вынеси вопросом, если без решения нельзя завершить план. Запрещено делать проверки зелёными через подавление ошибок, игноры, исключения, ослабление конфигов или изменение команд проверки.
213
196
 
214
- Запиши команды и результаты в `## Финальная проверка`. Только после `passed` поставь `status: done` и время завершения. Если обязательная проверка объективно недоступна, сохрани `status: blocked`, причину и непройденные критерии; выполненным план не объявляй.
197
+ Запиши команды и результаты в `## Финальная проверка`. Только после `passed` поставь `status: done` и время завершения. Если обязательная проверка недоступна, сохрани `status: blocked` с причиной.
215
198
 
216
- ### 9. Финал
199
+ ### 8. Финал
217
200
 
218
- Коротко сообщи режим выполнения, пути к плану и журналу, завершённые фазы, результат фазовых и финальной проверок, оставшиеся блокеры, состояние git «не закоммичено» и следующий шаг: `eda-review` или `eda-commit`.
201
+ Сообщи режим, пути к плану и журналу, завершённые фазы, результаты проверок и сверки, блокеры, что изменения не закоммичены, и следующий шаг: `eda-review` или `eda-commit`.
219
202
 
220
203
  ## Чего НЕ делать
221
204
 
222
205
  - В `subagents` самому менять код, тесты, миграции, конфиги и зависимости или самому запускать проверки проекта.
223
- - В `subagents` дробить фазу между исполнителями, давать одному исполнителю несколько фаз, давать субагентам историю диалога или разрешать менять план и журнал.
224
- - Самостоятельно менять зафиксированный режим или применять критерии `auto` к `main` из вызова, настроек либо override оркестратора.
225
- - Запускать следующую фазу до успешной проверки текущей.
226
- - Додумывать недостающее решение вместо вопроса.
206
+ - В `subagents` дробить фазу между исполнителями, давать одному исполнителю несколько фаз, передавать историю диалога или разрешать менять план и журнал.
227
207
  - Подавлять ошибки проверок, ослаблять правила или менять команды ради зелёного результата.
228
208
  - Коммитить, пушить, создавать PR или делать ревью.
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  name: eda-plan-polish
3
- description: 'Доводит план циклом ревью и исправлений, останавливается при отсутствии роста и оставляет лучшую версию.'
3
+ description: 'Доводит план циклом ревью и исправлений до 100/100 или лимита попыток.'
4
4
  ---
5
5
 
6
6
  # Скил: Полировка плана (eda-plan-polish)
7
7
 
8
8
  Оркестрируй цикл `eda-plan-review` → `eda-plan-review-fix`. Сам план не правь и score не выставляй: ты выбираешь план, запускаешь каждый скил в отдельном изолированном субагенте, следишь за ростом оценки и решаешь, когда остановиться.
9
9
 
10
- Главное отличие от простого повторения итераций: **цикл останавливается, как только оценка перестаёт расти, и оставляет лучшую версию плана, а не последнюю.**
10
+ Штатно завершай цикл только при подтверждённых 100/100 или достижении лимита. Кроме них цикл останавливают только: технический блокер субагента, нарушение контракта (SHA-256 цепочка, противоречивый gate) и вопрос пользователю, на который в текущей среде нельзя получить ответ; это `blocked`, а не успех. Отсутствие прогресса — не причина остановки: рост score прекратился, score снизился, пункты повторяются, fix вернул `partial` или `no-change` — продолжай до лимита.
11
11
 
12
12
  ## Вход из сообщения пользователя
13
13
 
@@ -19,9 +19,9 @@ description: 'Доводит план циклом ревью и исправл
19
19
 
20
20
  Прочитай `docs/settings.yaml`, если есть. Поддерживается только `version: 3`; иначе defaults и предупреждение.
21
21
 
22
- - `plan-review.threshold` — доля закрытых пунктов для `ready`, default `100`;
23
- - `plan-polish.limit` — максимум итераций «проверка + исправление», default `1`;
24
- - прямые `threshold N` и `limit N` в сообщении важнее файла.
22
+ - `plan-review.threshold` — настройка самостоятельного review, default `100`; внутри полировки всегда передавай `threshold 100`;
23
+ - `plan-polish.limit` — максимум итераций «проверка + исправление», default `5`;
24
+ - прямой `limit N` в сообщении важнее файла; `threshold N` не меняет цель полировки 100/100, о проигнорированном пороге сообщи в финале.
25
25
 
26
26
  `strict` и кросс-CLI здесь не поддерживаются.
27
27
 
@@ -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`. Остановка сразу после fix успехом не считается.
32
+ 3. Успех — только review со статусом `ready`, `score: 100` и без открытых пунктов. Остановка сразу после fix успехом не считается.
33
33
  4. Основной агент не меняет содержание плана. После `ready` он может обновить только front matter: `status`, `plan_review`, `plan_review_fix`.
34
34
  5. Не запускай проверки проекта и не коммить.
35
35
 
@@ -58,7 +58,7 @@ description: 'Доводит план циклом ревью и исправл
58
58
 
59
59
  Итерация — это `eda-plan-review` плюс `eda-plan-review-fix`. `$LIMIT` считает именно их, поэтому `limit 1` означает одну проверку и одно исправление. Отдельного подтверждающего прохода нет: исправление проверяет review следующей итерации, а после последнего исправления цикл заканчивается непроверенным — это цена низкого лимита.
60
60
 
61
- Сформируй `$PLAN_FILE`, `$THRESHOLD`, `$LIMIT` и журнал: итерация, путь review, SHA-256 плана, score, открытые пункты, путь fix.
61
+ Сформируй `$PLAN_FILE`, `$THRESHOLD = 100`, `$LIMIT` и журнал: итерация, путь review, SHA-256 плана, score, открытые пункты, путь fix.
62
62
 
63
63
  Для `$ITERATION` от `1` до `$LIMIT`:
64
64
 
@@ -72,18 +72,18 @@ description: 'Доводит план циклом ревью и исправл
72
72
 
73
73
  2. Прочитай отчёт и проверь, что score, порог и статус согласованы со списком пунктов.
74
74
  3. Обнови лучшую версию по правилу снапшота.
75
- 4. Если статус `ready` — обнови front matter плана (`status: reviewed`, последние `plan_review` и `plan_review_fix`), удали снапшот, заверши успешно.
76
- 5. **Стоп по отсутствию роста.** Если это не первая итерация и score не вырос относительно предыдущей — останови цикл, восстанови лучшую версию и сообщи, какая итерация была лучшей. Дальнейшие круги только ухудшают план.
75
+ 4. Если статус `ready`, score равен 100 и открытых пунктов нет — обнови front matter плана (`status: reviewed`, последние `plan_review` и `plan_review_fix`), удали снапшот, заверши успешно. Противоречие статуса, score и открытых пунктов при threshold 100 — `blocked: ревью нарушает контракт gate`.
76
+ 5. Если score не вырос или снизился относительно предыдущей итерации, продолжай цикл на текущей версии до 100/100 либо исчерпания `$LIMIT`; снапшот до завершения цикла не восстанавливай.
77
77
  6. Если статус `changes-required`, но проваленных пунктов нет — остановись: `blocked: ревью нарушает контракт gate`.
78
78
  7. Запусти новый изолированный субагент:
79
79
 
80
80
  ```text
81
81
  Используй eda-plan-review-fix для <REVIEW_FILE>.
82
82
  Закрой все пункты со статусом fail минимальным изменением плана, без роста объёма.
83
- Верни путь к fix, before_sha256, after_sha256, before_bytes, after_bytes и закрытые пункты.
83
+ Верни путь к fix, status, before_sha256, after_sha256, before_bytes, after_bytes, закрытые и не закрытые пункты.
84
84
  ```
85
85
 
86
- 8. Проверь, что `before_sha256` равен `plan_sha256` из review. Если `after_sha256` равен `before_sha256` — остановись: `blocked: fix не изменил план`.
86
+ 8. Проверь, что `before_sha256` равен `plan_sha256` из review; несовпадение — `blocked: fix нарушает SHA-256 цепочку`. Статусы fix `partial` и `no-change`, как и совпадение `after_sha256` с `before_sha256`, — отсутствие прогресса: запиши в журнал не закрытые пункты и продолжай в пределах лимита. Если fix вернул вопрос пользователю, передай его по правилам текущей среды и после ответа продолжи тот же fix; в неинтерактивной среде заверши `blocked: нужен ответ пользователя`.
87
87
  9. Если план вырос больше чем на 3%, зафиксируй это в журнале как предупреждение: рост объёма — причина следующих находок.
88
88
  10. Сохрани review и fix как предыдущую цепочку. Есть неизрасходованные итерации — начни следующую: её review заодно проверит это исправление. Иначе остановись с причиной `достигнут limit`.
89
89
 
@@ -93,7 +93,7 @@ Score сам не считай и не корректируй: он приход
93
93
 
94
94
  Сообщи:
95
95
 
96
- - результат: `ready`, `limit`, `нет роста` или `blocked`, и было ли последнее исправление перепроверено;
96
+ - результат: `ready`, `limit` или `blocked`, и было ли последнее исправление перепроверено;
97
97
  - путь к плану и какая версия в нём осталась — последняя или восстановленная лучшая;
98
98
  - траекторию score по итерациям и номер лучшей;
99
99
  - последние review и fix, порог, открытые пункты;
@@ -104,8 +104,8 @@ Score сам не считай и не корректируй: он приход
104
104
  ## Чего НЕ делать
105
105
 
106
106
  - Делать review, выставлять score или править содержание плана самому.
107
- - Продолжать цикл, когда score не растёт.
108
- - Оставлять последнюю версию, если лучшая была раньше.
107
+ - Останавливаться раньше лимита из-за отсутствия роста score, повторных находок, fix со статусом `partial` или `no-change` либо отсутствия изменений после fix.
108
+ - Откатывать текущую версию к лучшей посреди цикла или восстанавливать снапшот поверх неперепроверенного последнего fix.
109
109
  - Выдавать план за подтверждённый, когда после последнего исправления review не было.
110
110
  - Запускать кросс-CLI, `strict`, `codex exec` или `claude -p`.
111
111
  - Писать журнал полировки в тело плана, менять код или запускать проверки проекта.
@@ -7,7 +7,7 @@ description: 'Проверяет готовый план по фиксирова
7
7
 
8
8
  Read-only проверка одного плана по списку ниже. Список конечный и один и тот же для всех планов: поэтому проверка заканчивается, а оценка растёт по мере закрытия пунктов.
9
9
 
10
- Ты проверяешь **исполнимость плана**, а не правильность решений. Вопрос: «можно это исполнить, не переспрашивая?» Правильность решений закрыта на этапе Plan Mode через `decision_mode`, а ошибки в чужих API дешевле ловит статический анализ на коде.
10
+ Ты проверяешь **исполнимость плана**, а не правильность решений. Вопрос: «можно это исполнить, не переспрашивая?» Правильность решений закрыта при планировании через `decision_mode`, а ошибки в чужих API дешевле ловит статический анализ на коде.
11
11
 
12
12
  Всю работу делай сам, одним проходом. Не запускай субагентов и не дроби проверку по ролям.
13
13
 
@@ -15,7 +15,7 @@ Read-only проверка одного плана по списку ниже.
15
15
 
16
16
  Текст рядом с вызовом — главный вход. Разбери путь или название плана, «последний план», threshold и предыдущий review.
17
17
 
18
- `$PLAN_FILE` ищи только в `docs/artifacts/plans/`: явный путь, однозначное совпадение или самый новый файл при словах «последний план». Без плана остановись. Если вариантов несколько и выбрать нельзя — `AskUserQuestion`.
18
+ `$PLAN_FILE` ищи только в `docs/artifacts/plans/`: явный путь, однозначное совпадение или самый новый файл при словах «последний план». Без плана остановись. Если вариантов несколько и выбрать нельзя — `AskUserQuestion` и остановка до ответа; в неинтерактивном запуске — `blocked: нужен выбор плана` со списком вариантов.
19
19
 
20
20
  ## Настройки
21
21
 
@@ -26,7 +26,7 @@ Read-only проверка одного плана по списку ниже.
26
26
  ## Подготовка
27
27
 
28
28
  1. Прочитай план целиком и вычисли SHA-256 его байтов как `$PLAN_SHA256`.
29
- 2. Прочитай `docs/rules.md`, `docs/arch.md` и только применимые карточки из `sources.business` и `sources.references` плана. Для старого плана выбери только применимые карточки через `docs/business.md`, а для старого плана выбери только карточки затронутых компонентов через `docs/references.md`; нерелевантные не загружай.
29
+ 2. Прочитай `docs/rules.md`, `docs/arch.md` и все файлы из `sources` плана полностью; большой файл — частями до последней строки. Для старого плана без раздела `Рамка` выбери только применимые карточки через `docs/business.md`, а для старого плана выбери только карточки затронутых компонентов через `docs/references.md`; нерелевантные не загружай.
30
30
  3. Определи `$PREVIOUS_REVIEW`: явный путь либо последний review того же плана, у которого `plan_sha256` совпадает с текущим SHA-256 или с `after_sha256` связанного fix. Несвязанную историю не подмешивай.
31
31
 
32
32
  ## Чек-лист
@@ -35,26 +35,36 @@ Read-only проверка одного плана по списку ниже.
35
35
 
36
36
  | № | Пункт |
37
37
  |---|---|
38
- | 1 | Каждая часть запроса покрыта планом |
39
- | 2 | В плане нет работы вне запроса |
38
+ | 1 | Каждая часть запроса покрыта планом; каждый сценарий `Целевого алгоритма` и каждый контракт реализует какая-то фаза |
39
+ | 2 | В плане нет работы и механизмов вне запроса, рамки и подтверждённых решений |
40
40
  | 3 | Применимые business-карточки записаны в `sources.business` и отражены в результатах фаз |
41
- | 4 | План не отклоняется от `docs/rules.md`, `docs/arch.md` и карточек. Где нужно другое поведение, есть отдельный пункт на изменение самого документа до зависимой реализации |
41
+ | 4 | `Рамка` содержит каждое применимое требование правил, архитектуры, эталонов, бизнес-карточек и `AGENTS.md` с источником и разделом; план им не противоречит. Где нужно другое поведение, есть отдельный пункт на изменение самого документа до зависимой реализации |
42
42
  | 5 | Все существенные решения имеют источник подтверждения: ответ пользователя, research или `autonomous` с причиной |
43
43
  | 6 | В плане не осталось решений, которые придётся принимать исполнителю |
44
44
  | 7 | Пакеты, библиотеки и сервисы имеют конкретные версии или ссылку на существующий lock |
45
- | 8 | Есть `Целевой алгоритм` и `Контракты реализации` с подразделами `Данные и БД`, `API и внешние контракты`, `Интерфейс и дизайн` и `Консольные команды` |
45
+ | 8 | Разделы идут по порядку: `Задача`, `Рамка`, `Целевой алгоритм`, `Контракты реализации` с подразделами `Данные и БД`, `API и внешние контракты`, `Интерфейс и дизайн` и `Консольные команды`, `Фазы выполнения`, `Тесты и проверки`, `Логирование`, `Документация и эксплуатация`, `Принятые решения` |
46
46
  | 9 | Ни один факт не описан в двух разделах |
47
47
  | 10 | В плане нет сигнатур чужих методов, приведений типов, формы классов, внутренних вычислений без контрактного смысла и пересказа кодовых примеров карточек; формулы, задающие обязательное поведение, допустимы |
48
- | 11 | У каждой фазы есть цель, что сделать, результат и проверка |
48
+ | 11 | У каждой фазы есть цель, что сделать, результат и проверка; проверка — команда с ожидаемым результатом или наблюдаемое состояние системы, а не «работает корректно» |
49
49
  | 12 | Каждая фаза выполнима одним агентом за один проход вместе с её проверками |
50
50
  | 13 | Команды в `Проверке` фазы существуют к моменту её выполнения или создаются в этой же фазе |
51
51
  | 14 | План доведён до точки, где результат можно запустить и проверить целиком |
52
52
  | 15 | Объём в пределах потолка: `normal` — 40 КБ, `short` — 12 КБ и 2 фазы |
53
53
  | 16 | В плане нет раздела `Открытые вопросы` и незакрытых развилок |
54
+ | 17 | Если план затрагивает инфраструктуру, публичные индексируемые страницы или ввод-вывод на частом пути, решения этих областей записаны: переменные окружения и где они задаются, порт, healthcheck, образ, прокси и CI; адреса, 301 со старых адресов, canonical, индексация и sitemap; допустимое число запросов к БД и внешних вызовов на операцию со способом проверки |
55
+ | 18 | `Целевой алгоритм` — сценарии из нумерованных шагов в порядке выполнения, ветки подпунктами, ошибки после шагов; таблица только для матрицы статусов и формул. В `Данных и БД` у каждой изменяемой таблицы своя таблица колонок |
56
+ | 19 | У каждого сценария с внешним вызовом или изменением данных описаны ошибки: что видит пользователь, в каком состоянии остаются данные и как продолжить после сбоя посередине — повтор, откат или ручное действие |
57
+ | 20 | Каждая ветка «Если …» и каждая ошибка `Целевого алгоритма` проверяются сценарием в `Тестах и проверках` или в проверке фазы по `test_strategy` |
58
+ | 21 | Каждая сущность, поле, статус, endpoint, команда и событие называются одинаково во всех разделах и фазах; всё, на что ссылаются алгоритм и фазы, определено в `Контрактах реализации` или уже есть в проекте |
59
+ | 22 | Если задача удаляет или переименовывает поведение, поле, endpoint, страницу или команду, план называет, что становится со старыми данными, адресами и клиентами, и как проверить, что старое поведение исчезло, а при переименовании — что оно сохранилось |
60
+
61
+ ### Как проверять пункт 4
62
+
63
+ Сверь `Рамку` с прочитанными документами. Применимое требование, которого в ней нет, — `fail` с цитатой документа. Пункт без источника и раздела или пересказ целого документа вместо применимого требования — тоже `fail`.
54
64
 
55
65
  ### Как проверять пункт 6
56
66
 
57
- Ищи шесть форм. Для каждой находки приведи цитату.
67
+ Ищи семь форм. Для каждой находки приведи цитату.
58
68
 
59
69
  | Форма | Пример | Как должно быть |
60
70
  |---|---|---|
@@ -64,11 +74,16 @@ Read-only проверка одного плана по списку ниже.
64
74
  | Число без числа | «разумный таймаут», «оптимальный размер батча», «достаточное количество попыток» | «таймаут 30 с», «батч 100» |
65
75
  | Отложенное решение | «уточнить позже», «решить при реализации», «TBD» | решено до сохранения плана |
66
76
  | Обобщение вместо требования | «обработать ошибки корректно», «добавить нужные индексы», «настроить логирование» | что происходит при ошибке; какие индексы; какие поля в логах |
77
+ | Качество без меры | «быстро», «удобно», «надёжно», «безопасно», «масштабируемо» | «ответ до 300 мс на списке из 1000 записей», «форма проходится с клавиатуры» |
67
78
 
68
79
  Критерий: если по формулировке два исполнителя сделают существенно разные вещи — `fail`.
69
80
 
70
81
  Пункт не касается: условных веток («при ошибке — повтор» это описание ветки, а не модальность) и умолчаний, заданных `rules.md` или карточкой — их повторять в плане не нужно.
71
82
 
83
+ ### Как проверять пункты 19 и 20
84
+
85
+ Пройди каждый сценарий алгоритма. Шаг, который обращается к внешнему сервису, отправляет сообщение или меняет данные, без строки `Ошибки` — `fail` по пункту 19 с цитатой шага. Затем сопоставь каждую ветку «Если …» и каждую ошибку со сценарием теста; ветка без теста — `fail` по пункту 20 с цитатой ветки. Тест на каждый шаг без ветки не требуй.
86
+
72
87
  ### Как проверять пункт 10
73
88
 
74
89
  Сам по себе формульный синтаксис не является основанием для `fail`. Формула или компактный псевдокод допустимы, если они точнее прозы задают бизнес-правило, контракт, инвариант или критерий приёмки. Например, `retryAt = now + 5 minutes` фиксирует обязательный момент повторной обработки и остаётся в плане. Ставь `fail` только за внутренние вычисления и кодовые детали, которые не меняют наблюдаемое поведение и не нужны исполнителю для однозначного результата.
@@ -125,7 +140,7 @@ date: <YYYY-MM-DD HH:MM>
125
140
  - **Исправление:** назвать число или сослаться на настройку, где оно задано.
126
141
 
127
142
  ## Итог
128
- - **Закрыто:** 14 из 16 → score 88
143
+ - **Закрыто:** 20 из 22 → score 91
129
144
  - **Порог:** 100
130
145
  - **Результат:** changes-required
131
146
  - **Открытые пункты:** 6, 9