@dzhechkov/keysarium 1.2.0 → 1.3.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/README.md +7 -2
- package/package.json +2 -2
- package/templates/.claude/commands/brain-export.md +97 -20
- package/templates/.claude/commands/brain-import.md +75 -4
- package/templates/CLAUDE.md +20 -14
- package/templates/docs/feature-adr/01-architecture.md +750 -0
- package/templates/docs/feature-adr/02-functionality.md +712 -0
- package/templates/docs/feature-adr/03-deployment-guide.md +614 -0
- package/templates/docs/feature-adr/04-admin-guide.md +564 -0
- package/templates/docs/feature-adr/05-user-guide.md +508 -0
- package/templates/docs/feature-adr/06-user-flows.md +1101 -0
- package/templates/docs/keysarium-core/01-architecture.md +559 -0
- package/templates/docs/keysarium-core/02-functionality.md +953 -0
- package/templates/docs/keysarium-core/03-deployment-guide.md +625 -0
- package/templates/docs/keysarium-core/04-admin-guide.md +529 -0
- package/templates/docs/keysarium-core/05-user-guide.md +599 -0
- package/templates/docs/keysarium-core/06-user-flows.md +804 -0
- package/templates/lib/memory-protocol.md +127 -22
|
@@ -0,0 +1,1101 @@
|
|
|
1
|
+
# 06. Пользовательские сценарии @dzhechkov/skills-feature-adr
|
|
2
|
+
|
|
3
|
+
## Содержание
|
|
4
|
+
|
|
5
|
+
1. [Обзор сценариев](#1-обзор-сценариев)
|
|
6
|
+
2. [Сценарий: S-Tier Feature (Bug Fix / Config Change)](#2-сценарий-s-tier-feature)
|
|
7
|
+
3. [Сценарий: M-Tier Feature (New API Endpoint)](#3-сценарий-m-tier-feature)
|
|
8
|
+
4. [Сценарий: L-Tier Feature (New Module)](#4-сценарий-l-tier-feature)
|
|
9
|
+
5. [Сценарий: XL-Tier Feature (Major Migration)](#5-сценарий-xl-tier-feature)
|
|
10
|
+
6. [Сценарий: Checkpoint с обратной связью](#6-сценарий-checkpoint-с-обратной-связью)
|
|
11
|
+
7. [Сценарий: Tier Override](#7-сценарий-tier-override)
|
|
12
|
+
8. [Сценарий: QE Failure](#8-сценарий-qe-failure)
|
|
13
|
+
9. [Сценарий: Установка и настройка](#9-сценарий-установка-и-настройка)
|
|
14
|
+
10. [Диаграммы потоков](#10-диаграммы-потоков)
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 1. Обзор сценариев
|
|
19
|
+
|
|
20
|
+
Карта всех потоков, покрываемых данным документом:
|
|
21
|
+
|
|
22
|
+
| Поток | Tier | Активные шаги | Параллелизм | Время |
|
|
23
|
+
|-------|------|---------------|-------------|-------|
|
|
24
|
+
| S-tier: Bug Fix / Config Change | S | 0 -> 1 -> 6 -> 7 -> 8 | Нет | ~15 мин |
|
|
25
|
+
| M-tier: New API Endpoint | M | 0 -> 1 -> 3 -> 5 -> 6 -> 7 -> 8 | Нет | ~45 мин |
|
|
26
|
+
| L-tier: New Module | L | 0 -> 1 -> [2\|\|3] -> [4\|\|5] -> 6 -> 7 -> 8 | Группы (2,3) и (4,5) | ~2 часа |
|
|
27
|
+
| XL-tier: Major Migration | XL | Полный DAG + multi-agent | Группы (2,3), (4,5), (7 per module) | ~4+ часов |
|
|
28
|
+
| Checkpoint Feedback | Любой | Повтор текущего шага | Нет | Зависит от объёма правок |
|
|
29
|
+
| Tier Override | Любой | Пересчёт после Step 0 | Нет | +1 мин |
|
|
30
|
+
| QE Failure | Любой | Step 8 -> Step 7 -> Step 8 | Нет | Зависит от серьёзности |
|
|
31
|
+
| Установка | -- | npx init | -- | ~1 мин |
|
|
32
|
+
| Обновление | -- | npx update | -- | ~1 мин |
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 2. Сценарий: S-Tier Feature
|
|
37
|
+
|
|
38
|
+
**Контекст:** Пользователь обнаружил баг -- кнопка логина не реагирует на мобильных устройствах. Необходимо исправить CSS/JS в 1-2 файлах.
|
|
39
|
+
|
|
40
|
+
### Шаг за шагом
|
|
41
|
+
|
|
42
|
+
**Шаг 1. Пользователь запускает pipeline**
|
|
43
|
+
```
|
|
44
|
+
User: /feature-adr Fix login button not responding on mobile
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Шаг 2. Step 0: Complexity Router (haiku)**
|
|
48
|
+
|
|
49
|
+
Router оценивает фичу по 6 измерениям:
|
|
50
|
+
|
|
51
|
+
| Измерение | Оценка | Обоснование |
|
|
52
|
+
|-----------|--------|-------------|
|
|
53
|
+
| Files affected | 1 (S) | 2 файла: login.css + login.js |
|
|
54
|
+
| Domains touched | 1 (S) | Только UI-слой (auth form) |
|
|
55
|
+
| New integrations | 1 (S) | 0 новых зависимостей |
|
|
56
|
+
| Breaking changes | 1 (S) | 0 breaking changes |
|
|
57
|
+
| New data models | 1 (S) | 0 моделей |
|
|
58
|
+
| Cross-cutting concerns | 1 (S) | 0 cross-cutting |
|
|
59
|
+
|
|
60
|
+
**Итого: 6 -> Tier S**
|
|
61
|
+
|
|
62
|
+
Активные шаги: `[0, 1, 6, 7, 8]`
|
|
63
|
+
Бюджет времени: 15 мин (R:2, P:0, I:10, Q:3)
|
|
64
|
+
|
|
65
|
+
Артефакт: `features/fix-login-button/00_complexity_assessment.md`
|
|
66
|
+
|
|
67
|
+
**Шаг 3. Checkpoint 0**
|
|
68
|
+
```
|
|
69
|
+
===============================================================
|
|
70
|
+
STEP 0/8: Complexity Router Complete
|
|
71
|
+
<promise>FEATURE_ADR_ROUTED</promise>
|
|
72
|
+
Tier: S | Active Steps: [0, 1, 6, 7, 8]
|
|
73
|
+
|
|
74
|
+
Feature classified as S based on: 2 files, 1 domain, 0 integrations
|
|
75
|
+
Pipeline: 5 steps, estimated 15 min
|
|
76
|
+
|
|
77
|
+
* "ok" -- proceed with this tier
|
|
78
|
+
* "повысь" -- bump to next tier
|
|
79
|
+
* "понизь" -- drop to lower tier
|
|
80
|
+
===============================================================
|
|
81
|
+
```
|
|
82
|
+
```
|
|
83
|
+
User: ок
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**Шаг 4. Step 1: Requirements (light)**
|
|
87
|
+
|
|
88
|
+
Для S-tier -- 3-5 пунктов inline, без отдельного файла:
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
{REQUIREMENTS}:
|
|
92
|
+
- FR-1: Кнопка логина должна реагировать на tap на мобильных устройствах (iOS Safari, Chrome Android)
|
|
93
|
+
- FR-2: Визуальная обратная связь при нажатии (hover/active state) на touch-экранах
|
|
94
|
+
- FR-3: Существующее поведение на десктопе не должно измениться
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**Шаг 5. Step 6: Implementation Plan (inline)**
|
|
98
|
+
|
|
99
|
+
Для S-tier -- inline чеклист:
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
[ ] Исправить touch event handling в login.js (добавить touchstart listener)
|
|
103
|
+
[ ] Обновить :hover/:active стили в login.css (@media (hover: hover) guard)
|
|
104
|
+
[ ] Проверить: не сломался ли десктопный flow
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Шаг 6. Step 7: Code Changes (single-pass)**
|
|
108
|
+
|
|
109
|
+
Единственный проход: исправление 2 файлов. Артефакт: `features/fix-login-button/07_code_changes/change_manifest.md`
|
|
110
|
+
|
|
111
|
+
**Шаг 7. Step 8: QE (smoke)**
|
|
112
|
+
|
|
113
|
+
Минимальная проверка:
|
|
114
|
+
- Код компилируется
|
|
115
|
+
- Линтер проходит
|
|
116
|
+
- Существующие тесты не упали
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
===============================================================
|
|
120
|
+
STEP 8/8: Quality Engineering Complete
|
|
121
|
+
<promise>FEATURE_ADR_VERIFIED</promise>
|
|
122
|
+
Tier: S
|
|
123
|
+
|
|
124
|
+
Tests: 47/47 (no regressions)
|
|
125
|
+
Review: 0 blockers, 0 warnings
|
|
126
|
+
Verdict: READY FOR MERGE
|
|
127
|
+
|
|
128
|
+
* "ok" -- feature complete!
|
|
129
|
+
===============================================================
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
**Итог:** `features/fix-login-button/` содержит:
|
|
133
|
+
```
|
|
134
|
+
features/fix-login-button/
|
|
135
|
+
00_complexity_assessment.md
|
|
136
|
+
07_code_changes/
|
|
137
|
+
change_manifest.md
|
|
138
|
+
08_qe_report.md
|
|
139
|
+
README.md
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 3. Сценарий: M-Tier Feature
|
|
145
|
+
|
|
146
|
+
**Контекст:** Необходимо добавить API endpoint для экспорта данных пользователя в CSV-формате. Затрагивает API-слой и слой данных, требует выбора CSV-библиотеки.
|
|
147
|
+
|
|
148
|
+
### Шаг за шагом
|
|
149
|
+
|
|
150
|
+
**Шаг 1. Пользователь запускает pipeline**
|
|
151
|
+
```
|
|
152
|
+
User: /feature-adr Добавить API endpoint для экспорта данных пользователя в CSV
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
**Шаг 2. Step 0: Complexity Router (haiku)**
|
|
156
|
+
|
|
157
|
+
| Измерение | Оценка | Обоснование |
|
|
158
|
+
|-----------|--------|-------------|
|
|
159
|
+
| Files affected | 2 (M) | ~6 файлов: controller, service, route, DTO, test, migration |
|
|
160
|
+
| Domains touched | 2 (M) | API-слой + Data-слой |
|
|
161
|
+
| New integrations | 2 (M) | 1 новая библиотека для CSV |
|
|
162
|
+
| Breaking changes | 1 (S) | 0 breaking changes |
|
|
163
|
+
| New data models | 2 (M) | 1 модель: ExportJob (отслеживание статуса) |
|
|
164
|
+
| Cross-cutting concerns | 1 (S) | 0 cross-cutting |
|
|
165
|
+
|
|
166
|
+
**Итого: 10 -> Tier M**
|
|
167
|
+
|
|
168
|
+
Активные шаги: `[0, 1, 3, 5, 6, 7, 8]`
|
|
169
|
+
Бюджет времени: 45 мин (R:5, P:10, I:20, Q:10)
|
|
170
|
+
|
|
171
|
+
**Шаг 3. Checkpoint 0 -> "ok"**
|
|
172
|
+
|
|
173
|
+
**Шаг 4. Step 1: Full Requirements (sonnet)**
|
|
174
|
+
|
|
175
|
+
Загрузка explore skill для кларификации. Артефакт: `features/add-csv-export/01_requirements.md`
|
|
176
|
+
|
|
177
|
+
```markdown
|
|
178
|
+
## Functional Requirements
|
|
179
|
+
|
|
180
|
+
FR-1: GET /api/users/:id/export/csv -- инициировать экспорт
|
|
181
|
+
Priority: MUST
|
|
182
|
+
Acceptance: Given авторизованный пользователь,
|
|
183
|
+
When GET /api/users/me/export/csv,
|
|
184
|
+
Then получает CSV-файл с данными профиля.
|
|
185
|
+
|
|
186
|
+
FR-2: Экспорт включает поля: имя, email, дата регистрации, история заказов
|
|
187
|
+
Priority: MUST
|
|
188
|
+
|
|
189
|
+
FR-3: Пагинация для больших объёмов (> 10K записей) через streaming
|
|
190
|
+
Priority: SHOULD
|
|
191
|
+
|
|
192
|
+
FR-4: Rate limit: 1 экспорт в 5 минут на пользователя
|
|
193
|
+
Priority: MUST
|
|
194
|
+
|
|
195
|
+
## Non-Functional Requirements
|
|
196
|
+
|
|
197
|
+
NFR-1: Latency < 3s для экспорта до 1K записей
|
|
198
|
+
NFR-2: CSV должен корректно открываться в Excel (BOM + UTF-8)
|
|
199
|
+
|
|
200
|
+
## Constraints
|
|
201
|
+
- Использовать существующую систему аутентификации (JWT)
|
|
202
|
+
- Максимальный размер файла: 50MB
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Checkpoint 1 -> "ok"
|
|
206
|
+
|
|
207
|
+
**Шаг 5. Step 3: ADR (opus)**
|
|
208
|
+
|
|
209
|
+
Единственный ADR для M-tier -- выбор CSV-библиотеки.
|
|
210
|
+
|
|
211
|
+
Артефакт: `features/add-csv-export/03_adr/001-csv-library-choice.md`
|
|
212
|
+
|
|
213
|
+
```markdown
|
|
214
|
+
# ADR-001: CSV Library Choice
|
|
215
|
+
|
|
216
|
+
## Status
|
|
217
|
+
Accepted
|
|
218
|
+
|
|
219
|
+
## Context
|
|
220
|
+
Необходимо генерировать CSV-файлы с поддержкой Unicode, streaming
|
|
221
|
+
для больших объёмов и корректным Excel-совместимым форматированием.
|
|
222
|
+
|
|
223
|
+
## Considered Options
|
|
224
|
+
1. papaparse -- популярный парсер/генератор, 40K+ GitHub stars
|
|
225
|
+
2. json2csv -- специализированный JSON-to-CSV конвертер
|
|
226
|
+
3. Нативная реализация (streams + ручное форматирование)
|
|
227
|
+
|
|
228
|
+
## Decision Matrix
|
|
229
|
+
|
|
230
|
+
| Критерий | Вес | papaparse | json2csv | Нативная |
|
|
231
|
+
|----------|-----|-----------|----------|----------|
|
|
232
|
+
| Streaming support | 3 | ** | *** | ** |
|
|
233
|
+
| Excel compatibility | 3 | ** | *** | * |
|
|
234
|
+
| Bundle size | 2 | * | ** | *** |
|
|
235
|
+
| Team familiarity | 2 | ** | ** | *** |
|
|
236
|
+
|
|
237
|
+
## Decision
|
|
238
|
+
Выбрали **json2csv** -- лучший streaming API и встроенная Excel-совместимость
|
|
239
|
+
(BOM header, правильное экранирование).
|
|
240
|
+
|
|
241
|
+
## Consequences
|
|
242
|
+
### Positive
|
|
243
|
+
- Streaming из коробки (transforms API)
|
|
244
|
+
- Тестированная Excel-совместимость
|
|
245
|
+
### Negative
|
|
246
|
+
- Дополнительная зависимость (~15KB)
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
Checkpoint 3 -> "ok"
|
|
250
|
+
|
|
251
|
+
**Шаг 6. Step 5: Architecture Light (opus)**
|
|
252
|
+
|
|
253
|
+
Для M-tier -- только Component diagram + API design (без полного C4).
|
|
254
|
+
|
|
255
|
+
Артефакт: `features/add-csv-export/05_architecture.md` + `diagrams/architecture-c4.mermaid`
|
|
256
|
+
|
|
257
|
+
```
|
|
258
|
+
API endpoints:
|
|
259
|
+
- GET /api/users/:id/export/csv -- инициировать экспорт
|
|
260
|
+
- Middleware: authMiddleware, rateLimitMiddleware(1/5min)
|
|
261
|
+
- Controller -> ExportService -> UserRepository + json2csv stream -> Response
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
Checkpoint 5 -> "ok"
|
|
265
|
+
|
|
266
|
+
**Шаг 7. Step 6: Implementation Plan (sonnet)**
|
|
267
|
+
|
|
268
|
+
Артефакт: `features/add-csv-export/06_implementation_plan.md`
|
|
269
|
+
|
|
270
|
+
```
|
|
271
|
+
8 задач, 2 параллельные группы:
|
|
272
|
+
|
|
273
|
+
Group 1 (параллельно):
|
|
274
|
+
TASK-1: Создать ExportJob модель + миграция
|
|
275
|
+
TASK-2: Установить json2csv, создать CSV-генератор util
|
|
276
|
+
|
|
277
|
+
Group 2 (после Group 1):
|
|
278
|
+
TASK-3: Создать ExportService (streaming logic)
|
|
279
|
+
TASK-4: Создать ExportController + route + middleware
|
|
280
|
+
TASK-5: Добавить rate limiting middleware
|
|
281
|
+
|
|
282
|
+
Group 3 (после Group 2):
|
|
283
|
+
TASK-6: DTO для request/response
|
|
284
|
+
TASK-7: Unit тесты для ExportService
|
|
285
|
+
TASK-8: Integration тест для endpoint
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
Checkpoint 6 -> "ok"
|
|
289
|
+
|
|
290
|
+
**Шаг 8. Step 7: Code Generation (opus, sequential)**
|
|
291
|
+
|
|
292
|
+
Последовательная реализация по плану. 6 новых файлов + 2 модифицированных.
|
|
293
|
+
|
|
294
|
+
Артефакт: `features/add-csv-export/07_code_changes/change_manifest.md`
|
|
295
|
+
|
|
296
|
+
Checkpoint 7 -> "ok"
|
|
297
|
+
|
|
298
|
+
**Шаг 9. Step 8: QE -- Unit tests + basic review (sonnet)**
|
|
299
|
+
|
|
300
|
+
```
|
|
301
|
+
===============================================================
|
|
302
|
+
STEP 8/8: Quality Engineering Complete
|
|
303
|
+
<promise>FEATURE_ADR_VERIFIED</promise>
|
|
304
|
+
Tier: M
|
|
305
|
+
|
|
306
|
+
Tests: 12/12 (100%)
|
|
307
|
+
Review: 0 blockers, 1 warning, 1 suggestion
|
|
308
|
+
Requirements: 4/4 FR covered
|
|
309
|
+
|
|
310
|
+
WARNING: ExportService не обрабатывает disconnect клиента mid-stream
|
|
311
|
+
SUGGESTION: Добавить index на export_jobs.user_id
|
|
312
|
+
|
|
313
|
+
Verdict: CONDITIONAL APPROVAL -- fix 1 warning
|
|
314
|
+
|
|
315
|
+
* "ok" -- feature complete!
|
|
316
|
+
* "исправь [finding]" -- fix specific issue
|
|
317
|
+
===============================================================
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
**Итог:** `features/add-csv-export/` содержит:
|
|
321
|
+
```
|
|
322
|
+
features/add-csv-export/
|
|
323
|
+
00_complexity_assessment.md
|
|
324
|
+
01_requirements.md
|
|
325
|
+
03_adr/
|
|
326
|
+
001-csv-library-choice.md
|
|
327
|
+
05_architecture.md
|
|
328
|
+
06_implementation_plan.md
|
|
329
|
+
07_code_changes/
|
|
330
|
+
change_manifest.md
|
|
331
|
+
08_qe_report.md
|
|
332
|
+
diagrams/
|
|
333
|
+
architecture-c4.mermaid
|
|
334
|
+
README.md
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
## 4. Сценарий: L-Tier Feature
|
|
340
|
+
|
|
341
|
+
**Контекст:** Необходимо добавить полноценный модуль аналитики с дашбордом и real-time метриками. Затрагивает 3 домена (analytics, UI, data pipeline), ~20 файлов.
|
|
342
|
+
|
|
343
|
+
### Шаг за шагом
|
|
344
|
+
|
|
345
|
+
**Шаг 1. Запуск**
|
|
346
|
+
```
|
|
347
|
+
User: /feature-adr Добавить модуль аналитики с дашбордом и real-time метриками
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
**Шаг 2. Step 0: Complexity Router (haiku)**
|
|
351
|
+
|
|
352
|
+
| Измерение | Оценка | Обоснование |
|
|
353
|
+
|-----------|--------|-------------|
|
|
354
|
+
| Files affected | 3 (L) | ~20 файлов: модели, сервисы, контроллеры, компоненты UI, тесты |
|
|
355
|
+
| Domains touched | 3 (L) | Analytics domain + UI domain + Data pipeline |
|
|
356
|
+
| New integrations | 3 (L) | 2 интеграции: WebSocket server + time-series storage |
|
|
357
|
+
| Breaking changes | 1 (S) | 0 breaking changes |
|
|
358
|
+
| New data models | 3 (L) | 3 модели: Metric, Dashboard, Widget |
|
|
359
|
+
| Cross-cutting concerns | 3 (L) | 2: caching (метрики) + auth (доступ к дашбордам) |
|
|
360
|
+
|
|
361
|
+
**Итого: 16 -> Tier L**
|
|
362
|
+
|
|
363
|
+
Активные шаги: `[0, 1, 2, 3, 4, 5, 6, 7, 8]` -- полный pipeline
|
|
364
|
+
Бюджет времени: 2 часа (R:15, P:30, I:45, Q:30)
|
|
365
|
+
|
|
366
|
+
Checkpoint 0 -> "ok"
|
|
367
|
+
|
|
368
|
+
**Шаг 3. Step 1: Full Requirements с explore skill (sonnet)**
|
|
369
|
+
|
|
370
|
+
Загрузка `.claude/skills/explore/SKILL.md` для адаптивной кларификации:
|
|
371
|
+
|
|
372
|
+
```
|
|
373
|
+
Explore: Какой тип метрик -- бизнес (конверсии, выручка) или технические (CPU, latency)?
|
|
374
|
+
User: Бизнес-метрики: конверсии, выручка, retention. Real-time обновление через WebSocket.
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
Артефакт: `features/add-analytics-module/01_requirements.md`
|
|
378
|
+
- FR-1 .. FR-8 (8 функциональных требований)
|
|
379
|
+
- NFR-1 .. NFR-4 (latency, throughput, caching, auth)
|
|
380
|
+
- 3 constraint, 2 dependency
|
|
381
|
+
|
|
382
|
+
Checkpoint 1 -> "ok"
|
|
383
|
+
|
|
384
|
+
**Шаг 4. PARALLEL: Step 2 + Step 3**
|
|
385
|
+
|
|
386
|
+
Для L-tier шаги 2 и 3 запускаются параллельно:
|
|
387
|
+
|
|
388
|
+
| Агент | Шаг | Модель | Задача |
|
|
389
|
+
|-------|-----|--------|--------|
|
|
390
|
+
| Agent 1 | Step 2 (Research) | sonnet | Codebase patterns: анализ существующих модулей |
|
|
391
|
+
| Agent 2 | Step 2 (Research) | sonnet | External analogues: аналоги real-time dashboards |
|
|
392
|
+
| Agent 3 | Step 3 (ADR) | opus | Drafting ADR-001 .. ADR-003 |
|
|
393
|
+
|
|
394
|
+
**Step 2 результат:** `features/add-analytics-module/02_research.md`
|
|
395
|
+
- Паттерны из кодовой базы: event-driven architecture уже используется
|
|
396
|
+
- Внешние аналоги: Grafana-like widget model, Chart.js для визуализации
|
|
397
|
+
|
|
398
|
+
**Step 3 результат:** `features/add-analytics-module/03_adr/`
|
|
399
|
+
- ADR-001: Time-series storage (InfluxDB vs TimescaleDB vs Redis TimeSeries)
|
|
400
|
+
- ADR-002: Real-time transport (WebSocket vs SSE vs polling)
|
|
401
|
+
- ADR-003: Widget rendering strategy (server-side vs client-side)
|
|
402
|
+
|
|
403
|
+
Checkpoint 2-3 (объединённый) -> "ok"
|
|
404
|
+
|
|
405
|
+
**Шаг 5. PARALLEL: Step 4 + Step 5**
|
|
406
|
+
|
|
407
|
+
| Агент | Шаг | Модель | Задача |
|
|
408
|
+
|-------|-----|--------|--------|
|
|
409
|
+
| Agent 1 | Step 4 (DDD) | opus | 3 bounded contexts + ubiquitous language |
|
|
410
|
+
| Agent 2 | Step 5 (Architecture) | opus | Full C4 (Context + Container + Component) + sequences |
|
|
411
|
+
|
|
412
|
+
**Step 4 результат:** `features/add-analytics-module/04_domain_model.md`
|
|
413
|
+
- Bounded context 1: Metric Collection (events, aggregations)
|
|
414
|
+
- Bounded context 2: Dashboard Management (CRUD, layouts, widgets)
|
|
415
|
+
- Bounded context 3: Real-time Delivery (WebSocket subscriptions)
|
|
416
|
+
|
|
417
|
+
**Step 5 результат:** `features/add-analytics-module/05_architecture.md` + `diagrams/`
|
|
418
|
+
- C4 Context diagram
|
|
419
|
+
- C4 Container diagram
|
|
420
|
+
- C4 Component diagram (3 модуля)
|
|
421
|
+
- Sequence: metric ingestion flow
|
|
422
|
+
- Sequence: real-time dashboard update flow
|
|
423
|
+
|
|
424
|
+
Checkpoint 4-5 (объединённый) -> "ok"
|
|
425
|
+
|
|
426
|
+
**Шаг 6. Step 6: Implementation Plan (sonnet)**
|
|
427
|
+
|
|
428
|
+
Артефакт: `features/add-analytics-module/06_implementation_plan.md`
|
|
429
|
+
|
|
430
|
+
```
|
|
431
|
+
15 задач, 4 группы:
|
|
432
|
+
|
|
433
|
+
Group 1 (параллельно): Модели + миграции (TASK-1..3)
|
|
434
|
+
Group 2 (после Group 1): Сервисы (TASK-4..7)
|
|
435
|
+
Group 3 (параллельно, после Group 2): API + WebSocket + UI (TASK-8..12)
|
|
436
|
+
Group 4 (после Group 3): Интеграция + тесты (TASK-13..15)
|
|
437
|
+
|
|
438
|
+
Risk assessment:
|
|
439
|
+
- RISK-1: WebSocket scaling (medium) -- mitigation: Redis pub/sub adapter
|
|
440
|
+
- RISK-2: Time-series data volume (low) -- mitigation: retention policy 90d
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
Checkpoint 6 -> "ok"
|
|
444
|
+
|
|
445
|
+
**Шаг 7. Step 7: Code Generation (opus, sequential с checkpoints между группами)**
|
|
446
|
+
|
|
447
|
+
Последовательная реализация по группам. После каждой группы -- мини-проверка:
|
|
448
|
+
- Group 1 done: модели и миграции созданы, миграция прошла
|
|
449
|
+
- Group 2 done: сервисы реализованы, unit-тесты проходят
|
|
450
|
+
- Group 3 done: API endpoints + WebSocket handler + React компоненты
|
|
451
|
+
- Group 4 done: интеграционные тесты + end-to-end проверка
|
|
452
|
+
|
|
453
|
+
Артефакт: `features/add-analytics-module/07_code_changes/change_manifest.md`
|
|
454
|
+
- 15 новых файлов, 5 модифицированных
|
|
455
|
+
|
|
456
|
+
Checkpoint 7 -> "ok"
|
|
457
|
+
|
|
458
|
+
**Шаг 8. Step 8: QE -- Unit + Integration tests + thorough review (sonnet)**
|
|
459
|
+
|
|
460
|
+
```
|
|
461
|
+
===============================================================
|
|
462
|
+
STEP 8/8: Quality Engineering Complete
|
|
463
|
+
<promise>FEATURE_ADR_VERIFIED</promise>
|
|
464
|
+
Tier: L
|
|
465
|
+
|
|
466
|
+
Tests: 34/34 (100%) -- 22 unit + 12 integration
|
|
467
|
+
Review: 0 blockers, 2 warnings, 3 suggestions
|
|
468
|
+
Requirements: 8/8 FR covered
|
|
469
|
+
|
|
470
|
+
Verdict: CONDITIONAL APPROVAL
|
|
471
|
+
|
|
472
|
+
* "ok" -- feature complete!
|
|
473
|
+
===============================================================
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
**Итог:** `features/add-analytics-module/` содержит:
|
|
477
|
+
```
|
|
478
|
+
features/add-analytics-module/
|
|
479
|
+
00_complexity_assessment.md
|
|
480
|
+
01_requirements.md
|
|
481
|
+
02_research.md
|
|
482
|
+
03_adr/
|
|
483
|
+
001-time-series-storage.md
|
|
484
|
+
002-realtime-transport.md
|
|
485
|
+
003-widget-rendering.md
|
|
486
|
+
04_domain_model.md
|
|
487
|
+
05_architecture.md
|
|
488
|
+
06_implementation_plan.md
|
|
489
|
+
07_code_changes/
|
|
490
|
+
change_manifest.md
|
|
491
|
+
08_qe_report.md
|
|
492
|
+
diagrams/
|
|
493
|
+
architecture-c4.mermaid
|
|
494
|
+
sequence-metric-ingestion.mermaid
|
|
495
|
+
sequence-realtime-update.mermaid
|
|
496
|
+
domain-model.mermaid
|
|
497
|
+
README.md
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
---
|
|
501
|
+
|
|
502
|
+
## 5. Сценарий: XL-Tier Feature
|
|
503
|
+
|
|
504
|
+
**Контекст:** Масштабная миграция с REST API на GraphQL с обязательным сохранением обратной совместимости. Затрагивает 40+ файлов, 5 доменов, требует координации множества агентов.
|
|
505
|
+
|
|
506
|
+
### Шаг за шагом
|
|
507
|
+
|
|
508
|
+
**Шаг 1. Запуск**
|
|
509
|
+
```
|
|
510
|
+
User: /feature-adr Миграция с REST API на GraphQL с сохранением обратной совместимости
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
**Шаг 2. Step 0: Complexity Router (haiku)**
|
|
514
|
+
|
|
515
|
+
| Измерение | Оценка | Обоснование |
|
|
516
|
+
|-----------|--------|-------------|
|
|
517
|
+
| Files affected | 4 (XL) | 40+ файлов: все контроллеры, сервисы, DTO, тесты, документация |
|
|
518
|
+
| Domains touched | 4 (XL) | 5 доменов: Auth, Users, Products, Orders, Payments |
|
|
519
|
+
| New integrations | 4 (XL) | 4: GraphQL server, schema registry, playground, codegen |
|
|
520
|
+
| Breaking changes | 4 (XL) | 3: API contract, client SDKs, webhook payloads |
|
|
521
|
+
| New data models | 4 (XL) | 5: GraphQL schema per domain + unified gateway schema |
|
|
522
|
+
| Cross-cutting concerns | 3 (L) | 3: auth (token relay), error handling (GraphQL errors), logging |
|
|
523
|
+
|
|
524
|
+
**Итого: 23 -> Tier XL**
|
|
525
|
+
|
|
526
|
+
Override: `breaking changes = 4 (XL)` -> minimum tier L. Уже XL по сумме.
|
|
527
|
+
|
|
528
|
+
Активные шаги: `[0, 1, 2, 3, 4, 5, 6, 7, 8]` -- полный DAG + multi-agent swarm
|
|
529
|
+
Бюджет: 4+ часов (R:30, P:60, I:90, Q:60)
|
|
530
|
+
|
|
531
|
+
Checkpoint 0 -> "ok"
|
|
532
|
+
|
|
533
|
+
**Шаг 3. Step 1: Comprehensive Requirements (sonnet + explore)**
|
|
534
|
+
|
|
535
|
+
Глубокая кларификация через explore skill:
|
|
536
|
+
|
|
537
|
+
```
|
|
538
|
+
Explore: Какая стратегия миграции? Big bang или постепенная (strangler fig pattern)?
|
|
539
|
+
User: Strangler fig -- постепенно переводим endpoint-ы, REST остаётся работать.
|
|
540
|
+
|
|
541
|
+
Explore: Какие клиенты используют REST API сейчас?
|
|
542
|
+
User: Web SPA (React), Mobile app (React Native), 3 внешних партнёра.
|
|
543
|
+
```
|
|
544
|
+
|
|
545
|
+
Артефакт: `features/migrate-rest-to-graphql/01_requirements.md`
|
|
546
|
+
- FR-1 .. FR-12 (12 функциональных требований)
|
|
547
|
+
- NFR-1 .. NFR-6 (latency parity, backward compat, rollback strategy)
|
|
548
|
+
- 5 constraints, 4 dependencies
|
|
549
|
+
- Migration phases timeline
|
|
550
|
+
|
|
551
|
+
Checkpoint 1 -> "ok"
|
|
552
|
+
|
|
553
|
+
**Шаг 4. PARALLEL: Step 2 (research) + Step 3 (ADRs)**
|
|
554
|
+
|
|
555
|
+
| Агент | Шаг | Модель | Задача |
|
|
556
|
+
|-------|-----|--------|--------|
|
|
557
|
+
| Agent 1 | Step 2 | sonnet | Codebase analysis: маппинг всех REST endpoints |
|
|
558
|
+
| Agent 2 | Step 2 | sonnet | External research: GraphQL migration best practices |
|
|
559
|
+
| Agent 3 | Step 3 | opus | ADR-001: Schema design (code-first vs schema-first) |
|
|
560
|
+
| Agent 4 | Step 3 | opus | ADR-002: Gateway pattern (Apollo Federation vs stitching vs monolith) |
|
|
561
|
+
| Agent 5 | Step 3 | opus | ADR-003: Auth relay (JWT passthrough vs context injection) |
|
|
562
|
+
|
|
563
|
+
Дополнительные ADR после завершения research:
|
|
564
|
+
- ADR-004: Backward compatibility strategy (REST proxy -> GraphQL)
|
|
565
|
+
- ADR-005: Client migration strategy (phased SDK update)
|
|
566
|
+
|
|
567
|
+
Checkpoint 2-3 -> "ok"
|
|
568
|
+
|
|
569
|
+
**Шаг 5. PARALLEL: Step 4 (DDD) + Step 5 (Architecture)**
|
|
570
|
+
|
|
571
|
+
| Агент | Шаг | Модель | Задача |
|
|
572
|
+
|-------|-----|--------|--------|
|
|
573
|
+
| Agent 1 | Step 4 | opus | 5 bounded contexts: Auth, Users, Products, Orders, Payments |
|
|
574
|
+
| Agent 2 | Step 5 | opus | Full C4 L1-L3 + 3 sequence diagrams |
|
|
575
|
+
|
|
576
|
+
**Step 4:** Ubiquitous language per domain, aggregate roots, domain events
|
|
577
|
+
**Step 5:**
|
|
578
|
+
- C4 Level 1: System context (clients -> GraphQL Gateway -> Services)
|
|
579
|
+
- C4 Level 2: Container diagram (Gateway, Auth Service, Domain Services, DB)
|
|
580
|
+
- C4 Level 3: Component diagram per service
|
|
581
|
+
- Sequence: Query resolution flow
|
|
582
|
+
- Sequence: Mutation with auth flow
|
|
583
|
+
- Sequence: Subscription (WebSocket) flow
|
|
584
|
+
|
|
585
|
+
Checkpoint 4-5 -> "ok"
|
|
586
|
+
|
|
587
|
+
**Шаг 6. Step 6: Implementation Plan (sonnet)**
|
|
588
|
+
|
|
589
|
+
```
|
|
590
|
+
30 задач, 6 групп:
|
|
591
|
+
|
|
592
|
+
Group 1: Infrastructure (TASK-1..4)
|
|
593
|
+
- GraphQL server setup, schema registry, codegen config, playground
|
|
594
|
+
Group 2: Auth module (TASK-5..8)
|
|
595
|
+
- Auth schema, resolvers, JWT middleware, tests
|
|
596
|
+
Group 3 (параллельно): Domain modules (TASK-9..20)
|
|
597
|
+
- Users schema + resolvers (TASK-9..12)
|
|
598
|
+
- Products schema + resolvers (TASK-13..16)
|
|
599
|
+
- Orders schema + resolvers (TASK-17..20)
|
|
600
|
+
Group 4: Payments + Gateway (TASK-21..25)
|
|
601
|
+
- Payments schema + resolvers + gateway stitching
|
|
602
|
+
Group 5: Backward compatibility (TASK-26..28)
|
|
603
|
+
- REST proxy layer, deprecation headers, client SDK update
|
|
604
|
+
Group 6: Testing + Documentation (TASK-29..30)
|
|
605
|
+
- E2E tests, migration guide
|
|
606
|
+
|
|
607
|
+
Risk assessment:
|
|
608
|
+
- RISK-1 (high): N+1 queries in GraphQL resolvers -- mitigation: DataLoader
|
|
609
|
+
- RISK-2 (high): Breaking partner integrations -- mitigation: REST proxy + 6mo deprecation
|
|
610
|
+
- RISK-3 (medium): Performance regression -- mitigation: query complexity limiting
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
Checkpoint 6 -> "ok"
|
|
614
|
+
|
|
615
|
+
**Шаг 7. Step 7: Code -- N параллельных агентов per module (opus)**
|
|
616
|
+
|
|
617
|
+
| Агент | Модуль | Файлы |
|
|
618
|
+
|-------|--------|-------|
|
|
619
|
+
| Agent 1 | Auth module | 4 файла: schema, resolvers, middleware, tests |
|
|
620
|
+
| Agent 2 | Users module | 4 файла: schema, resolvers, loaders, tests |
|
|
621
|
+
| Agent 3 | Products module | 4 файла: schema, resolvers, loaders, tests |
|
|
622
|
+
| Agent 4 | Orders module | 4 файла: schema, resolvers, loaders, tests |
|
|
623
|
+
| Agent 5 | Payments module | 4 файла: schema, resolvers, loaders, tests |
|
|
624
|
+
|
|
625
|
+
После завершения всех агентов:
|
|
626
|
+
- Оркестратор проверяет интеграцию между модулями
|
|
627
|
+
- Исправление interface mismatches
|
|
628
|
+
- Gateway stitching финализация
|
|
629
|
+
- REST proxy layer
|
|
630
|
+
|
|
631
|
+
Checkpoint 7 -> "ok"
|
|
632
|
+
|
|
633
|
+
**Шаг 8. Step 8: Full QE -- 3-agent review panel (sonnet)**
|
|
634
|
+
|
|
635
|
+
XL-tier использует полную мульти-агентную проверку:
|
|
636
|
+
|
|
637
|
+
| Агент | Роль | Фокус |
|
|
638
|
+
|-------|------|-------|
|
|
639
|
+
| Agent 1 | Correctness Reviewer | Покрытие требований FR-1..FR-12, логические ошибки |
|
|
640
|
+
| Agent 2 | Security Reviewer | Auth relay, injection через GraphQL queries, rate limiting |
|
|
641
|
+
| Agent 3 | Architecture Reviewer | Соответствие ADR решениям, pattern compliance |
|
|
642
|
+
|
|
643
|
+
Дополнительно: unit + integration + e2e тесты.
|
|
644
|
+
|
|
645
|
+
```
|
|
646
|
+
===============================================================
|
|
647
|
+
STEP 8/8: Quality Engineering Complete
|
|
648
|
+
<promise>FEATURE_ADR_VERIFIED</promise>
|
|
649
|
+
Tier: XL
|
|
650
|
+
|
|
651
|
+
Tests: 87/89 (97.8%) -- 2 flaky integration tests (WebSocket timing)
|
|
652
|
+
Review: 0 blockers, 3 warnings, 5 suggestions
|
|
653
|
+
Requirements: 12/12 FR covered
|
|
654
|
+
|
|
655
|
+
Verdict: CONDITIONAL APPROVAL -- fix flaky tests
|
|
656
|
+
|
|
657
|
+
* "ok" -- feature complete!
|
|
658
|
+
* "исправь [finding]" -- fix specific issue
|
|
659
|
+
* "повтори QE" -- re-run full QE
|
|
660
|
+
===============================================================
|
|
661
|
+
```
|
|
662
|
+
|
|
663
|
+
**Итог:** `features/migrate-rest-to-graphql/` содержит:
|
|
664
|
+
```
|
|
665
|
+
features/migrate-rest-to-graphql/
|
|
666
|
+
00_complexity_assessment.md
|
|
667
|
+
01_requirements.md
|
|
668
|
+
02_research.md
|
|
669
|
+
03_adr/
|
|
670
|
+
001-schema-design-approach.md
|
|
671
|
+
002-gateway-pattern.md
|
|
672
|
+
003-auth-relay-strategy.md
|
|
673
|
+
004-backward-compatibility.md
|
|
674
|
+
005-client-migration.md
|
|
675
|
+
04_domain_model.md
|
|
676
|
+
05_architecture.md
|
|
677
|
+
06_implementation_plan.md
|
|
678
|
+
07_code_changes/
|
|
679
|
+
change_manifest.md
|
|
680
|
+
08_qe_report.md
|
|
681
|
+
diagrams/
|
|
682
|
+
architecture-c4.mermaid
|
|
683
|
+
sequence-query-resolution.mermaid
|
|
684
|
+
sequence-mutation-auth.mermaid
|
|
685
|
+
sequence-subscription.mermaid
|
|
686
|
+
domain-model.mermaid
|
|
687
|
+
README.md
|
|
688
|
+
```
|
|
689
|
+
|
|
690
|
+
---
|
|
691
|
+
|
|
692
|
+
## 6. Сценарий: Checkpoint с обратной связью
|
|
693
|
+
|
|
694
|
+
**Контекст:** Во время M-tier фичи на шаге 3 (ADR) пользователь хочет добавить альтернативный вариант кеширования.
|
|
695
|
+
|
|
696
|
+
### Поток
|
|
697
|
+
|
|
698
|
+
**Шаг 1. Step 3 завершён -- ADR создан**
|
|
699
|
+
|
|
700
|
+
```
|
|
701
|
+
===============================================================
|
|
702
|
+
STEP 3/8: ADR Complete
|
|
703
|
+
Tier: M
|
|
704
|
+
|
|
705
|
+
1 architectural decision documented:
|
|
706
|
+
1. ADR-001: Session storage -> chose PostgreSQL
|
|
707
|
+
|
|
708
|
+
* "ok" -- proceed
|
|
709
|
+
* "пересмотри ADR-001" -- reconsider decision
|
|
710
|
+
* "добавь ADR для [topic]" -- add new decision
|
|
711
|
+
===============================================================
|
|
712
|
+
```
|
|
713
|
+
|
|
714
|
+
**Шаг 2. Пользователь даёт обратную связь**
|
|
715
|
+
|
|
716
|
+
```
|
|
717
|
+
User: Добавь анализ Redis как альтернативу для кеширования
|
|
718
|
+
```
|
|
719
|
+
|
|
720
|
+
**Шаг 3. Система корректирует ADR**
|
|
721
|
+
|
|
722
|
+
Claude обновляет ADR-001:
|
|
723
|
+
- Добавляет "Option 3: Redis" в Considered Options
|
|
724
|
+
- Заполняет decision matrix с Redis
|
|
725
|
+
- Пересчитывает взвешенные оценки
|
|
726
|
+
- Обновляет или подтверждает решение
|
|
727
|
+
|
|
728
|
+
**Шаг 4. Повторный Checkpoint**
|
|
729
|
+
|
|
730
|
+
```
|
|
731
|
+
===============================================================
|
|
732
|
+
STEP 3/8: ADR Complete (revised)
|
|
733
|
+
Tier: M
|
|
734
|
+
|
|
735
|
+
1 architectural decision documented:
|
|
736
|
+
1. ADR-001: Session storage -> chose PostgreSQL
|
|
737
|
+
(Redis added as Option 3; PostgreSQL still wins on durability + team familiarity)
|
|
738
|
+
|
|
739
|
+
* "ok" -- proceed
|
|
740
|
+
* "пересмотри ADR-001" -- reconsider decision
|
|
741
|
+
===============================================================
|
|
742
|
+
```
|
|
743
|
+
|
|
744
|
+
**Шаг 5. Пользователь подтверждает**
|
|
745
|
+
|
|
746
|
+
```
|
|
747
|
+
User: ок
|
|
748
|
+
```
|
|
749
|
+
|
|
750
|
+
**Шаг 6. Pipeline продолжается**
|
|
751
|
+
|
|
752
|
+
Переменная `{ADR_DECISIONS}` обновлена с учётом Redis-анализа. Downstream шаги (Step 5, Step 6, Step 7) используют обновлённые решения.
|
|
753
|
+
|
|
754
|
+
---
|
|
755
|
+
|
|
756
|
+
## 7. Сценарий: Tier Override
|
|
757
|
+
|
|
758
|
+
**Контекст:** Router классифицировал фичу как S, но разработчик знает, что изменение затронет больше файлов.
|
|
759
|
+
|
|
760
|
+
### Поток
|
|
761
|
+
|
|
762
|
+
**Шаг 1. Step 0 классифицирует как S**
|
|
763
|
+
|
|
764
|
+
```
|
|
765
|
+
===============================================================
|
|
766
|
+
STEP 0/8: Complexity Router Complete
|
|
767
|
+
<promise>FEATURE_ADR_ROUTED</promise>
|
|
768
|
+
Tier: S | Active Steps: [0, 1, 6, 7, 8]
|
|
769
|
+
|
|
770
|
+
Feature classified as S based on: 2 files, 1 domain
|
|
771
|
+
Pipeline: 5 steps, estimated 15 min
|
|
772
|
+
|
|
773
|
+
* "ok" -- proceed with this tier
|
|
774
|
+
* "повысь" -- bump to next tier
|
|
775
|
+
* "понизь" -- drop to lower tier
|
|
776
|
+
===============================================================
|
|
777
|
+
```
|
|
778
|
+
|
|
779
|
+
**Шаг 2. Пользователь переопределяет**
|
|
780
|
+
|
|
781
|
+
```
|
|
782
|
+
User: Это M, затронет 6 файлов и нужен ADR для выбора подхода
|
|
783
|
+
```
|
|
784
|
+
|
|
785
|
+
**Шаг 3. Система пересчитывает**
|
|
786
|
+
|
|
787
|
+
Router обновляет классификацию:
|
|
788
|
+
- `{COMPLEXITY_TIER}` = M (по запросу пользователя)
|
|
789
|
+
- `{ACTIVE_STEPS}` = [0, 1, 3, 5, 6, 7, 8] (добавляются Step 3 и Step 5)
|
|
790
|
+
- `{TIME_BUDGET}` пересчитан на 45 мин
|
|
791
|
+
|
|
792
|
+
Артефакт `00_complexity_assessment.md` обновляется с пометкой:
|
|
793
|
+
```
|
|
794
|
+
Classification: M (user override from S)
|
|
795
|
+
Reason: User indicated 6 files affected and need for ADR
|
|
796
|
+
```
|
|
797
|
+
|
|
798
|
+
**Шаг 4. Повторный Checkpoint**
|
|
799
|
+
|
|
800
|
+
```
|
|
801
|
+
===============================================================
|
|
802
|
+
STEP 0/8: Complexity Router Complete (override)
|
|
803
|
+
<promise>FEATURE_ADR_ROUTED</promise>
|
|
804
|
+
Tier: M (upgraded from S per user request) | Active Steps: [0, 1, 3, 5, 6, 7, 8]
|
|
805
|
+
|
|
806
|
+
Pipeline: 7 steps, estimated 45 min
|
|
807
|
+
|
|
808
|
+
* "ok" -- proceed with M tier
|
|
809
|
+
===============================================================
|
|
810
|
+
```
|
|
811
|
+
|
|
812
|
+
**Шаг 5. Pipeline продолжается как M-tier**
|
|
813
|
+
|
|
814
|
+
Важно: tier зафиксирован после подтверждения на Checkpoint 0 и НЕ МОЖЕТ измениться в процессе pipeline. Если scope изменился значительно -- рекомендуется restart.
|
|
815
|
+
|
|
816
|
+
---
|
|
817
|
+
|
|
818
|
+
## 8. Сценарий: QE Failure
|
|
819
|
+
|
|
820
|
+
**Контекст:** На Step 8 обнаружена критическая уязвимость (SQL injection). Необходимо вернуться к Step 7 для исправления.
|
|
821
|
+
|
|
822
|
+
### Поток
|
|
823
|
+
|
|
824
|
+
**Шаг 1. Step 8 находит BLOCKER**
|
|
825
|
+
|
|
826
|
+
QE Review (sonnet) анализирует код и выявляет:
|
|
827
|
+
|
|
828
|
+
```
|
|
829
|
+
BLOCKER: SQL injection vulnerability in UserController.exportData()
|
|
830
|
+
Line 45: db.query(`SELECT * FROM users WHERE id = ${req.params.id}`)
|
|
831
|
+
Fix: Use parameterized query: db.query('SELECT * FROM users WHERE id = $1', [req.params.id])
|
|
832
|
+
```
|
|
833
|
+
|
|
834
|
+
**Шаг 2. QE Report: verdict NEEDS FIXES**
|
|
835
|
+
|
|
836
|
+
```
|
|
837
|
+
===============================================================
|
|
838
|
+
STEP 8/8: Quality Engineering Complete
|
|
839
|
+
<promise>FEATURE_ADR_VERIFIED_INCOMPLETE</promise>
|
|
840
|
+
Tier: M
|
|
841
|
+
|
|
842
|
+
Tests: 11/12 (91.7%) -- 1 FAIL (security test)
|
|
843
|
+
Review: 1 blocker, 1 warning, 0 suggestions
|
|
844
|
+
Requirements: 4/4 FR covered
|
|
845
|
+
|
|
846
|
+
Findings:
|
|
847
|
+
BLOCKER: SQL injection in UserController.exportData() (line 45)
|
|
848
|
+
WARNING: Missing input validation on export format parameter
|
|
849
|
+
|
|
850
|
+
Verdict: NEEDS FIXES
|
|
851
|
+
|
|
852
|
+
* "исправь все" -- fix all findings
|
|
853
|
+
* "исправь blocker" -- fix only blocker
|
|
854
|
+
* "покажи детали [finding]" -- detailed explanation
|
|
855
|
+
===============================================================
|
|
856
|
+
```
|
|
857
|
+
|
|
858
|
+
**Шаг 3. Пользователь решает исправить**
|
|
859
|
+
|
|
860
|
+
```
|
|
861
|
+
User: исправь blocker
|
|
862
|
+
```
|
|
863
|
+
|
|
864
|
+
**Шаг 4. Возврат к Step 7 для целевого исправления**
|
|
865
|
+
|
|
866
|
+
Claude модифицирует конкретный файл:
|
|
867
|
+
- `UserController.exportData()`: заменяет строковую интерполяцию на параметризованный запрос
|
|
868
|
+
- Обновляет `change_manifest.md`
|
|
869
|
+
|
|
870
|
+
**Шаг 5. Повторный Step 8**
|
|
871
|
+
|
|
872
|
+
QE повторяется:
|
|
873
|
+
|
|
874
|
+
```
|
|
875
|
+
===============================================================
|
|
876
|
+
STEP 8/8: Quality Engineering Complete
|
|
877
|
+
<promise>FEATURE_ADR_VERIFIED</promise>
|
|
878
|
+
Tier: M
|
|
879
|
+
|
|
880
|
+
Tests: 12/12 (100%)
|
|
881
|
+
Review: 0 blockers, 1 warning, 0 suggestions
|
|
882
|
+
Requirements: 4/4 FR covered
|
|
883
|
+
|
|
884
|
+
Verdict: CONDITIONAL APPROVAL (1 warning remains: input validation)
|
|
885
|
+
|
|
886
|
+
* "ok" -- feature complete!
|
|
887
|
+
* "исправь warning" -- fix remaining warning
|
|
888
|
+
===============================================================
|
|
889
|
+
```
|
|
890
|
+
|
|
891
|
+
**Шаг 6. Пользователь завершает**
|
|
892
|
+
|
|
893
|
+
```
|
|
894
|
+
User: ок
|
|
895
|
+
```
|
|
896
|
+
|
|
897
|
+
Pipeline завершён. Warning остаётся как задокументированный tech debt.
|
|
898
|
+
|
|
899
|
+
---
|
|
900
|
+
|
|
901
|
+
## 9. Сценарий: Установка и настройка
|
|
902
|
+
|
|
903
|
+
### Вариант 1: Быстрая установка через npx
|
|
904
|
+
|
|
905
|
+
```bash
|
|
906
|
+
# Одна команда -- устанавливает все компоненты
|
|
907
|
+
npx @dzhechkov/skills-feature-adr
|
|
908
|
+
```
|
|
909
|
+
|
|
910
|
+
Устанавливаются:
|
|
911
|
+
- `.claude/skills/feature-adr/` -- skill с 9 модулями + references + examples
|
|
912
|
+
- `.claude/commands/feature-adr.md` -- slash-команда
|
|
913
|
+
- `.claude/rules/feature-adr-conventions.md` -- правила и конвенции
|
|
914
|
+
- `.claude/shards/feature-adr.shard.md` -- governance shard
|
|
915
|
+
|
|
916
|
+
### Вариант 2: Глобальная установка
|
|
917
|
+
|
|
918
|
+
```bash
|
|
919
|
+
npm install -g @dzhechkov/skills-feature-adr
|
|
920
|
+
skills-feature-adr init
|
|
921
|
+
```
|
|
922
|
+
|
|
923
|
+
### Проверка установки
|
|
924
|
+
|
|
925
|
+
```bash
|
|
926
|
+
# Показать все установленные компоненты
|
|
927
|
+
npx @dzhechkov/skills-feature-adr list
|
|
928
|
+
|
|
929
|
+
# Вывод:
|
|
930
|
+
# Installed components:
|
|
931
|
+
# Skill: .claude/skills/feature-adr/SKILL.md
|
|
932
|
+
# Modules: 9 (00-complexity-router .. 08-qe)
|
|
933
|
+
# Refs: 4 (complexity-matrix, adr-template, c4-template, qe-checklist)
|
|
934
|
+
# Examples: 1 (sample-feature-output)
|
|
935
|
+
# Command: .claude/commands/feature-adr.md
|
|
936
|
+
# Rules: .claude/rules/feature-adr-conventions.md
|
|
937
|
+
# Shard: .claude/shards/feature-adr.shard.md
|
|
938
|
+
```
|
|
939
|
+
|
|
940
|
+
### Health check
|
|
941
|
+
|
|
942
|
+
```bash
|
|
943
|
+
npx @dzhechkov/skills-feature-adr doctor
|
|
944
|
+
|
|
945
|
+
# Вывод:
|
|
946
|
+
# Health Check: @dzhechkov/skills-feature-adr
|
|
947
|
+
# SKILL.md exists .............. OK
|
|
948
|
+
# Modules (9/9) ................ OK
|
|
949
|
+
# References (4/4) ............. OK
|
|
950
|
+
# Examples (1/1) ............... OK
|
|
951
|
+
# Command file ................. OK
|
|
952
|
+
# Rules file ................... OK
|
|
953
|
+
# Shard file ................... OK
|
|
954
|
+
# features/ directory .......... OK (created)
|
|
955
|
+
#
|
|
956
|
+
# Status: HEALTHY
|
|
957
|
+
```
|
|
958
|
+
|
|
959
|
+
### Первый запуск
|
|
960
|
+
|
|
961
|
+
```bash
|
|
962
|
+
# Открыть Claude Code в директории проекта
|
|
963
|
+
# Запустить pipeline:
|
|
964
|
+
/feature-adr Добавить функцию экспорта в PDF
|
|
965
|
+
```
|
|
966
|
+
|
|
967
|
+
### Обновление
|
|
968
|
+
|
|
969
|
+
```bash
|
|
970
|
+
npx @dzhechkov/skills-feature-adr update
|
|
971
|
+
|
|
972
|
+
# Обновляет только изменённые файлы, не перезаписывает кастомизации
|
|
973
|
+
```
|
|
974
|
+
|
|
975
|
+
### Удаление
|
|
976
|
+
|
|
977
|
+
```bash
|
|
978
|
+
npx @dzhechkov/skills-feature-adr remove
|
|
979
|
+
|
|
980
|
+
# Удаляет все установленные компоненты
|
|
981
|
+
# Артефакты в features/ НЕ удаляются
|
|
982
|
+
```
|
|
983
|
+
|
|
984
|
+
---
|
|
985
|
+
|
|
986
|
+
## 10. Диаграммы потоков
|
|
987
|
+
|
|
988
|
+
### S-Tier Pipeline Flow
|
|
989
|
+
|
|
990
|
+
```mermaid
|
|
991
|
+
flowchart TD
|
|
992
|
+
START(["/feature-adr [bug description]"]) --> STEP0
|
|
993
|
+
STEP0["Step 0: Complexity Router\n(haiku)\nScore: 6-8 -> Tier S"] --> CP0
|
|
994
|
+
CP0{"Checkpoint 0:\nTier S confirmed?"} -->|"ok"| STEP1
|
|
995
|
+
CP0 -->|"повысь"| OVERRIDE["Upgrade tier\n(see Tier Override flow)"]
|
|
996
|
+
|
|
997
|
+
STEP1["Step 1: Requirements\n(inline, 3-5 bullets)"] --> STEP6
|
|
998
|
+
STEP6["Step 6: Implementation Plan\n(inline checklist)"] --> STEP7
|
|
999
|
+
STEP7["Step 7: Code Changes\n(single-pass, opus)"] --> CP7
|
|
1000
|
+
CP7{"Checkpoint 7"} -->|"ok"| STEP8
|
|
1001
|
+
CP7 -->|"переделай"| STEP7
|
|
1002
|
+
|
|
1003
|
+
STEP8["Step 8: QE\n(smoke tests only)"] --> CP8
|
|
1004
|
+
CP8{"Checkpoint 8:\nVerdict?"} -->|"READY"| DONE
|
|
1005
|
+
CP8 -->|"NEEDS FIXES"| STEP7
|
|
1006
|
+
DONE(["Done\nfeatures/<slug>/"])
|
|
1007
|
+
|
|
1008
|
+
style STEP0 fill:#e8f4f8
|
|
1009
|
+
style STEP7 fill:#fff3e0
|
|
1010
|
+
style STEP8 fill:#e8f5e9
|
|
1011
|
+
```
|
|
1012
|
+
|
|
1013
|
+
### L/XL Parallel Execution DAG
|
|
1014
|
+
|
|
1015
|
+
```mermaid
|
|
1016
|
+
flowchart TD
|
|
1017
|
+
STEP0["Step 0: Router"] --> STEP1["Step 1: Requirements"]
|
|
1018
|
+
|
|
1019
|
+
STEP1 --> PAR1_START{{"Parallel Group 1"}}
|
|
1020
|
+
PAR1_START --> STEP2["Step 2: Research\n(2 agents: codebase + external)"]
|
|
1021
|
+
PAR1_START --> STEP3["Step 3: ADR\n(N decisions, opus)"]
|
|
1022
|
+
|
|
1023
|
+
STEP2 --> PAR1_END{{"Join"}}
|
|
1024
|
+
STEP3 --> PAR1_END
|
|
1025
|
+
|
|
1026
|
+
PAR1_END --> PAR2_START{{"Parallel Group 2"}}
|
|
1027
|
+
PAR2_START --> STEP4["Step 4: DDD\n(bounded contexts, opus)"]
|
|
1028
|
+
PAR2_START --> STEP5["Step 5: Architecture\n(C4 diagrams, opus)"]
|
|
1029
|
+
|
|
1030
|
+
STEP4 --> PAR2_END{{"Join"}}
|
|
1031
|
+
STEP5 --> PAR2_END
|
|
1032
|
+
|
|
1033
|
+
PAR2_END --> STEP6["Step 6: Implementation Plan\n(sonnet)"]
|
|
1034
|
+
STEP6 --> STEP7["Step 7: Code\n(XL: N parallel agents per module)"]
|
|
1035
|
+
STEP7 --> STEP8["Step 8: QE\n(XL: 3-agent review panel)"]
|
|
1036
|
+
STEP8 --> DONE(["Done"])
|
|
1037
|
+
|
|
1038
|
+
style PAR1_START fill:#fff9c4
|
|
1039
|
+
style PAR2_START fill:#fff9c4
|
|
1040
|
+
style PAR1_END fill:#fff9c4
|
|
1041
|
+
style PAR2_END fill:#fff9c4
|
|
1042
|
+
```
|
|
1043
|
+
|
|
1044
|
+
### Checkpoint Feedback Loop
|
|
1045
|
+
|
|
1046
|
+
```mermaid
|
|
1047
|
+
flowchart TD
|
|
1048
|
+
STEP_N["Step N завершён\nАртефакт создан"] --> DISPLAY["Отобразить Checkpoint\nбаннер с promise tag"]
|
|
1049
|
+
DISPLAY --> USER{"Ответ\nпользователя"}
|
|
1050
|
+
|
|
1051
|
+
USER -->|"ok"| NEXT["Перейти к Step N+1\nЗагрузить переменные downstream"]
|
|
1052
|
+
USER -->|"углуби [section]"| ELABORATE["Детализировать указанную\nсекцию артефакта"]
|
|
1053
|
+
USER -->|"добавь [element]"| ADD["Добавить элемент\n(требование, ADR, диаграмму)"]
|
|
1054
|
+
USER -->|"убери [element]"| REMOVE["Удалить элемент"]
|
|
1055
|
+
USER -->|"пересмотри [decision]"| RECONSIDER["Пересмотреть решение\n(переоценить альтернативы)"]
|
|
1056
|
+
|
|
1057
|
+
ELABORATE --> UPDATE["Обновить артефакт\nОбновить переменные"]
|
|
1058
|
+
ADD --> UPDATE
|
|
1059
|
+
REMOVE --> UPDATE
|
|
1060
|
+
RECONSIDER --> UPDATE
|
|
1061
|
+
|
|
1062
|
+
UPDATE --> RE_CHECKPOINT["Повторный Checkpoint\nс обновлённым содержимым"]
|
|
1063
|
+
RE_CHECKPOINT --> USER
|
|
1064
|
+
```
|
|
1065
|
+
|
|
1066
|
+
### QE Decision Tree
|
|
1067
|
+
|
|
1068
|
+
```mermaid
|
|
1069
|
+
flowchart TD
|
|
1070
|
+
QE_START["Step 8: QE Start"] --> SMOKE["Smoke Tests:\nCompile + Lint + Existing Tests"]
|
|
1071
|
+
|
|
1072
|
+
SMOKE -->|"FAIL"| SMOKE_FIX["Return to Step 7:\nFix compilation / lint errors"]
|
|
1073
|
+
SMOKE -->|"PASS"| TIER_CHECK{"Tier?"}
|
|
1074
|
+
|
|
1075
|
+
TIER_CHECK -->|"S"| S_DONE["Verdict: READY\n(smoke sufficient for S)"]
|
|
1076
|
+
TIER_CHECK -->|"M"| M_QE["Unit Tests + Basic Review"]
|
|
1077
|
+
TIER_CHECK -->|"L"| L_QE["Unit + Integration Tests\n+ Thorough Review"]
|
|
1078
|
+
TIER_CHECK -->|"XL"| XL_QE["Unit + Integration + E2E\n+ 3-Agent Review Panel"]
|
|
1079
|
+
|
|
1080
|
+
M_QE --> FINDINGS
|
|
1081
|
+
L_QE --> FINDINGS
|
|
1082
|
+
XL_QE --> FINDINGS
|
|
1083
|
+
|
|
1084
|
+
FINDINGS{"Blockers\nfound?"}
|
|
1085
|
+
FINDINGS -->|"0 blockers"| WARNINGS{"Warnings?"}
|
|
1086
|
+
FINDINGS -->|"1+ blockers"| NEEDS_FIX["Verdict: NEEDS FIXES\nList all blockers"]
|
|
1087
|
+
|
|
1088
|
+
WARNINGS -->|"0 warnings"| READY["Verdict: READY FOR MERGE"]
|
|
1089
|
+
WARNINGS -->|"1+ warnings"| CONDITIONAL["Verdict: CONDITIONAL APPROVAL\nList warnings"]
|
|
1090
|
+
|
|
1091
|
+
NEEDS_FIX --> USER_FIX{"User: исправить?"}
|
|
1092
|
+
USER_FIX -->|"да"| STEP7_FIX["Return to Step 7:\nTargeted fix for blockers"]
|
|
1093
|
+
USER_FIX -->|"нет"| ABORT["Abort: feature incomplete"]
|
|
1094
|
+
|
|
1095
|
+
STEP7_FIX --> QE_RERUN["Re-run Step 8"]
|
|
1096
|
+
QE_RERUN --> SMOKE
|
|
1097
|
+
|
|
1098
|
+
style NEEDS_FIX fill:#ffcdd2
|
|
1099
|
+
style READY fill:#c8e6c9
|
|
1100
|
+
style CONDITIONAL fill:#fff9c4
|
|
1101
|
+
```
|