mm-clear-gate
Гейт перед /clear — read-only проверка «всё ли записано», вердикт из exit code скрипта, а не из реплики модели. Проверяет свежесть GSD-handoff в репозитории проекта, свежесть vault-файлов для Project Knowledge, состояние vault-репо, дерево проекта, запушенность, лог сессии, плюс
Install
npx skills add https://github.com/mworldorg/markdown-memory/tree/main/skills/mm-clear-gate
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install mworldorg-markdown-memory@llmmart
git clone https://github.com/mworldorg/markdown-memory.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole mworldorg/markdown-memory collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
mm-clear-gate — гейт перед /clear
Решает проблему: единственным подтверждением «всё сохранено» была фраза модели о сессии, память о которой /clear и стирает. Вердикт должен приходить из скрипта с exit code, а не из реплики.
Вся логика — в скрипте. Скилл его запускает, печатает вывод целиком и переводит exit code в одну строку. Ничего не пересчитывает и не пересказывает.
Запуск
python <repo>/scripts/clear-gate.py --mode mid # дефолт: между этапами GSD
python <repo>/scripts/clear-gate.py --mode end # конец сессии
<repo> — корень mm-репозитория (paths.skills_repo из конфига). Проверяемый проект — текущий cwd; можно задать явно через --project <путь>.
Режим: /mm gate → mid, /mm gate end (или «конец сессии», «закругляемся») → end.
Что делать с выводом
- Напечатай вывод скрипта целиком, дословно — секции блокеров, предупреждений и пройденного. Не сокращай список файлов, не убирай подсказки-команды.
- Добавь одну строку по exit code:
0→✅ Гейт пройден — можно /clear.1→⛔ Гейт не пройден — чистить нельзя, сначала закрой блокеры выше.
- При exit 1 не предлагай
/clearи не утверждай, что всё записано. Блокеры перечислены — назови их и остановись. - Ничего не чини сам. Гейт read-only, исправления — отдельное решение оператора.
Планка по режимам
| Проверка | mid | end |
|---|---|---|
Свежесть GSD-handoff в репозитории проекта (.planning/HANDOFF.json, .continue-here.md) |
блокер | блокер |
Свежесть vault-файлов для Project Knowledge (handoff.md, dashboard.md) |
предупреждение³ | блокер³ |
| Vault-репо: грязный или не запушен | блокер | блокер |
| Дерево проекта незакоммичено | предупреждение¹ | блокер |
| HEAD впереди origin | предупреждение | блокер |
Лог сессии в <vault>/sessions/ |
не проверяется | блокер |
Фаза Complete без passing-VERIFICATION.md |
блокер² | блокер² |
validate.health |
предупреждение | предупреждение |
¹ становится блокером, если GSD-handoff устарел: незаписанное состояние плюс грязное дерево — это уже потеря.
² только фазы текущего milestone (берётся из milestone: в STATE.md). Архивные вехи не трогаем: чинить их поздно, а гейт, краснеющий на том, что никто не пойдёт исправлять, начинают пролистывать. Строки со статусом Deferred, In Progress, Executed — verification partial не проверяются — ловится ровно расхождение «ROADMAP говорит Complete, а verification.status даёт не passed».
Зачем: в execute-phase шаг verify_phase_goal стоит перед update_roadmap и guard'а не имеет, то есть при полном прогоне фаза физически не может стать Complete без отчёта. Но если планы гонять поштучно, а ROADMAP править отдельно, весь хвост workflow (верификация, learnings, todos) пропускается — так у Filtrator фаза 8 простояла Complete без единого VERIFICATION.md, и пять фаз из восьми оказались без отчётов. Сигнал у GSD был всегда (verification.status), но оставался advisory: его никто не читал. Здесь он становится вердиктом.
³ два разных места записи, и одно другое не заменяет. GSD-handoff — .planning/* в репозитории проекта, пишет /gsd-pause-work. Vault-файлы — handoff.md и dashboard.md в vault, пишет /mm save; именно они едут в Project Knowledge claude.ai. Срабатывает, если mtime любого из них старше даты последнего коммита в репозитории проекта. Отдельного порога у проверки нет: пятиминутный порог GSD-handoff переиспользуется лишь как допуск на дребезг (/mm save пишет файлы, коммит ложится следом) — планка это сам факт «старше коммита».
Планка по режимам — та же, что у лога сессии: между этапами GSD claude.ai vault не перечитывает, контекст восстанавливается из .planning/, поэтому в mid это предупреждение и на вердикт не влияет. Потерей устаревший vault становится на выходе из сессии — в end блокер.
Зачем: 2026-08-08 на RasilshikParser /gsd-pause-work обновил .planning/HANDOFF.json, и гейт дал exit 0 — проверка свежести смотрела на GSD-handoff и была права, проверка vault смотрела на чистоту репо и тоже была права. Vault был чист, запушен и отставал по содержанию на 65 часов. Новый чат прочитал состояние трёхдневной давности и предложил уже сделанное. Ни одна из двух проверок не задавала вопрос «а описывают ли vault-файлы сегодняшнюю работу».
Почему так: /clear не трогает диск, поэтому между этапами GSD незакоммиченное и незапушенное ничего не теряют — блокировать их значит красить гейт в красный там, где всё в порядке, и приучать себя его пролистывать. Настоящий вопрос mid-режима — записано ли состояние работы (GSD-handoff) и доехало ли записанное (vault-репо). Vault-файлы для claude.ai между фазами не перечитываются, поэтому там они лишь предупреждение; спрашиваются в полную силу на выходе из сессии.
Жёсткие правила
- Read-only. Только
git status/rev-list/log, mtime файлов иvalidate.healthбез--repair. Никаких коммитов, пушей и правок. git fetchне выполняется — это сеть и мутация refs. Сравнение идёт с последним известным origin:aheadточен,behindможет быть устаревшим (и потому лишь предупреждение).- Exit code определяют только блокеры. Предупреждения на вердикт не влияют никогда.
- 7 forensic-проверок не дублируются — на них есть ссылка в выводе, когда health не
healthy.
Edge cases
- Проект не под GSD — GSD-handoff и health помечаются
н/д, не блокируют. - Vault не найден или не git-репо — vault ищется по имени из
passport.md, затем поproject_path, объявленному в артефактах vault, затем по имени папки проекта. Найден, но не git-репо — блокер с подсказкой/mm vault: без git нет ни синхронизации с Knowledge, ни истории, ни восстановления. Определить не удалось (нет каталога Projects, путь объявляют несколько vault, связь проект↔vault не установлена) —НЕ ПРОВЕРЕНО, что считается за блокер. Паспорт называет проект, а папки такой нет — предупреждение/mm vault: здесь отсутствие установлено положительно. Проверка свежести vault-файлов во всех этих случаях пропускается (н/д) — про сам vault уже сказано выше, со своей подсказкой, а второй голос о том же завёл бы параллельную ветку блокеров. - GSD-handoff-файлов нет вовсе — блокер: состояние работы нигде не записано.
handoff.md/dashboard.mdнет в найденном vault — отсутствующий файл пропускается, вердикт выносится по тем, что есть; если нет ни одного — проверкан/д. Отсутствие это не устаревание: сверять не с чем, дефект другой и чинится в другом месте, а блокер здесь краснел бы на vault'ах, заведённых до появленияdashboard.md.- Нет upstream у ветки при наличии remote — блокер: запушенность установить нельзя.
Files (markdown-memory)
-
SKILL.md 11.3 KB
--- name: mm-clear-gate version: 0.2.0 description: Гейт перед /clear — read-only проверка «всё ли записано», вердикт из exit code скрипта, а не из реплики модели. Проверяет свежесть GSD-handoff в репозитории проекта, свежесть vault-файлов для Project Knowledge, состояние vault-репо, дерево проекта, запушенность, лог сессии, плюс validate.health как предупреждение. Два режима планки - mid (между этапами GSD, дефолт) и end (конец сессии). Use when user says "/mm gate", "/mm-gate", "можно чистить", "всё ли записано", "готов к clear", "проверь перед clear", ЛИБО когда сам собираешься предложить /clear. --- # mm-clear-gate — гейт перед `/clear` Решает проблему: единственным подтверждением «всё сохранено» была фраза модели о сессии, память о которой `/clear` и стирает. Вердикт должен приходить **из скрипта с exit code**, а не из реплики. **Вся логика — в скрипте.** Скилл его запускает, печатает вывод целиком и переводит exit code в одну строку. Ничего не пересчитывает и не пересказывает. ## Запуск ```bash python <repo>/scripts/clear-gate.py --mode mid # дефолт: между этапами GSD python <repo>/scripts/clear-gate.py --mode end # конец сессии ``` `<repo>` — корень mm-репозитория (`paths.skills_repo` из конфига). Проверяемый проект — текущий cwd; можно задать явно через `--project <путь>`. Режим: `/mm gate` → `mid`, `/mm gate end` (или «конец сессии», «закругляемся») → `end`. ## Что делать с выводом 1. Напечатай вывод скрипта **целиком, дословно** — секции блокеров, предупреждений и пройденного. Не сокращай список файлов, не убирай подсказки-команды. 2. Добавь одну строку по exit code: - `0` → `✅ Гейт пройден — можно /clear.` - `1` → `⛔ Гейт не пройден — чистить нельзя, сначала закрой блокеры выше.` 3. При exit 1 **не предлагай `/clear`** и не утверждай, что всё записано. Блокеры перечислены — назови их и остановись. 4. Ничего не чини сам. Гейт read-only, исправления — отдельное решение оператора. ## Планка по режимам | Проверка | mid | end | |---|---|---| | Свежесть **GSD-handoff** в репозитории проекта (`.planning/HANDOFF.json`, `.continue-here.md`) | блокер | блокер | | Свежесть **vault-файлов** для Project Knowledge (`handoff.md`, `dashboard.md`) | предупреждение³ | блокер³ | | Vault-репо: грязный или не запушен | блокер | блокер | | Дерево проекта незакоммичено | предупреждение¹ | блокер | | HEAD впереди origin | предупреждение | блокер | | Лог сессии в `<vault>/sessions/` | не проверяется | блокер | | Фаза Complete без passing-`VERIFICATION.md` | блокер² | блокер² | | `validate.health` | предупреждение | предупреждение | ¹ становится блокером, если GSD-handoff устарел: незаписанное состояние плюс грязное дерево — это уже потеря. ² только фазы **текущего** milestone (берётся из `milestone:` в `STATE.md`). Архивные вехи не трогаем: чинить их поздно, а гейт, краснеющий на том, что никто не пойдёт исправлять, начинают пролистывать. Строки со статусом `Deferred`, `In Progress`, `Executed — verification partial` не проверяются — ловится ровно расхождение «ROADMAP говорит `Complete`, а `verification.status` даёт не `passed`». Зачем: в `execute-phase` шаг `verify_phase_goal` стоит **перед** `update_roadmap` и guard'а не имеет, то есть при полном прогоне фаза физически не может стать Complete без отчёта. Но если планы гонять поштучно, а ROADMAP править отдельно, весь хвост workflow (верификация, learnings, todos) пропускается — так у Filtrator фаза 8 простояла Complete без единого `VERIFICATION.md`, и пять фаз из восьми оказались без отчётов. Сигнал у GSD был всегда (`verification.status`), но оставался advisory: его никто не читал. Здесь он становится вердиктом. ³ два разных места записи, и одно другое не заменяет. **GSD-handoff** — `.planning/*` в репозитории проекта, пишет `/gsd-pause-work`. **Vault-файлы** — `handoff.md` и `dashboard.md` в vault, пишет `/mm save`; именно они едут в Project Knowledge claude.ai. Срабатывает, если mtime любого из них старше даты последнего коммита в репозитории проекта. Отдельного порога у проверки нет: пятиминутный порог GSD-handoff переиспользуется лишь как допуск на дребезг (`/mm save` пишет файлы, коммит ложится следом) — планка это сам факт «старше коммита». Планка по режимам — та же, что у лога сессии: между этапами GSD claude.ai vault не перечитывает, контекст восстанавливается из `.planning/`, поэтому в `mid` это предупреждение и на вердикт не влияет. Потерей устаревший vault становится на выходе из сессии — в `end` блокер. Зачем: 2026-08-08 на RasilshikParser `/gsd-pause-work` обновил `.planning/HANDOFF.json`, и гейт дал `exit 0` — проверка свежести смотрела на GSD-handoff и была права, проверка vault смотрела на чистоту репо и тоже была права. Vault был чист, запушен и отставал по содержанию на 65 часов. Новый чат прочитал состояние трёхдневной давности и предложил уже сделанное. Ни одна из двух проверок не задавала вопрос «а описывают ли vault-файлы сегодняшнюю работу». Почему так: `/clear` не трогает диск, поэтому между этапами GSD незакоммиченное и незапушенное ничего не теряют — блокировать их значит красить гейт в красный там, где всё в порядке, и приучать себя его пролистывать. Настоящий вопрос mid-режима — записано ли *состояние работы* (GSD-handoff) и доехало ли записанное (vault-репо). Vault-файлы для claude.ai между фазами не перечитываются, поэтому там они лишь предупреждение; спрашиваются в полную силу на выходе из сессии. ## Жёсткие правила - **Read-only.** Только `git status` / `rev-list` / `log`, mtime файлов и `validate.health` без `--repair`. Никаких коммитов, пушей и правок. - **`git fetch` не выполняется** — это сеть и мутация refs. Сравнение идёт с последним известным origin: `ahead` точен, `behind` может быть устаревшим (и потому лишь предупреждение). - **Exit code определяют только блокеры.** Предупреждения на вердикт не влияют никогда. - **7 forensic-проверок не дублируются** — на них есть ссылка в выводе, когда health не `healthy`. ## Edge cases - **Проект не под GSD** — GSD-handoff и health помечаются `н/д`, не блокируют. - **Vault не найден или не git-репо** — vault ищется по имени из `passport.md`, затем по `project_path`, объявленному в артефактах vault, затем по имени папки проекта. Найден, но не git-репо — **блокер** с подсказкой `/mm vault`: без git нет ни синхронизации с Knowledge, ни истории, ни восстановления. Определить не удалось (нет каталога Projects, путь объявляют несколько vault, связь проект↔vault не установлена) — `НЕ ПРОВЕРЕНО`, что считается за блокер. Паспорт называет проект, а папки такой нет — предупреждение `/mm vault`: здесь отсутствие установлено положительно. Проверка свежести vault-файлов во всех этих случаях пропускается (`н/д`) — про сам vault уже сказано выше, со своей подсказкой, а второй голос о том же завёл бы параллельную ветку блокеров. - **GSD-handoff-файлов нет вовсе** — блокер: состояние работы нигде не записано. - **`handoff.md` / `dashboard.md` нет в найденном vault** — отсутствующий файл пропускается, вердикт выносится по тем, что есть; если нет ни одного — проверка `н/д`. Отсутствие это не устаревание: сверять не с чем, дефект другой и чинится в другом месте, а блокер здесь краснел бы на vault'ах, заведённых до появления `dashboard.md`. - **Нет upstream у ветки при наличии remote** — блокер: запушенность установить нельзя.
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.