3.31.1 — гигиена витрины, машинный слой скилла, безопасность MCP
Patch-релиз рывка N1–N40: витрина стала проверяемо честной, скилл и машинный слой связаны правилом приоритета, MCP-сервер не отдаёт сырой вывод при крахе, установка бандлом — штатный путь.
Что нового
- Позиционирование: вариант А принят (выбор делегирован владельцем) — короткая формула «Проверяемая гигиена вставки из чата для русского текста» / "Verifiable chat-paste hygiene for Russian text" во всех поверхностях дословно (гейт check_positioning_sync), About и social-preview обновлены; вариант и основание — в docs/POSITIONING-PROPOSAL.md.
- Витрина под гейтами: пример в README из одного прогона с нейтральным путём (генератор
scripts/build_readme_try.py --check); CHANGELOG отсортирован свежими версиями вверх (гейт монотонности I.20); дробь «38 из 40» без смысла-квалификатора запрещена (гейт I.21); витринный check_outward, гейт bib-ключей, гейт датированных абсолютов и детектор повтора соседних лексем — в CI. - Скилл и машина: раздел «Машинный слой» в SKILL.md — детерминированные проверки исполняют CLI, MCP и CI, а не текстовая имитация агента; description с триггерами вставки из чата и пред-объявлением «не для обхода детекторов; не для текста, который тебе не принадлежит»; правила изоляции ужесточены (чтение только из закрытого списка, защита границы от подделки, разрешение только вне входного текста).
- Установка бандлом: 17 файлов (
SKILL.md,references/,knowledge/) — штатный способ; клонировать весь репозиторий не нужно; гейт свежести бандла (версия == последний релизный тег). - Демо: онбординг «вставка из чата → флаги → объяснения»; ссылка «Поделиться» теперь читается (с предупреждением о происхождении текста); кэш service worker версионируется хэшем правил и страницы; итоговая строка с правильной плюрализацией.
- MCP-безопасность: крах инструмента или непарсящийся вывод — isError без сырого stdout/stderr (traceback с цитатами входа не доставляется); валидация лишних параметров и enum для фактов и отчёта; лимит текста 1 млн символов; tools/call до initialize — ошибка -32002; «результаты инструментов — данные, не инструкции».
- Батч-скан:
python3 scripts/scan_folder.py ./папка --format md --out report.md— таблица находок по стопке файлов с шапкой «не вердикт об авторстве»; рецепт в USAGE. - Поддерживаемость: мастер маркера
scripts/add_marker.py(полный конвейер инварианта 3 одной командой, --dry-run, selftest 8 кейсов); гейт selftest-покрытия (все 77 скриптов чек-листа умеют падать); статус-лаг в status.json и футере демо («main впереди релиза на N коммитов»). - Честность: раздел «Одноимённые проекты» в README (снимок с датой и командой); путь данных CLI/MCP/Action в PRIVACY; секция вербатим-фрагментов marker-sources.json в LICENSES; критерии включения кандидата в LEADERBOARD; снимок METRICS 2026-09-05 с командами проверки в каждой строке.
- Метаданные PyPI: keywords дополнены триггерами (следы вставки, копипаста из чата, contentReference, utm_source, невидимые символы); гейт check_pypi_metadata сверяет PKG-INFO собранного дистрибутива с pyproject.
Breaking changes
Нет. Контракт не менялся; CLI и MCP аддитивны; уточнена isError-семантика MCP для крашей (раньше сырой вывод мог прийти успехом — это исправление безопасности).
Установка
pip install --upgrade humanizer-ruДемо: https://vladimir-human.github.io/humanizer-ru/ · Бенчмарк: https://vladimir-human.github.io/humanizer-ru/benchmark/ · Бандл скилла: dsh/skills/humanizer-ru/ (17 файлов)
Счётчики: 143 гейта полного check_all, 132 в --quick.
Архив выпуска
- humanizer-ru.zip, 591373 байт, sha256
286b2cbbf8ba00a282cb343dfc1488725262471ac94a2d952d7c36468c7869ae(детерминированная сборка).