Files
h-school/docs/phases/16-sight/87-image-subject.md
T
Leonid PershinandCursor 02156e4491
ci / server (push) Failing after 3m43s
ci / client (push) Successful in 22s
Register slice 16 sight: inspect images and a denser linked catalog.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-21 20:46:33 +03:00

3.9 KiB
Raw Blame History

Фаза 87. Субъект кадра

Зависимости

Зачем

Кабинет и футболка — не человек в URL портрета. Появляется HTTP субъекта «узел» и «вещь», PNG на диске, kind scene/thing без лифта живых пресетов.

Задачи

  • GET/POST .../schools/{id}/nodes/{nodeId}/image и .../image/prompt. Ключ узла — id карты. PNG: saves/{id}.images/node.{safeId}.png
  • GET/POST .../schools/{id}/things/{defName}/image (query color) и .../image/prompt. PNG: saves/{id}.images/thing.{def}.{color\|none}.png. Нет instance id
  • Сборка узла: Room/Territory prompt + fill с текстом + погода, если улица. Без внешности и одежды человека. При ненулевой занятости узла — не больше одного общего фрагмента из SimulationOptions, не имена
  • Сборка вещи: prompt def + цвет + износ, если смотрим надетое (износ в промпте; ключ файла без износа). Молчаливый def — не Swarm
  • Пустой вклад — 400 cannot-generate. Нет узла/def — 404. Swarm как портрет (503/502/504)
  • Гость: тот же успех, что POST .../people/.../portrait, не 403
  • В шаблоне swarmui.json у пресетов shot kind scene и thing. Живая школа без них не переписывается; fallback строки в SimulationOptions
  • protocol.md — маршруты и коды, тем же коммитом. Сокет не бампить. PortraitKind человека не расширять значением scene

Тесты, без которых фаза не закрыта

  • GET картинки узла до POST — 404 image-missing (или согласованный код в protocol.md)
  • POST класса: prompt содержит место/fill, не «teenage girl» / возраст карточки
  • POST узла без вклада (этаж/лестница без prompt) — 400, Swarm не звали
  • POST Chair400 cannot-generate
  • POST TShirt?color=White — prompt английский про футболку, без субъекта-человека
  • Гость POST узла — не 403 (тот же класс исхода, что портрет; хост с фикстурой Swarm или тот же skip-контракт, что у портрета)
  • Живой portraitSettings без kind scene генерирует узел через fallback и не перезаписывает сейв пресета
  • Occupancy > 0 добавляет не больше одного общего фрагмента; имён людей в prompt нет
  • Сокет Version не меняется

Критерий готовности

  • curl/хостовый тест: POST кабинета → PNG на диске; GET отдаёт image/png
  • «Показать промпт» узла доступен HTTP, даже если кнопки в UI ещё нет
  • Отфильтрованные тесты: AppHost (маршруты), сборщик на сервере; не весь раствор

Стоп

Не кнопки в DOM. Не автоген всем узлам. Не ControlNet. Не бамп сокета. Не групповые лица.