mm-projects · v0.1.0 · 2026-06-01 · sha256 f3f5ce698be3c451
mm-projects v0.1.0A
Immutable. This exact content is served forever at /api/v1/blob/f3f5ce698be3c451.
--- name: mm-projects version: 0.1.0 description: Обзор всех зарегистрированных mm-проектов одним экраном — статус, тип, GSD-фаза, последняя активность, число открытых вопросов. Use when user says "/mm projects", "/mm list", "покажи все проекты", "что у меня по проектам", "обзор проектов", "какие проекты есть", "список проектов". Читает только Obsidian-копии (passport/dashboard/handoff/sessions), git по проектам не трогает без флага --git. --- # mm-projects — Cross-Project Overview Отвечает на вопрос «что у меня вообще есть и где что в работе» — в отличие от `/mm-resume`, который про **один** проект. Команда независима от cwd: читает папку проектов в Obsidian, не код. **Только чтение.** Ничего не пишет. Git по проектам — только с флагом `--git` (иначе дорого при многих проектах). ## Конфиг Загрузи `mm-config.json` по алгоритму из `<repo>/docs/CONFIG-LOADING.md`. Поддержка `mm-config.local.json` overlay обязательна. Понадобятся: - `paths.obsidian_projects` - `paths.obsidian_sessions` (для legacy-проектов без папки) ## Процесс ### Шаг 1. Собери список проектов В `<obsidian_projects>/`: - **Папки-проекты** (новый формат от `/mm-init-project`): каждая подпапка = проект. - **Legacy плоские файлы** `<name>.md` в корне `<obsidian_projects>/` (старый формат) — тоже проект. Если папка проектов не существует → `Папка проектов не найдена: <path>. Запусти /mm-init-project хотя бы в одном проекте.` и стоп. Если проектов 0 → `Зарегистрированных проектов пока нет. /mm new в любом проекте создаст первый.` ### Шаг 2. По каждому проекту прочитай дёшево (не углубляясь) Папка-проект `<obsidian_projects>/<name>/`: - `passport.md` frontmatter: `status`, `type`, `gsd_version`, `updated`, `mm_version`. - `passport.md` секция 8: есть ли маркер `<!-- TODO louise: заполни секцию 8 -->` (не заполнена). - `passport.md` секция 9 (если GSD): `Текущий milestone / phase`. - `passport.md` секция 10: посчитай чекбоксы `- [ ]` в «Открытые вопросы». - `dashboard.md` frontmatter `updated:` + секция «Сейчас» (первая непустая строка). - `handoff.md` frontmatter `generated:` (для оценки свежести). - `sessions/` — дата самого свежего файла (по имени `YYYY-MM-DD...` или mtime). Legacy плоский `<name>.md`: вытащи что есть (секция «Текущее состояние», последняя сессия). Помечай в выводе как `(legacy)`. **Last activity** = максимум из: `dashboard.updated`, дата свежей сессии, `handoff.generated`, `passport.updated`. ### Шаг 3. (Опционально) git — только если флаг `--git` Если юзер передал `--git`: для каждого проекта, где из `passport.md` секции 1 «Путь к коду» извлекается существующий путь — выполни быстро: ```bash git -C "<code_path>" branch --show-current git -C "<code_path>" status --short # посчитать строки = uncommitted ``` Без `--git` — пропусти, в выводе колонку git не показывай. ### Шаг 4. Вывод (одним экраном, отсортировано по last activity ↓) ``` 📂 mm-проекты (<N>) <name> <type> <status> <gsd> <activity> Q:<n> └ <одна строка из dashboard «Сейчас» или «—»> ... ``` Где: - `<gsd>` = `—` если none, иначе `v1·<phase>` / `v2·<phase>` (фаза из секции 9, кратко). - `<activity>` = человекочитаемо: `сегодня` / `2д` / `3нед` / `2мес`. - `Q:<n>` = число открытых вопросов. - С флагом `--git` добавь хвост ` · <branch> (<k> wip)`. После таблицы — короткие сигналы (только непустые): ``` ⚠️ Залежались (>30 дней без активности): <names> ⚠️ Паспорт без секции 8: <names> ⚠️ GSD есть, но в CLAUDE.md нет директивы: запусти /mm check в <names> ← если знаешь (см. ниже) 📌 Паспорт старше config.version (нужен /mm new update): <names> ``` Примечание: «GSD без директивы» точно проверяет `/mm-doctor`; здесь упоминай только если это дёшево определить (флага в Obsidian-копии нет — обычно просто не пиши эту строку). ### Шаг 5. Подсказка по навигации Одной строкой в конце: ``` Подробнее по проекту: /mm projects <name> (= /mm-resume для него) · обзор с git: /mm projects --git ``` ## Режимы / аргументы - **`/mm projects`** — таблица всех. - **`/mm projects --git`** — + ветка и число несохранённых по каждому (медленнее). - **`/mm projects --active`** — только `status: active`. - **`/mm projects <name>`** — не таблица, а deep-dive: запусти логику `/mm-resume` для этого проекта (его путь к коду из passport секции 1; если кода нет на диске — выведи сводку из Obsidian-артефактов). ## Edge cases - **Папка проекта без `passport.md`** (мусор / недоинициализирован): покажи строкой `<name> — ⚠️ нет passport.md (недоинициализирован, /mm new)`. - **Очень много проектов** (>30): покажи топ-20 по активности + строку `…ещё N (см. --all)`. С `--all` — все. - **Рассинхрон дат** (dashboard свежее passport): бери максимум, не падай. - **Legacy и folder-формат для одного имени одновременно**: предпочитай folder, отметь дубль. - **Vault недоступен**: останови, скажи путь из конфига. ## Что НЕ делать - Не запускать git по всем проектам без флага `--git` — это дорого и шумит. - Не писать ничего (это read-only обзор). - Не углубляться в каждый проект — для этого `/mm projects <name>` или `/mm-resume`. - Не выдумывать «Сейчас», если в dashboard пусто — пиши `—`.