Паритет: регистрация и афиша

Двадцать пять состояний четырнадцати экранов вех M1 «Вход и регистрация» и M2 «Афиша». Слева — сторона макета, справа — наша сборка, всё на кадре 390 dp. Это третья редакция страницы: во второй сторона макета была чертежами по обрезанному дампу, и два вывода из этих чертежей оказались неверными. Теперь у 23 состояний из 25 слева настоящая картинка макета, а внизу шапки — разбор того, что в прошлой редакции было написано не так.

Что показано слева

  • рендер Figma — картинка, отданная самой Figma. Таких у нас 5: 7 сентября удалось выгрузить 58 рендеров, прежде чем закрылась квота.
  • локальный рендер — та же нода, нарисованная скриптом tools/figma_local_render.py по выгруженному дереву: координаты, размеры, скругления, заливки, градиенты, тени и тексты берутся из дампа. Работает без сети и повторяется в любой момент. Проверен на нодах, где есть и настоящий рендер: например у A8 полоса шагов, поля и кнопка совпадают до пикселя.
  • макета нет на диске — два состояния, чьи страницы не попали в выгруженную шестёрку.

Чего локальный рендер не умеет

  • иконки — это VECTOR без геометрии: дамп не хранит контуры, поэтому вместо иконки рисуется силуэт её цветом, а иконки, у которых есть только обводка, не рисуются вовсе (например лупа в «Недавних запросах» и шевроны — в макете они есть);
  • стекло рисуется своими заливками без размытия фона, поэтому стеклянные кнопки выходят серыми, а в Figma они почти белые (видно на «Пропустить» рядом с настоящим рендером A8);
  • растровые заливки (фото, карта, 3D-иконки) — серая штриховка: сами картинки отдаёт отдельная ручка, до которой не дожила квота;
  • текст набран Inter, а в макете SF Pro — строки шире, и длинные заголовки переносятся там, где в макете умещаются в строку.

Что удалось выгрузить и что осталось

  1. Полные деревья 6 страниц из 18 — «Авторизация и регистрация», «Афиша», «Создание и управление событием», «Взаимодействие участников», «Свайпы событий», «Уведомления». В них лежат все экраны M1–M4: 140 246 узлов со всеми свойствами.
  2. 58 рендеров из 879 запланированных. Дальше /v1/images ответил 429 с retry-after 398 136 с — это около 4.6 суток, то есть до ~12.09. Квота считается на аккаунт и общая на деревья и рендеры.
  3. Остальные 12 страниц и рендеры дотянутся повторным запуском tools/figma_dump.py и tools/figma_render.py: оба докачивают только недостающее и прерываются безопасно.
  4. Деревья лежат в docs/figma/export/; сами страницы (174 МБ) в git не кладём, рендеры и индексы — кладём. Порядок описан в docs/figma/export/README.md.
25состояний
5с рендером Figma
23с локальным рендером
2без макета
26нашлось в этот заход
99юнит-тестов
49снимков

Что было неверно в прошлой редакции этой страницы

Ниже — построчный разбор: что стояло на странице, почему это неверно и чем проверено. Общая причина у половины пунктов одна: сторона макета была не картинкой, а чертежом по дампу, обрезанному по глубине. В таком дампе не видно ни содержимого компонентов, ни вложенных закрасок — и выводы «в макете тут пусто» рождались из того, что дамп просто не докопал.

«Двадцать пять состояний шестнадцати экранов»

Экранов четырнадцать: 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 давал три ряда по два вместо двух рядов по три.

Схемы «по редлайну» вместо картинок макета

Чертежи рисовались по обрезанному дампу, поэтому в них не было ни содержимого кнопок, ни вложенных закрасок — и именно из-за этого родились две неверные находки выше. Сейчас слева стоят настоящие рендеры или локальный рендер по полному дереву.

Рендер Figma 291:25219
рендер Figma · 291:25219 ↗
Локальный рендер 291:25219
локальный рендер · 291:25219 ↗
по дереву ноды, без сети
Наша сборка A8 · пусто
наша сборка

A8 · пусто

Расскажите о себе

291:25219 нода экрана

Замеры и откуда они

дерево нодышапка
390×128, паддинг 64/16/12/16: «назад» 48 на (16, 66), «Пропустить» 110×44 на (264, 68)
дерево нодыполоса шагов
358×6 на (16, 152), четыре сегмента 85, gap 6
дерево нодызаполнение
«Шаг 2 из 4»: второй сегмент на 42 из 85 — половина
дерево нодыгруппа поля
358×70 = лейбл 18 + gap 8 + поле 358×44 r100, паддинг 12/16
дерево ноды«о себе»
358×172 = лейбл 18 + gap 8 + поле 358×120 r24 + gap 8 + счётчик 18
дерево нодызона действия
390×96 на y=748, паддинг 24, кнопка 342×48 на (24, 772)
дерево нодыкнопка disabled
слой «Fill + Shadow» на 50 %: #007AFF плюс белый 12 %
наш замерцвет кнопки
по формуле (143, 196, 255); на рендере (146, 196, 249)

Что показало ревью

  • нашлось сейчасполе было 48, а в потоке регистрации оно 44 — в дереве шести выгруженных страниц инстанс Text Field встречается 60 раз и всюду 358×44; 48 бывает только на экранах создания события. Все четыре группы анкеты были на 4 dp выше макета
  • нашлось сейчасвыключенная кнопка была светлее макета: стоял белый оверлей 60 %, а в дереве это прозрачность слоя 50 % поверх #007AFF с белым 12 %. Разница видна как (153, 202, 255) против (143, 196, 255) — то есть наша кнопка была на 10 единиц бледнее
  • нашлось сейчасполоса шагов закрашивала только пройденные шаги. В дереве текущий шаг закрашен наполовину: «Шаг 1 из 4» — 42 из 85 в первом сегменте, «Шаг 3 из 4» — два по 85 и третий на 42, «Шаг 4 из 4» — три по 85 и четвёртый на 42
  • исправлено«Пропустить» обрезалось до «Пропуст»: в ноде это button-secondary 110×44 с паддингом 8/12, а стоял размер Large 48/20
  • исправленосчётчик «0/150 символов» стоял справа внутри поля — в ноде он отдельной строкой под полем, слева
  • исправленомногострочное поле было 104 из прозы 4.5 — в компоненте 292:25550 оно 120

ассетыАватар без фото — серый круг с Material-иконкой: 3D-иллюстрации в дереве лежат растровыми заливками, а их картинки отдаёт отдельная ручка, до которой квота не дожила.

Рендер Figma 292:25695
рендер Figma · 292:25695 ↗
Локальный рендер 292:25695
локальный рендер · 292:25695 ↗
по дереву ноды, без сети
Наша сборка A8 · заполнено
наша сборка

A8 · заполнено

Анкета с данными

292:25695 нода экрана

Замеры и откуда они

дерево нодыкадр
390×997 — состояние прокручено, поэтому нода выше экрана
дерево нодыимя
«Андрей Костычев» 510/16 в поле 44
дерево нодыдата
«21.10.1996» — выбирается барабанами, клавиатура не открывается
наше решениесчётчик
«93/150 символов» — считаем символы; в макете под тем же текстом стоит «100/150»

Что показало ревью

  • сходитсяполя, порядок и стили сошлись с рендером самой ноды — раньше сверялись по кадру соседнего потока
  • сходится«100/150 символов» в макете — подпись, а не подсчёт: считаем сами
Локальный рендер 292:25797
локальный рендер · 292:25797 ↗
по дереву ноды, без сети
Наша сборка A8 · ошибки валидации
наша сборка

A8 · ошибки валидации

Три ошибки разом

292:25797 нода экрана

Замеры и откуда они

дерево нодыкадр
390×1049 — тоже прокрученное состояние
дерево нодыполе с ошибкой
заливка #F5F5F5 остаётся, добавляется обводка 1 #F84040
дерево нодытекст ошибки
510/14 #F84040 под полем, паддинг 12
дерево нодытексты
«Введите корректное имя с фамилией», «Введите корректную дату рождения», «Введите осмысленное описание»

Что показало ревью

  • исправленокнопка «Продолжить» блокировалась валидностью полей — тогда сценарий 10 раздела 8.5 (три ошибки разом после нажатия) недостижим; теперь она ждёт только заполненности имени и даты
  • нашлось сейчаспрошлая редакция страницы писала, что этой ноды нет ни среди рендеров, ни в редлайнах, и сверять состояние не с чем. Нода есть: она лежит на выгруженной странице «Авторизация и регистрация» и рисуется локально
Локальный рендер 284:25333
локальный рендер · 284:25333 ↗
по дереву ноды, без сети
Наша сборка A9 · пусто
наша сборка

A9 · пусто

Какие события вам интересны?

284:25333 нода экрана

Замеры и откуда они

дерево нодыблок чипов
390×518 на y=326, ряды 390×44, gap 8 между рядами и внутри ряда
дерево нодычип
паддинг 4/16/4/6, gap 6: 3D-иконка 36 и подпись 590/16
дерево нодыширины
112 + 178 · 154 + 137 · 155 + 125 · 93 + 114 · 139 + 104
наш замернаш замер
111 + 176 · 153 + 136 · 154 + 125 · 94 + 115 · 137 + 104 — расхождение до 4 dp
дерево нодыполоса шагов
«Шаг 3 из 4»: два сегмента по 85 и третий на 42

Что показало ревью

  • исправленоFlowRow раскладывал чипы по три в ряд — в ноде ряды жёстко по два
  • сходитсяназвания десяти категорий и их порядок сошлись с деревом: Спорт, Саморазвитие, Творчество, Питомцы, Активности, Музыка, Еда, Семья, Прогулки, Кино
  • нашлось сейчасразница ширин чипов — до 4 dp, а не 2.4, как было написано раньше: Inter шире SF Pro, и на длинных словах набегает больше

ассетыНа месте 3D-иконок пустые слоты: в дереве это растровые заливки (3D-icon-sport, -education, -camera, -pet, -puzzle, -music, -eat, -heart, -thres, -movie), сами картинки не выгружены.

Локальный рендер 284:25738
локальный рендер · 284:25738 ↗
по дереву ноды, без сети
Наша сборка A9 · выбрано
наша сборка

A9 · выбрано

Три категории

284:25738 нода экрана

Замеры и откуда они

дерево нодывыбранный чип
#282A31, белый текст, icon-check 20 справа
наше решениеминимум
кнопка включается с третьей категории

Что показало ревью

  • сходитсявыбранное состояние сошлось с деревом
  • нашлось сейчаспрошлый FIGMA-CHECK утверждал, что на шагах 3 и 4 полоса в макете вообще не закрашена. Это неверно: закрашена, просто закраска лежит вложенным прямоугольником внутри сегмента, а обрезанный дамп её не показывал
Локальный рендер 284:26282
локальный рендер · 284:26282 ↗
по дереву ноды, без сети
Наша сборка A10 · база
наша сборка

A10 · база

Подтвердите, что вы — это вы

284:26282 нода экрана

Замеры и откуда они

дерево нодыкарточки
три по 358×84 r20 #F5F5F5, шаг 8
дерево нодыиконка
44 по верху содержимого (y=338 при карточке 326 и паддинге 12)
дерево нодыполоса шагов
«Шаг 4 из 4»: три сегмента по 85 и четвёртый на 42
наш замернаш замер
карточка 83.6 при шаге 8.4; первая на 199.8 от верха листа против 198

Что показало ревью

  • исправленов прозе 4.5 карточки названы ~76 с иконкой 40 — в ноде 84 и 44
  • исправленоиконка стояла по центру карточки, а в ноде — по верху содержимого
Локальный рендер 287:26637
локальный рендер · 287:26637 ↗
по дереву ноды, без сети
Наша сборка A10 · отказ в камере
наша сборка

A10 · отказ в камере

Разрешите доступ к камере

287:26637 нода экрана

Замеры и откуда они

дерево нодызона действия
вырастает с 96 до 132: паддинг 24, gap 16
дерево нодыподпись
«Разрешите доступ к камере» 510/16@40 % по центру
дерево нодыкнопка
«Перейти в настройки» вместо «Сделать селфи»

Что показало ревью

  • исправленоотказ поднимал общую шторку «Перейти в настройки» — в ноде он меняет саму зону действия экрана
Рендер Figma 287:26990
рендер Figma · 287:26990 ↗
Локальный рендер 287:26990
локальный рендер · 287:26990 ↗
по дереву ноды, без сети
Наша сборка A11 · камера
наша сборка

A11 · камера

Сфотографируйте себя

287:26990 нода экрана

Замеры и откуда они

дерево нодыовал
242×298 на (74, 273), обводка 6 белая
рендерпунктир
по рендеру 287:26990 штрихи 7.5…21 с промежутками ≈10.5 — это оценка, а не точный шаг
дерево нодызатемнение
#282A31@40 % вне овала
дерево нодынижняя полоса
120, паддинг 24/0/24/48: круг 48, спуск 72, круг 48

Что показало ревью

  • исправленов дереве обводка овала сплошная — дамп не хранит штрихи; на рендере она пунктирная, рисуем пунктир
  • исправленоовал был 246×304 из прозы спеки — в ноде 242×298
  • нашлось сейчаспрошлая редакция писала «штрих 21, промежуток 10.5» как замер. На рендере штрихи разной длины (7.5, 21, 7); правильная формулировка — оценка

вниманиеОтклонение О-6: в ноде фон вне овала ещё и размыт (blur 24). Размыть часть живого превью нечем — его рисует SurfaceView, на который Modifier.blur не действует. Оставлено одно затемнение.

Рендер Figma 287:27198
рендер Figma · 287:27198 ↗
Локальный рендер 287:27198
локальный рендер · 287:27198 ↗
по дереву ноды, без сети
Наша сборка A11 · снимок
наша сборка

A11 · снимок

Получилось селфи?

287:27198 нода экрана

Замеры и откуда они

дерево нодышторка
390×189 r32 #F5F5F5 от y=655, тень 24
наш замернаш замер
лист начинается на 655.2 против 655 в ноде
дерево нодыкнопки
«Переснять» 175 стеклом и «Да, далее» 175, полоса 96 с паддингом 16

Что показало ревью

  • исправленонижние полосы шторок свёрстаны с паддингом 16, а не 24: только так две кнопки 175 укладываются в 390
Рендер Figma 732:79437
рендер Figma · 732:79437 ↗
Локальный рендер 732:79437
локальный рендер · 732:79437 ↗
по дереву ноды, без сети
Наша сборка A11 · ошибка
наша сборка

A11 · ошибка

Не удалось распознать лицо

732:79437 нода экрана

Замеры и откуда они

дерево нодышторка
390×235 от y=609; наш замер — 609.7
дерево нодызаголовок
650/28 #F84040, подпись 510/16@40 %
дерево нодыкнопка
одна «Переснять» 358

Что показало ревью

  • сходитсясвоей проверки лица нет: состояние приходит отказом ручки POST /users/profile/verify/photo
  • нашлось сейчасу этого состояния в прошлой редакции стояла заглушка «рендера нет». Рендер выгрузился — он теперь слева
Локальный рендер 287:27892
локальный рендер · 287:27892 ↗
по дереву ноды, без сети
Наша сборка A12 · успех
наша сборка

A12 · успех

Профиль подтвержден

287:27892 нода экрана

Замеры и откуда они

дерево нодылист
390×395 r32 #F5F5F5 от y=449; наш замер — 448.2
дерево нодыиконка
3D-слот 120 по центру, за ним кольца-подсветка
дерево нодытексты
650/28 и 510/16@40 % по центру
дерево нодыкнопка
«Отлично!» 358 в полосе 96 с паддингом 16

Что показало ревью

  • исправленомаршрут заведён как dialog, а не composable: по спеке это шторка над картой, и экран под ней должен оставаться видимым
  • исправленонашёлся хвост T-24: флаг registrationDone читался ветвлением A14, но нигде не выставлялся

вниманиеНа снимке за шторкой чёрное поле: Paparazzi снимает dialog-назначение отдельно от экрана под ним. В приложении там карта — это видно на левой картинке. Артефакт области снимка, а не сборки.

Локальный рендер 693:70691
локальный рендер · 693:70691 ↗
по дереву ноды, без сети
Наша сборка B1 · карта
наша сборка

B1 · карта

Главный экран

693:70691 нода экрана

Замеры и откуда они

дерево нодышторка
peek 216 — лист начинается на y=628
дерево нодышапка
фейд 166 (паддинг 54): ряд 56 со стеклянными парами 102×48 на (16, 62) и (272, 62), ряд 56 с чипами 40
дерево нодычипы
«Неделя» 90, «Рядом» 105 с chevron-down, «Популярные» 130, «Новые» 84, «Проверенные» 140
дерево нодызум
пилюля 40×82 на (334, 289), круг локации 40 на (334, 383)
дерево ноды«Куда иду»
358×104 на (16, 508) — на карте, а не в шторке
дерево ноды«Смотреть списком»
199×40 на (96, 572) — только в состоянии без записей

Что показало ревью

  • нашлось сейчаскарточка «Куда иду» стояла первым блоком шторки. В дереве она лежит на карте: её низ (612) совпадает с низом «Смотреть списком», то есть на 16 выше шторки. И она эту пилюлю заменяет — в пяти состояниях с записями пилюли на экране нет, а в состоянии без записей нет карточки
  • нашлось сейчаспрошлая редакция ссылалась на ноду 180:8884 и заодно приписывала ей пять чипов с «Новыми». В 180:8884 чипов четыре и «Новых» среди них нет: пять чипов и карточка «Куда иду» — это NEW-блок «Обновление карты» от 25 августа, ноды 693:70691…693:73689. Ссылка теперь на него
  • нашлось сейчасу «Смотреть списком» правая иконка — icon-arrow-down (178:6492), а не шеврон
  • исправленоу BottomSheetScaffold свой граббер 48 — в ноде блок 21 с полоской 64×5
  • исправленокнопка «к моей локации» показывалась всегда — без разрешения на гео её в ноде нет

ассетыКарта в снимке — ровная подложка: MapLibre на JVM не поднимается, эмулятора в окружении нет (блокер B-2).

Локальный рендер 693:70767
локальный рендер · 693:70767 ↗
по дереву ноды, без сети
Наша сборка B1 · шторка
наша сборка

B1 · шторка

Содержимое шторки карты

693:70767 нода экрана

Замеры и откуда они

дерево нодыпорядок блоков
«Афиша города» (72) → рельс 282 → «Просмотр по интересам» (192) → «Подобрано для вас» (738)
дерево нодырельс
карточки Accent-card-event 300×262, gap 12, паддинг 16
дерево нодыинтересы
шапка 76, два ряда плиток 44: 136 + 129 + 174 (ряд 455) и 161 + 153 + 147 (ряд 477) — оба шире листа 358 и уезжают вбок
дерево нодысчётчики
Спорт 22, Языки 8, Фотосессии 4, Питомцы 32, Настолки 5, Пикники 3 — приходят из /public/catalog
дерево ноды«Подобрано»
шапка 68, дальше группы по дням «Сегодня / четверг»

Что показало ревью

  • нашлось сейчаскарточки рельса были 300×228, в ноде — 300×262: бейдж категории уходит под обложку, а на обложке появляются блок даты 47×60 r8 («сен» / «21» / «сб») и цена — тёмная пилюля 26 r6 с icon-ticket и «от 750₽», рядом старая цена зачёркнутой
  • нашлось сейчаспрошлая редакция писала «рельс 248» — в дереве 282
  • нашлось сейчасплитки интересов складывались переносом по ширине и давали три ряда по два. В ноде это ровно два ряда, которые шире листа и прокручиваются вбок вместе — 455 и 477 при листе 358
  • нашлось сейчасв блоке даты на обложке месяц выводился как «сент» и переносился на две строки: в блок 47 с паддингом 12 влезает 23 dp, в макете стоит «сен»
  • исправленожёсткие плитки 110 обрезали «Фотосессии» — в ноде они берут ширину по содержимому
Локальный рендер 180:9724
локальный рендер · 180:9724 ↗
по дереву ноды, без сети
Наша сборка B2 · радиус
наша сборка

B2 · радиус

Расстояния от меня

180:9724 нода экрана

Замеры и откуда они

дерево нодылист
390×277 от y=567
дерево нодызаголовок
«Расстояния от меня» 650/28 и «км» 650/28@40 % через gap 8, оба слева
дерево нодыдорожка
358×44 r24 #007AFF@12 %, засечки 2×24 #000@8 %
дерево нодыручка
стеклянная 70×52 r34 со значением 590/16 тёмным; при «10» ручка 79…149, заливка 16…132
дерево нодыкнопки
«Сбросить» и «Применить» по 175, паддинг 16

Что показало ревью

  • нашлось сейчасзначение писалось белым прямо на краю синей заливки. В ноде оно лежит в отдельной стеклянной ручке 70×52, а её центр совпадает с центром подписи «10»
  • нашлось сейчасв заголовке стояло «10 км» справа — оно дублировало ручку. В ноде рядом с названием только «км»
  • исправленосвой ряд меток дублировал метки самого PodusheSlider
Локальный рендер 194:24494
локальный рендер · 194:24494 ↗
по дереву ноды, без сети
Наша сборка B3 · фильтры
наша сборка

B3 · фильтры

Фильтрация

194:24494 нода экрана

Замеры и откуда они

дерево нодылист
390×760 от y=84, белые блоки r24 с gap 4
дерево нодызаголовок
«Фильтрация» 650/28 на 40 от верха листа — 21 из них съедает граббер
дерево нодыблок «Город»
216 = лейбл 32 + карточка 184; карточка 358×184 r20 #F5F5F5
дерево нодыкарточка города
строка 64 с паддингом 12: белая плитка 40 r8 с icon-map-pin-fill 24, gap 12, «Москва» и «Определили по геопозиции», справа «Изменить»
дерево нодыпревью карты
358×120 r20 во всю ширину карточки
дерево нодыблок «Район»
204 = лейбл 32 + три ряда чипов 40 с gap 8 + строка «Другие районы ›» 36
дерево нодыниз
пока ничего не выбрано — одна «Сбросить» 358

Что показало ревью

  • нашлось сейчасв карточке города не было ни плитки с пином, ни превью карты 358×120 — блок выходил 120 вместо 216, и весь список фильтров уезжал вверх
  • исправленов 4.5 и 6.B низ описан как «Сбросить 167 / Применить 167» — в макете два разных состояния, и в базовом стоит одна кнопка на всю ширину
  • исправленозаголовок сдвигался на 21 из-за граббера — паддинг 19 вместо 40

ассетыПревью карты — белый блок с пином: второй экземпляр MapLibre внутри шторки не поднимаем, на JVM он всё равно не рисуется.

Локальный рендер 194:25492
локальный рендер · 194:25492 ↗
по дереву ноды, без сети
Наша сборка B3 · выбрано
наша сборка

B3 · выбрано

Показать N событий

194:25492 нода экрана

Замеры и откуда они

дерево нодыниз
«Сбросить» 115 + «Показать 24 события» 235, gap 8, паддинг 16
дерево нодыподписи
«Показать 24 события» (194:25492), «Показать 56 событий» (605:67935), «Показать 100+ событий» (604:65862)
наше решениесчётчик
считается запросом с дебаунсом 350 мс

Что показало ревью

  • исправленокнопка называлась «Применить» — в макете она показывает число найденных событий
  • сходится«Весь город» эксклюзивен, интересы — мультивыбор, «Сбросить» оставляет город: 9 тестов на FiltersLogic
Локальный рендер 194:27047
локальный рендер · 194:27047 ↗
по дереву ноды, без сети
Наша сборка B5 · календарь
наша сборка

B5 · календарь

Календарь

194:27047 нода экрана

Замеры и откуда они

дерево нодыячейка
«Tabs calendar» 47.7×47.7, скругление 16 во всех четырёх состояниях
дерево нодысостояния
Default — без заливки; Active — #007AFF с белым числом; Selected — #007AFF@12 % с синим числом
дерево нодысчётчик
белая пилюля 28×16 r24 с числом 590/10 под днём; в базовой ноде выключена свойством «Show text»
дерево нодысетка
ячейки 48, gap 4, шесть рядов

Что показало ревью

  • нашлось сейчаспод днями с событиями рисовалась синяя точка 4 — в макете точек нет вовсе, есть счётчик событий белой пилюлей. Теперь ходим за числом, а не за фактом «есть событие»
  • нашлось сейчасвыбранные края диапазона рисовались кругом — в компоненте у всех состояний скругление 16
  • нашлось сейчасв макете подписи дней недели идут «Сб Вс Пн Вт Ср Чт Пт», а числа под ними разложены с понедельника: 1 августа 2026 — суббота и стоит в шестой колонке. Значит, съехали подписи, а не сетка; берём порядок сетки и пишем «Пн Вт Ср…»
  • сходитсяправила выбора вынесены в чистую функцию pickDay — 5 тестов
Локальный рендер 192:19379
локальный рендер · 192:19379 ↗
по дереву ноды, без сети
Наша сборка B6 · старт
наша сборка

B6 · старт

Поиск

192:19379 нода экрана

Замеры и откуда они

дерево нодышапка
белый блок 390×134 с нижними углами r32
дерево нодынедавние
строки 390×44, паддинг 12/16, gap 10: icon-magnifying-glass 20, текст с x=46, icon-chevron-right 20 на x=354
дерево нодыразделители
326×1 с отступом 48
дерево нодыкатегории
«Спорт» 112, «Семья» 114, «Музыка» 125 / «Питомцы» 137, «Прогулки» 139 — по ширине

Что показало ревью

  • исправленочипы категорий раскладывались по два — в ноде они укладываются по ширине
  • нашлось сейчасв снимке стояли выдуманные категории (Настолки, Кофе, Кино). В ноде их пять и другие: Спорт, Семья, Музыка, Питомцы, Прогулки — данные снимка приведены к макету
  • сходитсянедавние запросы живут в DataStore: последние пять, новый поднимается наверх
Локальный рендер 192:20640
локальный рендер · 192:20640 ↗
по дереву ноды, без сети
Наша сборка B6 · результаты
наша сборка

B6 · результаты

Результаты поиска

192:20640 нода экрана

Замеры и откуда они

дерево нодылейбл
«Результаты поиска» 510/16@40 %, блок 36
дерево нодыстроки
события 114 с разделителями 1 px и отступом 96 слева
наше решениедебаунс
350 мс — запрос не уходит на каждый символ

Что показало ревью

  • сходитсятап по результату кладёт запрос в недавние
Локальный рендер 192:20840
локальный рендер · 192:20840 ↗
по дереву ноды, без сети
Наша сборка B6 · ничего не найдено
наша сборка

B6 · ничего не найдено

Пустой поиск

192:20840 нода экрана

Замеры и откуда они

дерево нодыиконка
3D-слот 80 — в 4.5 № 28 указано 96, верна нода
дерево нодытексты
«Ничего не найдено» 650/28 и подпись 510/16@40 % по центру
дерево нодыниже
блок «Популярные рядом с вами» со строками событий

Что показало ревью

  • исправленопустое состояние рисовалось иконкой 96 — в ноде 80

вниманиеНа снимке обложки в блоке «Популярные рядом с вами» выходят прозрачными: тень в связке с drawWithContent внутри LazyColumn layoutlib рисует не так, как устройство. Артефакт рендера снимков, не приложения.

Локальный рендер 610:75563
локальный рендер · 610:75563 ↗
по дереву ноды, без сети
Наша сборка B7 · список
наша сборка

B7 · список

Афиша списком

610:75563 нода экрана

Замеры и откуда они

дерево нодылист
поднят до y=0 и закрывает карту
дерево нодышапка
липкая 124: «назад» 48, город с районом по центру, календарь 48
дерево нодыпорядок
«Афиша города» на y=132 → «Просмотр по интересам» на 486 → «Подобрано для вас» на 682

Что показало ревью

  • нашлось сейчаспервым блоком стояла карточка «Куда иду» — в ноде B7 её нет, список начинается с «Афиши города». Карточка убрана из общего содержимого и осталась только на карте
  • исправленопроза 6.B · B7 обещает ряд чипов — в ноде их нет: чипы остаются на карте под листом
Локальный рендер 194:36070
локальный рендер · 194:36070 ↗
по дереву ноды, без сети
Наша сборка B9 · категория
наша сборка

B9 · категория

Категория «Спорт»

194:36070 нода экрана

Замеры и откуда они

дерево нодыблок
390×335 на y=124, паддинг 24/16/16/16, gap 20
дерево нодывыравнивание
иконка 64 на x=16, у описания textAlignHorizontal = LEFT — всё слева
дерево нодыразделитель
358×1 #000@8 % между счётчиками и описанием
дерево нодысчётчики
«32 Событий · 342 Подписчика» — числа 590/18, слова 510/18@40 %
дерево нодыкнопка
button-primary 358×48 на (16, 395)

Что показало ревью

  • нашлось сейчасвесь блок был собран по центру — в ноде он прижат влево
  • нашлось сейчасмежду счётчиками и описанием в ноде идёт разделитель 358×1 — его не было
  • сходитсяподписка ходит в POST/DELETE /users/me/calendars с kind = topic
  • сходитсяописание категории есть в макете только у «Спорта» — у остальных ключей блок не показывается

ассетыЧисло подписчиков рисуется, только если придёт: ручки под него в контракте нет (BACKEND-GAP).

Локальный рендер 693:76501
локальный рендер · 693:76501 ↗
по дереву ноды, без сети
Наша сборка B13 · «Куда иду»
наша сборка

B13 · «Куда иду»

Мои записи

693:76501 нода экрана

Замеры и откуда они

дерево нодышапка
124 с заголовком «Куда иду» 590/18
дерево нодысегмент
«Предстоящие / Прошедшие» 358×40 на y=140
дерево нодыстрока события
358×114: обложка 84 r8, gap 12, колонка 262 — бейдж 26, gap 8, заголовок 22, «2.4 км от вас» 20, нижняя строка 26
дерево нодынижняя строка
аватар 20 и имя слева, icon-ticket 18 и «750₽» справа
дерево нодыразделители
262×1 с отступом 96

Что показало ревью

  • нашлось сейчасстрока события была 108 — в ноде 114, и разница ровно в нижней строке: там кроме организатора стоит ещё цена, которой у нас не было
  • сходитсяпрошедшее считается по ends_at, а при его отсутствии — по starts_at
макета нет на дискестраница с этой нодой в выгрузку не попалаоткрыть ноду 693:74315 ↗
сторона макета
Наша сборка B13 · пусто
наша сборка

B13 · пусто

У вас пока нет событий

693:74315 нода экрана

Замеры и откуда они

проза спекииконка
3D-билет 96
проза спекитексты
«У вас пока нет событий» и «Запишитесь на событие в афише — оно появится здесь»

Что показало ревью

  • исправленострок пустого состояния в выгрузке макета нет — взяты из блока 6.B · B13 спеки, в коде стоит FIGMA-CHECK

вниманиеНоды 693:74315 нет ни среди рендеров, ни в выгруженных деревьях: её страница в шестёрку выгруженных не попала. Сверять это состояние пока не с чем.

макета нет на дискестраница с этой нодой в выгрузку не попалаоткрыть ноду 794:161851 ↗
сторона макета
Наша сборка B14 · афиша города
наша сборка

B14 · афиша города

Афиша города

794:161851 нода экрана

Замеры и откуда они

проза спекигерой
Card event - large size 320×360 r20, градиент #000@0 % → #000@70 % снизу
проза спекицена
пилюля r8: красный блок #F84040 с icon-ticket 20 и зачёркнутой старой ценой
проза спекиблоки
«Популярное в городе» · «Лучшие подборки» · «Рекомендуем» · «В ближайшие дни»

Что показало ревью

  • сходитсяподборки приходят из /public/collections
  • исправленоэкран подборки collection/{slug} не написан — записан хвостом в 0.10 спеки

вниманиеНоды 794:161851 тоже нет в выгруженных деревьях — страница не попала в шестёрку. Замеры в панели взяты из прозы спеки, а не из макета, и помечены так.