Files
ozone-tech_owl_prime/docs/DEMO_RUNBOOK.md
Даня Архипов 985f7c327d feat: maximize sorter demo realism and add safe agent MVP
Wire live classifyItem into continuous playback, add jam/E-stop cases,
presenter controls (seek/speed/hotkeys), quality modes, demo scripts,
audit docs, and a verify-only autonomous agent CLI with hard safety limits.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-15 16:53:35 +00:00

5.7 KiB
Raw Blame History

Demo Runbook — OZON Tech Sorter Simulation

Назначение: провести живую демонстрацию жюри/заказчику без сюрпризов.
Дата актуализации: 2026-07-15
Публичный URL: https://arhipovdan.ru/
Репозиторий: /home/coder/arhipovdan/app


1. За 30–60 минут до показа

1.1. Остановить фоновые помехи

cd /home/coder/arhipovdan/app
node agent/cli.mjs stop
# убедиться, что Playwright/тяжёлые job не бегут

1.2. Зелёный baseline

npm test
npm run build

Ожидание: Vitest 153 passed / 16 files; build OK.

1.3. Health

npm run demo:health

Проверяет:

  • http://127.0.0.1:3100/ (prod loopback),
  • http://127.0.0.1:3101/ (preview, если поднят),
  • https://arhipovdan.ru/,
  • vitest.

1.4. Актуальный билд на том URL, который показываете

Если показываете Что сделать
Локальный preview npm run demo:start → http://127.0.0.1:3101/
Публичный сайт Убедиться, что :3100 отдаёт новый dist (ручной redeploy). Иначе жюри увидит старую версию.

В этой среде может не быть docker CLI — redeploy выполняется тем процессом, которым контейнер обычно обновляется на OwlPrime.


2. Старт одной командой

cd /home/coder/arhipovdan/app
npm run demo:start

Скрипт: при необходимости npm ci, npm run build, поднимает vite preview на 127.0.0.1:3101.

Остановка:

npm run demo:stop
# reset: bash scripts/demo-reset.sh

3. Сценарий показа (рекомендуемый тайминг ~6–8 мин)

Мин Что делать Что говорит оператор
0:00 Открыть /, включить Presentation (P/F) «Цифровой двойник линии сортировки»
0:20 Дать continuous playback идти «Товар едет → измеряется → классифицируется»
1:00 Указать Proof HUD (DIM, K, reason) «Решение — правила classifyItem, не просто ролик»
2:00 Кейсы B → C → D «Габариты / негабарит / круглое сечение»
3:30 Кейс c_priority «C приоритетнее D»
4:00 Jam «Затор — поток заморожен»
4:40 Emergency stop «E-stop — safety stop»
5:20 Speed 0.5× на сложном кейсе «Замедляем для разбора»
5:50 При необходимости /details «Инженерный FSM и сенсоры» — осторожно: визуал twin другой
6:30 Q&A Hotkeys 1–0 для прыжка к кейсу

4. Hotkeys оператора

Клавиша Действие
Space Пауза / продолжить
N Следующий кейс
B Предыдущий
R Reset
P / F Presentation / fullscreen
E Журнал событий
1–0 Быстрый переход по кейсам

Скорость: 0.5×–2× в demo controls.


5. Playlist (10 кейсов) — шпаргалка

Порядок storytelling (см. demoPlaylist.ts):

  1. Короб → B
  2. ЛанчБокс → B
  3. Негабарит → C
  4. Мелкий item (ручка) → C (min dims)
  5. Тарелка → D (K)
  6. Бутылка → D
  7. Oversized+round → C (priority)
  8. (edge / доп. кейс по playlist)
  9. Jam
  10. Emergency stop

Точные id/SKU — в src/domain/demoPlaylist.ts.


6. Если что-то пошло не так

Симптом Действие
Чёрный экран / WebGL Обновить страницу; проверить ThreeCapabilityCheck; снизить нагрузку (не demo на слабом GPU клиента)
«Не та» логика на сайте Сравнить с preview :3101; вероятно устарел prod dist → redeploy
Завис после jam R / следующий кейс; не паниковать — freeze ожидаем
Красные тесты утром Не начинать показ; npm test, чинить на feature-ветке
Агент что-то пишет node agent/cli.mjs stop; MVP не патчит, но stop обязателен
Нет сети к публичному URL Показать loopback :3100 или preview :3101

Откат кода:

git checkout backup/pre-maximum-demo-realism-20260715

7. Что не обещать жюри

  • «Настоящий CV с камеры» — нет, pseudo-CV.
  • «Полный physics engine» — нет, кинематика.
  • «Агент сам выкатывает в prod» — запрещено.
  • «/ и /details — идентичная 3D-сцена» — пока нет.

8. После показа

npm run demo:stop
node agent/cli.mjs resume   # если нужен ночной dry-run
# или оставить stop до следующего окна обслуживания

Собрать feedback → занести в backlog агента / issues; не коммитить секреты.