humanizer-ru 3.33.0
Совокупный релиз цикла: сохранность текста и
разметки, согласованные границы детектора и очистителя, честная приёмка
проверок, паритет CLI и демо, воспроизводимость публичных чисел, статус
поставки из реального прогона.
Основные изменения
- Сохранность разметки. Безопасные режимы polish (
--preserve-markup,
--typographic) сохраняют байт-в-байт защищённые области: инлайн-код
(серии бэктиков фиксированной длины), fenced-блоки, YAML-frontmatter,
URL, HTML-теги с кавычками атрибутов, ZWJ-кластеры составных эмодзи.
Третий инвариант репортит фактические нарушения сохранения в списке
invariants(--json) и даёт код 1;--in-placeпишет атомарно и
отказывается от записи при нарушении инвариантов. Единый источник
правил защиты —scripts/protected_regions.py(копия в пакете). - Очиститель согласован с детектором. Снятие utm/referrer использует
границы детектора (lookahead значения отвергаетutm_source=openair,
chatgpt.com.example; хвост останавливается на), бэктике,<,>,
кавычках) — markdown-ссылка и инлайн-код не разрушаются. Маркеры не
снимаются внутри кода, заборов, frontmatter и (не-URL маркеры) внутри
URL — обнаружение и снятие больше не расходятся. Guard'ы формализованы
в contract.v1.json (removal_guards). - Съём невидимок без видимых артефактов. Зазор схлопывается в точке
съёма: нет двойных/тройных пробелов после снятия; авторская типографика
вне точек съёма не трогается; кириллическая диакритика категории Mn
сохраняется побайтно во всех режимах. - Честная приёмка проверок.
check_all: допустимый ненулевой код
засчитывается PASS только со сверкой содержания отказа, иначе SKIP;
--strictблокирует приёмку при любом FAIL/SKIP. Подпись релизного
тега проверяется криптографически (git verify-tag);
--pre-release-intervalмашинно требует ≥ 86400 с с предыдущей
публикации (published_at);--acceptanceсверяет утверждения
status.json с результатом прогона и SHA деплоя. - Паритет CLI и демо. 12 общих векторов (тень, маскирование URL,
Unicode-цифры, разделители строк, code spans, fenced, координаты при
астральных символах); идентичная Unicode-семантика (\d→\p{Nd},
\w→[\p{L}\p{N}\p{M}_], явный пробельный класс,\bзапрещён —
явные lookaround-классы), splitlines/NFC/тень/маскирование URL по флагу
реестра; координатыstart/endаддитивно в--json. Решения
задокументированы:research/PARITY-DECISIONS-2026-09-06.md. - Машинные грани.
--jsonбез файлов печатает конверт с честным
scope_note; нераспознанный аргумент с--json— код 2 и конверт в
stdout; после--значение--version— операнд; MCP-уведомления
(включая ping) ответа не получают; дочерний конверт с ключами неверных
типов отвергается (isError без structuredContent). - Воспроизводимость фактов.
check_facts: скрипты команды
reproduce обязаны существовать и компилироваться;source_dataсверяет
хеши исходных данных;--strict-publicationфактически исполняет
публичное воспроизведение (reproduce_public). Числа, цепочка которых
неисполнима из публичных данных (di-control-2026-09), сняты с
публикации (publication_approved=false) с эрратой; история сохранена. - Статус поставки из реального прогона.
write_status --run-result
обязателен: без результата, с чужим SHA или непройденными проверками
статус не пишется;published_commit— целевой коммит тега.
demo-pages выполняет тесты и паритет до генерации статуса и сверяет
приёмку; кэш service worker версионируется хэшем всех исполняемых
ресурсов (включая engine.js). - Наблюдение за обратной связью. Сборщик кандидатов KPI: issues
state=all, комментарии, discussions с ответами (оболочка GraphQL,
курсорная пагинация); UNAVAILABLE отделён от нуля;--json; признаки
конкретного использования и рекрутинга; синтетика помечается и в журнал
не попадает. - Входы согласованы. Шесть MCP-инструментов во всех носителях
(llms.txt, USAGE, server.json, шапка сервера); самодостаточный
воспроизводимый пример в llms.txt с фактическим выводом и кодом
возврата; состав инструментов в selftest выводится из контракта. - Автономия. Документы приведены к постоянному поручению от
2026-09-06 (GOVERNANCE §2 п.5): тег, подпись существующим GPG-ключом
проекта, Release и поставка через CI выполняются контуром
сопровождения; барьеры сохранены.
Установка
pip install humanizer-ru==3.33.0
MCP: {"mcpServers": {"humanizer-ru": {"command": "humanizer-mcp"}}}.
Демо без установки: https://vladimir-human.github.io/humanizer-ru/
Совместимость
Breaking changes: нет. Контракт аддитивен (координаты находок,
url_marker, removal_guards, reproduce_public/source_data);
имена команд, существующие поля, типы, коды выхода и режимы сохранены.
Изменения поведения документированы в CHANGELOG (раздел 3.33.0).
Артефакты
humanizer-ru-3.33.0.zip— детерминированный архив скилла
(scripts/check_release.py --build, 125 файлов, 645177 байт);
sha256:83afdd18572cc25023c23c5643362bfdb3a2c8679aa508d06989cc9f226232ef.humanizer-ru-3.33.0.zip.asc— отсоединённая GPG-подпись архива
(ключ проекта 023E1F146B59348F); проверка:gpg --verify humanizer-ru-3.33.0.zip.asc humanizer-ru-3.33.0.zip.
Полный список изменений: CHANGELOG.md, раздел 3.33.0.