@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.
@@ -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
+ ```