@alxyrgin/agent-forge 1.0.0 → 3.1.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 (64) hide show
  1. package/README.md +384 -96
  2. package/dist/index.js +355 -58
  3. package/dist/index.js.map +1 -1
  4. package/package.json +12 -2
  5. package/templates/agents/documentation/gatekeeper.md.ejs +83 -0
  6. package/templates/agents/documentation/librarian.md.ejs +80 -0
  7. package/templates/agents/documentation/verifier.md.ejs +92 -0
  8. package/templates/agents/documentation/writer.md.ejs +189 -0
  9. package/templates/agents/pipeline/analyst.md.ejs +65 -0
  10. package/templates/agents/{core → pipeline}/architect.md.ejs +38 -1
  11. package/templates/agents/pipeline/developer.md.ejs +75 -0
  12. package/templates/agents/pipeline/inspector.md.ejs +123 -0
  13. package/templates/agents/pipeline/planner.md.ejs +211 -0
  14. package/templates/agents/pipeline/reviewer.md.ejs +158 -0
  15. package/templates/agents/pipeline/skeptic.md.ejs +105 -0
  16. package/templates/agents/pipeline/tester.md.ejs +134 -0
  17. package/templates/agents/planning/decomposer.md.ejs +103 -0
  18. package/templates/agents/planning/interviewer.md.ejs +104 -0
  19. package/templates/agents/planning/researcher.md.ejs +96 -0
  20. package/templates/agents/planning/validator.md.ejs +97 -0
  21. package/templates/agents/security/auditor.md.ejs +105 -0
  22. package/templates/agents/security/deployer.md.ejs +81 -0
  23. package/templates/agents/security/prompter.md.ejs +87 -0
  24. package/templates/agents/security/scaffolder.md.ejs +75 -0
  25. package/templates/hooks/protect-docs.sh.ejs +25 -0
  26. package/templates/memory/checkpoint.yml.ejs +21 -0
  27. package/templates/memory/tech-debt.md.ejs +9 -1
  28. package/templates/root/CLAUDE.md.ejs +228 -30
  29. package/templates/root/settings.json.ejs +15 -1
  30. package/templates/rules/agent-output-format.md.ejs +80 -0
  31. package/templates/rules/context-loading.md.ejs +70 -0
  32. package/templates/rules/development-cycle.md.ejs +163 -29
  33. package/templates/rules/quality-gates.md.ejs +80 -0
  34. package/templates/rules/rollback-protocol.md.ejs +60 -0
  35. package/templates/rules/shared-resources.md.ejs +73 -0
  36. package/templates/skills/core/code/SKILL.md.ejs +85 -0
  37. package/templates/skills/core/complete-task/SKILL.md.ejs +22 -9
  38. package/templates/skills/core/done/SKILL.md.ejs +66 -0
  39. package/templates/skills/core/end-session/SKILL.md.ejs +14 -6
  40. package/templates/skills/core/review/SKILL.md.ejs +1 -1
  41. package/templates/skills/core/start-session/SKILL.md.ejs +73 -10
  42. package/templates/skills/core/take-task/SKILL.md.ejs +279 -30
  43. package/templates/skills/core/test/SKILL.md.ejs +200 -0
  44. package/templates/skills/extra/audit-wave/SKILL.md.ejs +58 -0
  45. package/templates/skills/extra/dashboard/SKILL.md.ejs +64 -0
  46. package/templates/skills/extra/decompose/SKILL.md.ejs +72 -0
  47. package/templates/skills/extra/feature/SKILL.md.ejs +83 -0
  48. package/templates/skills/extra/interview/SKILL.md.ejs +66 -0
  49. package/templates/skills/extra/prompts/SKILL.md.ejs +65 -0
  50. package/templates/skills/extra/security/SKILL.md.ejs +77 -0
  51. package/templates/skills/extra/skill-master/SKILL.md.ejs +51 -0
  52. package/templates/skills/extra/spec/SKILL.md.ejs +111 -0
  53. package/templates/skills/extra/techspec/SKILL.md.ejs +97 -0
  54. package/templates/skills/extra/write-report/SKILL.md.ejs +26 -0
  55. package/templates/agents/core/analyst.md.ejs +0 -56
  56. package/templates/agents/core/developer.md.ejs +0 -54
  57. package/templates/agents/core/doc-writer.md.ejs +0 -50
  58. package/templates/agents/core/progress-tracker.md.ejs +0 -56
  59. package/templates/agents/core/reviewer.md.ejs +0 -52
  60. package/templates/agents/core/security-auditor.md.ejs +0 -51
  61. package/templates/agents/core/unit-tester.md.ejs +0 -56
  62. package/templates/agents/extra/acceptance-tester.md.ejs +0 -48
  63. package/templates/agents/extra/integration-tester.md.ejs +0 -49
  64. package/templates/agents/extra/planner.md.ejs +0 -89
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: end-session
3
- description: Завершение рабочей сессии. Сохраняет контекст, обновляет memory bank, создаёт лог сессии.
3
+ description: Завершение рабочей сессии. Сохраняет контекст, checkpoint, обновляет memory bank, создаёт лог сессии.
4
4
  user-invocable: true
5
5
  disable-model-invocation: false
6
6
  allowed-tools: Read, Write, Edit, Glob, Grep, Bash
@@ -17,7 +17,14 @@ allowed-tools: Read, Write, Edit, Glob, Grep, Bash
17
17
  Что ещё было сделано в этой сессии, помимо того, что я зафиксировал?
18
18
  ```
19
19
 
20
- ## 2. Обновить active-context.md
20
+ ## 2. Сохранить checkpoint (если задача не закончена)
21
+
22
+ Прочитай `dev-infra/memory/checkpoint.yml`. Если `active: true`:
23
+ - Убедись, что `current_step`, `step_name` и `context` актуальны
24
+ - Обнови `last_updated` на текущую дату
25
+ - Сообщи пользователю: «Checkpoint сохранён. При следующем /start-session предложу восстановление.»
26
+
27
+ ## 3. Обновить active-context.md
21
28
 
22
29
  Перезапиши `dev-infra/memory/active-context.md`:
23
30
  - **Дата:** сегодня
@@ -27,15 +34,15 @@ allowed-tools: Read, Write, Edit, Glob, Grep, Bash
27
34
  - **Блокеры:** если появились
28
35
  - **Важные решения:** если были (также добавь в decisions.md)
29
36
 
30
- ## 3. Обновить progress.md
37
+ ## 4. Обновить progress.md
31
38
 
32
39
  Пересчитай статусы задач из tasks.json.
33
40
 
34
- ## 4. Определить участника
41
+ ## 5. Определить участника
35
42
 
36
43
  Определи, кто работал в этой сессии. Если неясно — спроси.
37
44
 
38
- ## 5. Создать лог сессии
45
+ ## 6. Создать лог сессии
39
46
 
40
47
  Получи текущее время: `date +%H:%M`
41
48
 
@@ -65,7 +72,7 @@ allowed-tools: Read, Write, Edit, Glob, Grep, Bash
65
72
  - [если есть]
66
73
  ```
67
74
 
68
- ## 6. Коммит и пуш
75
+ ## 7. Коммит и пуш
69
76
 
70
77
  Формат коммита:
71
78
  ```
@@ -75,6 +82,7 @@ memory(Участник): обновление после сессии YYYY-MM-D
75
82
  Включить в коммит:
76
83
  - dev-infra/memory/active-context.md
77
84
  - dev-infra/memory/progress.md
85
+ - dev-infra/memory/checkpoint.yml
78
86
  - dev-infra/sessions/YYYY-MM-DD_HH-MM.md
79
87
  - dev-infra/tasks/tasks.json (если обновлён)
80
88
 
@@ -25,5 +25,5 @@ Agent(subagent_type="reviewer", prompt="Проверь файл [путь]. Па
25
25
  1. Загрузи задачу из `dev-infra/tasks/tasks.json`
26
26
  2. Найди acceptance_criteria и связанные файлы
27
27
  3. ДЕЛЕГИРУЙ агенту reviewer
28
- 4. Если задача работает с данными — дополнительно запусти security-auditor
28
+ 4. Если задача работает с данными — укажи reviewer'у фокус на безопасность (check_security: true)
29
29
  5. Покажи сводный отчёт
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: start-session
3
- description: Начало рабочей сессии. Загружает контекст проекта, показывает прогресс и рекомендует задачу.
3
+ description: Начало рабочей сессии. Загружает контекст проекта, показывает прогресс и рекомендует задачу. Используй при запуске Claude Code, начале работы, или когда пользователь говорит «начать», «что делать», «где мы».
4
4
  user-invocable: true
5
5
  disable-model-invocation: false
6
6
  allowed-tools: Read, Glob, Grep, Bash
@@ -16,43 +16,106 @@ allowed-tools: Read, Glob, Grep, Bash
16
16
  git fetch origin
17
17
  ```
18
18
 
19
- Проверь, есть ли новые коммиты:
19
+ Проверь, есть ли новые коммиты от других разработчиков:
20
20
  ```bash
21
21
  git log HEAD..origin/<%= defaultBranch || 'main' %> --oneline
22
22
  ```
23
23
 
24
- Если есть новые коммиты — подтяни:
24
+ Если есть новые коммиты — подтяни изменения:
25
25
  ```bash
26
26
  git pull origin <%= defaultBranch || 'main' %>
27
27
  ```
28
28
 
29
+ Если есть изменения — сообщи пользователю:
30
+ ```
31
+ Подтянуты изменения от [автор]: [описание коммитов]
32
+ ```
33
+
34
+ Если конфликт слияния — сообщи и помоги разрешить.
35
+
29
36
  ## 2. Загрузить контекст
30
37
 
31
38
  Прочитай параллельно:
32
39
  - `dev-infra/memory/active-context.md`
33
40
  - `dev-infra/memory/progress.md`
34
41
  - `dev-infra/tasks/tasks.json`
42
+ - `dev-infra/memory/checkpoint.yml`
43
+
44
+ ### Checkpoint recovery
45
+
46
+ Если в `checkpoint.yml` поле `active: true` — есть незавершённая задача:
47
+ ```
48
+ Обнаружен незавершённый checkpoint:
49
+ - Задача: [task_id] — [task_title]
50
+ - Размер: [feature_size]
51
+ - Последний шаг: [current_step]
52
+ - Последнее обновление: [last_updated]
53
+
54
+ Продолжить с [current_step] через /take-task [task_id]?
55
+ ```
56
+
57
+ ## 2.5. Проверка tech-debt триггеров
58
+
59
+ Прочитай `dev-infra/memory/tech-debt.md`. Для каждой записи со статусом `open` или `partially_resolved`:
60
+ 1. Проверь поле «Триггер замены» — наступил ли триггер?
61
+ 2. Сопоставь с текущим состоянием проекта:
62
+ - Задача-триггер в статусе `done`? (проверь tasks.json)
63
+ - Ресурс появился? (production DB, API-ключ)
64
+ - Milestone завершён?
65
+
66
+ Если найдены TD-записи с наступившими триггерами — покажи:
67
+ ```
68
+ Tech-debt: можно закрыть N записей:
69
+ - TD-XXX: [описание] -> триггер «[триггер]» наступил ([почему])
70
+ - TD-YYY: [описание] -> триггер «[триггер]» наступил ([почему])
71
+
72
+ Создать задачи на закрытие или отложить?
73
+ ```
74
+
75
+ Если пользователь подтверждает — создай задачи в tasks.json (тип: tech-debt, приоритет по влиянию).
76
+ Если нет наступивших триггеров — пропусти молча.
35
77
 
36
78
  ## 3. Показать сводку
37
79
 
38
80
  Выведи компактно:
39
- - **Milestone:** какой milestone, процент выполнения
40
- - **Дедлайн:** дата, сколько дней осталось
41
- - **Прогресс:** задач done / in_progress / todo
81
+ - **Этап и milestone:** какой этап, какой milestone, процент выполнения
82
+ - **Дедлайн:** дата (контракт / внутренний), сколько дней осталось
83
+ - **Прогресс:** сколько задач done / in_progress / todo / blocked
42
84
  - **Блокеры:** если есть — подсветить
85
+ - **Tech-debt:** N open / N partially_resolved (если есть с наступившими триггерами — подсветить)
43
86
 
44
87
  ## 4. Показать незавершённые задачи
45
88
 
46
- Из tasks.json покажи задачи со статусом `in_progress`.
89
+ Из tasks.json покажи задачи со статусом `in_progress` (те, что уже начаты).
47
90
  Если таких нет — покажи `todo` с приоритетом critical/high.
48
91
 
49
92
  ## 5. Рекомендовать задачу
50
93
 
51
- Выбери ОДНУ задачу и объясни почему:
94
+ Выбери ОДНУ конкретную задачу и объясни почему:
52
95
  - Приоритет (critical первые)
53
- - Зависимости выполнены?
96
+ - Зависимости выполнены? (dependencies — все ли в статусе done?)
54
97
  - Дедлайн (что ближе?)
98
+ - Исполнитель (задачи текущего разработчика приоритетнее)
99
+
100
+ Формат:
101
+ ```
102
+ Рекомендую начать с [ID] «[название]» — приоритет [priority],
103
+ зависимость [dep] выполнена, дедлайн [date].
104
+ Берём эту задачу?
105
+ ```
106
+
107
+ ### Проверка плана (опционально)
108
+
109
+ Если при загрузке контекста обнаружены проблемы:
110
+ - Просроченные задачи (deadline_internal < сегодня, status != done)
111
+ - Задачи in_progress >7 дней без обновлений
112
+ - Блокирующие зависимости (todo зависит от todo)
113
+
114
+ Добавь к сводке:
115
+ ```
116
+ Обнаружены проблемы с планом (N шт.). Рекомендую: /plan validate
117
+ ```
55
118
 
56
119
  ## 6. Ожидать решения
57
120
 
58
- Дождись ответа. Если согласен — запусти `/take-task` для этой задачи.
121
+ Дождись ответа пользователя. Если согласен — автоматически запусти `/take-task` для этой задачи.
@@ -1,69 +1,318 @@
1
1
  ---
2
2
  name: take-task
3
- description: Взять задачу в работу и запустить полный цикл разработки (анализ → план → код → тесты → ревью).
3
+ description: |
4
+ Взять задачу в работу и запустить полный цикл разработки.
5
+ Определяет размер (S/M/L), запускает агентов по пайплайну, проверяет quality gates.
6
+
7
+ Use when: «возьми задачу», «давай делать», «начни работу над», «следующая задача», «take task»
4
8
  user-invocable: true
5
9
  disable-model-invocation: false
6
10
  argument-hint: "[task-id]"
7
11
  allowed-tools: Read, Write, Edit, Glob, Grep, Bash, Agent, WebSearch
8
12
  ---
9
13
 
10
- # Взять задачу и запустить полный цикл разработки
14
+ # Взять задачу и запустить цикл разработки
11
15
 
12
16
  Аргумент: `$ARGUMENTS` — ID задачи (опционально). Если не указан — покажи доступные.
13
17
 
18
+ ## Шаг 0. Checkpoint (восстановление после обрыва)
19
+
20
+ 1. Прочитай `dev-infra/memory/checkpoint.yml`
21
+ 2. Если `active: true` — предложи восстановление:
22
+ ```
23
+ Обнаружен незавершённый checkpoint:
24
+ - Задача: [task_id] — [task_title]
25
+ - Последний шаг: [current_step]
26
+ - Прогресс: [completed_steps / total_steps]
27
+
28
+ Продолжить с [current_step] или начать заново?
29
+ ```
30
+ 3. При продолжении — перейди к текущему шагу, загрузив контекст из checkpoint
31
+ 4. При начале заново — очисти checkpoint (active: false)
32
+
14
33
  ## Если ID не указан
15
34
 
16
35
  1. Прочитай `dev-infra/tasks/tasks.json`
17
36
  2. Покажи задачи для текущего milestone со статусом `todo`, отсортированные по приоритету
18
37
  3. Проверь зависимости: не предлагай задачу, если её dependencies не в статусе done
19
- 4. Спроси, какую задачу взять
38
+ 4. Для каждой: ID, название, приоритет, wave, дедлайн
39
+ 5. Спроси, какую задачу взять
20
40
 
21
- ## При выборе задачи — автоматический цикл
41
+ ## Определение размера
22
42
 
23
- ### Шаг 1. Обновить статус и создать план
24
- - В tasks.json: статус → `in_progress`, updated → сегодня
25
- - Создать прогресс-бар задачи через TaskCreate
43
+ | Критерий | S (Small) | M (Medium) | L (Large) |
44
+ |----------|-----------|------------|-----------|
45
+ | Файлы | 1-2 | 3-5 | >5 или новый модуль |
46
+ | AC | Нет или простые | Есть AC | Несколько AC + ПМИ |
47
+ | Зависимости | 0-1 | 1-2 | 3+ |
48
+ | Тип | Фикс, правка, конфиг | Новая функция | Новый модуль, архитектура |
26
49
 
27
- ### Шаг 2. Анализ требований — ДЕЛЕГИРОВАТЬ агенту analyst
28
50
  ```
29
- Agent(subagent_type="analyst", prompt="Проанализируй задачу [ID]. Описание: [description].")
51
+ Задача [ID]: [название]
52
+ Размер: [S / M / L] — [обоснование]
53
+ Пайплайн: [N шагов]
30
54
  ```
31
55
 
32
- Покажи пользователю результат анализа. Дождись подтверждения.
56
+ ## Обновить статус и создать план
33
57
 
34
- ### Шаг 3. Discovery (если есть вопросы)
35
- - Задай конкретные вопросы пользователю
36
- - Зафиксируй решения в `dev-infra/memory/decisions.md`
58
+ - tasks.json: статус -> `in_progress`, updated -> сегодня
59
+ - active-context.md: обновить «Что делаем сейчас»
60
+ - checkpoint.yml:
61
+ ```yaml
62
+ active: true
63
+ task_id: [ID]
64
+ task_title: [название]
65
+ feature_size: [S/M/L]
66
+ current_step: start
67
+ started_at: [ISO-8601]
68
+ steps: {}
69
+ ```
70
+ - Создать прогресс-бар через TaskCreate по размеру
37
71
 
38
- ### Шаг 4. Проектирование — ДЕЛЕГИРОВАТЬ агенту architect
72
+ **Для S (6 шагов):**
39
73
  ```
40
- Agent(subagent_type="architect", prompt="Спроектируй [модуль]. Требования: [результат шага 2].")
74
+ TaskCreate(subject="[ID] Реализация кода")
75
+ TaskCreate(subject="[ID] Тесты + Inspector")
76
+ TaskCreate(subject="[ID] Quick Review")
77
+ TaskCreate(subject="[ID] Tech-debt проверка")
78
+ TaskCreate(subject="[ID] Фиксация результата")
41
79
  ```
42
- - Покажи план пользователю, дождись подтверждения
43
80
 
44
- ### Шаг 5. Реализация — ДЕЛЕГИРОВАТЬ агенту developer
81
+ **Для M (8 шагов):**
45
82
  ```
46
- Agent(subagent_type="developer", prompt="Реализуй [модуль] по плану: [результат шага 4].")
83
+ TaskCreate(subject="[ID] Анализ требований")
84
+ TaskCreate(subject="[ID] TDD — failing тесты (RED)")
85
+ TaskCreate(subject="[ID] Реализация + тесты (GREEN)")
86
+ TaskCreate(subject="[ID] Inspector — качество тестов")
87
+ TaskCreate(subject="[ID] Код-ревью")
88
+ TaskCreate(subject="[ID] Tech-debt проверка")
89
+ TaskCreate(subject="[ID] Фиксация результата")
47
90
  ```
48
- - Проверь: код соответствует плану?
49
91
 
50
- ### Шаг 6. Тестирование — ДЕЛЕГИРОВАТЬ агенту unit-tester
92
+ **Для L (10 шагов):**
51
93
  ```
52
- Agent(subagent_type="unit-tester", prompt="Напиши тесты для [модуль]. Покрытие ≥80%. Запусти <%= testCommand %>.")
94
+ TaskCreate(subject="[ID] Анализ требований")
95
+ TaskCreate(subject="[ID] Архитектура + ревью плана")
96
+ TaskCreate(subject="[ID] Reality Check (skeptic)")
97
+ TaskCreate(subject="[ID] TDD + Код + Тесты (per-feature)")
98
+ TaskCreate(subject="[ID] Inspector — качество тестов")
99
+ TaskCreate(subject="[ID] Код-ревью")
100
+ TaskCreate(subject="[ID] Tech-debt проверка")
101
+ TaskCreate(subject="[ID] Фиксация результата")
53
102
  ```
54
- - Если тесты падают — верни developer'у
55
103
 
56
- ### Шаг 7. Ревью — ДЕЛЕГИРОВАТЬ агенту reviewer
104
+ ---
105
+
106
+ ## Шаги пайплайна
107
+
108
+ ### [1] Анализ требований (M, L)
109
+
110
+ **Перед вызовом analyst:**
111
+ 1. Прочитай tasks.json — извлеки задачу (description, acceptance_criteria, pmi_scenarios, risks)
112
+ 2. Прочитай `dev-infra/tests/acceptance/` — найди конкретные метрики для AC
113
+ 3. Прочитай `dev-infra/memory/tech-debt.md` — найди связанные TD-записи
114
+ 4. Прочитай `dev-infra/memory/decisions.md` — найди связанные ADR
115
+
57
116
  ```
58
- Agent(subagent_type="reviewer", prompt="Проверь код в [файлы]. Критерии: [AC IDs].")
117
+ Agent(subagent_type="analyst", prompt="
118
+ Проанализируй задачу [ID].
119
+ Описание: [description]
120
+ AC: [AC-X.X-XX — полная метрика, не только ID]
121
+ PMI: [pmi-XX — описание]
122
+ Риски: [R-XXX — описание, приоритет]
123
+ Tech-debt: [TD-NNN — если связан]
124
+ Решения: [ADR-NNN — если связан]
125
+ ")
59
126
  ```
60
- - Если CRITICAL/HIGH — верни developer'у
61
127
 
62
- ### Шаг 8. Документация — ДЕЛЕГИРОВАТЬ агенту doc-writer
128
+ **Обработка verdict:**
129
+ - `COMPLETE` -> показать результат пользователю, перейти к следующему шагу
130
+ - `NEEDS_DISCOVERY` -> показать вопросы пользователю, дождаться ответа, зафиксировать в decisions.md, повторить analyst
131
+
132
+ Checkpoint: `steps.analysis = {status: done, verdict: ..., key_findings: [...]}`
133
+
134
+ ### Discovery (если NEEDS_DISCOVERY)
135
+
136
+ 1. Покажи вопросы из analyst в формате:
137
+ ```
138
+ Вопрос 1: [текст]
139
+ Варианты:
140
+ a) [вариант] — [trade-off]
141
+ b) [вариант] — [trade-off]
142
+ ```
143
+ 2. Дождись ответа пользователя
144
+ 3. Зафиксируй решение в `dev-infra/memory/decisions.md` (формат ADR)
145
+ 4. Повторно вызови analyst с дополненным контекстом
146
+
147
+ ### [2] Архитектура + ревью плана (L)
148
+
149
+ Запусти параллельно:
150
+
63
151
  ```
64
- Agent(subagent_type="doc-writer", prompt="Создай документацию для задачи [ID].")
152
+ Agent(subagent_type="architect", prompt="
153
+ Спроектируй [модуль]. Требования от аналитика: [результат analyst].
154
+ Верни: структуру файлов, API-контракты, модели, стратегию контроля доступа.
155
+ Раздели на features для per-feature loop (с порядком по зависимостям).
156
+ ")
157
+
158
+ Agent(subagent_type="reviewer", prompt="
159
+ mode: plan_review
160
+ Проверь план архитектора на полноту.
161
+ Требования: [результат analyst].
162
+ AC: [полные метрики]
163
+ Риски: [R-XXX с описанием]
164
+ ")
65
165
  ```
66
166
 
67
- ### Шаг 9. Завершение
68
- - Покажи итог: что сделано, результат тестов, ревью
69
- - Предложи: `/complete-task`
167
+ **Обработка verdict (комбинация):**
168
+ - architect(READY) + reviewer(APPROVE) -> показать пользователю, ждать подтверждения
169
+ - architect(READY) + reviewer(REQUEST_CHANGES) -> architect исправляет -> повторить оба
170
+ - architect(NEEDS_INPUT) -> запросить данные -> повторить
171
+
172
+ Checkpoint: `steps.architecture = {status: done, plan_summary: "...", files: [...]}`
173
+
174
+ ### [3] Reality Check (L)
175
+
176
+ ```
177
+ Agent(subagent_type="skeptic", prompt="
178
+ Проверь спецификацию на миражи: [план от architect].
179
+ Кодовая база: <%= srcDir %>
180
+ ")
181
+ ```
182
+
183
+ **Обработка verdict:**
184
+ - `PASS` -> продолжить
185
+ - `PASS_WITH_WARNINGS` -> передать warnings developer'у в prompt
186
+ - `FAIL` -> вернуть architect, показать issues
187
+
188
+ Checkpoint: `steps.skeptic = {status: done, verdict: ..., warnings: [...]}`
189
+
190
+ ### [4] TDD — failing тесты, RED (M, L)
191
+
192
+ Для M-задач — один вызов. Для L — per-feature.
193
+
194
+ ```
195
+ Agent(subagent_type="tester", prompt="
196
+ mode: tdd
197
+ Создай failing тесты для [фича/задача].
198
+ TDD-якоря: [tdd_anchors из tasks.json]
199
+ Директория тестов: <%= testDir %>
200
+ Фреймворк: <%= testFramework %>
201
+ Тесты должны FAIL (код ещё не написан).
202
+ ")
203
+ ```
204
+
205
+ Проверь: тесты действительно fail. Если pass — значит якоря некорректны.
206
+
207
+ ```bash
208
+ <%= testCommand %>
209
+ ```
210
+
211
+ Checkpoint: `steps.tdd = {status: done, failing_tests: [...]}`
212
+
213
+ ### [5] Реализация + тесты (per-feature)
214
+
215
+ **Для S-задач:** один цикл developer -> tester -> inspector.
216
+ **Для M-задач:** developer -> tester(GREEN) -> inspector.
217
+ **Для L-задач:** per-feature loop из плана architect.
218
+
219
+ Per-feature loop (L):
220
+
221
+ ```
222
+ features = план architect -> details.features (упорядочены по зависимостям)
223
+
224
+ for feature in features:
225
+ # 1. Developer реализует
226
+ Agent(subagent_type="developer", prompt="
227
+ Реализуй [feature]. План: [план].
228
+ Warnings от skeptic: [если есть].
229
+ TDD: сделай failing тесты GREEN.
230
+ Failing тесты: [список из шага TDD].
231
+ Запусти: <%= testCommand %>
232
+ ")
233
+
234
+ # Проверка verdict developer
235
+ if developer.verdict == BLOCKED:
236
+ -> показать пользователю, разобрать блокировку
237
+
238
+ # 2. Tester проверяет
239
+ Agent(subagent_type="tester", prompt="
240
+ level: unit
241
+ Проверь [конкретные файлы feature].
242
+ Убедись: failing тесты теперь GREEN.
243
+ Добавь edge cases сверх TDD-якорей.
244
+ Покрытие >=80%.
245
+ Фреймворк: <%= testFramework %>
246
+ Запусти: <%= testCommand %>
247
+ ")
248
+
249
+ # Проверка verdict tester
250
+ if tester.verdict == FAIL:
251
+ -> передать developer для исправления -> повторить tester
252
+
253
+ # 3. Inspector проверяет качество тестов
254
+ Agent(subagent_type="inspector", prompt="
255
+ Проверь качество тестов для [feature].
256
+ Файлы: [тестовые файлы от tester].
257
+ ")
258
+
259
+ # Проверка verdict inspector
260
+ if inspector.verdict == REQUEST_CHANGES:
261
+ -> передать tester для исправления -> повторить inspector
262
+
263
+ Checkpoint: steps.developer.features_done += 1
264
+ ```
265
+
266
+ Checkpoint: `steps.developer = {status: done, files_changed: [...], features_done: N, features_total: N}`
267
+
268
+ ### [6] Ревью (S. quick, M/L. full)
269
+
270
+ **S-задачи (quick review):**
271
+ ```
272
+ Agent(subagent_type="reviewer", prompt="
273
+ mode: quick
274
+ Проверь: [файлы от developer].
275
+ Только: security, контроль доступа, критические баги.
276
+ 1 раунд, MEDIUM/LOW -> tech-debt.
277
+ ")
278
+ ```
279
+
280
+ **M/L-задачи (full review):**
281
+ ```
282
+ Agent(subagent_type="reviewer", prompt="
283
+ Проверь код: [файлы от developer].
284
+ AC: [полные метрики из tasks.json — НЕ только ID]
285
+ Риски: [R-XXX с описанием]
286
+ Раунд: 1/3.
287
+ ")
288
+ ```
289
+
290
+ **Обработка verdict:**
291
+ - `APPROVE` -> перейти к tech-debt
292
+ - `REQUEST_CHANGES` (раунд 1-2) -> developer исправляет -> reviewer повторяет (раунд N+1)
293
+ - `ESCALATE` (раунд 3) -> показать пользователю все findings -> 3 варианта:
294
+ - (a) Принять как tech-debt -> TD-NNN
295
+ - (b) Исправить вручную -> повторить ревью
296
+ - (c) Отменить задачу -> rollback
297
+
298
+ Checkpoint: `steps.review = {status: done, round: N, verdict: ..., findings_count: N}`
299
+
300
+ ### [7] Tech-debt проверка (ВСЕ размеры)
301
+
302
+ Team Lead проверяет 3 источника:
303
+
304
+ 1. **Reviewer findings** — MEDIUM/LOW не исправленные в этой задаче
305
+ 2. **Implementation deviations** — ищи в коде: mock, simplified, workaround, deferred, TODO, FIXME, HACK
306
+ 3. **Skeptic warnings** (L) — не адресованные в коде
307
+
308
+ Если найдено -> добавить TD-NNN в `dev-infra/memory/tech-debt.md`.
309
+ Если нет -> `tech_debt: none` в checkpoint.
310
+
311
+ ### [8] Фиксация
312
+
313
+ 1. Покажи пользователю итог: что сделано, файлы, тесты, ревью, tech-debt
314
+ 2. Обнови tasks.json: status -> done, updated -> сегодня
315
+ 3. Обнови progress.md: пересчитать прогресс milestone
316
+ 4. Обнови active-context.md: убрать задачу, добавить результат
317
+ 5. Очисти checkpoint: `active: false`
318
+ 6. Предложи коммит