mm-clear-gate
GitHub执行 /clear 前的只读检查,验证手稿、仓库状态及日志完整性。通过脚本退出码给出明确放行或阻断指令,防止数据丢失。
触发场景
安装
npx skills add mworldorg/markdown-memory --skill mm-clear-gate -g -y
SKILL.md
Frontmatter
{
"name": "mm-clear-gate",
"version": "0.1.0",
"description": "Гейт перед \/clear — read-only проверка «всё ли записано», вердикт из exit code скрипта, а не из реплики модели. Проверяет свежесть handoff, состояние 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 в одну строку. Ничего не пересчитывает и не пересказывает.
Запуск
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 |
|---|---|---|
Свежесть handoff (HANDOFF.json / .continue-here.md) |
блокер | блокер |
| Vault-репо: грязный или не запушен | блокер | блокер |
| Дерево проекта незакоммичено | предупреждение¹ | блокер |
| HEAD впереди origin | предупреждение | блокер |
Лог сессии в <vault>/sessions/ |
не проверяется | блокер |
Фаза Complete без passing-VERIFICATION.md |
блокер² | блокер² |
validate.health |
предупреждение | предупреждение |
¹ становится блокером, если 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: его никто не читал. Здесь он становится вердиктом.
Почему так: /clear не трогает диск, поэтому между этапами GSD незакоммиченное и незапушенное ничего не теряют — блокировать их значит красить гейт в красный там, где всё в порядке, и приучать себя его пролистывать. Настоящий вопрос mid-режима — записано ли состояние работы (handoff) и доехало ли записанное (vault).
Жёсткие правила
- 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 — handoff и health помечаются
н/д, не блокируют. - Vault не найден или не git-репо — предупреждение и подсказка
/mm vault, не блокер. Путь к vault собирается из имени вpassport.md; если паспорта нет, берётся имя папки и vault может не найтись. - Handoff-файлов нет вовсе — блокер: состояние работы нигде не записано.
- Нет upstream у ветки при наличии remote — блокер: запушенность установить нельзя.
版本历史
- 7d780d7 当前 2026-08-03 09:35


