$npx -y skills add TserenTserenov/FMT-exocortex-template --skill audit-installationАудит пользовательской инсталляции IWE. Запускает scripts/iwe-audit.sh + MCP healthcheck + smoke-test ритуала через sentinel-механику (контракт dry-run-contract.md), передаёт отчёт subagent'у в роли VR.R.002 Аудитор (context isolation) → verdict ✅/⚠️/❌ по 6 компонентам (Inventory
| 1 | # Аудит инсталляции IWE |
| 2 | |
| 3 | > **Service Clause:** [VR.SC.005-installation-audit](https://github.com/{{GITHUB_USER}}/PACK-verification/blob/main/pack/verification/08-service-clauses/VR.SC.005-installation-audit.md) |
| 4 | > **Роль:** VR.R.002 Аудитор (PACK-verification) — субагент с context isolation |
| 5 | > **Принцип:** детектор отчитывается, оператор делает (см. `scripts/iwe-drift.sh:7-11`). Auto-fix не входит в обещание. |
| 6 | |
| 7 | Аргументы: $ARGUMENTS |
| 8 | |
| 9 | ## When to use |
| 10 | |
| 11 | Аудит пользовательской инсталляции IWE. Запускает scripts/iwe-audit.sh + MCP healthcheck + smoke-test ритуала через sentinel-механику (контракт dry-run-contract.md), передаёт отчёт subagent'у в роли VR.R.002 Аудитор (context isolation) → verdict ✅/⚠️/❌ по 6 компонентам (Inventory, L1 drift, DS-strategy, L3 customizations, MCP, ритуал). Используй после restore из бэкапа, после update.sh, или при еженедельной сверке. |
| 12 | |
| 13 | ## Обещание |
| 14 | |
| 15 | За ≤5 минут — markdown-отчёт ✅/⚠️/❌ по 6 компонентам инсталляции: |
| 16 | 1. **Inventory** — все ли критичные L1-файлы (CLAUDE.md, скиллы, протоколы) на месте |
| 17 | 2. **L1 drift** — расхождения с FMT-exocortex-template |
| 18 | 3. **DS-strategy** — git status + diff с FMT-strategy-template |
| 19 | 4. **L3 customizations** — extensions/, отличия params.yaml от skeleton, AUTHOR-ONLY зоны |
| 20 | 5. **MCP healthcheck** — 4 tools отвечают (с уважением к подписочному гейтингу DP.SC.112) |
| 21 | 6. **Ритуал smoke-test** — `/run-protocol close day` запускается под sentinel-защитой, доходит до write-шагов (см. `memory/dry-run-contract.md`) |
| 22 | |
| 23 | Verdict выносит subagent в роли Аудитора, читая отчёт **без знаний о текущей сессии** (context isolation). |
| 24 | |
| 25 | ## Шаг 1. Детерминированные проверки (bash) |
| 26 | |
| 27 | Найти и запустить `iwe-audit.sh` через fallback-цепочку (author-mode → workspace, user-mode → `$IWE_SCRIPTS` из `~/.iwe-paths`): |
| 28 | |
| 29 | ```bash |
| 30 | if [ -f "$HOME/IWE/scripts/iwe-audit.sh" ]; then |
| 31 | AUDIT_SCRIPT="$HOME/IWE/scripts/iwe-audit.sh" |
| 32 | elif [ -n "${IWE_SCRIPTS:-}" ] && [ -f "$IWE_SCRIPTS/iwe-audit.sh" ]; then |
| 33 | AUDIT_SCRIPT="$IWE_SCRIPTS/iwe-audit.sh" |
| 34 | else |
| 35 | echo "iwe-audit.sh не найден. Если \$IWE_SCRIPTS не выставлен — выполни 'source \$HOME/.iwe-paths' (или перезапусти shell), затем повтори. Если файла .iwe-paths нет — запусти setup.sh из FMT-шаблона." |
| 36 | exit 1 |
| 37 | fi |
| 38 | bash "$AUDIT_SCRIPT" $([ "${ARGUMENTS:-}" = "--critical" ] && echo "--critical") |
| 39 | ``` |
| 40 | |
| 41 | Сохранить вывод в переменную `bash_report`. Проверить exit code: |
| 42 | - 0 → bash-часть ✅ |
| 43 | - 1 → warnings (отметить, продолжать) |
| 44 | - 2 → critical gaps в bash-проверках (отметить, продолжать — Аудитор оценит совокупно с MCP) |
| 45 | |
| 46 | Скрипт покрывает разделы 1-3 отчёта (Inventory, L1 drift, DS-strategy). |
| 47 | |
| 48 | ## Шаг 2. MCP healthcheck (если не `--skip-mcp`) |
| 49 | |
| 50 | Параллельно вызвать 4 MCP tool'а с минимальной нагрузкой, замерить латентность: |
| 51 | |
| 52 | | Tool | Параметры | Уровень | Что считаем | |
| 53 | |------|-----------|---------|-------------| |
| 54 | | `mcp__claude_ai_IWE__knowledge_search` | `query: "test"`, `limit: 1` | бесплатный | ✅ если ответ <15s | |
| 55 | | `mcp__claude_ai_IWE__github_status` | (без параметров) | бесплатный | ✅ если ответ | |
| 56 | | `mcp__claude_ai_IWE__personal_search` | `query: "ping"`, `limit: 1` | **подписочный** | ✅ если ответ; **403/subscription_required → ⏸️** (не считать failure) | |
| 57 | | `mcp__claude_ai_IWE__dt_read_digital_twin` | `path: "1_declarative"` | **подписочный** | ✅ если ответ; **403/subscription_required → ⏸️** (не считать failure) | |
| 58 | |
| 59 | **Подписочное гейтование (DP.SC.112).** `personal_*` и `dt_*` требуют активной БР в `subscription_grants`. Без подписки — это **не сбой инсталляции**, а ожидаемый отказ. Помечать как ⏸️ subscription_required, не ❌. Coverage считать только по доступным для пользователя tool'ам. |
| 60 | |
| 61 | Сформировать markdown-секцию `## 4. MCP healthcheck`: |
| 62 | |
| 63 | ```markdown |
| 64 | ## Algorithm |
| 65 | |
| 66 | ## 4. MCP healthcheck |
| 67 | |
| 68 | | Tool | Статус | Латентность | Примечание | |
| 69 | |------|--------|-------------|------------| |
| 70 | | personal_search | ✅/❌ | Nms | ... | |
| 71 | | knowledge_search | ✅/❌ | Nms | ... | |
| 72 | | github_status | ✅/❌ | Nms | ... | |
| 73 | | dt_read_digital_twin | ✅/❌ | Nms | ... | |
| 74 | |
| 75 | Coverage: N/4 |
| 76 | ``` |
| 77 | |
| 78 | Если `--skip-mcp` → секция «⏸️ MCP healthcheck — пропущен по флагу». |
| 79 | |
| 80 | ## Шаг 2.5. Smoke-test ритуала (sentinel + subagent) |
| 81 | |
| 82 | > **Контракт:** [memory/dry-run-contract.md](../../.. |