Двадцать пять состояний четырнадцати экранов вех M1 «Вход и регистрация» и M2 «Афиша». Слева — сторона макета, справа — наша сборка, всё на кадре 390 dp. Это третья редакция страницы: во второй сторона макета была чертежами по обрезанному дампу, и два вывода из этих чертежей оказались неверными. Теперь у 23 состояний из 25 слева настоящая картинка макета, а внизу шапки — разбор того, что в прошлой редакции было написано не так.
Что показано слева
tools/figma_local_render.py по выгруженному дереву: координаты, размеры, скругления, заливки, градиенты, тени и тексты берутся из дампа. Работает без сети и повторяется в любой момент. Проверен на нодах, где есть и настоящий рендер: например у A8 полоса шагов, поля и кнопка совпадают до пикселя.Чего локальный рендер не умеет
Что удалось выгрузить и что осталось
/v1/images ответил 429 с retry-after 398 136 с — это около 4.6 суток, то есть до ~12.09. Квота считается на аккаунт и общая на деревья и рендеры.tools/figma_dump.py и tools/figma_render.py: оба докачивают только недостающее и прерываются безопасно.docs/figma/export/; сами страницы (174 МБ) в git не кладём, рендеры и индексы — кладём. Порядок описан в docs/figma/export/README.md.Что было неверно в прошлой редакции этой страницы
Ниже — построчный разбор: что стояло на странице, почему это неверно и чем проверено. Общая причина у половины пунктов одна: сторона макета была не картинкой, а чертежом по дампу, обрезанному по глубине. В таком дампе не видно ни содержимого компонентов, ни вложенных закрасок — и выводы «в макете тут пусто» рождались из того, что дамп просто не докопал.
«Двадцать пять состояний шестнадцати экранов»
Экранов четырнадцать: A8, A9, A10, A11, A12, B1, B2, B3, B5, B6, B7, B9, B13, B14. Число 16 — это количество задач вех M1 и M2, а не экранов; я подставил одно вместо другого.
«замер по четырём рендерам дал (151,200,255) — это ровно белый 60 %»
Рендеров было три, не четыре, и вывод неверный. В дереве ноды выключенная brand-кнопка — это слой «Fill + Shadow» с прозрачностью 50 % поверх #007AFF с белым 12 %. На белом фоне получается (143, 196, 255), а «белый оверлей 60 %» даёт (153, 202, 255) — на 10 единиц бледнее. Кроме того, оверлей белым верен только на белом фоне, а прозрачность слоя — на любом.
«полоса шагов показывает пройденные шаги, а не текущий»
Неверно. Закраска лежит вложенным прямоугольником внутри сегмента, а в обрезанном дампе вложенности не было видно — я решил, что сегмент пустой. На «Шаг 1 из 4» первый сегмент закрашен на 42 из 85, на «Шаг 3 из 4» — два по 85 и третий на 42. То есть пройденные целиком, текущий наполовину.
FIGMA-CHECK «на шагах 3 и 4 в макете не закрашено ни одного сегмента»
Та же причина и тот же неверный вывод: закрашено, просто закраска вложенная.
«три группы 358×70 (лейбл 18 + gap 8 + поле 44)» в панели «Сверено по редлайну»
Строка была верной, а код — нет: в PodusheTextField стояла высота 48. То есть строка стояла в панели «сверено», хотя сверки не было. Сейчас поле 44, и это видно на снимке.
Заголовок панели «Сверено по редлайну»
В панели вперемешку лежали замеры из дампа ноды, числа из прозы спеки 4.5, строки из strings.md, наши собственные замеры по снимкам и наши же решения. У трёх состояний (A8 заполнено, A8 ошибки, B13 пусто) редлайна не было вовсе. Сейчас у каждой строки стоит метка источника.
«штрих 21, промежуток 10.5» у пунктира овала A11
Это оценка по рендеру, а не замер: штрихи на рендере разной длины (7.5, 21, 7). Сейчас так и написано.
B1: «пять чипов: Неделя, Рядом, Популярные, Новые, Проверенные» со ссылкой на 180:8884
В ноде 180:8884 чипов четыре, и «Новых» среди них нет. Пять чипов — в NEW-блоке «Обновление карты + отображение Куда я иду» от 25 августа (693:70691 и соседние). Сборка следовала NEW-блоку, а страница ссылалась на старую ноду.
B1: «содержимое шторки: NEW-карточка “Куда иду”, дальше “Афиша города”»
Карточки «Куда иду» в шторке нет ни в 180:8884, ни в NEW-блоке, ни в списке B7. Она лежит на карте на (16, 508) и заменяет собой пилюлю «Смотреть списком». Сборка ставила её первым блоком шторки — это была настоящая ошибка вёрстки, а не описка на странице; сейчас исправлено.
B1: «рельс 248 с карточками 300×228»
Рельс 282, карточки 300×262. Разница в том, что бейдж категории в макете стоит под обложкой, а на самой обложке лежат блок даты 47×60 и цена — у нас ни того, ни другого не было.
B13: «строки 108»
Строка события 114. Шесть недостающих dp — это нижняя строка 26 вместо 20: в ней кроме организатора стоит ещё цена с icon-ticket.
B9: «блок белый r32 335: паддинг 16/24/16/16, gap 20, по центру»
«По центру» неверно: иконка стоит на x=16, у описания textAlignHorizontal = LEFT. Сборка центрировала весь блок. Плюс между счётчиками и описанием идёт разделитель 358×1, которого не было.
B5: «точки: дни с событиями — из GET /public/events/calendar»
Точек в макете нет. У ячейки есть выключенный счётчик — белая пилюля 28×16 с числом. Точка была нашей выдумкой, то есть нарушением правила П-5 «не выдумывать».
«Квота Figma… retry-after сегодня показывает 303 750 с… до ~11.09»
Устарело в тот же день: с новым токеном выгрузка пошла и встала снова на retry-after 398 136 с — это около 12.09. Квота считается на аккаунт и общая на «деревья» и «рендеры», поэтому дампы страниц её и съели.
«Скрипт готов и лежит в tools/figma_export.py»
Такого файла нет. Скриптов три: tools/figma_dump.py (деревья), tools/figma_render.py (рендеры) и новый tools/figma_local_render.py (рисует ноду локально по дампу).
B1: «плитки интересов берут ширину по содержимому, разложены FlowRow»
Половина верна: ширину они правда берут по содержимому. Но раскладка не переносом — в ноде это два ряда шире листа (455 и 477 при 358), которые уезжают вбок вместе. FlowRow давал три ряда по два вместо двух рядов по три.
Схемы «по редлайну» вместо картинок макета
Чертежи рисовались по обрезанному дампу, поэтому в них не было ни содержимого кнопок, ни вложенных закрасок — и именно из-за этого родились две неверные находки выше. Сейчас слева стоят настоящие рендеры или локальный рендер по полному дереву.
A8 · пусто
Замеры и откуда они
Что показало ревью
ассетыАватар без фото — серый круг с Material-иконкой: 3D-иллюстрации в дереве лежат растровыми заливками, а их картинки отдаёт отдельная ручка, до которой квота не дожила.
A8 · заполнено
Замеры и откуда они
Что показало ревью
A8 · ошибки валидации
Замеры и откуда они
Что показало ревью
A9 · пусто
Замеры и откуда они
Что показало ревью
ассетыНа месте 3D-иконок пустые слоты: в дереве это растровые заливки (3D-icon-sport, -education, -camera, -pet, -puzzle, -music, -eat, -heart, -thres, -movie), сами картинки не выгружены.
A9 · выбрано
Замеры и откуда они
Что показало ревью
A10 · база
Замеры и откуда они
Что показало ревью
A10 · отказ в камере
Замеры и откуда они
Что показало ревью
A11 · камера
Замеры и откуда они
Что показало ревью
вниманиеОтклонение О-6: в ноде фон вне овала ещё и размыт (blur 24). Размыть часть живого превью нечем — его рисует SurfaceView, на который Modifier.blur не действует. Оставлено одно затемнение.
A11 · снимок
Замеры и откуда они
Что показало ревью
A11 · ошибка
Замеры и откуда они
Что показало ревью
A12 · успех
Замеры и откуда они
Что показало ревью
вниманиеНа снимке за шторкой чёрное поле: Paparazzi снимает dialog-назначение отдельно от экрана под ним. В приложении там карта — это видно на левой картинке. Артефакт области снимка, а не сборки.
B1 · карта
Замеры и откуда они
Что показало ревью
ассетыКарта в снимке — ровная подложка: MapLibre на JVM не поднимается, эмулятора в окружении нет (блокер B-2).
B1 · шторка
Замеры и откуда они
Что показало ревью
B2 · радиус
Замеры и откуда они
Что показало ревью
B3 · фильтры
Замеры и откуда они
Что показало ревью
ассетыПревью карты — белый блок с пином: второй экземпляр MapLibre внутри шторки не поднимаем, на JVM он всё равно не рисуется.
B3 · выбрано
Замеры и откуда они
Что показало ревью
B5 · календарь
Замеры и откуда они
Что показало ревью
B6 · старт
Замеры и откуда они
Что показало ревью
B6 · результаты
Замеры и откуда они
Что показало ревью
B6 · ничего не найдено
Замеры и откуда они
Что показало ревью
вниманиеНа снимке обложки в блоке «Популярные рядом с вами» выходят прозрачными: тень в связке с drawWithContent внутри LazyColumn layoutlib рисует не так, как устройство. Артефакт рендера снимков, не приложения.
B7 · список
Замеры и откуда они
Что показало ревью
B9 · категория
Замеры и откуда они
Что показало ревью
ассетыЧисло подписчиков рисуется, только если придёт: ручки под него в контракте нет (BACKEND-GAP).
B13 · «Куда иду»
Замеры и откуда они
Что показало ревью
B13 · пусто
Замеры и откуда они
Что показало ревью
вниманиеНоды 693:74315 нет ни среди рендеров, ни в выгруженных деревьях: её страница в шестёрку выгруженных не попала. Сверять это состояние пока не с чем.
B14 · афиша города
Замеры и откуда они
Что показало ревью
вниманиеНоды 794:161851 тоже нет в выгруженных деревьях — страница не попала в шестёрку. Замеры в панели взяты из прозы спеки, а не из макета, и помечены так.