@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.
- package/MIGRATION.md +23 -2
- package/README.md +131 -223
- package/agents/eda-aim-executor/prompt.md +2 -0
- package/agents/eda-aim-verifier/prompt.md +2 -0
- package/agents/eda-review-api/prompt.md +4 -4
- package/agents/eda-review-architecture/prompt.md +4 -4
- package/agents/eda-review-business/prompt.md +5 -12
- package/agents/eda-review-code-quality/prompt.md +4 -4
- package/agents/eda-review-correctness/prompt.md +3 -3
- package/agents/eda-review-database/prompt.md +4 -4
- package/agents/eda-review-documentation/prompt.md +4 -4
- package/agents/eda-review-frontend/prompt.md +4 -4
- package/agents/eda-review-infra/agent.json +14 -0
- package/agents/eda-review-infra/prompt.md +36 -0
- package/agents/eda-review-performance/prompt.md +7 -7
- package/agents/eda-review-plan-alignment/prompt.md +4 -4
- package/agents/eda-review-previous-reviews/prompt.md +5 -4
- package/agents/eda-review-references/prompt.md +4 -4
- package/agents/eda-review-rules/prompt.md +4 -4
- package/agents/eda-review-security/prompt.md +4 -4
- package/agents/eda-review-seo/agent.json +14 -0
- package/agents/eda-review-seo/prompt.md +36 -0
- package/agents/eda-review-tests/prompt.md +4 -4
- package/agents/eda-review-triage/agent.json +14 -0
- package/agents/eda-review-triage/prompt.md +38 -0
- package/lib/catalog.js +28 -1
- package/lib/install.js +221 -590
- package/lib/prompts.js +53 -0
- package/lib/renderers/codex-agent.js +3 -1
- package/lib/renderers/codex-skill.js +21 -1
- package/lib/renderers/opencode-skill.js +2 -2
- package/package.json +2 -3
- package/skills/_shared/done.md +15 -0
- package/skills/_shared/questions.md +9 -0
- package/skills/eda-aim/SKILL.md +2 -3
- package/skills/eda-business/SKILL.md +5 -6
- package/skills/eda-commit/SKILL.md +2 -3
- package/skills/eda-discover-automations/SKILL.md +6 -7
- package/skills/eda-explore/SKILL.md +28 -15
- package/skills/eda-fix/SKILL.md +7 -7
- package/skills/eda-fix-by-review/SKILL.md +4 -3
- package/skills/eda-just-do-it/SKILL.md +4 -4
- package/skills/eda-manual-test/SKILL.md +7 -5
- package/skills/eda-merge-worktree/SKILL.md +2 -3
- package/skills/eda-new-project/SKILL.md +3 -5
- package/skills/eda-orhestra/SKILL.md +3 -4
- package/skills/eda-plan/SKILL.md +126 -168
- package/skills/eda-plan-execute/SKILL.md +72 -92
- package/skills/eda-plan-polish/SKILL.md +14 -14
- package/skills/eda-plan-review/SKILL.md +25 -10
- package/skills/eda-plan-review-fix/SKILL.md +10 -7
- package/skills/eda-polish/SKILL.md +9 -6
- package/skills/eda-prepare-ai/SKILL.md +35 -15
- package/skills/eda-prod-check/SKILL.md +129 -0
- package/skills/eda-review/SKILL.md +92 -64
- package/skills/eda-review/references/checks/api.md +18 -0
- package/skills/eda-review/references/checks/architecture.md +16 -0
- package/skills/eda-review/references/checks/business.md +13 -0
- package/skills/eda-review/references/checks/code-quality.md +18 -0
- package/skills/eda-review/references/checks/correctness.md +19 -0
- package/skills/eda-review/references/checks/database.md +17 -0
- package/skills/eda-review/references/checks/documentation.md +13 -0
- package/skills/eda-review/references/checks/frontend.md +19 -0
- package/skills/eda-review/references/checks/infra.md +16 -0
- package/skills/eda-review/references/checks/performance.md +21 -0
- package/skills/eda-review/references/checks/plan-alignment.md +16 -0
- package/skills/eda-review/references/checks/previous-reviews.md +9 -0
- package/skills/eda-review/references/checks/references.md +11 -0
- package/skills/eda-review/references/checks/rules.md +16 -0
- package/skills/eda-review/references/checks/security.md +26 -0
- package/skills/eda-review/references/checks/seo.md +16 -0
- package/skills/eda-review/references/checks/tests.md +18 -0
- package/skills/eda-review/references/defects.md +24 -0
- package/skills/eda-review/references/triage.md +23 -0
- package/skills/eda-roadmap/SKILL.md +2 -4
- package/skills/eda-send-review/SKILL.md +3 -5
- package/skills/eda-worktree/SKILL.md +2 -3
- 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:
|
|
16
|
+
mode: main
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
`plan-execute.mode` принимает `
|
|
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=
|
|
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
|
|
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. **Рамку читает тот, кто выполняет фазу.** Он
|
|
56
|
-
5.
|
|
57
|
-
6. **Блокируй конфликт.** План задаёт область выполняемой работы, а применимые business-карточки — требования к затронутому поведению. Если план противоречит business-карточке,
|
|
58
|
-
7.
|
|
59
|
-
8.
|
|
60
|
-
9.
|
|
61
|
-
10.
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
Путь — используй как есть. Название или его часть — ищи
|
|
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
|
-
|
|
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
|
|
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
|
-
Полный набор
|
|
87
|
+
Полный набор проверок всё равно запускается в финале. План, не соответствующий своей стратегии, возвращается в `eda-plan` или `eda-plan-polish`; стратегию при выполнении не меняй.
|
|
97
88
|
|
|
98
|
-
|
|
89
|
+
### 4. Зафиксировать режим и завести журнал
|
|
99
90
|
|
|
100
|
-
|
|
91
|
+
Если `$MODE=auto`, сравни разобранные фазы с критериями из «Режимы выполнения» и зафиксируй итоговый режим до первой фазы. Сообщи режим и источник — вызов, override оркестратора, `plan-execute.mode` или default — и запиши их в журнал, для `auto` с причиной. После сжатия контекста восстанови режим из журнала.
|
|
101
92
|
|
|
102
|
-
|
|
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
|
-
Журнал и отметки прогресса в плане ведёт только основной
|
|
119
|
+
Журнал и отметки прогресса в плане ведёт только основной агент; в `main` в колонке «Исполнитель» пиши `основной агент`.
|
|
131
120
|
|
|
132
|
-
### 5.
|
|
121
|
+
### 5. Выполнить фазу
|
|
133
122
|
|
|
134
|
-
|
|
123
|
+
В `main` выполни фазу сам по правилам 4–9, запиши в журнал сделанное, файлы, сверку и проверки и переходи к проверке фазы.
|
|
135
124
|
|
|
136
|
-
|
|
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`, если
|
|
148
|
+
Не принимай `completed`, если проверка фазы не прошла, в сверке есть `нарушено`, исполнитель вышел за scope или изменил план либо журнал. Дальше:
|
|
172
149
|
|
|
173
|
-
|
|
150
|
+
- `needs_input` — один блокирующий вопрос пользователю, затем продолжи того же исполнителя фазы с ответом; если продолжить нельзя, запусти нового с полным предыдущим результатом;
|
|
151
|
+
- `failed` — продолжи того же исполнителя фазы с полным результатом и поручением исправить причину; две попытки подряд с той же причиной без содержательного изменения — `blocked: выполнение не сходится`;
|
|
152
|
+
- `blocked` — останови выполнение и вынеси блокер вопросом;
|
|
153
|
+
- `completed` — переходи к проверке фазы.
|
|
174
154
|
|
|
175
|
-
|
|
155
|
+
#### Технические остановки субагентов
|
|
156
|
+
|
|
157
|
+
Техническую ошибку инструмента субагентов не смешивай со статусами контракта; сохрани исходный текст и обработай по причине:
|
|
176
158
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
159
|
+
- нет свободного слота — дождись запущенного этим workflow агента, закрой завершённые и повтори; если управляемых активных агентов нет — `blocked: заняты слоты субагентов`;
|
|
160
|
+
- лимит глубины — не повторяй и не выполняй сам: `blocked: достигнут лимит глубины субагентов` с наблюдаемой и требуемой глубиной;
|
|
161
|
+
- исчерпана квота — без повторов: `blocked: исчерпана квота` с временем reset, если хост его сообщил;
|
|
162
|
+
- нет разрешения — запроси одно конкретное разрешение и продолжи того же агента; в неинтерактивной среде — `blocked: нужно разрешение пользователя`;
|
|
163
|
+
- временная API-, server-, overload- или network-ошибка — один раз продолжи того же агента, иначе один раз запусти ту же роль с исходным входом и частичным результатом; повторный сбой — `blocked` с исходной ошибкой;
|
|
164
|
+
- неизвестная ошибка — не угадывай причину и не зацикливай retry: `blocked: техническая ошибка субагента` с полным текстом.
|
|
183
165
|
|
|
184
|
-
|
|
166
|
+
Ожидание слота и один технический retry не расходуют лимит сходимости фазы.
|
|
185
167
|
|
|
186
|
-
###
|
|
168
|
+
### 6. Проверить фазу
|
|
187
169
|
|
|
188
|
-
|
|
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
|
-
###
|
|
191
|
+
### 7. Финальная проверка
|
|
209
192
|
|
|
210
|
-
После всех фаз прогони полный набор тестов, линтеров, typecheck, static analysis и других обязательных команд
|
|
193
|
+
После всех фаз прогони полный набор тестов, линтеров, typecheck, static analysis и других обязательных команд проекта и сверь всё изменение с `Рамкой` и `Принятыми решениями`. Для `phase_tests_final_checks` и `end_of_plan` это первый полный прогон; он включает тесты всех фаз, существующие тесты и отложенные проверки. Для `after_each_phase` и `tdd_each_phase` — итоговый повтор после интеграции. В `subagents` это делает отдельный новый субагент, который только проверяет.
|
|
211
194
|
|
|
212
|
-
Падение из-за
|
|
195
|
+
Падение из-за изменений сопоставь с фазами и исправь по порядку плана, затем повтори финальную проверку целиком. Чужую поломку зафиксируй и вынеси вопросом, если без решения нельзя завершить план. Запрещено делать проверки зелёными через подавление ошибок, игноры, исключения, ослабление конфигов или изменение команд проверки.
|
|
213
196
|
|
|
214
|
-
Запиши команды и результаты в `## Финальная проверка`. Только после `passed` поставь `status: done` и время завершения. Если обязательная проверка
|
|
197
|
+
Запиши команды и результаты в `## Финальная проверка`. Только после `passed` поставь `status: done` и время завершения. Если обязательная проверка недоступна, сохрани `status: blocked` с причиной.
|
|
215
198
|
|
|
216
|
-
###
|
|
199
|
+
### 8. Финал
|
|
217
200
|
|
|
218
|
-
|
|
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` —
|
|
23
|
-
- `plan-polish.limit` — максимум итераций «проверка + исправление», default `
|
|
24
|
-
-
|
|
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
|
|
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
|
|
76
|
-
5.
|
|
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
|
|
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
|
|
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
|
-
-
|
|
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
|
-
Ты проверяешь **исполнимость плана**, а не правильность решений. Вопрос: «можно это исполнить, не переспрашивая?» Правильность решений закрыта
|
|
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` и
|
|
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 |
|
|
41
|
+
| 4 | `Рамка` содержит каждое применимое требование правил, архитектуры, эталонов, бизнес-карточек и `AGENTS.md` с источником и разделом; план им не противоречит. Где нужно другое поведение, есть отдельный пункт на изменение самого документа до зависимой реализации |
|
|
42
42
|
| 5 | Все существенные решения имеют источник подтверждения: ответ пользователя, research или `autonomous` с причиной |
|
|
43
43
|
| 6 | В плане не осталось решений, которые придётся принимать исполнителю |
|
|
44
44
|
| 7 | Пакеты, библиотеки и сервисы имеют конкретные версии или ссылку на существующий lock |
|
|
45
|
-
| 8 |
|
|
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
|
-
- **Закрыто:**
|
|
143
|
+
- **Закрыто:** 20 из 22 → score 91
|
|
129
144
|
- **Порог:** 100
|
|
130
145
|
- **Результат:** changes-required
|
|
131
146
|
- **Открытые пункты:** 6, 9
|