Safari Technology Preview 251: повторный AudioContext.close не отклоняет promise и teardown ошибочно считает второе закрытие успешным. People-first проверка: машина teardown «state → close #1 → settled → close #2 → rejection»; синтетический стенд, опровержимый контроль, один обратимый шаг, stop-line и минимизированный handoff.
Ответ и граница: Web Audio
Начните не с переключения настроек, а с проверяемой границы. Запрос «как проверить reject повторного AudioContext close в Safari Technology Preview 251» относится только к ситуации: повторный AudioContext.close не отклоняет promise и teardown ошибочно считает второе закрытие успешным. Условие успеха записывается до запуска: первый close завершает state closed, второй promise отклоняется и не создаёт ложный успешный teardown. Внешне похожая ошибка сама по себе ничего не доказывает; отдельно проверяется ловушка «unhandledrejection из другого promise, ошибочно связанный со вторым AudioContext.close». Похожий внешний эффект не равен той же причине: feature detection, версия и неизменяемые условия фиксируются заранее; отсутствие API означает unsupported, а отсутствие наблюдения — unknown. Производственный сайт, реальный аккаунт и пользовательские данные исключены.
Что подтверждают Release 251 и 318522@main
Официальные WebKit Release Notes датированы 26 августа 2026 года и для Safari Technology Preview 251 сообщают: AudioContext.close теперь отклоняется при вызове на уже закрытом context. Строка релиза ведёт к первичной записи 318522@main; её commit title и доступность перепроверены 29 августа. Эта доказательная база ограничена кодовым изменением TP 251. Она не обещает перенос в stable Safari, индексацию статьи или воспроизведение на стороннем сайте. Технический предел статьи совпадает с формулировкой 318522@main и не расширяется поисковым заголовком.
Стенд и рабочий артефакт 318522
Стенд: пустой AudioContext без media input и без пользовательского аудио, последовательный журнал двух close promises. До воздействия без интерпретации запишите: context.state, номер close, promise status, exception.name, settlement order и число statechange. Рабочий артефакт — машина teardown «state → close #1 → settled → close #2 → rejection». Паспорт опыта хранит только технические величины, необходимые для опровержения. Cookie, IP, bearer-данные, локальные пути, приватные URL и рабочие документы в него не попадают. Наблюдение не интерпретируется до прохождения control и финального cleanup.
Контроль, который может опровергнуть гипотезу
Контроль готовят до canary, иначе он превращается в объяснение задним числом. Для этой боли используется: новый context с единственным close и проверка feature/policy до создания. Он проходит тот же порядок запуска, settle-событие и набор полей, что основная ветка. Риск «unhandledrejection из другого promise, ошибочно связанный со вторым AudioContext.close» получает отдельный признак. Сравнение готовят заранее и не переписывают после результата. Только раздельная реакция canary/control позволяет связать наблюдение с проверяемым условием. Такой дизайн делает тезис опровержимым и не требует доступа к исходным данным пользователя.
Одно обратимое воздействие
Разрешён один шаг: закрыть пустой context один раз, затем вызвать close повторно и удалить ссылку. Сначала снимите baseline, затем выполните только указанную операцию, дождитесь заранее выбранного события завершения и повторите поля «context.state, номер close, promise status, exception.name, settlement order и число statechange». Операция выполняется один раз на synthetic fixture. Повторный baseline после cleanup важнее впечатления от промежуточного кадра и является обязательным условием валидности. PASS допустим, когда первый close завершает state closed, второй promise отклоняется и не создаёт ложный успешный teardown. Результат не усиливают словами о массовости; production, VPN, маршрутизация, чужие сайты и реальные media остаются вне опыта.
Stop-line, решение и минимальный handoff
В отчёт попадает не впечатление, а заранее определённый критерий PASS. Остановитесь, если создание context требует запрещённого user gesture, страница уходит в background или wrapper проглатывает rejection. Финальная запись хранит машина teardown «state → close #1 → settled → close #2 → rejection», результат контроля, отметку rollback и ссылку на 318522@main. Финальный статус не бинарный: отдельно различаются воспроизведение, отсутствие воспроизведения, отсутствие поддержки, блок среды, невалидность и нехватка данных. Handoff должен позволять повтор без исходных данных пользователя: одна страница/extension fixture, измерения, control, cleanup и точная ссылка на изменение. PASS означает только условие «первый close завершает state closed, второй promise отклоняется и не создаёт ложный успешный teardown». Материал не обещает индексацию, позиции, поисковый спрос, stable-поддержку или автоматическое исправление.
Материал подготовлен редакцией VOne с помощью ИИ; дата, WebKit Release 251, primary commit 318522@main, техническая граница, независимый контроль, обратимость, privacy-stop и роль community lead постатейно проверены 29 августа 2026 года.
Источники и проверка
- WebKit — Release Notes for Safari Technology Preview 251 проверено 2026-08-29
- WebKit commit 318522@main проверено 2026-08-29
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.