@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,804 @@
1
+ # Пользовательские сценарии @dzhechkov/keysarium-core
2
+
3
+ ## Содержание
4
+
5
+ 1. [Обзор сценариев](#1-обзор-сценариев)
6
+ 2. [Сценарий: Запуск нового пайплайна](#2-сценарий-запуск-нового-пайплайна)
7
+ 3. [Сценарий: Checkpoint взаимодействие](#3-сценарий-checkpoint-взаимодействие)
8
+ 4. [Сценарий: Мульти-агентная оценка (Judge Panel)](#4-сценарий-мульти-агентная-оценка-judge-panel)
9
+ 5. [Сценарий: Dream Cycle](#5-сценарий-dream-cycle)
10
+ 6. [Сценарий: Background Worker запуск](#6-сценарий-background-worker-запуск)
11
+ 7. [Сценарий: Witness Chain верификация](#7-сценарий-witness-chain-верификация)
12
+ 8. [Сценарий: Промоция скилла (Tier 0 -> Tier 3)](#8-сценарий-промоция-скилла-tier-0--tier-3)
13
+ 9. [Сценарий: Создание пайплайна с нуля](#9-сценарий-создание-пайплайна-с-нуля)
14
+ 10. [Диаграммы потоков](#10-диаграммы-потоков)
15
+
16
+ ---
17
+
18
+ ## 1. Обзор сценариев
19
+
20
+ keysarium-core предоставляет набор протоколов для построения мульти-агентных пайплайнов. Каждый сценарий ниже описывает конкретный поток взаимодействия с фреймворком.
21
+
22
+ | Сценарий | Когда применяется | Модули core |
23
+ |----------|-------------------|-------------|
24
+ | Запуск нового пайплайна | Начало любого проекта | queen-protocol, memory-protocol, shard-protocol |
25
+ | Checkpoint взаимодействие | После каждой стадии пайплайна | checkpoint-protocol, memory-protocol |
26
+ | Мульти-агентная оценка | Оценка качества артефакта панелью судей | judge-attestation, topology-selection |
27
+ | Dream Cycle | Накопилось достаточно данных для анализа | dream-engine, reward-tracker |
28
+ | Background Worker | Фоновые задачи без блокировки сессии | background-workers, model-routing |
29
+ | Witness Chain верификация | Проверка целостности артефактов | witness-chain, audit-trail |
30
+ | Промоция скилла | Повышение уровня доверия к скиллу | promotion-protocol, tier-system, judge-attestation |
31
+ | Создание пайплайна с нуля | Построение собственного мульти-агентного пайплайна | все модули |
32
+
33
+ ### Карта зависимостей сценариев
34
+
35
+ ```
36
+ Создание пайплайна с нуля
37
+ |
38
+ v
39
+ Запуск нового пайплайна ──> Checkpoint взаимодействие ──> Dream Cycle
40
+ | | |
41
+ v v v
42
+ Background Worker Witness Chain верификация Промоция скилла
43
+ |
44
+ v
45
+ Мульти-агентная оценка
46
+ ```
47
+
48
+ ---
49
+
50
+ ## 2. Сценарий: Запуск нового пайплайна
51
+
52
+ Queen Coordinator выполняет 10-шаговый протокол. Ниже -- полный поток с точками принятия решений и ветвлением при ошибках.
53
+
54
+ ### Пошаговый поток
55
+
56
+ **Шаг 1. INIT -- создание рабочей директории**
57
+ ```
58
+ 1. Определить slug проекта из входных данных
59
+ 2. Создать директорию: projects/{slug}/
60
+ 3. Создать поддиректории: prototype/, diagrams/
61
+ 4. Инициализировать метаданные проекта
62
+ ```
63
+ - Если создание директории не удалось -- ABORT с диагностикой.
64
+
65
+ **Шаг 2. HEALTH -- проверка ресурсов**
66
+ ```
67
+ 1. Проверить наличие всех скиллов (SKILL.md для каждого)
68
+ 2. Проверить governance shards для всех активных стадий
69
+ 3. Проверить доступность файла конституции
70
+ 4. Проверить внешние зависимости (sha256sum и т.д.)
71
+ ```
72
+ - Если критический ресурс отсутствует -- ABORT с указанием отсутствующего файла.
73
+ - Если некритический ресурс отсутствует -- WARN и продолжить.
74
+
75
+ **Шаг 3. LOAD -- загрузка исторических знаний**
76
+ ```
77
+ 1. Вызвать memory_query() с текущим доменом и первой стадией
78
+ 2. Загрузить последние dream insights из {insights-root}/
79
+ 3. Загрузить brain файл (если есть предыдущий экспорт)
80
+ 4. Лог: "Loaded {N} historical patterns" или "No historical data (first run)"
81
+ ```
82
+ - Если `.keysarium/memory/` не существует -- graceful degradation, продолжить без данных.
83
+
84
+ **Шаг 4. DETECT -- классификация домена**
85
+ ```
86
+ 1. Проанализировать входные данные на ключевые слова домена
87
+ 2. Определить характеристики: регуляторика, latency, deployment model
88
+ 3. Установить переменные: {DOMAIN}, {PRIMARY_USER}, {AHA_MOMENT}
89
+ 4. Активировать доменные правила (banking -> on-premise, retail -> A/B тесты)
90
+ ```
91
+ - Если домен не определён -- использовать "general" по умолчанию.
92
+
93
+ **Шаг 5-7. Цикл стадий: SHARD -> ORCHESTRATE -> MONITOR**
94
+
95
+ Для каждой стадии пайплайна:
96
+
97
+ ```
98
+ 5. SHARD: Загрузить governance shard для текущей стадии
99
+ - Проверить upstream promises (downstream не стартует без upstream)
100
+ - Применить доменные правила к стадии
101
+
102
+ 6. ORCHESTRATE: Выбрать топологию и выполнить
103
+ - Определить топологию (Star / Mesh / Hierarchical / Ring / Hybrid / Adaptive)
104
+ - Назначить модель: haiku для простых, sonnet для аналитики, opus для творческих
105
+ - Запустить агентов по выбранной топологии
106
+ - Собрать результаты, синтезировать (если параллельные агенты)
107
+
108
+ 7. MONITOR: Checkpoint + контроль
109
+ - Отобразить checkpoint баннер (формат из раздела 3)
110
+ - Ожидать подтверждения человека
111
+ - Записать reward (0.0-1.0) через memory_store()
112
+ - Проверить бюджет времени vs. фактическое время
113
+ ```
114
+
115
+ **Шаг 8. COLLECT -- сбор артефактов**
116
+ ```
117
+ 1. Перечислить все файлы, созданные в директории проекта
118
+ 2. Проверить каждый артефакт на соответствие quality gates
119
+ 3. Составить манифест артефактов
120
+ ```
121
+ - Если обязательный артефакт отсутствует -- HALT с отчётом.
122
+
123
+ **Шаг 9. STORE -- сохранение знаний**
124
+ ```
125
+ 1. Вызвать memory_store() для финального результата
126
+ 2. Обновить trigger-state.json для dream engine
127
+ 3. При значимом выполнении -- инициировать извлечение знаний
128
+ ```
129
+ - Если сохранение не удалось -- лог ошибки, продолжить (не блокировать выход пайплайна).
130
+
131
+ **Шаг 10. REPORT -- финальный отчёт**
132
+ ```
133
+ 1. Сформировать сводку по всем стадиям и их результатам
134
+ 2. Перечислить все созданные артефакты
135
+ 3. Отчёт: время по стадиям (факт vs. бюджет)
136
+ 4. Отчёт: предупреждения и инциденты
137
+ 5. Emit финальный promise tag
138
+ ```
139
+
140
+ ### Точки принятия решений
141
+
142
+ | Точка | Условие | Ветка "Да" | Ветка "Нет" |
143
+ |-------|---------|------------|-------------|
144
+ | HEALTH: ресурс найден? | Все скиллы/shards доступны | Продолжить | ABORT |
145
+ | LOAD: память существует? | `.keysarium/memory/` есть | Загрузить паттерны | Первый запуск, продолжить без |
146
+ | DETECT: домен определён? | Ключевые слова совпали | Применить доменные правила | Использовать "general" |
147
+ | SHARD: upstream promise? | Upstream promise emitted | Начать стадию | Вернуться к незавершённой стадии |
148
+ | MONITOR: checkpoint "ok"? | Пользователь подтвердил | Следующая стадия | Корректировка и повторный checkpoint |
149
+ | COLLECT: артефакт есть? | Файл создан | Добавить в манифест | HALT: обязательный артефакт отсутствует |
150
+
151
+ ---
152
+
153
+ ## 3. Сценарий: Checkpoint взаимодействие
154
+
155
+ Checkpoint -- это обязательная точка синхронизации между пайплайном и человеком. INV-003 запрещает автоматический переход без подтверждения.
156
+
157
+ ### Формат баннера
158
+
159
+ ```
160
+ =====================================================
161
+ CHECKPOINT {N}: {Название стадии} Complete
162
+ <promise>{PROMISE_TAG}</promise>
163
+ Witness: sha256:{hash} (chain link #{N})
164
+
165
+ {2-3 строки о том, что было сделано}
166
+ Артефакты: {список файлов}
167
+ Время: {факт}m / {бюджет}m ({процент}%)
168
+
169
+ * "ok" -- следующая стадия
170
+ * "углуби {раздел}" -- доработать раздел
171
+ * "{обратная связь}" -- скорректировать
172
+ =====================================================
173
+ ```
174
+
175
+ ### Три пути обработки
176
+
177
+ **Путь 1: "ok" -- немедленное подтверждение**
178
+ ```
179
+ 1. Классифицировать reward = 1.0 (excellent)
180
+ 2. Вызвать memory_store() с reward 1.0
181
+ 3. Emit promise tag: <promise>{TAG}_COMPLETE</promise>
182
+ 4. Добавить witness record в .witness-chain.json
183
+ 5. Перейти к следующей стадии
184
+ ```
185
+
186
+ **Путь 2: "углуби X" -- незначительная корректировка**
187
+ ```
188
+ 1. Классифицировать reward = 0.7 (good)
189
+ 2. Разобрать обратную связь: определить область доработки
190
+ 3. Выполнить доработку указанного раздела
191
+ 4. Обновить артефакт
192
+ 5. Если witness chain существует -- chain repair (пересчёт хешей)
193
+ 6. Повторно отобразить checkpoint
194
+ 7. Вызвать memory_store() с reward 0.7 после ответа
195
+ ```
196
+
197
+ **Путь 3: "переделай" -- полный перезапуск стадии**
198
+ ```
199
+ 1. Классифицировать reward = 0.0 (failed)
200
+ 2. Вызвать memory_store() с reward 0.0
201
+ 3. Удалить/перезаписать артефакт текущей стадии
202
+ 4. Перезапустить стадию с нуля (reload shard, re-orchestrate)
203
+ 5. По завершению -- новый checkpoint
204
+ 6. Emit promise НЕ происходит до следующего подтверждения
205
+ ```
206
+
207
+ ### Правила классификации reward
208
+
209
+ | Реакция пользователя | Reward | Label | Сигнал |
210
+ |----------------------|--------|-------|--------|
211
+ | Одно слово одобрения: "ok", "next" | 1.0 | excellent | 0 областей фидбека |
212
+ | Корректировка 1 области | 0.7 | good | 1 область фидбека |
213
+ | Корректировка 2+ областей | 0.3 | needs_work | 2+ областей фидбека |
214
+ | Полный перезапуск | 0.0 | failed | Перезапуск стадии |
215
+
216
+ Если пользователь даёт фидбек более 2 раз на одной стадии, reward ограничивается 0.3. Если сессия завершается без ответа -- запись не создаётся.
217
+
218
+ ---
219
+
220
+ ## 4. Сценарий: Мульти-агентная оценка (Judge Panel)
221
+
222
+ Панель судей используется для независимой оценки артефактов. Судьи работают в Star-топологии с обязательной изоляцией (INV-004).
223
+
224
+ ### Пошаговый поток
225
+
226
+ **Шаг 1. Подготовка**
227
+ ```
228
+ 1. Определить артефакт для оценки
229
+ 2. Вычислить artifact_hash = SHA-256(содержимое файла)
230
+ 3. Определить размер панели: 3 (стандарт) или 5 (high-stakes)
231
+ 4. Определить веса: Domain Expert 0.4 / Critic 0.3 / Auditor 0.3
232
+ ```
233
+
234
+ **Шаг 2. Запуск судей (параллельно, Star-топология)**
235
+ ```
236
+ Координатор порождает 3 агента (model: sonnet):
237
+ - Judge 1 (Domain Expert): оценивает доменную точность и глубину
238
+ - Judge 2 (Critic): ищет слабые места и edge cases
239
+ - Judge 3 (Completeness Auditor): проверяет структурную полноту
240
+
241
+ Каждый судья:
242
+ 1. Получает artifact_hash (все оценивают один и тот же артефакт)
243
+ 2. Читает артефакт независимо
244
+ 3. Выставляет оценку (0-10) с обоснованием
245
+ 4. НЕ видит оценки других судей
246
+ ```
247
+
248
+ **Шаг 3. Сбор и проверка расхождений**
249
+ ```
250
+ 1. Собрать оценки от всех судей
251
+ 2. Вычислить: max_score - min_score
252
+ 3. Если расхождение > 3:
253
+ a. Верифицировать аттестации (подтвердить изоляцию)
254
+ b. Если изоляция подтверждена -- эскалация к мета-судье (sonnet)
255
+ c. Если изоляция нарушена -- флаг conformity collapse
256
+ 4. Если расхождение <= 3: принять оценки
257
+ ```
258
+
259
+ **Шаг 4. Вычисление итогового балла**
260
+ ```
261
+ final_score = (expert * 0.4) + (critic * 0.3) + (auditor * 0.3)
262
+ ```
263
+
264
+ **Шаг 5. Создание аттестаций**
265
+ ```
266
+ Для каждого судьи (в порядке завершения):
267
+ evaluation_hash = SHA-256(judge_id | artifact_hash | score | rationale_summary)
268
+ previous_attestation_hash = предыдущий evaluation_hash (NULL_HASH для первого)
269
+ Записать в .judge-attestations.json
270
+ ```
271
+
272
+ **Шаг 6. Запись в audit trail**
273
+ ```
274
+ 1. Записать результаты оценки с финальным баллом
275
+ 2. Если был мета-судья -- добавить его аттестацию в цепочку
276
+ 3. Если финальный балл >= 7.0 -- артефакт прошёл оценку
277
+ 4. Если финальный балл < 7.0 -- предоставить фидбек для улучшения
278
+ ```
279
+
280
+ ### Точки принятия решений
281
+
282
+ | Точка | Условие | Действие |
283
+ |-------|---------|----------|
284
+ | Расхождение > 3? | max - min > 3.0 | Эскалация к мета-судье |
285
+ | Изоляция нарушена? | Аттестации не валидны | Флаг conformity collapse |
286
+ | Балл >= 7.0? | Взвешенное среднее >= 7.0 | Артефакт прошёл оценку |
287
+ | Балл < 5.0 у одного судьи? | Любой judge score < 5.0 | Блокировка промоции даже при среднем >= 7.0 |
288
+
289
+ ---
290
+
291
+ ## 5. Сценарий: Dream Cycle
292
+
293
+ Dream Cycle -- фоновый процесс, который строит граф концепций из накопленных reward-записей и генерирует кросс-доменные инсайты.
294
+
295
+ ### Пошаговый поток
296
+
297
+ **Шаг 1. Проверка триггеров**
298
+ ```
299
+ 1. Прочитать trigger-state.json
300
+ 2. Проверить time trigger: elapsed > threshold (по умолчанию 60 мин)
301
+ 3. Проверить volume trigger: records_since_last_dream >= 20
302
+ 4. Проверить event trigger: pending_events не пуст
303
+ 5. Если хотя бы один триггер сработал -- предложить запуск
304
+ 6. Ожидать подтверждения пользователя (никогда не запускать автоматически)
305
+ ```
306
+
307
+ **Шаг 2. Загрузка данных**
308
+ ```
309
+ 1. Проверить существование {memory-root}/
310
+ - Если нет -> exit со статусом no_data
311
+ 2. Прочитать reward-summary.json и domain-patterns.json (если есть)
312
+ 3. Рекурсивно просканировать все reward-записи
313
+ 4. Исключить просроченные записи
314
+ 5. Отсортировать по reward DESC, затем timestamp DESC
315
+ 6. Взять топ-200 записей
316
+ 7. Если валидных записей < 5 -> exit со статусом insufficient_data
317
+ ```
318
+
319
+ **Шаг 3. Построение графа концепций**
320
+ ```
321
+ 1. Инициализировать пустой граф: { nodes: [], edges: [] }
322
+ 2. Для каждой записи создать/обновить узлы:
323
+ - domain (домен)
324
+ - stage (стадия)
325
+ - skill (скилл)
326
+ - outcome (результат)
327
+ 3. Создать/обновить рёбра:
328
+ - domain -> stage
329
+ - stage -> skill
330
+ - skill -> outcome
331
+ (весом служит reward)
332
+ 4. Вычислить агрегаты по узлам: avg_reward, record_count, trend
333
+ 5. Вычислить агрегаты по рёбрам: weight (средний reward), record_count
334
+ ```
335
+
336
+ **Шаг 4. Обнаружение ассоциаций (4 типа)**
337
+
338
+ | Тип | Описание | Порог |
339
+ |-----|----------|-------|
340
+ | Cross-Domain Stage Comparison | Сравнение производительности стадий между доменами | gap > 0.15 |
341
+ | Skill-Domain Mismatch | Сравнение эффективности скиллов в разных доменах | gap > 0.15 |
342
+ | Stage Correlation | Стадии, где низкие reward коррелируют | co-occurrence >= 3 |
343
+ | Temporal Trends | Систематические изменения reward во времени | статистическая значимость |
344
+
345
+ **Шаг 5. Генерация инсайтов**
346
+ ```
347
+ 1. Для каждой ассоциации сформировать инсайт:
348
+ - type: performance | effectiveness | anti_pattern
349
+ - confidence: min(1.0, evidence_count / 10)
350
+ - impact: high | medium | low
351
+ - rank_score: confidence * impact_weight
352
+ 2. Отсортировать по rank_score DESC
353
+ 3. Взять топ-20 инсайтов
354
+ ```
355
+
356
+ **Шаг 6. Сохранение и ретенция**
357
+ ```
358
+ 1. Записать результат: {insights-root}/dream-{YYYYMMDD}-{HHmmss}.json
359
+ 2. Применить ретенцию: максимум 10 файлов dream-*, удалить старейшие
360
+ 3. Сбросить триггеры: records_since_last_dream = 0, pending_events = []
361
+ 4. trigger-state.json НИКОГДА не удаляется ретенцией
362
+ ```
363
+
364
+ ---
365
+
366
+ ## 6. Сценарий: Background Worker запуск
367
+
368
+ Background workers выполняют длительные операции без блокировки основной сессии. Каждый воркер изолирован и пишет результаты в свою директорию.
369
+
370
+ ### Пошаговый поток
371
+
372
+ **Шаг 1. Валидация**
373
+ ```
374
+ 1. Проверить тип воркера (consolidate / export-brain / health-check / dream-cycle)
375
+ 2. Прочитать registry.json
376
+ 3. Подсчитать активные воркеры (status = running | starting)
377
+ 4. Если активных >= 3 -> REJECT: "Max concurrent workers reached (3/3)"
378
+ 5. Определить модель по таблице маршрутизации:
379
+ - consolidate -> sonnet
380
+ - export-brain -> haiku
381
+ - health-check -> haiku
382
+ - dream-cycle -> sonnet
383
+ ```
384
+
385
+ **Шаг 2. Создание директории**
386
+ ```
387
+ 1. Сгенерировать worker_id: wkr-{YYYYMMDD}-{HHmmss}-{type}
388
+ 2. Создать директорию: {workers-root}/{worker_id}/output/
389
+ 3. Инициализировать status.json:
390
+ { "worker_id": "...", "status": "starting", "progress": null }
391
+ ```
392
+
393
+ **Шаг 3. Обновление реестра**
394
+ ```
395
+ 1. Добавить запись в registry.json:
396
+ { "worker_id": "...", "type": "...", "status": "starting", "model": "..." }
397
+ 2. Только оркестратор модифицирует registry.json (не сам воркер)
398
+ ```
399
+
400
+ **Шаг 4. Загрузка шаблона и запуск**
401
+ ```
402
+ 1. Прочитать шаблон воркера из lib/worker-templates/{type}.md
403
+ 2. Породить агента в фоновом режиме с указанной моделью
404
+ 3. Передать воркеру: worker_id, output_dir, instructions
405
+ ```
406
+
407
+ **Шаг 5. Выполнение воркера**
408
+ ```
409
+ Воркер:
410
+ 1. Обновляет status.json: status = "running"
411
+ 2. Выполняет задачу (читает файлы проекта, анализирует)
412
+ 3. Периодически обновляет status.json с прогрессом
413
+ 4. Пишет результаты в {worker_dir}/output/
414
+ 5. НИКОГДА не модифицирует файлы вне {worker_dir}/
415
+ 6. НИКОГДА не порождает суб-агентов
416
+ ```
417
+
418
+ **Шаг 6. Проверка флага остановки**
419
+ ```
420
+ Между операциями воркер проверяет:
421
+ - Существует ли файл {worker_dir}/stop-requested?
422
+ - Если да -> обновить status.json: status = "stopped", завершить
423
+ ```
424
+
425
+ **Шаг 7. Завершение**
426
+ ```
427
+ 1. Воркер записывает финальный status.json: status = "completed"
428
+ 2. Оркестратор (при следующем /workers status) обновляет registry.json
429
+ 3. Записи старше 24 часов (completed/failed/stopped) удаляются из реестра
430
+ ```
431
+
432
+ ### Правила изоляции воркеров
433
+
434
+ | Разрешено | Запрещено |
435
+ |-----------|-----------|
436
+ | Читать любые файлы проекта | Модифицировать файлы в researches/ |
437
+ | Писать в {worker_dir}/output/ | Модифицировать файлы в features/ |
438
+ | Обновлять свой status.json | Модифицировать .claude/ (commands, rules, skills) |
439
+ | | Модифицировать root-level файлы (CLAUDE.md и т.д.) |
440
+ | | Порождать суб-агентов |
441
+
442
+ ---
443
+
444
+ ## 7. Сценарий: Witness Chain верификация
445
+
446
+ Witness Chain обеспечивает целостность артефактов через цепочку SHA-256 хешей. Каждый хеш артефакта включает хеш предыдущего, делая цепочку tamper-evident.
447
+
448
+ ### Пошаговый поток верификации
449
+
450
+ **Шаг 1. Загрузка цепочки**
451
+ ```
452
+ 1. Прочитать .witness-chain.json из директории проекта
453
+ 2. Если файл не найден -> отчёт: NOT_FOUND
454
+ 3. Извлечь массив chain[] из JSON
455
+ ```
456
+
457
+ **Шаг 2. Проверка каждой записи**
458
+ ```
459
+ Для каждой записи chain[i] (i = 0, 1, ..., N-1):
460
+ 1. Прочитать файл артефакта (chain[i].artifact)
461
+ - Если файл не найден -> записать MISSING_ARTIFACT
462
+ 2. Определить previous_hash:
463
+ - Если i == 0: previous_hash = NULL_HASH (64 нуля)
464
+ - Иначе: previous_hash = chain[i-1].hash
465
+ 3. Вычислить expected = SHA-256(file_content + previous_hash)
466
+ 4. Сравнить expected с chain[i].hash
467
+ - Совпадает -> VALID
468
+ - Не совпадает -> BROKEN_LINK
469
+ 5. Проверить монотонность timestamp (каждый >= предыдущего)
470
+ 6. Проверить монотонность sequence (строго возрастает)
471
+ ```
472
+
473
+ **Шаг 3. Формирование отчёта**
474
+ ```
475
+ Если все записи VALID:
476
+ "Chain integrity: OK ({N} records verified)"
477
+
478
+ Если обнаружены BROKEN_LINK:
479
+ "Chain integrity: BROKEN at record {i}"
480
+ " Artifact: {filename}"
481
+ " Expected: sha256:{expected}"
482
+ " Stored: sha256:{stored}"
483
+ " Possible cause: artifact modified after checkpoint"
484
+ ```
485
+
486
+ **Шаг 4. Chain repair (при легитимной правке)**
487
+ ```
488
+ Если артефакт был изменён по запросу пользователя (feedback на checkpoint):
489
+ 1. Пересчитать хеш модифицированного артефакта с тем же previous_hash
490
+ 2. Обновить hash записи в .witness-chain.json
491
+ 3. КАСКАД: пересчитать ВСЕ последующие записи
492
+ 4. Обновить last_updated
493
+ 5. Записать в массив chain_repairs:
494
+ { "repaired_at": "...", "sequence": i, "reason": "User feedback" }
495
+ ```
496
+
497
+ ### Специальные случаи
498
+
499
+ | Ситуация | Поведение |
500
+ |----------|-----------|
501
+ | sha256sum недоступна | WARN, не блокировать пайплайн |
502
+ | Банковский домен + ошибка chain | Эскалация WARNING на checkpoint (ФЗ-152) |
503
+ | Feature ADR пайплайн | Witness chain не требуется |
504
+ | Genesis record (первый артефакт) | previous_hash = NULL_HASH |
505
+
506
+ ---
507
+
508
+ ## 8. Сценарий: Промоция скилла (Tier 0 -> Tier 3)
509
+
510
+ Система доверия из 4 уровней определяет надёжность скилла. Каждый переход требует выполнения конкретных условий.
511
+
512
+ ### Переход Tier 0 -> Tier 1 (Advisory -> Structured)
513
+
514
+ ```
515
+ Требования:
516
+ 1. SKILL.md содержит полную документацию (не заглушка)
517
+ 2. Хотя бы ОДНО из:
518
+ - references/ с 2+ файлами
519
+ - modules/ с подкомпонентами
520
+ - Документированный формат вывода (JSON schema / шаблон)
521
+
522
+ Процесс:
523
+ 1. Ревью SKILL.md на полноту
524
+ 2. Проверить наличие вспомогательных материалов
525
+ 3. Обновить метаданные: trust_tier: 1, trust_tier_label: "Structured"
526
+
527
+ Формальная оценка НЕ требуется -- это структурная проверка.
528
+ ```
529
+
530
+ ### Переход Tier 1 -> Tier 2 (Structured -> Validated)
531
+
532
+ ```
533
+ Требования:
534
+ 1. Все требования Tier 1 выполнены
535
+ 2. Панель из 3 судей (мульти-агентная оценка)
536
+ 3. Средний взвешенный балл >= 7.0
537
+ 4. Ни один судья не поставил < 5.0
538
+
539
+ Процесс:
540
+ 1. Отправить скилл на мульти-агентную оценку (см. раздел 4)
541
+ 2. Панель из 3 судей (sonnet):
542
+ - Domain Expert (0.4): доменная точность и глубина
543
+ - Critic (0.3): слабые места и edge cases
544
+ - Completeness Auditor (0.3): структурная полнота
545
+ 3. Вычислить weighted average
546
+ 4. Если score >= 7.0:
547
+ - Обновить: trust_tier: 2, bto_score: {score}, bto_date: "{date}"
548
+ - Записать полные результаты оценки
549
+ 5. Если score < 7.0:
550
+ - Предоставить фидбек от судей для улучшения
551
+ - Скилл остаётся на Tier 1
552
+ - Повторная оценка возможна после доработки
553
+ ```
554
+
555
+ ### Переход Tier 2 -> Tier 3 (Validated -> Verified)
556
+
557
+ ```
558
+ Требования:
559
+ 1. Все требования Tier 2 выполнены
560
+ 2. Панельная оценка >= 8.5
561
+ 3. Набор детерминистических eval-тестов (минимум 5)
562
+ 4. Все eval-тесты проходят стабильно
563
+
564
+ Процесс:
565
+ 1. Создать eval test suite:
566
+ - Определить тест-кейсы с известными входными и ожидаемыми выходными данными
567
+ - Тесты детерминистичны (один вход -> один результат pass/fail)
568
+ - Минимум 5 тест-кейсов
569
+ 2. Запустить eval-тесты, убедиться что все проходят
570
+ 3. Пройти панельную оценку с баллом >= 8.5
571
+ 4. Обновить: trust_tier: 3, eval_tests: {count}, eval_tests_passing: {count}
572
+ ```
573
+
574
+ ### Демоция
575
+
576
+ | Событие | Переход | Причина |
577
+ |---------|---------|---------|
578
+ | Eval-тесты начинают падать | Tier 3 -> Tier 2 | Регрессия функциональности |
579
+ | Балл при переоценке < 7.0 | Tier 2 -> Tier 1 | Деградация качества |
580
+ | Удалены вспомогательные материалы | Tier 1 -> Tier 0 | Утрата структуры |
581
+
582
+ ---
583
+
584
+ ## 9. Сценарий: Создание пайплайна с нуля
585
+
586
+ Полный walkthrough для построения собственного 4-стадийного мульти-агентного пайплайна на базе keysarium-core.
587
+
588
+ ### Шаг 1. Определение стадий и временных бюджетов
589
+
590
+ ```
591
+ Пример: пайплайн для технического аудита
592
+
593
+ | Стадия | Название | Бюджет | Описание |
594
+ |----------|-----------------|--------|-----------------------------------|
595
+ | stage-0 | Scope | 15% | Определение области аудита |
596
+ | stage-1 | Investigation | 35% | Техническое исследование |
597
+ | stage-2 | Assessment | 30% | Оценка и рекомендации |
598
+ | stage-3 | Report | 20% | Финальный отчёт |
599
+ ```
600
+
601
+ ### Шаг 2. Написание конституции (инварианты)
602
+
603
+ Создать `governance/constitution.md`:
604
+
605
+ ```markdown
606
+ ### INV-001: Artifact Integrity
607
+ Rule: Каждый артефакт стадии проверяется через witness chain hash.
608
+ Enforcement: SHA-256 проверка на каждом checkpoint.
609
+ On violation: HALT
610
+
611
+ ### INV-002: Stage Completion Signal
612
+ Rule: Стадия не завершена без promise tag.
613
+ On violation: HALT
614
+
615
+ ### INV-003: Human Checkpoint Required
616
+ Rule: Автоматический переход между стадиями запрещён.
617
+ On violation: HALT
618
+
619
+ ### INV-100: No Production Data in Report (доменный)
620
+ Rule: Отчёт не содержит production credentials или PII.
621
+ On violation: HALT
622
+ ```
623
+
624
+ ### Шаг 3. Создание governance shards
625
+
626
+ Для каждой стадии создать shard:
627
+
628
+ ```markdown
629
+ # Shard: stage-0-scope
630
+
631
+ time_budget_pct: 15
632
+ skill: scope-analyzer
633
+ prerequisites: none
634
+ quality_gates:
635
+ - scope document created
636
+ - domain identified
637
+ promise_tag: AUDIT_SCOPE_DEFINED
638
+ ```
639
+
640
+ ### Шаг 4. Настройка памяти
641
+
642
+ Создать `{memory-root}/config.json`:
643
+
644
+ ```json
645
+ {
646
+ "version": "1.0",
647
+ "retention_days": 90,
648
+ "max_results_per_query": 10,
649
+ "enabled": true,
650
+ "known_domains": ["infrastructure", "security", "performance"],
651
+ "reward_levels": {
652
+ "excellent": 1.0,
653
+ "good": 0.7,
654
+ "needs_work": 0.3,
655
+ "failed": 0.0
656
+ }
657
+ }
658
+ ```
659
+
660
+ ### Шаг 5. Выбор топологий для каждой стадии
661
+
662
+ | Стадия | Топология | Агенты | Модель | Обоснование |
663
+ |--------|-----------|--------|--------|-------------|
664
+ | stage-0 | Single | 1 | sonnet | Линейная задача, не нужен параллелизм |
665
+ | stage-1 | Star | 3 | sonnet | 3 независимых направления исследования |
666
+ | stage-2 | Ring | 2 | opus | Итеративная оценка: draft -> review |
667
+ | stage-3 | Single | 1 | opus | Творческая генерация финального отчёта |
668
+
669
+ ### Шаг 6. Настройка маршрутизации моделей
670
+
671
+ ```markdown
672
+ | Задача | Tier | Модель | Обоснование |
673
+ |-------------------------------|------|--------|--------------------------------|
674
+ | Scope analysis | 2 | sonnet | Аналитическая работа |
675
+ | Investigation agents | 2 | sonnet | Исследовательский синтез |
676
+ | Assessment draft | 3 | opus | Сложная оценка |
677
+ | Assessment review | 3 | opus | Экспертная ревизия |
678
+ | Report generation | 3 | opus | Творческая генерация |
679
+ | File formatting, slug gen | 1 | haiku | Простые трансформации |
680
+ ```
681
+
682
+ ### Шаг 7. Первое выполнение
683
+
684
+ ```
685
+ 1. Запустить Queen Coordinator с входными данными
686
+ 2. Координатор проходит все 10 шагов (INIT -> REPORT)
687
+ 3. На каждом checkpoint -- подтверждение пользователя
688
+ 4. После завершения -- ревью артефактов и таймингов
689
+ ```
690
+
691
+ ### Шаг 8. Ревью learning stats
692
+
693
+ ```
694
+ После первого выполнения:
695
+ 1. Проверить .keysarium/memory/{domain}/ -- reward записи созданы
696
+ 2. Просмотреть reward для каждой стадии
697
+ 3. Если reward < 0.7 для стадии -- проанализировать и скорректировать shard
698
+ 4. После 3+ выполнений -- запустить Dream Cycle для паттернов
699
+ 5. Использовать инсайты для итеративного улучшения пайплайна
700
+ ```
701
+
702
+ ---
703
+
704
+ ## 10. Диаграммы потоков
705
+
706
+ ### Диаграмма: Queen Coordinator -- полный жизненный цикл
707
+
708
+ ```mermaid
709
+ flowchart TD
710
+ START([Вход: данные проекта]) --> INIT["1. INIT<br/>Создать директорию проекта"]
711
+ INIT --> HEALTH{"2. HEALTH<br/>Ресурсы доступны?"}
712
+ HEALTH -->|Все на месте| LOAD["3. LOAD<br/>memory_query() + dream insights + brain"]
713
+ HEALTH -->|Критический ресурс<br/>отсутствует| ABORT([ABORT])
714
+ LOAD --> DETECT["4. DETECT<br/>Классификация домена"]
715
+ DETECT --> STAGE_LOOP
716
+
717
+ subgraph STAGE_LOOP["Цикл по стадиям"]
718
+ SHARD["5. SHARD<br/>Загрузить governance shard"] --> UP_CHECK{"Upstream<br/>promise OK?"}
719
+ UP_CHECK -->|Да| ORCH["6. ORCHESTRATE<br/>Выбрать топологию, запустить агентов"]
720
+ UP_CHECK -->|Нет| BACK_TO_PREV["Вернуться к<br/>незавершённой стадии"]
721
+ ORCH --> MONITOR["7. MONITOR<br/>Checkpoint"]
722
+ MONITOR --> USER_RESP{"Ответ пользователя"}
723
+ USER_RESP -->|"ok"| REWARD_OK["reward = 1.0<br/>emit promise"]
724
+ USER_RESP -->|"углуби X"| REWARD_GOOD["reward = 0.7<br/>доработать"]
725
+ USER_RESP -->|"переделай"| REWARD_FAIL["reward = 0.0<br/>перезапуск стадии"]
726
+ REWARD_GOOD --> MONITOR
727
+ REWARD_FAIL --> SHARD
728
+ REWARD_OK --> NEXT{"Есть ещё стадии?"}
729
+ NEXT -->|Да| SHARD
730
+ end
731
+
732
+ NEXT -->|Нет| COLLECT["8. COLLECT<br/>Собрать артефакты"]
733
+ COLLECT --> MISSING{"Обязательные<br/>артефакты есть?"}
734
+ MISSING -->|Да| STORE["9. STORE<br/>memory_store() + trigger update"]
735
+ MISSING -->|Нет| HALT([HALT: артефакт отсутствует])
736
+ STORE --> REPORT["10. REPORT<br/>Финальная сводка"]
737
+ REPORT --> FINISH([Завершение])
738
+ ```
739
+
740
+ ### Диаграмма: Judge Panel -- мульти-агентная оценка
741
+
742
+ ```mermaid
743
+ flowchart TD
744
+ START([Артефакт для оценки]) --> HASH["Вычислить<br/>artifact_hash"]
745
+ HASH --> SPAWN["Породить 3 судей<br/>(Star, isolated)"]
746
+
747
+ SPAWN --> J1["Judge 1: Domain Expert<br/>(sonnet, вес 0.4)"]
748
+ SPAWN --> J2["Judge 2: Critic<br/>(sonnet, вес 0.3)"]
749
+ SPAWN --> J3["Judge 3: Auditor<br/>(sonnet, вес 0.3)"]
750
+
751
+ J1 --> COLLECT["Собрать оценки"]
752
+ J2 --> COLLECT
753
+ J3 --> COLLECT
754
+
755
+ COLLECT --> DISAGREE{"max - min > 3?"}
756
+ DISAGREE -->|Нет| WEIGHTED["Вычислить<br/>weighted average"]
757
+ DISAGREE -->|Да| VERIFY{"Изоляция<br/>подтверждена?"}
758
+ VERIFY -->|Да| META["Мета-судья<br/>(sonnet)"]
759
+ VERIFY -->|Нет| COLLAPSE([Conformity collapse<br/>WARNING])
760
+ META --> WEIGHTED
761
+
762
+ WEIGHTED --> ATTEST["Создать<br/>.judge-attestations.json"]
763
+ ATTEST --> THRESHOLD{"Score >= 7.0?"}
764
+ THRESHOLD -->|Да| PASS([Оценка пройдена])
765
+ THRESHOLD -->|Нет| FEEDBACK([Фидбек для улучшения])
766
+ ```
767
+
768
+ ### Диаграмма: Dream Cycle
769
+
770
+ ```mermaid
771
+ flowchart TD
772
+ START([Запрос /dream run]) --> TRIGGER["Проверить триггеры:<br/>time / volume / event"]
773
+ TRIGGER --> FIRED{"Триггер<br/>сработал?"}
774
+ FIRED -->|Нет| SKIP([Нет необходимости,<br/>пропуск])
775
+ FIRED -->|Да| CONFIRM{"Пользователь<br/>подтвердил?"}
776
+ CONFIRM -->|Нет| SKIP
777
+ CONFIRM -->|Да| DATA["Загрузить reward записи<br/>(top 200)"]
778
+
779
+ DATA --> ENOUGH{">= 5 записей?"}
780
+ ENOUGH -->|Нет| INSUFFICIENT([insufficient_data])
781
+ ENOUGH -->|Да| GRAPH["Построить concept graph:<br/>nodes + edges"]
782
+
783
+ GRAPH --> ASSOC["Обнаружить ассоциации:<br/>4 типа"]
784
+ ASSOC --> INSIGHTS["Сгенерировать инсайты<br/>(top 20, sorted by rank)"]
785
+ INSIGHTS --> STORE["Записать dream result<br/>dream-{timestamp}.json"]
786
+ STORE --> RETAIN{"Файлов > 10?"}
787
+ RETAIN -->|Да| PURGE["Удалить старейшие"]
788
+ RETAIN -->|Нет| RESET
789
+ PURGE --> RESET["Сбросить триггеры:<br/>records = 0, events = []"]
790
+ RESET --> DONE([Dream cycle завершён])
791
+ ```
792
+
793
+ ### Диаграмма: Промоция скилла
794
+
795
+ ```mermaid
796
+ flowchart LR
797
+ T0["Tier 0<br/>Advisory"] -->|"+ references/<br/>или modules/"| T1["Tier 1<br/>Structured"]
798
+ T1 -->|"Panel score<br/>>= 7.0"| T2["Tier 2<br/>Validated"]
799
+ T2 -->|"Eval tests +<br/>score >= 8.5"| T3["Tier 3<br/>Verified"]
800
+
801
+ T3 -.->|"Eval tests<br/>падают"| T2
802
+ T2 -.->|"Score < 7.0<br/>при переоценке"| T1
803
+ T1 -.->|"Материалы<br/>удалены"| T0
804
+ ```