Python 3.14.7: imaplib снова заключает mailbox с пробелом в кавычки. Практическая инструкция отделяет симптом от соседних причин: синтетический fixture, отрицательный control, таблица наблюдений, критерий остановки и минимальный пакет для поддержки без production-данных.
Что именно проверяется
В этом изменении нет универсального обещания. Официальная запись говорит: imaplib снова quote command arguments when necessary по grammar RFC 3501; уже заключённый в кавычки аргумент сохраняется для совместимости. Проверяемый пользовательский риск сформулирован так: Название mailbox содержит пробел, imaplib отправляет его как два аргумента, и сервер отвечает protocol error, хотя пользователь передал одно корректное имя. Если ваш случай не укладывается в «как проверить quoting IMAP command arguments с пробелами в Python 3.14.7», новый Python может ничего не изменить. Сначала сохраните baseline и заранее решите, какое наблюдение подтвердит границу, а какое отправит расследование в другую ветку.
Минимальный target-case
Минимальный case T22-23: локальный IMAP stub принимает SELECT для синтетического имени Project Archive и записывает raw command, не выполняя вход и операции с письмами. Зафиксируйте вход один раз и используйте его неизменным для всех веток. Рискованный вызов изолируйте, внешнюю сеть запретите, выход child считайте таким же результатом, как return value. Любой ручной workaround применяйте только после baseline, иначе нельзя понять, что именно изменило поведение.
Как разрушить гипотезу
Контроль специально должен разрушать гипотезу: сравнить простое имя без пробела, имя с пробелом, заранее quoted имя и аргумент с NUL как запрещённую ветку. Для каждого запуска заполните «input form | raw astring | quote count | server token count | command result | exception class | NUL rejected». Один и тот же объект между ветками не переиспользуется. Если целевой результат появляется и без исправляемого условия, причина находится выше по стеку; если падают обе ветки, сначала чините fixture и только потом версию runtime.
Passed, blocked или failed
Критерий принятия: имя с пробелом передаётся одним quoted astring, double quoting не появляется, а NUL не уходит на wire. Красной считается не только авария, но и потеря данных, лишний побочный эффект, неподтверждённая capability или загрязнённый repeat. Результат относится к одной issue и одному build mode. Он не гарантирует работу проекта, индексацию страницы или отсутствие иных дефектов.
Безопасная граница опыта
Безопасная граница: не отправлять команду реальному серверу и не ослаблять control-character gate; остановиться при любом credential prompt. Любой выход за неё делает данные непригодными. Не прикладывайте core dump, домашние пути, hostnames, адреса памяти и содержимое рабочих файлов. После завершения сравните process/file inventory с baseline; отличие требует ручной очистки до следующего запуска.
Пакет эскалации
Пакет эскалации: версия Python, четыре синтетических input, raw command с заменённым tag, token counts и exception для NUL. Укажите, совпали ли A и A2, и какой expected result использовался: «имя с пробелом передаётся одним quoted astring, double quoting не появляется, а NUL не уходит на wire». В issue не нужны пользовательские данные или доказательство популярности. Нужны минимальный input, версия, capability и наблюдаемый переход.
Материал подготовлен редакцией VOne с помощью ИИ по открытым официальным и первичным источникам; факты, даты и ссылки перепроверены. Реальные пользовательские данные не использовались.
Источники и проверка
- Python 3.14.7 release проверено 2026-08-29
- Python 3.14.7 changelog проверено 2026-08-29
- CPython issue #40038 проверено 2026-08-29
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.