Safari Technology Preview 251: пустой editable с out-of-flow child сохраняет строку. People-first диагностика: геометрический паспорт «child flow → line rect → caret rect → container height»; синтетический fixture, независимый контроль, одно обратимое воздействие, stop-line и обезличенный handoff.
Наблюдаемый симптом без догадок
Прямой ответ на запрос «как проверить line box пустого contenteditable с absolute child в Safari Technology Preview 251» начинается с границы: проверяется только боль «пустой редактируемый контейнер с единственным positioned ребёнком теряет строку и схлопывает caret-высоту» на локальном fixture. Успех заранее определяется так: при absolute child контейнер сохраняет line box и caret rect, а геометрия ребёнка остаётся out-of-flow. Нельзя подменять его похожей картинкой, общей скоростью браузера или выводом о стабильном Safari. Отдельная ловушка — автоматически вставленный br, скрывающий потерю исходной строки. Исход получает один из статусов reproduced, not reproduced, unsupported, environment-blocked, invalid или unknown. Первое наблюдение не считается доказательством, пока контроль и возврат к baseline не подтвердили, что изменилась ровно одна причина.
Primary change item без обещаний
Официальная страница WebKit от 26 августа 2026 года относит к Safari Technology Preview 251 следующий change item: исправлена потеря строки у пустого editable container, содержащего только out-of-flow child. Техническая ссылка — 318671@main. Release note и commit подтверждают наличие конкретного изменения в ветке, но не частоту жалоб, спрос, причинность для чужой страницы, результат на данном компьютере или перенос в стабильный выпуск. Публичная ветка MacRumors перепроверена только как community lead. Её текст, реакции и поисковые snippets не используются как фактологическое evidence и не дают права писать о массовости.
Чистый fixture и поля
Fixture: локальный contenteditable фиксированной ширины с одним absolute child и отдельным caret-маркером без пользовательского текста. До действия без интерпретации записываются container height, first client rect, caret rect, line-height, child rect и focus state. Рабочий артефакт — геометрический паспорт «child flow → line rect → caret rect → container height». У каждой строки есть expected, observed, время, версия TP 251 и флаг валидности. Используются только синтетические данные. Запрещено сохранять cookie, IP, Authorization, токены, реальные URLs с query, имена профилей, пользовательские файлы и полные логи. Если нужное поле нельзя получить без персональных или секретных данных, тест останавливается: пробел не заполняют догадкой и не расширяют сбор.
Контроль до canary
Контрольная ветка готовится до canary: пустой contenteditable с псевдоэлементом, но без реального child. Она проверяет, не объясняется ли симптом общей средой или тестовой обвязкой. Риск «автоматически вставленный br, скрывающий потерю исходной строки» получает собственную колонку, потому что совпадение внешнего вида не означает совпадение причины. Если control отклоняется вместе с основной веткой, результат invalid и публикационная формулировка не утверждает воспроизведение. Такой контроль не обещает универсальной корректности; он лишь делает конкретный вывод опровержимым и не позволяет замаскировать соседний сбой вторым изменением.
Одна переменная по шагам
Основной шаг: переключить только position ребёнка между absolute и static, затем восстановить absolute. Сначала фиксируется baseline, затем выполняется только указанное воздействие, после заранее выбранного settle-события повторно снимаются container height, first client rect, caret rect, line-height, child rect и focus state. Далее состояние полностью возвращается и baseline измеряется ещё раз. PASS возможен, когда при absolute child контейнер сохраняет line box и caret rect, а геометрия ребёнка остаётся out-of-flow. Production, реальные аккаунты, чужие сайты, VPN-конфиги, маршрутизация и пользовательские данные в процедуру не входят. Если rollback не возвращает исходные признаки, весь прогон помечается invalid независимо от привлекательности результата.
Как классифицировать исход
Финальное решение хранится как геометрический паспорт «child flow → line rect → caret rect → container height». Reproduced означает только выполнение условия «при absolute child контейнер сохраняет line box и caret rect, а геометрия ребёнка остаётся out-of-flow» на этом стенде; not reproduced не опровергает проблему в других средах. Стоп-линия: остановиться, если редактор вставил br, zero-width character, placeholder или framework mutation. Для передачи разработчику достаточно минимального fixture, версии, обезличенных значений «container height, first client rect, caret rect, line-height, child rect и focus state», результата контрольной ветки, отметки rollback и ссылки на 318671@main. Статья не обещает индексацию, позиции, спрос, стабильную поддержку или автоматическое исправление; сомнительный либо неполный прогон не должен становиться новым URL.
Материал подготовлен редакцией VOne с помощью ИИ; дата, WebKit Release 251, primary commit 318671@main, техническая граница, контроль, rollback, privacy-stop и роль community lead постатейно проверены 29 августа 2026 года.
Источники и проверка
- WebKit — Release Notes for Safari Technology Preview 251 проверено 2026-08-29
- WebKit commit 318671@main проверено 2026-08-29
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.