# Фаза 88. Кнопка на панели ## Зависимости - [Фаза 87](87-image-subject.md) - [Фаза 86](86-rooms-rules.md) ## Зачем То, что уже открыто глазом, получает ту же кнопку, что портрет: узел, одежда, fill. Гость смотрит и рисует. ## Задачи - [ ] Панель выбранной локации: «создать картинку» и «показать промпт», если узел может дать непустой вклад (как 87). Нет вклада — кнопок нет. Открытие дерева не генерирует - [ ] Строка одежды и ноши на карточке: кнопка, если у def есть `prompt`. Цвет из строки уходит query. Износ в промпт кладёт сервер - [ ] Строка предмета в секции «предметы» локации: то же для fill с прозой; молчаливый стул — без кнопки - [ ] Успех показывает PNG (как карточка человека). Ошибки Swarm — тот же текст, что портрет - [ ] Гость видит и жмёт. Notice `generateImage` не менять (хозяин, человек) - [ ] Строки через `t(...)`, обе локали. Сокет не бампить ## Тесты, без которых фаза не закрыта - [ ] Vitest: у узла Classroom кнопка есть; у узла без prompt (лестница/этаж) — нет - [ ] Vitest: у строки TShirt кнопка есть; у Chair в предметах — нет - [ ] Vitest: гость не лишает кнопку disabled так, как notice - [ ] Клиент зовёт POST узла/вещи, не `.../people/.../portrait?kind=scene` - [ ] «Показать промпт» показывает тело GET `.../prompt`, не выдуманную строку на клиенте - [ ] Открытие панели / вкладки одежды не вызывает POST ## Критерий готовности - Клик по кабинету на дереве → панель → картинка класса - Клик по белой футболке на карточке → PNG вещи - Гость на чужой школе может то же - `npm test` по затронутым `ui/*.test.ts` (tsc+vitest клиента, не весь раствор) ## Стоп Не автоген утра. Не иконка на каждом ряду дерева. Не LLM. Не бумажная кукла. Не картинка журнала и часов.