К обсуждениям

Safari Technology Preview 251: nested @scope с :has(:scope) выбирает неверный корень

Редакция VOne Технологии

Safari Technology Preview 251: nested @scope с :has(:scope) выбирает неверный корень. Обратимый локальный тест, карта «узел × внешний root × внутренний root × :has match × применившееся правило» и критерий остановки без пользовательских данных и без переноса вывода на стабильный Safari.

Одна проверяемая боль: вложенный @scope применяет правило к соседнему поддереву, когда scope-start содержит :has(:scope ...)

Пользовательская задача этой страницы — как проверить корень nested scope с has scope в safari technology preview 251. Наблюдаемый симптом: вложенный @scope применяет правило к соседнему поддереву, когда scope-start содержит :has(:scope ...). Он не доказывает общую неисправность Safari и не переносится на stable-ветку без отдельной проверки. У этой темы два уровня области видимости, поэтому снимок computed style только конечного узла недостаточен. Нужно записать, какой root сформирован каждым @scope. :scope внутри :has() относится к контексту сопоставления, а не автоматически к ближайшему визуальному контейнеру. Граница диагноза фиксируется до опыта: входные условия, одно действие, ожидаемый и фактический результат. Соседние визуальные или сетевые проблемы не объединяются с этим URL.

Что именно подтверждают WebKit Release 251 и 318711@main

На прямой странице WebKit Release Notes for Safari Technology Preview 251 от 26 августа 2026 года указано: исправлены неверные scoping roots у вложенного @scope, если условие начала содержит :has(:scope ...). Строка ведёт на первичную запись 318711@main в репозитории WebKit. Эти два источника подтверждают наличие и техническую границу изменения в Technology Preview 251, но не подтверждают частоту проблемы, конкретную конфигурацию сайта, поисковый спрос или поведение всех будущих версий. Публичная ветка о релизе используется только как lead свежести, а не как доказательство причины.

Baseline для карта «узел × внешний root × внутренний root × :has match × применившееся правило»

До canary запишите: DOM-узел кандидата, внешний scope root, внутренний scope root, результат :has(), matched rule и итоговое вычисленное свойство. Каждое поле снимается из минимального fixture, а не восстанавливается по памяти. Добавьте точную версию Safari Technology Preview 251, масштаб страницы, локаль и время опыта; не прикладывайте имя профиля, IP, cookie, токены, query-параметры, локальные пути и рабочий контент. Рабочая форма результата — карта «узел × внешний root × внутренний root × :has match × применившееся правило». Пустая колонка обозначается unknown: её нельзя заполнять предположением или текстом из поискового сниппета.

Обратимый canary с одной изменяемой переменной

На изолированной странице постройте две одинаковые соседние ветки DOM, только в одной добавьте маркер для :has(); примените контрастное свойство во вложенном @scope и затем удалите маркер. До действия сохраните baseline, после действия снимите только заранее выбранные поля, затем полностью выполните rollback и повторите наблюдение. Минимальный пример должен работать без аккаунта, расширений, внешних данных и production endpoint. Положительный и отрицательный контроль запускаются отдельно, чтобы не смешивать состояния. Если возврат не восстановил baseline, опыт останавливается: добавлять вторую CSS-декларацию, новый API-вызов или очистку общего кэша нельзя.

Интерпретация без подмены expected и observed

Исправление видно, когда стиль получает только ветка с корректным внутренним корнем, а соседняя остаётся контролем. Если обе ветки окрашены, приложите DOM и одну декларацию. Если не окрашена ни одна, сначала проверяется синтаксис @scope. В итоговой записи разделите supported, reproduced, not reproduced, unsupported и unknown. Статус not reproduced относится только к этой сборке и этому fixture; он не обещает отсутствие регрессии на реальном сайте. Статус reproduced требует одинакового результата минимум в повторе после успешного rollback. Несовпадение контролей означает invalid test, а не повод расширять вывод.

Красная линия и минимальный пакет для 318711@main

Красная линия: не переносите селектор в production и не упрощайте его до обычного descendant selector до фиксации matched rules. Для воспроизводимого обращения достаточно версии сборки, коротких expected/actual, минимального HTML/CSS/JS fixture, результата rollback, карта «узел × внешний root × внутренний root × :has match × применившееся правило» и ссылки на 318711@main. Удалите из вложений локальные пути, идентификаторы, сетевые дампы и реальный контент. Отчёт не обещает срок исправления, индексацию страницы или одинаковое поведение стабильного Safari. Он позволяет другому человеку повторить ровно одну безопасную проверку.

Материал подготовлен редакцией VOne с помощью ИИ; дата, граница факта, первичный WebKit commit, обратимый тест, стоп-линия и роль community lead постатейно проверены 29 августа 2026 года.

Источники и проверка

Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.

Ответы

0 опубликовано
Ответов пока нет. Вы можете начать обсуждение.

Ваш ответ

Добавьте свой опыт или уточнение по теме.

Вы публикуете как Аноним Аватар отличает разговоры, но не раскрывает личные данные.

Ответ появится сразу. Не публикуйте личные данные, ключи и приватные ссылки.