diff --git a/docs/automation-graph.html b/docs/automation-graph.html
index 4f81da1a..a7497980 100644
--- a/docs/automation-graph.html
+++ b/docs/automation-graph.html
@@ -282,6 +282,10 @@ const NODES = [
{ id: 'sk_audit_portal', label: 'audit-portal', group: 'skills_proj', size: 20, ring: 3, ...pos(3, 325) },
// C9 project-management-tooling (17.05.2026) — вендоренный скил раздела «Управление проектами»
{ id: 'ccpm', label: 'CCPM\n(skill)', group: 'skills_proj', size: 18, ring: 3, ...pos(3, 335) },
+ // A11 ml-ai-tooling (17.05.2026) — скилы и CLI раздела «ML / AI-разработка»
+ { id: 'claude_api', label: 'claude-api\n(skill)', group: 'skills_proj', size: 18, ring: 3, ...pos(3, 345) },
+ { id: 'data_scientist', label: 'Data Scientist\n(skill)', group: 'skills_proj', size: 18, ring: 3, ...pos(3, 355) },
+ { id: 'promptfoo', label: 'promptfoo', group: 'plugins', size: 20, ring: 2, ...pos(2, 365) },
// ── ХУКИ (12) — S+infra + E (economy/skill) ───
{ id: 'hk_session', label: 'SessionStart:\ncontext-inject', group: 'hooks', size: 24, ring: 4, ...pos(4, 100) },
@@ -542,6 +546,11 @@ const EDGES = [
E('tooling', 'mcp_openapi', '§4.22 #47 — реестр'),
E('ag_apidocs', 'mcp_openapi', 'спека → MCP-ресурс'),
+ // ── A11 ML-AI-TOOLING 17.05.2026 — связи новых узлов ──
+ E('psr_v1', 'promptfoo', 'R10.1 блок 1:\nml-ai-tooling'),
+ E('tooling', 'claude_api', 'reuse — built-in skill\n(PSR_v1 R10.1 блок 2)'),
+ E('tooling', 'data_scientist', '§4.24 #49 — реестр'),
+
// ══════════════════════════════════════════════════
// КОНФЛИКТЫ — 3-color classification (iter2 §4)
// 🔴 не закрыт правилом / ⚫ возник на практике / 🟢 закрыт правилом
@@ -851,6 +860,32 @@ const NODE_DETAILS = {
[{ name: 'docs/api/', cond: 'источник OpenAPI-спеки' }]
),
+ // ── A11 ML-AI-TOOLING (17.05.2026) ──────────────
+ claude_api: nd(
+ 'Скил сборки AI-фич на Anthropic SDK (prompt-кэш). Reuse — раздел A11 опирается также на context7 MCP (доки) и Sentry MCP (LLM-наблюдаемость).',
+ 'При разработке AI-фич на Anthropic API / Claude SDK — скил задаёт паттерны prompt-кэша, batch-запросов, tool use.',
+ 'Reuse-узел раздела A11 (ml-ai-tooling). claude-api — встроенный скил Claude Code, не нумерованная Tooling-позиция; регистрация — Tooling «built-in skills» + PSR_v1 R10.1 блок 2. В A11 — reuse-слой (CLAUDE.md §6). Не UI → вне фильтров R6.0/R6.1/R14.',
+ [{ name: 'Tooling', cond: 'built-in skill — PSR_v1 R10.1 блок 2 (reuse)' }],
+ [],
+ [{ name: 'context7 MCP', cond: 'документация Anthropic SDK' }, { name: 'Sentry MCP', cond: 'LLM-наблюдаемость (off-phase reuse)' }]
+ ),
+ promptfoo: nd(
+ 'npm-CLI eval LLM-промптов: ассерты, регрессия, red-team. Запуск вручную/CI — не в хуках (платные LLM-вызовы).',
+ 'При разработке и проверке AI-промптов — запуск test-suite promptfoo вручную или в CI. Никогда в pre-commit хук (ML1: платные вызовы).',
+ 'Правило PSR_v1 R10.1 блок 1 note (ml-ai-tooling, off-phase). npm devDependency, тяжёлый (~1090 пакетов). Не UI → вне фильтров R6.0/R6.1/R14. Tooling §4.23 #48, CLAUDE.md §3.3 #48.',
+ [{ name: 'PSR_v1', cond: 'R10.1 блок 1: ml-ai-tooling' }],
+ [{ name: 'ML1', cond: 'никогда в хук/pre-commit — платные LLM-вызовы' }],
+ []
+ ),
+ data_scientist: nd(
+ 'Vendored-скил: классический ML-воркфлоу — выбор алгоритма, feature engineering, оценка модели.',
+ 'При ML-задаче (выбор алгоритма, feature engineering, валидация модели) — knowledge-only playbook без генерации кода.',
+ 'Вендорен в .claude/skills/data-scientist/ (ML3 — lefthook markdownlint+cspell исключают через job-exclude). Knowledge-only, не решатель. Не UI → вне фильтров R6.0/R6.1/R14. Tooling §4.24 #49, CLAUDE.md §3.3 #49.',
+ [{ name: 'Tooling', cond: '§4.24 #49 — реестр' }],
+ [],
+ []
+ ),
+
// ── СКИЛЫ SUPERPOWERS ────────────────────────────
sk_brainstorm: nd(
'Продумывает задачу вместе с заказчиком, формулирует варианты A/B/C и согласует дизайн до написания кода.',
@@ -1948,6 +1983,11 @@ const NODE_META = {
// ── A3 INTEGRATION-TOOLING (17.05.2026) ──
ag_apidocs: { since: '17.05.2026', changed: '—', uses: null, usesSrc: '—' },
mcp_openapi: { since: '17.05.2026', changed: '—', uses: null, usesSrc: '—' },
+
+ // ── A11 ML-AI-TOOLING (17.05.2026) ──
+ claude_api: { since: '17.05.2026', changed: '—', uses: null, usesSrc: 'скил' },
+ promptfoo: { since: '17.05.2026', changed: '—', uses: null, usesSrc: 'CLI' },
+ data_scientist: { since: '17.05.2026', changed: '—', uses: null, usesSrc: 'скил' },
};
// Явные парные дубли (Фича 3) — попадают в кнопку «⧉ Дубли».
@@ -2030,7 +2070,7 @@ const SECTIONS = [
{ id: 'E7', bucket: 'E', label: 'Исследования' },
{ id: 'E8', bucket: 'E', label: 'Самообучение Claude' },
];
-// Узел -> раздел. Покрывает все 118 узлов карты.
+// Узел -> раздел. Покрывает все 121 узлов карты.
const NODE_SECTION = {
// правила (4)
pravila: 'E1', claude_md: 'E1', psr_v1: 'E1', tooling: 'E1',
@@ -2082,6 +2122,8 @@ const NODE_SECTION = {
mcp_figma: 'A4', mcp_icons: 'A4', design_plugin: 'A4',
// A3 integration-tooling 17.05.2026 — раздел «Программирование — интеграции» наполнен
ag_apidocs: 'A3', mcp_openapi: 'A3',
+ // A11 ml-ai-tooling 17.05.2026 — раздел «ML / AI-разработка» наполнен
+ claude_api: 'A11', promptfoo: 'A11', data_scientist: 'A11',
};
// Вторичная классификация: узел первично в NODE_SECTION, дополнительно — в этих
// разделах (кросс-реф). Введено A3-интеграцией 17.05.2026 — раздел A3 наполняется