Skip to content
Neuronavt
Go back

Как инварианты помогли найти ошибки в skillmem

Кейс8/10

Коротко

Автор описывает, как проверял релиз 0.12 локальной памяти для кодовых агентов: вместо общего запроса «отревьюй код» две ИИ-модели искали воспроизводимые нарушения заранее записанных инвариантов. Такой подход выявил ошибки доверия, конкурентности и сохранности данных, но потребовал около десяти дней и не устранил все известные риски.

Контекст

Автор проекта skillmem — локального MCP-сервера на SQLite с девятью инструментами mem_*, базу которого могут совместно использовать Claude Code, Codex, Cursor и другие клиенты. После релиза 0.11 автор счёл ревью без чётких критериев субъективным и перед разработкой 0.12 составил список проверяемых обещаний программы.

Главное

Как сделано

Сначала автор перевёл ожидания от программы в 16 инвариантов и связал каждый с конкретными участками кода. Затем два независимых ревьюера искали контрпримеры к этим обещаниям, а не оценивали код по общему впечатлению.

Для каждой находки требовался воспроизводимый тест, падающий до исправления и проходящий после него. Конкурентные сценарии проверяли реальными процессами и потоками; для ввода и файловых путей использовали фаззинг и property-тесты. Изменения проверялись в CI на трёх ОС и нескольких версиях Python.

Результаты

Релиз 0.12 получил около 2 538 тестов против примерно 430 ранее. Были найдены и исправлены дефекты, затрагивавшие подтверждение владельца, ограничение частоты хуков, защиту от инъекций инструкций, откат транзакций и изоляцию копий базы. За ревью не было отдельного счёта за токены: модели использовались по фиксированным подпискам. Релиз стал строже к некоторым сценариям, которые раньше принимались молча, включая команды владельца без TTY.

Ограничения

В CHANGELOG осталось около двадцати Known issues. Проверка TTY и deny-правила не защищают от агента, способного выполнять произвольные shell-команды; для этого нужна песочница. Некоторые поля всё ещё показываются модели без защитной рамки, журнал уже показанных правил не защищён от параллельных хуков, а опасное регулярное выражение на Windows прерывает только таймаут Claude Code в 10 секунд. Также uninstall —purge-db не работает, пока MCP-сервер держит базу открытой. Автор не утверждает, что устранены все риски; часть проверок поведения и полной защиты от недоверенного агента остаётся за пределами исправлений.

Что взять себе

Читать оригинал, если…

Откройте оригинал, если нужны сами инварианты, список известных проблем, детали регрессионных тестов или инструкция по обновлению skillmem.