humanizer-ru 3.34.0
Что нового
- Числовой контракт сверки фактов: точный строковой канон чисел без
промежуточного float (дробь, знак, целые за границей 2^53, число из 400
цифр — штатный вход); единицы сопоставляются с границей слова; записи
дд.мм без года явно разведены с датами (пометка date_like);
«1.5 кг» и «1,5 кг» — один факт. - Сохранность разметки: сканер HTML-тегов учитывает кавычки атрибутов и
многострочные конструкции; think-блоки и сцепки источника снимаются
только вне fenced/frontmatter/инлайн-кода (граница детектора);
action_fix не перезаписывает файл, который скан считает чистым. - Unicode-паритет Python и JS: класс переноса Python \w исправлен на
[\p{L}\p{N}_] (комбинируемые знаки не входят); регенерированы
demo/markers.js и sw.js; векторы паритета расширены (17 векторов). - Совместимость поставок: сравнение стало полным и типизированным
(все файлы и вложенные поля конвертов; 1 и True — разные типы;
удалённые поля ловятся; явный список нормализуемых нестабильных
значений). - Приёмка блокирует публикацию: pypi-publish выполняет полный строгий
прогон, факты strict-publication, совместимость и живой интервал
публикаций перед необратимым шагом; release-check работает в --strict,
принимает явный тег через input и проверяет криптоподпись и интервал
после публикации между двумя конкретными релизами. - Гейты убивают собственных мутантов: недоступный node — FAIL
обязательной проверки паритета; исключение ReDoS содержательное;
bounded-time прогон выражений в дочернем процессе; мутации обязаны
менять применимый вход; tests/test_gate_mutations.py. - Живые агентные входы: scripts/check_live_distribution.py сверяет
локальные server.json/пакет/контракт с PyPI, официальным реестром MCP
и Pages; публикация записи реестра без секретов (GitHub OIDC,
workflow publish-mcp.yml); запись реестра обновлена до 3.33.0 и
перечитана обратно (status active). - Внешняя обратная связь без слепых зон: тела discussions, комментариев
и ответов с курсорной пагинацией каждого уровня; GraphQL errors/
partial/RATE_LIMITED обработаны; доказательность KPI —
scripts/check_feedback_evidence.py и журнал
research/external-feedback/evidence.v1.json; регулярный сбор в CI
(feedback-collect.yml) без публичных сообщений. - Исполняемые пользовательские входы: самодостаточный рецепт
«Попробовать за 30 секунд» (вход создаётся командой; вывод и код
возврата получены фактическим исполнением рецепта); матрица
проверенных возможностей и границ без заявлений о лидерстве;
tests/test_installed_user_journeys.py — четыре пути на установленном
артефакте вне исходного дерева. - Демо: один результат на весь интерфейс; точные координаты подсветки в
исходном тексте (NFC и тень отображаются обратно); mergedRanges
сортирует интервалы; копирование отчёта согласовано с результатом
(пересчёт при изменении текста до debounce); браузерная проверка
scripts/check_demo_browser.py. - Формулировки приведены в соответствие границам: снято обещание
«естественность без искажения смысла», вердиктное «крайне маловероятен
ИИ» заменено фактом о периоде, «текст целиком машинный» уточнено до
«покрыт артефактами машинного слоя»; формула позиционирования укорочена
до 98 символов синхронно во всех поверхностях (требование реестра MCP).
Breaking changes
- Нет. Контракт аддитивен: новые поля (date_like), новые скрипты и гейты,
новые векторы; команды, коды выхода и существующие поля не изменены.
Изменения поведения безопасных режимов и очистителя описаны выше и
покрыты тестами сохранности.
Приёмка
python3 scripts/check_all.py --strict— 150 гейтов, FAIL 0, SKIP 0.python3 -m unittest discover -s tests— OK.python3 scripts/check_release.py --release-contract— тег подписан
существующим ключом проекта, подпись проверена (в т.ч. во временной
связке из docs/release-signing-key.asc).python3 scripts/check_release.py --pre-release-intervalи
--post-publication-interval— интервал ≥ 86400 с по published_at.python3 scripts/check_pypi_metadata.py --sdist … --wheel …и--live
— metadata публикуемых артефактов и живого PyPI.python3 scripts/check_live_distribution.py --json— PyPI, реестр MCP
и Pages согласованы с деревом.