Решили: кадры контактного листа складываются в репозиторий (docs/lab/assets/ui-states/), а не в Temp, и перезаписываются на каждом прогоне; список кадров стенд получает манифестом (docs/lab/data/ui-states.json), который пишет тот же прогон.

Почему: кадры уходили в чат и терялись в переписке — ответить на вопрос «а как сейчас выглядит слот» было нечем. Отвергли папку со снимками по датам: историю честнее держит git, потому что там видно не только что менялось, но и вместе с каким коммитом; каталог снимков пришлось бы ещё и чистить руками. Цена — 1.2 МБ на прогон в истории, и это дешевле работы (правило проекта про .gitignore). Отвергли захардкоженный список файлов в разделе: стенд разошёлся бы с реестром на первом же новом компоненте — ровно так врала прежняя витрина UiPreviewCatalog, показывая семь контролов из четырнадцати.

Сказано: «А можешь все скрины UI, что ты делаешь в прогоне — сохранять на сайте на какой-то специальной странице? Чтобы я всегда мог и отдельные элементы глядеть, смотреть что ты сделала, добавила и т.д.» (06.08.2026, сессия a66a54e9). На уточняющий вопрос про историю и кроп ответил короче: «Просто скрины всех элементов)».

Грабли: JSON пишется руками, а не сериализатором — Newtonsoft в сборку Guildmaster.DevTools пришлось бы тянуть ради трёх полей. Раздел Лаборатории строит галерею в одну колонку, а не сеткой .cards: кадр снят в 1920×1080, и в колонке 290 пикселей от состояния остаётся пятно.

Владелец правды: Assets/_Project/Scripts/DevTools/UiContactSheet.cs (OutputDir, ManifestPath), docs/lab/src/sections/ui-states.ts.