$npx -y skills add mworldorg/markdown-memory --skill mm-doctorСамопроверка mm-системы — junction'ы, конфиг, vault, паспорта, bridge-архив, GSD-консистентность (passport vs PROJECT.md), наличие сторонних плагинов (karpathy, context-mode). Auto-fix очевидного. Use when user says "проверь систему", "почему не работает", "/mm-doctor", "mm-statu
| 1 | # mm-doctor — System Health Check & Auto-Fix |
| 2 | |
| 3 | Прогон диагностики всей mm-системы. Не пишет ничего без подтверждения. |
| 4 | |
| 5 | ## Конфиг |
| 6 | |
| 7 | Загрузи `mm-config.json` по алгоритму из `<repo>/docs/CONFIG-LOADING.md`. Поддержка `mm-config.local.json` overlay обязательна. Loader должен инжектировать `_repo_root`. |
| 8 | |
| 9 | Если loader падает — это уже первая ошибка, выведи её и предложи фикс из CONFIG-LOADING.md. |
| 10 | |
| 11 | ## Чек-лист (выполнять по порядку, помечать ✅ / ⚠️ / ❌) |
| 12 | |
| 13 | ### 1. Конфиг |
| 14 | |
| 15 | - ✅ `mm-config.json` найден (откуда: env / junction / fallback) |
| 16 | - ✅ Валидный JSON |
| 17 | - ⚠️ Если использован legacy fallback (см. `docs/CONFIG-LOADING.md`) — предложи `[Environment]::SetEnvironmentVariable("MM_REPO_ROOT", "<repo>", "User")` |
| 18 | - ✅ `mm-config.local.json` (если есть) валидный, deep-merged |
| 19 | - ✅ Ключевые пути присутствуют: `obsidian_*`, `_repo_root` |
| 20 | |
| 21 | ### 2. Repo integrity |
| 22 | |
| 23 | - ✅ `<repo>/templates/passport.md` существует |
| 24 | - ✅ `<repo>/templates/project-instructions.md` существует |
| 25 | - ✅ `<repo>/skills/mm-bridge/SKILL.md`, `mm-init-project`, `mm-setup`, `mm-resume`, `mm-handoff`, `mm-save-session`, `mm-instructions`, `mm-projects`, `mm-doctor`, `mm` существуют (10 skills) |
| 26 | - ✅ `<repo>/scripts/register-skills.py` существует |
| 27 | |
| 28 | ### 3. Симлинки / Junction'ы (`~/.claude/skills/mm-*`) |
| 29 | |
| 30 | Для каждого `mm-*` в `<repo>/skills/` и `<repo>/vendor/`: |
| 31 | - ✅ Ссылка `~/.claude/skills/mm-<name>` существует |
| 32 | - ✅ Является reparse-point/symlink (симлинк на Mac/Linux, junction на Windows) |
| 33 | - ✅ Target указывает на `<repo>/skills/mm-<name>` (или `vendor/mm-<name>`) |
| 34 | |
| 35 | Проверка на macOS/Linux: |
| 36 | ```bash |
| 37 | ls -la ~/.claude/skills/ |
| 38 | readlink ~/.claude/skills/mm-bridge # должно вести на <repo>/skills/mm-bridge |
| 39 | ``` |
| 40 | |
| 41 | PowerShell-проверка (Windows): |
| 42 | ```powershell |
| 43 | $item = Get-Item "$env:USERPROFILE\.claude\skills\mm-bridge" -Force |
| 44 | $item.Attributes -band [System.IO.FileAttributes]::ReparsePoint # должно быть != 0 |
| 45 | $item.Target # должно совпадать с <repo>/skills/mm-bridge |
| 46 | ``` |
| 47 | |
| 48 | При ошибках предложи: `Запустить scripts/register-skills.py для пере-создания ссылок? (y/n)`. Если y — запусти. |
| 49 | |
| 50 | ### 4. Obsidian vault (Базовая настройка) |
| 51 | |
| 52 | Если проект не открыт, проверь глобальные пути из конфига `paths.obsidian_*`: |
| 53 | - ✅ `obsidian_vault` существует |
| 54 | - ✅ `obsidian_claude_root` существует |
| 55 | - ✅ `obsidian_bridge` существует (создай если нет — это безопасно) |
| 56 | - ✅ `obsidian_bridge_archive` существует (создай если нет) |
| 57 | - ✅ `obsidian_sessions` существует (создай если нет) |
| 58 | - ✅ `obsidian_projects` существует (создай если нет) |
| 59 | - ⚠️ `obsidian_index` файл есть; если нет — предупреди но не падай |
| 60 | |
| 61 | ### 5. Bridge state |
| 62 | |
| 63 | - ✅ `<obsidian_bridge>/next-prompt.md` — info: есть/нет, дата |
| 64 | - ⚠️ Если есть и старше 7 дней — намекни: `Старый бридж-промпт от <date>. Уже использован?` |
| 65 | - ⚠️ Архив старше 30 дней: посчитай файлы в `<obsidian_bridge_archive>` старше 30 дней. Если > 0: |
| 66 | ``` |
| 67 | В архиве bridge-промптов: <N> файлов, <M> старше 30 дней. |
| 68 | Удалить старые? (y/n) |
| 69 | ``` |
| 70 | |
| 71 | ### 6. Текущий проект и База Знаний (если cwd внутри проекта) |
| 72 | |
| 73 | Если в `cwd` или родителях есть `passport.md`: |
| 74 | - ✅ Frontmatter паспорта валидный YAML |
| 75 | - ✅ Все 11 секций присутствуют в `passport.md` |
| 76 | - ✅ Frontmatter содержит `gsd_version: <none|v1|v2|core>` |
| 77 | - ⚠️ `updated:` в паспорте старше 30 дней → предложи `/mm-init-project --update` |
| 78 | - ⚠️ Секция 8 «Контекст для промптов» содержит маркер `<!-- TODO: заполни секцию 8 -->` → намекни завить |
| 79 | - ✅ Определение пути базы знаний `<vault_root>` (локальная папка `.vault/` в корне или глобальная `<obsidian_projects>/<name>/` из конфига) |
| 80 | - ✅ Папки базы знаний существуют: |
| 81 | - `00-home/` |
| 82 | - `atlas/` |
| 83 | - `knowledge/` (и ее подпапки: `integrations/`, `decisions/`, `debugging/`, `patterns/`, `business/`) |
| 84 | - `sessions/` |
| 85 | - `inbox/` |
| 86 | - ✅ Ключевые файлы базы знаний существуют: |
| 87 | - `00-home/index.md` |
| 88 | - `00-home/текущие приоритеты.md` |
| 89 | - `00-home/project-instructions.md` |
| 90 | - `handoff.md` (скелет или полный) |
| 91 | - `atlas/passport.md` (копия) |
| 92 | - ✅ В `CLAUDE.md` присутствует секция `## Obsidian Knowledge Vault` с правильным путем к базе знаний. |
| 93 | - ✅ Sync с копией паспорта в базе знаний (sha256): совпадают? |
| 94 | - ⚠️ handoff.md существует. Если нет → `⚠️ handoff.md отсутствует — запусти /mm save (или /mm next) чтобы создать; он нужен для Project Knowledge claude.ai.` |
| 95 | |
| 96 | ### 6.1. GSD ↔ passport консистентность (если есть GSD) |
| 97 | |
| 98 | Если passport `gsd_version` ≠ none, прогони cross-check: |
| 99 | |
| 100 | **Проверка 1: версия в passport совпадает с реальностью** |
| 101 | - Если в passport `gsd_version: v1` или `core`, проверь что `<project_root>/.planning/` существует. (Для `core` проверь также наличие `.planning/config.json`). |
| 102 | - |