Safari Technology Preview 251 перерисовывает ::highlight после смены CSS. Безопасная локальная диагностика: временная шкала «rule mutation → next frame → highlight pixel → rollback frame», одна переменная, отрицательный контроль, rollback и минимизированный пакет для поддержки.
Рабочее определение проблемы
Запрос «как проверить repaint ::highlight после изменения CSS rule в Safari Technology Preview 251» сводится к одной проверяемой боли: цвет Custom Highlight остаётся прежним после изменения CSSStyleRule, пока страницу не заставят перерисоваться другим действием. До опыта фиксируется ожидаемый признак: цвет Custom Highlight обновляется на следующем наблюдаемом кадре без scroll, resize или принудительного чтения layout. Нельзя расширять вывод на stable Safari, другой движок, произвольный сайт или массовость симптома. Главная ловушка здесь такова: изменение правила и изменение диапазона выделения имеют разные invalidation paths; статья проверяет только первое. Поэтому наблюдение получает статус reproduced только после повторного одинакового результата и успешного возврата; not reproduced относится исключительно к этому стенду, а unsupported, environment-blocked и unknown остаются разными статусами.
Почему тема актуальна именно сейчас
Официальные Release Notes WebKit от 26 августа 2026 года формулируют изменение так: WebKit сообщает об исправлении отсутствующего repaint ::highlight() после изменения CSS rule. Пункт связан с первичной записью 319169@main. Release page доказывает наличие изменения в ветке Safari Technology Preview 251, а commit задаёт техническую границу конкретной правки. Ни один из этих источников сам по себе не подтверждает частоту запроса, результат на конкретном устройстве или будущий перенос в стабильный выпуск. Публичная ветка о релизе использована только как свежий community lead; комментарии, реакции и поисковые snippets не превращаются в доказательство причины.
Baseline, fixture и privacy-граница
Стенд: локальный абзац с искусственным текстом, одним Range в CSS.highlights и отдельным stylesheet-правилом для ::highlight. До воздействия запишите: cssText правила, RGB ожидаемой заливки, screenshot hash, состояние Range и отсутствие transition/animation. Рабочий артефакт — временная шкала «rule mutation → next frame → highlight pixel → rollback frame». У каждого ряда должны быть версия TP 251, время, expected, observed и отметка о валидности контроля. Не сохраняются IP, cookie, токены, Authorization, полные URL с приватными query, локальные пути, имена профилей и содержимое рабочих документов. Случайные или вымышленные данные стенда помечаются как тестовые. Если обязательное поле нельзя получить без доступа к реальным данным, эксперимент останавливается: пробел не заполняют догадкой и не компенсируют дополнительной мутацией.
Сравнительный прогон без побочных действий
Canary меняет ровно одну причину: изменить только background-color через CSSStyleRule.style, дождаться rendering opportunity, снять кадр и вернуть исходный цвет тем же путём. Контроль устроен отдельно: обычный span под соседним CSS rule меняет цвет тем же API, а перестановка Range не используется, чтобы не смешивать две причины repaint. Сначала снимается baseline, затем выполняется единственное воздействие, после него — заранее выбранное измерение, затем полный rollback и повтор baseline. Новый шаг не добавляют, пока предыдущий не получил результат и контроль. Если rollback не вернул исходное состояние, прогон invalid, даже когда картинка кажется убедительной. Тест выполняется только локально или на специально подготовленном безопасном стенде; production, пользовательские сессии и чужие страницы в процедуру не входят.
Классификация исхода для команды
PASS для узкой гипотезы означает: цвет Custom Highlight обновляется на следующем наблюдаемом кадре без scroll, resize или принудительного чтения layout. Практический результат оформляется как временная шкала «rule mutation → next frame → highlight pixel → rollback frame». Stop-line: если тесту понадобился resize, смена Range или toggle display, это отдельный forced repaint и исходный результат считается неопределённым. Для передачи разработчику достаточно: минимальный Range, исходный и новый cssText, два обезличенных кропа, frame timestamps и ссылка 319169@main. Перед отправкой артефакт ещё раз очищают от идентификаторов и проверяют, что отрицательный контроль действительно отличался только указанной переменной. Материал не обещает исправление на другом сайте, стабильную поддержку функции, индексацию, позиции или универсальное поведение; он даёт воспроизводимый путь, по которому команда может отделить наблюдаемый факт от предположения.
Материал подготовлен редакцией VOne с помощью ИИ; дата, первичный WebKit commit 319169@main, техническая граница, контроль, обратимость, privacy-stop и роль community lead постатейно проверены 29 августа 2026 года.
Источники и проверка
- WebKit — Release Notes for Safari Technology Preview 251 проверено 2026-08-29
- WebKit commit 319169@main проверено 2026-08-29
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.