Работа с интерфейсом ставит перед агентом задачу, которой нет в чистом коде: результат надо увидеть. Браузер умеет открыть приложение, повзаимодействовать с ним и вернуть визуальное свидетельство. Canvas собирает интерактивный артефакт рядом с разговором. А режим дизайна внутри браузера передаёт агенту выбранный элемент вместе со снимком и данными компонента. Три разных способа замкнуть цикл на наблюдаемом состоянии, а не на пересказе, и различаются они тем, к чему привязано свидетельство: к живому приложению, к отдельному артефакту или к конкретному узлу разметки.
Наивная просьба звучит знакомо: сделай кнопку красивее. Она не работает не потому, что модель не понимает эстетику, а потому, что в ней нет ни точки приложения, ни критерия. Агент вынужден догадываться, о какой кнопке речь и что считать лучше, и любая его трактовка окажется чужой. Дальше начинается перебор вариантов, который дороже и медленнее одной точной формулировки. Проверить свой запрос легко: если по нему нельзя сказать, какое изменение считать выполненным, а какое нет, то и результат оценить будет нечем.
Режим дизайна закрывает именно эту дыру. Он передаёт не слова, а данные: путь до элемента, атрибуты, вычисленные стили, свойства компонента из дерева и визуальное окружение. Можно выбрать один элемент или несколько, обвести область на замороженном кадре и добавить голосовое описание. Разница принципиальна: агент получает точный адрес и текущее состояние вместо описания на естественном языке, где каждое слово можно понять двояко. Вычисленные стили здесь важнее прочего - они показывают, что реально применилось к узлу после всех наследований и переопределений, а не что написано в исходном файле.
Полезно один раз проговорить визуальный цикл целиком, потому что в нём легко пропустить шаг. Сервер разработки поднят воспроизводимой командой проекта. Выбран точный элемент или область, а не вся страница. Запрос описывает измеримое состояние: отступы, выравнивание, переполнение, контраст. Проверены и широкий, и узкий вьюпорт. После изменения снят снимок или запись. И diff не содержит случайных правок, разъехавшихся по всему оформлению.
Последний пункт этого цикла - самый недооценённый. Изменения оформления легко расползаются: правка одного компонента затрагивает общие переменные, а те - половину интерфейса. Механизм тут обычный для дизайн-систем: значение выглядит локальным, пока не выяснится, что на него ссылаются ещё десяток мест. Поэтому визуальную задачу заканчивают не снимком, а просмотром diff: он показывает, осталось ли изменение локальным, или вы только что поменяли отступы во всём приложении.
Canvas стоит в этом ряду отдельно, и его границу лучше понимать заранее. Он даёт интерактивный артефакт рядом с разговором - удобно, чтобы быстро посмотреть на вариант компонента, сравнить два подхода к раскладке или показать идею собеседнику. Но артефакт живёт не внутри приложения: у него нет ни окружения вашего приложения, ни его стилевых переменных. Он отвечает на вопрос как это может выглядеть, а не на вопрос как это будет работать в проекте. Смешивать эти два вопроса - самый быстрый способ принять удачный набросок за проверенное изменение.
Отдельно стоит понимать границу визуального доказательства вообще. Снимок показывает состояние в один момент и в одном вьюпорте. Он не доказывает работу с клавиатуры, не проверяет семантику разметки, ничего не говорит о состояниях загрузки и ошибки и не отвечает за доступность. Это ценное свидетельство, но узкое: полноценная проверка интерфейса складывается из взаимодействия, автоматических проверок и осознанного просмотра тех состояний, которые на снимке не видны.
Есть и совсем прозаичный способ обмануться, о котором знают все, кто работал с горячей перезагрузкой. Снимок показывает нужное состояние, но правка в diff не та; или наоборот, diff выглядит правильно, а на экране старая картинка. И то и другое означает одно: свидетельство не привязано к изменению. Кадр мог быть снят до перезагрузки, сервер мог отдавать прошлую сборку, а браузер - страницу из кэша. Признак понятен по расхождению между тем, что видно, и тем, что записано в файлах, и лечится он не спором с агентом, а честной перезагрузкой и повторным снимком.
Инженерный вывод простой: визуальные инструменты хороши тем, что превращают расплывчатое лучше в проверяемое состояние. Их сила не в красивой картинке, а в точности адресации и в наличии свидетельства после изменения. Всё остальное - обычная дисциплина: измеримый критерий, узкая область, просмотр diff и понимание, чего снимок не доказывает.
Типичные провалы работы с интерфейсом предсказуемы. Просить сделать красивее без точки приложения и критерия. Проверять только широкий экран и получить сломанную узкую раскладку. Принять снимок за приёмочный тест и пропустить клавиатуру, доступность и состояния ошибки. Спутать артефакт рядом с разговором с проверкой в реальном приложении. И не посмотреть diff, обнаружив потом, что локальная правка разъехалась по всему оформлению.
Визуальный цикл
[ ] сервер разработки поднят воспроизводимой командой проекта
[ ] выбран точный элемент или область, а не вся страница
[ ] запрос описывает измеримое состояние: отступы, выравнивание, переполнение, контраст
[ ] проверены широкий и узкий вьюпорт
[ ] после изменения снят снимок или запись
[ ] diff не содержит случайных правок по всему оформлению