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>
174 lines
7.6 KiB
Markdown
174 lines
7.6 KiB
Markdown
# Отчёт о реализации — maximum-demo-realism
|
||
|
||
**Ветка:** `feature/maximum-demo-realism`
|
||
**База:** `dan_branch` @ `e89c728`
|
||
**Backup tag:** `backup/pre-maximum-demo-realism-20260715`
|
||
**Дата:** 2026-07-15
|
||
**Проект:** OZON Tech Sorter Simulation (Track 3)
|
||
|
||
---
|
||
|
||
## 1. Цель итерации
|
||
|
||
Максимально поднять убедительность живой демонстрации: live-классификация, safety-сценарии, proof UI, управление показом, адаптивное качество, ops-скрипты и безопасный MVP агента — без выдуманных секретов и без auto-deploy.
|
||
|
||
---
|
||
|
||
## 2. Все выполненные изменения (реальные)
|
||
|
||
| # | Изменение | Зачем |
|
||
| - | --------- | ----- |
|
||
| 1 | `classifyItem` встроен в continuous playback | Live classification, не только подписи playlist |
|
||
| 2 | `measurementSystem` → `DIMENSION_LIMITS` + `classifyItem`; min dims; confidence 0.65 | Согласованность измерений и правил |
|
||
| 3 | Playlist 8→10: jam + emergency_stop timelines | Safety story для жюри |
|
||
| 4 | `physicalItemMotion`: fault freeze/recover + seeded jitter | Правдоподобие и воспроизводимость |
|
||
| 5 | Demo controls: seek, speed 0.5–2×, hotkeys Space/N/B/R/P/E/F/1–0, presentation, event journal | Управление живым показом |
|
||
| 6 | Quality modes low/medium/high/demo | FPS на разных клиентах |
|
||
| 7 | Proof HUD: DIM pass/fail, K, reason; CV overlay RULE | Доказательство работы алгоритма |
|
||
| 8 | `simulation.test.ts`: jam / estop / c_priority | Регрессия safety/логики |
|
||
| 9 | Agent MVP `agent/cli.mjs`: dry-run\|run-once\|status\|stop\|resume\|pause\|report | Автономия уровня verify-only |
|
||
| 10 | Scripts: demo-start/stop/reset/health, agent-dry-run, agent-run-once | One-command ops |
|
||
| 11 | `resolveItem` для SKU-*-LC | Стабильность данных |
|
||
|
||
---
|
||
|
||
## 3. Изменённые / затронутые области файлов
|
||
|
||
> Точный `git diff` зависит от незакоммиченного состояния рабочей копии. Ниже — карта модулей по смыслу изменений (**проверено по коду репозитория**).
|
||
|
||
| Область | Файлы (ключевые) |
|
||
| ------- | ---------------- |
|
||
| Continuous / classify | `src/domain/continuousPlayback.ts`, `measurementSystem.ts`, `classifier.ts` |
|
||
| Playlist / faults | `src/domain/demoPlaylist.ts`, `physicalItemMotion.ts`, `seededRng.ts` |
|
||
| UI demo | `src/pages/MainPage.tsx`, Proof/CV components, styles |
|
||
| Quality | `src/domain/qualityMode.ts`, `qualityMode.test.ts` |
|
||
| Data | `src/data/resolveItem.ts` |
|
||
| Tests | `src/domain/simulation.test.ts`, связанные domain tests |
|
||
| Agent | `agent/cli.mjs`, `agent/state/*`, `agent/reports/*` |
|
||
| Scripts | `scripts/demo-*.sh`, `scripts/agent-*.sh` |
|
||
| Package scripts | `package.json` (`demo:*`, `agent:*`) |
|
||
| Docs | этот набор `docs/*.md` аудита |
|
||
|
||
---
|
||
|
||
## 4. Причины изменений (кратко)
|
||
|
||
1. Жюри должно **видеть причинно-следственную связь** измерений → правила → маршрут.
|
||
2. Без jam/e-stop демо выглядит «идеальной анимацией».
|
||
3. Без hotkeys/presentation оператор теряет контроль на сцене.
|
||
4. Без quality modes слабые ноутбуки дают рывки и подрывают доверие.
|
||
5. Agent/scripts нужны для устойчивой эксплуатации и будущего цикла улучшений **с лимитами**.
|
||
|
||
---
|
||
|
||
## 5. Результаты тестов
|
||
|
||
| Проверка | До | После | Тип |
|
||
| -------- | -: | ----: | --- |
|
||
| Vitest passed | 144 | **153** | Измерено |
|
||
| Test files | 14 | **16** | Измерено |
|
||
| E2E CI | нет | нет | Измерено |
|
||
| Lint (отдельный) | не выделен в package | не выделен | Измерено |
|
||
| Typecheck | через `tsc -b` в build | OK вместе с build | Измерено |
|
||
|
||
---
|
||
|
||
## 6. Метрики до и после
|
||
|
||
| Метрика | До | После | Изменение |
|
||
| ------- | -: | ----: | --------: |
|
||
| Tests | 144 | 153 | +9 |
|
||
| Test files | 14 | 16 | +2 |
|
||
| Build | OK ~391 ms | OK | стабильно |
|
||
| CSS | — | 39.66 kB / gzip 8.79 | зафиксировано |
|
||
| Continuous twin chunk | — | 51.29 kB / gzip 13.68 | зафиксировано |
|
||
| Playlist size | 8 | 10 | +faults |
|
||
| Agent | нет | MVP CLI | +ops |
|
||
| Live classify on `/` | слабо | wired | +proof |
|
||
|
||
Main R3F chunk baseline до итерации: ~881 kB (**Измерено** historically).
|
||
|
||
---
|
||
|
||
## 7. Оставшиеся ограничения
|
||
|
||
| Ограничение | Комментарий |
|
||
| ----------- | ----------- |
|
||
| Нет real physics engine | Детерминированная кинематика |
|
||
| Pseudo-CV | Synthetic measurements |
|
||
| Dual 3D twins diverge | `/` vs `/details` |
|
||
| Нет e2e в CI | Playwright вручную |
|
||
| Agent без auto-patch | By design MVP |
|
||
| Production :3100 | Может служить старый dist до redeploy |
|
||
| Нет docker CLI в этой среде | Redeploy — внешняя ops-процедура |
|
||
| GPU idle | Не используется для demo render |
|
||
|
||
---
|
||
|
||
## 8. Инструкции запуска
|
||
|
||
### Демо (preview, не путать с prod :3100)
|
||
|
||
```bash
|
||
cd /home/coder/arhipovdan/app
|
||
npm run demo:start # build + vite preview 127.0.0.1:3101
|
||
npm run demo:health # :3100 / :3101 / public + vitest
|
||
npm run demo:stop # остановить preview
|
||
# также: bash scripts/demo-reset.sh
|
||
```
|
||
|
||
### Разработка
|
||
|
||
```bash
|
||
npm install # при необходимости
|
||
npm run dev # 127.0.0.1:3100 (vite dev — не prod nginx)
|
||
npm test
|
||
npm run build
|
||
```
|
||
|
||
### Агент
|
||
|
||
```bash
|
||
npm run agent:dry-run
|
||
npm run agent:run-once
|
||
npm run agent:status
|
||
node agent/cli.mjs stop # перед живым показом
|
||
node agent/cli.mjs resume
|
||
node agent/cli.mjs report
|
||
```
|
||
|
||
### Откат кода
|
||
|
||
```bash
|
||
git fetch --tags
|
||
git checkout backup/pre-maximum-demo-realism-20260715
|
||
# или сброс ветки к e89c728 по необходимости (только осознанно)
|
||
```
|
||
|
||
### Production
|
||
|
||
Публичный URL: https://arhipovdan.ru/ (nginx loopback :3100 + cloudflared).
|
||
После merge/сборки нужен **ручной redeploy** образа/dist — агент этого не делает.
|
||
|
||
---
|
||
|
||
## 9. Hotkeys (оператору демо)
|
||
|
||
| Клавиша | Действие |
|
||
| ------- | -------- |
|
||
| Space | Play / pause |
|
||
| N | Next case |
|
||
| B | Back / previous |
|
||
| R | Reset |
|
||
| P / F | Presentation / fullscreen-related |
|
||
| E | Event journal focus/toggle (UI) |
|
||
| 1–0 | Seek/jump по кейсам playlist |
|
||
|
||
Speed: 0.5×–2× через demo controls UI.
|
||
|
||
---
|
||
|
||
## 10. Вывод
|
||
|
||
Итерация достигла измеримого улучшения демо-контура (тесты +9, playlist +faults, live classify, proof, controls, agent MVP). Критический остаточный ops-риск — **рассинхрон production dist**. Технический потолок реализма без смены архитектуры — кинематика + pseudo-CV; это задокументировано честно.
|