{"slug":"audit-installation","title":"audit-installation","summary":"Аудит пользовательской инсталляции IWE. Запускает scripts/iwe-audit.sh + MCP healthcheck + smoke-test ритуала через sentinel-механику (контракт dry-run-contract.md), передаёт отчёт subagent'у в роли VR.R.002 Аудитор (context isolation) → verdict ✅/⚠️/❌ по 6 компонентам (Inventory","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-08-27T16:56:14.883511Z","repo":{"url":"https://github.com/TserenTserenov/FMT-exocortex-template","stars":60,"forks":152,"license":"MIT","updatedAt":"2026-09-24T08:59:39Z"},"bodyHtml":"<hr>\n<h2>name: audit-installation\ndescription: Аудит пользовательской инсталляции 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, или при еженедельной сверке.\nargument-hint: \"[--skip-mcp] [--critical]\"\nversion: 1.0.0\nlayer: L1\nstatus: active\ntriggers:\nslash: [/audit-installation]\nphrases: []\nrouting:\nexecutor: haiku\ndeterministic: false\nagents: single\ninteraction: multi-step\ngates_required: []\ngates_enforced: []\ngates_rationale: \"операционный скилл; WP Gate применим только при создании нового РП, не для операционных вызовов\"</h2>\n<h1>Аудит инсталляции IWE</h1>\n<blockquote>\n<p><strong>Service Clause:</strong> <a href=\"https://github.com/%7B%7BGITHUB_USER%7D%7D/PACK-verification/blob/main/pack/verification/08-service-clauses/VR.SC.005-installation-audit.md\">VR.SC.005-installation-audit</a>\n<strong>Роль:</strong> VR.R.002 Аудитор (PACK-verification) — субагент с context isolation\n<strong>Принцип:</strong> детектор отчитывается, оператор делает (см. <code>scripts/iwe-drift.sh:7-11</code>). Auto-fix не входит в обещание.</p>\n</blockquote>\n<p>Аргументы: $ARGUMENTS</p>\n<h2>When to use</h2>\n<p>Аудит пользовательской инсталляции 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, или при еженедельной сверке.</p>\n<h2>Обещание</h2>\n<p>За ≤5 минут — markdown-отчёт ✅/⚠️/❌ по 6 компонентам инсталляции:</p>\n<ol>\n<li><strong>Inventory</strong> — все ли критичные L1-файлы (CLAUDE.md, скиллы, протоколы) на месте</li>\n<li><strong>L1 drift</strong> — расхождения с FMT-exocortex-template</li>\n<li><strong>DS-strategy</strong> — git status + diff с FMT-strategy-template</li>\n<li><strong>L3 customizations</strong> — extensions/, отличия params.yaml от skeleton, AUTHOR-ONLY зоны</li>\n<li><strong>MCP healthcheck</strong> — 4 tools отвечают (с уважением к подписочному гейтингу DP.SC.112)</li>\n<li><strong>Ритуал smoke-test</strong> — <code>/run-protocol close day</code> запускается под sentinel-защитой, доходит до write-шагов (см. <code>memory/dry-run-contract.md</code>)</li>\n</ol>\n<p>Verdict выносит subagent в роли Аудитора, читая отчёт <strong>без знаний о текущей сессии</strong> (context isolation).</p>\n<h2>Шаг 1. Детерминированные проверки (bash)</h2>\n<p>Найти и запустить <code>iwe-audit.sh</code> через fallback-цепочку (author-mode → workspace, user-mode → <code>$IWE_SCRIPTS</code> из <code>~/.iwe-paths</code>):</p>\n<pre><code>if [ -f \"$HOME/IWE/scripts/iwe-audit.sh\" ]; then\n    AUDIT_SCRIPT=\"$HOME/IWE/scripts/iwe-audit.sh\"\nelif [ -n \"${IWE_SCRIPTS:-}\" ] &amp;&amp; [ -f \"$IWE_SCRIPTS/iwe-audit.sh\" ]; then\n    AUDIT_SCRIPT=\"$IWE_SCRIPTS/iwe-audit.sh\"\nelse\n    echo \"iwe-audit.sh не найден. Если \\$IWE_SCRIPTS не выставлен — выполни 'source \\$HOME/.iwe-paths' (или перезапусти shell), затем повтори. Если файла .iwe-paths нет — запусти setup.sh из FMT-шаблона.\"\n    exit 1\nfi\nbash \"$AUDIT_SCRIPT\" $([ \"${ARGUMENTS:-}\" = \"--critical\" ] &amp;&amp; echo \"--critical\")\n</code></pre>\n<p>Сохранить вывод в переменную <code>bash_report</code>. Проверить exit code:</p>\n<ul>\n<li>0 → bash-часть ✅</li>\n<li>1 → warnings (отметить, продолжать)</li>\n<li>2 → critical gaps в bash-проверках (отметить, продолжать — Аудитор оценит совокупно с MCP)</li>\n</ul>\n<p>Скрипт покрывает разделы 1-3 отчёта (Inventory, L1 drift, DS-strategy).</p>\n<h2>Шаг 2. MCP healthcheck (если не <code>--skip-mcp</code>)</h2>\n<p>Параллельно вызвать 4 MCP tool'а с минимальной нагрузкой, замерить латентность:</p>\n<table>\n<thead>\n<tr>\n<th>Tool</th>\n<th>Параметры</th>\n<th>Уровень</th>\n<th>Что считаем</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>mcp__claude_ai_IWE__knowledge_search</code></td>\n<td><code>query: \"test\"</code>, <code>limit: 1</code></td>\n<td>бесплатный</td>\n<td>✅ если ответ &lt;15s</td>\n</tr>\n<tr>\n<td><code>mcp__claude_ai_IWE__github_status</code></td>\n<td>(без параметров)</td>\n<td>бесплатный</td>\n<td>✅ если ответ</td>\n</tr>\n<tr>\n<td><code>mcp__claude_ai_IWE__personal_search</code></td>\n<td><code>query: \"ping\"</code>, <code>limit: 1</code></td>\n<td><strong>подписочный</strong></td>\n<td>✅ если ответ; <strong>403/subscription_required → ⏸️</strong> (не считать failure)</td>\n</tr>\n<tr>\n<td><code>mcp__claude_ai_IWE__dt_read_digital_twin</code></td>\n<td><code>path: \"1_declarative\"</code></td>\n<td><strong>подписочный</strong></td>\n<td>✅ если ответ; <strong>403/subscription_required → ⏸️</strong> (не считать failure)</td>\n</tr>\n</tbody>\n</table>\n<p><strong>Подписочное гейтование (DP.SC.112).</strong> <code>personal_*</code> и <code>dt_*</code> требуют активной БР в <code>subscription_grants</code>. Без подписки — это <strong>не сбой инсталляции</strong>, а ожидаемый отказ. Помечать как ⏸️ subscription_required, не ❌. Coverage считать только по доступным для пользователя tool'ам.</p>\n<p>Сформировать markdown-секцию <code>## 4. MCP healthcheck</code>:</p>\n<pre><code>## Algorithm\n\n## 4. MCP healthcheck\n\n| Tool | Статус | Латентность | Примечание |\n|------|--------|-------------|------------|\n| personal_search | ✅/❌ | Nms | ... |\n| knowledge_search | ✅/❌ | Nms | ... |\n| github_status | ✅/❌ | Nms | ... |\n| dt_read_digital_twin | ✅/❌ | Nms | ... |\n\nCoverage: N/4\n</code></pre>\n<p>Если <code>--skip-mcp</code> → секция «⏸️ MCP healthcheck — пропущен по флагу».</p>\n<h2>Шаг 2.5. Smoke-test ритуала (sentinel + subagent)</h2>\n<blockquote>\n<p><strong>Контракт:</strong> <a href=\"../../../memory/dry-run-contract.md\">memory/dry-run-contract.md</a>. Защита через sentinel-файл + PreToolUse-хук <code>dry-run-gate.sh</code>.</p>\n</blockquote>\n<h3>Алгоритм</h3>\n<ol>\n<li><p><strong>Создать sentinel</strong> (единое имя для gate + capability владельца, issue #369):</p>\n<pre><code>DRY_SID=\"${CLAUDE_SESSION_ID:-noid}\"\nDRY_SAFE_SID=$(printf '%s' \"$DRY_SID\" | tr -cd 'A-Za-z0-9._-')\nDRY_TOKEN=$(od -An -N24 -tx1 /dev/urandom | tr -d ' \\n')\nDRY_OWNER=\"/tmp/iwe-dry-run-owner-${DRY_SAFE_SID:-noid}.token\"\numask 077\nprintf '%s' \"$DRY_TOKEN\" &gt; \"$DRY_OWNER\"\njq -nc --arg created \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\" --arg sid \"$DRY_SID\" \\\n  --arg token \"$DRY_TOKEN\" --arg owner \"$DRY_OWNER\" \\\n  '{created_at:$created,session_id:$sid,initiator:\"audit-installation\",owner_token:$token,owner_file:$owner}' \\\n  &gt; /tmp/iwe-dry-run.flag\n</code></pre>\n</li>\n<li><p><strong>Запустить subagent</strong> через Agent tool (subagent_type=general-purpose, модель Sonnet) с промптом:</p>\n<pre><code>Запусти ритуал /run-protocol close day по обычной процедуре. Не изобретай — следуй SKILL.md как написано.\n\nВАЖНО: в текущем окружении активен sentinel /tmp/iwe-dry-run.flag — это означает dry-run mode.\nPreToolUse-хук dry-run-gate.sh заблокирует любой write-tool (Write/Edit/git-write/MCP-write).\nЭто ожидаемо — твоя задача дойти максимально далеко, фиксируя на каком шаге упёрся.\n\nПосле прогона отчитайся в формате:\n## Smoke-test /run-protocol close day\n- Шагов выполнено: N из M\n- Упёрлось на: &lt;шаг&gt;: &lt;tool&gt;: &lt;причина блокировки&gt;\n- Read-логика: ✅ работает / ❌ упало раньше write-шага\n- Заключение: ✅/⚠️/❌\n</code></pre>\n</li>\n<li><p><strong>Дождаться завершения subagent'а.</strong></p>\n</li>\n<li><p><strong>Очистить sentinel:</strong></p>\n<pre><code>rm -f /tmp/iwe-dry-run.flag\n</code></pre>\n</li>\n<li><p><strong>Сформировать секцию 6 отчёта:</strong></p>\n<pre><code>## 6. Ритуал smoke-test (/run-protocol close day)\n\n&lt;вывод subagent'а&gt;\n\n**Интерпретация:**\n- Block на write-шаге после успешных read-шагов → ✅ (read-логика работает, это ожидаемое поведение smoke-теста)\n- Block на шаге 1-2 → ❌ (ритуал ломается рано — нет source-файла, MCP отвалился)\n- Все шаги без block → ⚠️ (подозрительно — ритуал должен иметь write-шаги)\n- Hook-error → ❌ (инфраструктура поломана)\n</code></pre>\n</li>\n</ol>\n<h3>Защита от sticky-sentinel</h3>\n<p>Если subagent упал/завис → попытаться удалить sentinel явно (всегда). Stop владельца удалит capability-файл; чужой Stop не затронет защиту. TTL 10 мин в самом хуке защищает от случаев, когда даже это не отработало (kill -9, краш CLI).</p>\n<h2>Шаг 3. Сборка единого отчёта</h2>\n<pre><code># IWE Installation Audit — YYYY-MM-DD HH:MM\n\n[bash_report — секции 1-3]\n\n[mcp_section — секция 4]\n\n---\n[передаётся Аудитору на шаг 4]\n</code></pre>\n<h2>Шаг 4. Запустить subagent в роли Аудитора (VR.R.002)</h2>\n<p>Использовать Agent tool с <strong>context isolation</strong> (subagent_type=general-purpose, модель Sonnet):</p>\n<p><strong>⛔ Subagent НЕ получает:</strong></p>\n<ul>\n<li>Историю текущей сессии</li>\n<li>Знания о том, что пользователь чинил/восстанавливал</li>\n<li>Промежуточные рассуждения</li>\n</ul>\n<p><strong>Subagent получает (промпт):</strong></p>\n<pre><code>Ты исполняешь роль VR.R.002 Аудитор (PACK-verification). Твоя задача — прочитать markdown-отчёт по аудиту инсталляции IWE и вынести verdict.\n\nЭталон:\n- VR.SC.005 (Service Clause): инсталляция должна иметь все критические L1-файлы, ритуалы должны загружаться, MCP должен отвечать, DS-strategy — быть git-репо.\n- Gate-критерии (из WP-265 §Gate-критерии):\n  - ✅ — 0 critical gaps, ≤2 warnings\n  - ⚠️ — 1+ warning или ≥3 minor gaps; работоспособно\n  - ❌ — ≥1 critical: L1 broken (&gt;5 файлов drift), ритуал падает, MCP &lt;2/4 отвечают\n\nПринцип context isolation (VR.SOTA.002): не используй знания о том, как создавалась инсталляция. Оценивай ТОЛЬКО по отчёту.\n\nОтчёт:\n[вставить полный собранный отчёт]\n\nВыдай verdict в формате:\n\n## Verdict: [✅ / ⚠️ / ❌]\n\n**Сводка по компонентам:**\n- L1 (платформа): ✅/⚠️/❌ — короткое объяснение\n- Ритуалы: ✅/⚠️/❌ — ...\n- MCP: ✅/⚠️/❌ — ...\n- DS-strategy: ✅/⚠️/❌ — ...\n\n**Критичные gaps (если есть):**\n- [список с указанием файла/компонента]\n\n**Рекомендации:**\n- Что чинить через `update.sh` (Синхронизатор)\n- Что чинить руками (с конкретным шагом)\n- Что отложить (некритично)\n\nНе предлагай auto-fix. Не лезь в реализацию. Твоя роль — Аудитор, не Кодировщик.\n</code></pre>\n<h2>Шаг 5. Сохранить отчёт + показать пользователю</h2>\n<ol>\n<li><strong>Сохранить полный отчёт + verdict в файл:</strong>\n<pre><code># Приоритет: workspace/scripts/ → $IWE_SCRIPTS (FMT-template/scripts/ для user-mode) → $HOME/IWE\nif [ -d \"$HOME/IWE/scripts\" ]; then\n    AUDIT_LOG_DIR=\"$HOME/IWE/scripts\"\nelif [ -n \"${IWE_SCRIPTS:-}\" ] &amp;&amp; [ -d \"$IWE_SCRIPTS\" ]; then\n    AUDIT_LOG_DIR=\"$IWE_SCRIPTS\"\nelse\n    AUDIT_LOG_DIR=\"$HOME/IWE\"\nfi\nmkdir -p \"$AUDIT_LOG_DIR\"\nAUDIT_LOG=\"$AUDIT_LOG_DIR/iwe-audit-$(date +%Y%m%d-%H%M%S).log\"\n# Записать конкатенацию: full_report + verdict\n</code></pre>\n</li>\n<li><strong>Вывести пользователю:</strong>\n<ul>\n<li>Полный markdown-отчёт (секции 1-6)</li>\n<li>Verdict от Аудитора</li>\n<li>Краткое резюме одной строкой: <code>Verdict: ⚠️ Работоспособно с N оговорками. Лог: &lt;AUDIT_LOG&gt;</code></li>\n</ul>\n</li>\n</ol>\n<p>Пользователь сам решает, что чинить.</p>\n<h2>Ограничения текущей реализации</h2>\n<ul>\n<li><strong>Smoke-test покрывает один ритуал</strong> (<code>/run-protocol close day</code>). Расширение на week-close / month-close — мини-РП, копия шага 2.5 с другими subcommand'ами.</li>\n<li><strong>DS-strategy diff</strong> — работает только если существует <code>FMT-strategy-template/</code> (или <code>templates/strategy-skeleton/</code>). Если нет — секция пометится «N/A».</li>\n<li><strong>MCP healthcheck</strong> — зависит от текущих доступных tools. Если набор изменится, обновить шаг 2.</li>\n<li><strong>Sentinel sticky-state</strong> — защита: TTL 10 мин в хуке + Stop-cleanup. Edge case: если хук изменён и не читает sentinel → блокировки не будет (fail-open). Защита: периодический re-test <code>/audit-installation</code> ловит регрессию.</li>\n</ul>\n\n\n","files":[{"path":"SKILL.md","sizeBytes":15587,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-08T11:56:00.844491Z","sha256":"8499B04BEEEA3293C204A7859D65E2FD048A0AC3D7894CD33FFE61D23EF7DE24","sizeBytes":6288},"review":null,"source":{"repositoryUrl":"https://github.com/TserenTserenov/FMT-exocortex-template","path":".claude/skills/audit-installation","license":"MIT","commit":"4d7b8f2e95161240a02a028ae5a8b9d2914b7939","subtreeSha":"FEF0A050FBB022F5475B4DBDFB7120B2C7C9FC10B6BAF6066158B4671796FB96","lastSyncedAt":"2026-09-25T07:36:52.516704Z"},"reviewedAt":"2026-09-08T11:56:22.806089Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/TserenTserenov/FMT-exocortex-template/tree/main/.claude/skills/audit-installation"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install tserentserenov-fmt-exocortex-template@llmmart"},{"target":"git","command":"git clone https://github.com/TserenTserenov/FMT-exocortex-template.git"}]}