$npx -y skills add TserenTserenov/FMT-exocortex-template --skill apply-capturesРазбор extraction-reports со status pending-review — решение R15 (accept/reject/defer) ЖИВЫМ ПИЛОТОМ, запись в Pack, обновление статуса, коммит. Вызывать при Close при наличии N>0 pending-review отчётов.
| 1 | # /apply-captures — разбор кандидатов экстрактора |
| 2 | |
| 3 | Полная ВДВ-карта цикла: `${IWE_GOVERNANCE_REPO:-DS-strategy}/inbox/WP-247-ke-pipeline-vdv.md` |
| 4 | Контракт скилла взят из шагов 5, 6, 6.5, 7 этой карты. |
| 5 | |
| 6 | ## When to use |
| 7 | |
| 8 | ### Scope |
| 9 | |
| 10 | **Этот скилл делает:** |
| 11 | - Читает `${IWE_GOVERNANCE_REPO:-DS-strategy}/inbox/extraction-reports/*.md` со `status: pending-review` или `status: deferred`. |
| 12 | - Для каждого кандидата в отчёте — запрашивает решение R15 (accept / reject / defer). |
| 13 | - Accept → опциональная редактура → валидация → запись файла в Pack → обновление MAP → коммит. |
| 14 | - Reject → запись причины + паттерна в `feedback-log.md`. |
| 15 | - Defer → запись причины + `defer_until` в отчёт. |
| 16 | - Обновляет `status` отчёта на `applied` / `partially-applied` / `rejected` / `deferred`. |
| 17 | |
| 18 | **Этот скилл НЕ делает:** |
| 19 | - Не запускает агента R2 (экстрактор) — это `/ke` и launchd `extractor.sh`. |
| 20 | - Не создаёт extraction-reports — это R2. |
| 21 | - Не редактирует содержимое captures.md / fleeting-notes.md. |
| 22 | |
| 23 | ### ВДВ-контракт (шаги 5–7 из ke-pipeline-vdv.md) |
| 24 | |
| 25 | ``` |
| 26 | Вход: ${IWE_GOVERNANCE_REPO:-DS-strategy}/inbox/extraction-reports/*.md со status: pending-review |
| 27 | Роль: R15 Валидатор (accept/reject/defer) |
| 28 | R4 Автор (conditional: редактура при edits_needed: yes) |
| 29 | Скилл (автоматика записи, валидации, коммита) |
| 30 | Действие: |
| 31 | Для каждого pending-review отчёта, для каждого кандидата: |
| 32 | 1. Показать кандидата (id, тип, предложенный target_path, текст). |
| 33 | 2. Запросить решение R15 по схеме ниже. |
| 34 | 3. Accept + edits_needed=yes → R4 редактирует текст. |
| 35 | 4. Шаг 6.5: валидация Pack-сущности (frontmatter, уникальность ID, путь). |
| 36 | 5. Accept + valid → записать файл в Pack, обновить MAP, дописать feedback-log (паттерн), коммит. |
| 37 | 6. Reject → записать в feedback-log причину + паттерн. |
| 38 | 7. Defer → записать defer_reason + defer_until в отчёт. |
| 39 | Обновить status отчёта по итогам. |
| 40 | Выход: |
| 41 | - Обновлённый Pack (новые файлы сущностей). |
| 42 | - Обновлённый ${IWE_GOVERNANCE_REPO:-DS-strategy}/inbox/feedback-log.md (reject-паттерны). |
| 43 | - Отчёт со финальным status (applied / partially-applied / rejected / deferred). |
| 44 | - Коммит в PACK-* (при accept). |
| 45 | ``` |
| 46 | |
| 47 | ## Algorithm |
| 48 | |
| 49 | ### R15 = живой пилот, не агент (БЛОКИРУЮЩЕЕ, peer-session 2026-07-07-03) |
| 50 | |
| 51 | > **Инвариант:** решение accept/reject/defer по каждому кандидату принимает человек, управляющий текущей сессией — не другой агент, не сам исполняющий скилл агент, не автоматически принятый вердикт R2 (экстрактора). Это не рекомендация — источник: `DP.ROLE.001` (держатель роли R15 — пользователь), `DP.SC.040` («финальное утверждение — за человеком... полная автоматизация не работает», со ссылкой на SOTA-провал automated rule generation, accuracy <10%). |
| 52 | |
| 53 | **Запрещено:** |
| 54 | - Подменять решение пилота консенсусом двух агентов внутри пир-сессии (`peer-conversation`/`kimi-peer-writer`) — согласие Kimi и Claude между собой НЕ есть решение R15, независимо от качества их аргументации. |
| 55 | - Автоматически принимать вердикт R2 («Вердикт: accept» в отчёте) как решение R15 без факта вопроса живому пилоту — даже когда обоснование R2 выглядит убедительно. |
| 56 | - Присваивать агенту роль `R15-*` в `meta.yaml`/frontmatter сессии — роль R15 не переносится на агента ни при каких обстоятельствах. |
| 57 | |
| 58 | **Если apply-captures вызван внутри пир-сессии** (оба участника — агенты): пир-сессия может готовить кандидатов, проверять дубли/семантику/размещение, спорить о деталях — но на этом шаге обязана остановиться и передать вопрос пилоту напрямую, в текущем интерактивном чате с ним (не через turn-файл диалога с другим агентом), прежде чем зафиксировать решение по любому кандидату. |
| 59 | |
| 60 | **Найдено при аудите (2026-07-07):** минимум 4 исторические сессии (`2026-05-24-apply-captures-bulk-review`, `2026-06-11-02-ke-candidates-review-pack`, `2026-06-26-14-apply-captures-r15`, `2026-06-28-09-peer-apply-captures-dp`) зафиксировали решения по 90+ кандидатам целиком внутри диалога Kimi↔Claude, без единой реплики пилота. Полный разбор → `${IWE_GOVERNANCE_REPO:-DS-strategy}/inbox/bugs/bug-2026-07-07-r15-decisions-bypassed-pilot.md`. |
| 61 | |
| 62 | ### Формат решения R15 |
| 63 | |
| 64 | Каждый кандидат — структурированное решение: |
| 65 | |
| 66 | ```yaml |
| 67 | candidate_id: 3 |
| 68 | decision: accept # accept | reject | defer |
| 69 | decision_source: pilot # ОБЯЗАТЕЛЬНО — единственное валидное значение. Заполняется только по факту прямого вопроса пилоту (см. блок выше). |
| 70 | # --- при accept --- |
| 71 | edits_needed: no |