Document arhipovdan.ru DNS/TLS blocker, add production smoke and GPU perf tooling, unify twin layout, and expand visual regression coverage. Co-authored-by: Cursor <cursoragent@cursor.com>
5.9 KiB
Demo Runbook — OZON Tech Sorter Simulation
Назначение: провести живую демонстрацию жюри/заказчику без сюрпризов.
Дата актуализации: 2026-07-15
Рабочий публичный URL (временный): Quick Tunnel — см. PRODUCTION_DEPLOYMENT_REPORT.md
Ожидаемый постоянный домен: https://arhipovdan.ru/ — BLOCKED_EXTERNAL (PUBLIC_DOMAIN_DIAGNOSTIC.md)
Локальный production: http://127.0.0.1:3100/
Репозиторий: /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 166 passed; 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). Иначе жюри увидит старую версию. |
В этой среде может не быть
dockerCLI — 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):
- Короб → B
- ЛанчБокс → B
- Негабарит → C
- Мелкий item (ручка) → C (min dims)
- Тарелка → D (K)
- Бутылка → D
- Oversized+round → C (priority)
- (edge / доп. кейс по playlist)
- Jam
- 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; не коммитить секреты.