mm-clear-gate — гейт перед /clear

SkillFiles & storage

A gate before /clear — a read-only check of "whether everything has been saved", with the verdict taken from the script's exit code, not from the model's reply. Checks the freshness of the GSD-handoff in the project repository, the freshness of vault files for Project Knowledge, the state of the vau

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the mm-clear-gate — гейт перед /clear skill

What this skill tells your AI

The instructions your AI receives, as published by mworldorg/markdown-memory in skills/mm-clear-gate/SKILL.md and read by ahel’s review.

Решает проблему: единственным подтверждением «всё сохранено» была фраза модели о сессии, память о которой /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 gatemid, /mm gate end (или «конец сессии», «закругляемся») → end.

Что делать с выводом

  1. Напечатай вывод скрипта целиком, дословно — секции блокеров, предупреждений и пройденного. Не сокращай список файлов, не убирай подсказки-команды.
  2. Добавь одну строку по exit code:
    • 0✅ Гейт пройден — можно /clear.
    • 1⛔ Гейт не пройден — чистить нельзя, сначала закрой блокеры выше.
  3. При exit 1 не предлагай /clear и не утверждай, что всё записано. Блокеры перечислены — назови их и остановись.
  4. Ничего не чини сам. Гейт read-only, исправления — отдельное решение оператора.

Планка по режимам

Проверкаmidend
Свежесть 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 — блокер: запушенность установить нельзя.

Signals

GitHub stars
25
Forks
3
Last commit
Aug 2026
Advanced
Catalog kind
skill
Gateway key
mm-clear-gate
Source
github.com/mworldorg/markdown-memory