Safari Technology Preview 251: запланированный audio source не отправляет ended, если он не подключён к destination, и cleanup зависает. People-first проверка: жизненный цикл «scheduled → started → disconnected → ended count → cleanup»; синтетический стенд, опровержимый контроль, один обратимый шаг, stop-line и минимизированный handoff.
Ответ и граница: Web Audio
Надёжный ответ появляется только после явного baseline и способного опровергнуть гипотезу контроля. Запрос «как проверить ended event у AudioScheduledSourceNode без connection к destination в Safari Technology Preview 251» относится только к ситуации: запланированный audio source не отправляет ended, если он не подключён к destination, и cleanup зависает. Условие успеха записывается до запуска: disconnected-ветка получает ended ровно один раз, а обе ветки завершают cleanup без повторного события. Внешне похожая ошибка сама по себе ничего не доказывает; отдельно проверяется ловушка «тишина на выходе, ошибочно принятая за факт завершения lifecycle event». До опыта определите, что будет считаться invalid и unknown. Это защищает от вывода по отсутствующему API, случайному exception или одновременной смене нескольких условий. Производственный сайт, реальный аккаунт и пользовательские данные исключены.
Что подтверждают Release 251 и 318515@main
Официальные WebKit Release Notes датированы 26 августа 2026 года и для Safari Technology Preview 251 сообщают: исправлена отправка ended у AudioScheduledSourceNode, не подключённого к destination. Строка релиза ведёт к первичной записи 318515@main; её commit title и доступность перепроверены 29 августа. Из release page и commit нельзя выводить массовость, рейтинг или результат на произвольном Mac. MacRumors, Reddit и snippets не повышают уровень evidence технического тезиса. Технический предел статьи совпадает с формулировкой 318515@main и не расширяется поисковым заголовком.
Стенд и рабочий артефакт 318515
Стенд: короткий синтетический AudioBufferSourceNode без destination connection, счётчик событий и таймер только для stop-line. До воздействия без интерпретации запишите: start time, stop time, connection count, ended timestamp, event count, node state и cleanup flag. Рабочий артефакт — жизненный цикл «scheduled → started → disconnected → ended count → cleanup». В таблице оставляют expected/observed, единицу, build и timestamp. IP, cookie, токены, Authorization, реальные query, пути и пользовательские файлы запрещены; недоступное поле остаётся пустым с причиной. Наблюдение не интерпретируется до прохождения control и финального cleanup.
Контроль, который может опровергнуть гипотезу
Control не доказывает универсальность; он проверяет, что стенд способен различить соседнюю причину. Для этой боли используется: идентичный source, подключённый через GainNode к destination с gain=0. Он проходит тот же порядок запуска, settle-событие и набор полей, что основная ветка. Риск «тишина на выходе, ошибочно принятая за факт завершения lifecycle event» получает отдельный признак. Положительный результат допустим лишь при валидной отрицательной ветке. Отказ обеих веток показывает проблему fixture либо среды и блокирует технический вывод. Такой дизайн делает тезис опровержимым и не требует доступа к исходным данным пользователя.
Одно обратимое воздействие
Разрешён один шаг: запустить один source без подключения, дождаться scheduled end и удалить все ссылки на graph. Сначала снимите baseline, затем выполните только указанную операцию, дождитесь заранее выбранного события завершения и повторите поля «start time, stop time, connection count, ended timestamp, event count, node state и cleanup flag». Операция выполняется один раз на synthetic fixture. Повторный baseline после cleanup важнее впечатления от промежуточного кадра и является обязательным условием валидности. PASS допустим, когда disconnected-ветка получает ended ровно один раз, а обе ветки завершают cleanup без повторного события. Результат не усиливают словами о массовости; production, VPN, маршрутизация, чужие сайты и реальные media остаются вне опыта.
Stop-line, решение и минимальный handoff
Результат может быть reproduced, not reproduced, unsupported, environment-blocked, invalid или unknown. Остановитесь, если context suspended, source не стартовал, тест полагается только на wall clock или node удерживается отладчиком. Финальная запись хранит жизненный цикл «scheduled → started → disconnected → ended count → cleanup», результат контроля, отметку rollback и ссылку на 318515@main. Решение хранится как один из шести статусов с причиной. Это не прогноз stable Safari и не обещание автоматического исправления проекта. Handoff должен позволять повтор без исходных данных пользователя: одна страница/extension fixture, измерения, control, cleanup и точная ссылка на изменение. PASS означает только условие «disconnected-ветка получает ended ровно один раз, а обе ветки завершают cleanup без повторного события». Материал не обещает индексацию, позиции, поисковый спрос, stable-поддержку или автоматическое исправление.
Материал подготовлен редакцией VOne с помощью ИИ; дата, WebKit Release 251, primary commit 318515@main, техническая граница, независимый контроль, обратимость, privacy-stop и роль community lead постатейно проверены 29 августа 2026 года.
Источники и проверка
- WebKit — Release Notes for Safari Technology Preview 251 проверено 2026-08-29
- WebKit commit 318515@main проверено 2026-08-29
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.