4.2 KiB
4.2 KiB
OZON Final Fix — Production Diagnosis (Before)
Date: 2026-07-09
Branch: dan_branch
Production URL: https://arhipovdan.ru/
Evidence: docs/ozon_final_fix_evidence/before/
1. What was actually visible on production (before fix)
Video
before_full_play.webm— full Play cycle (~80 s), 8 cases.
Screenshots
| File | Observation |
|---|---|
01_idle.png |
Idle state OK, hero + 3D canvas load. |
02_b_item_problem.png |
Case 1 B routing starts; item on main belt. |
05_item_stopped_on_conveyor.png |
P0: B lunchbox (case 2) sits on long green transfer deck at belt height — looks like active conveyor, not inside a floor bin. |
04_b_no_real_bin.png |
B zone reads as belt extension + low tray; no distinct industrial receiving container on the floor. |
03_lag_or_console.png |
Visible stutter during multi-item playback; HUD updates but motion not fluid. |
06_console.png / 06_console.json |
See console section below. |
Console (Playwright capture, 5 s after Play)
errors: 0
log_spam (console.log): 0
warnings: 5
Warnings were not from app code:
THREE.Clock: deprecated(three.js / R3F)GPU stall due to ReadPixels(Playwright screenshot GPU readback)
No console.log from src/. console.error only in error boundaries.
Lag / stutter
- Visible frame drops when 3+ items on screen with STL meshes.
- Auto-cinematic camera + PointCloud + ScanLine + MotionTrail active on desktop.
- Belt ran to
CONVEYOR_END_X = 3.85— visually merged B transfer with main line.
B item routing
- Motion model had
b_receiver_floorbut 3D scene drew a long green transfer deck (1.5 → 3.6 m). - B item settled pose was correct in unit tests but visually appeared on the spur because:
- Transfer deck looked identical to belt.
- Settle happened late (near exit phase).
- Cinematic camera followed current case, hiding settled B in bin during screenshots.
B physical bin
- No separate floor-standing bin with walls, legs, and drop chute.
- B read as “tray on conveyor end”, not OZON-level receiving zone.
C/D receivers
- Roll cages present on floor with visible floors.
- C/D routing generally worked in motion model; containment OK in tests.
- Multiple STL items + effects caused lag before C/D cases finished.
Render load (code audit)
| Item | Before |
|---|---|
MAX_VISIBLE_ITEMS |
8 |
| Simultaneous STL | Up to 8 heavy STLs |
useFrame hooks (continuous scene) |
6 (CinematicCamera, PointCloud, ScanLine, Stepper pulse, etc.) |
| Rollers | Static (already fixed prior pass) |
| Shadows | shadows={false} on Canvas |
| Heavy effects default | ON on desktop (!liteScene) |
2. What did NOT meet OZON-level demo bar
- B receiver not physically readable — item on belt spur, not in floor bin.
- Performance — stutter with effects + many STLs.
- Visual sorting story broken — viewer cannot see A → inspection → junction → distinct B/C/D containers in one glance.
- Proof gap — prior “готово” reports without production video.
3. Root causes (code)
| Symptom | Root cause | File(s) |
|---|---|---|
| B on belt | Long b_transfer surface + transfer deck mesh = belt extension; late settle timing |
physicalLayout.ts, conveyorNetwork.ts, physicalItemMotion.ts, SorterDigitalTwinContinuous.tsx |
| No real B bin | BReceiverBin was floor pad + walls but dominated by 2+ m transfer deck |
SorterDigitalTwinContinuous.tsx |
| Lag | MAX_VISIBLE_ITEMS=8, all items load STL; PointCloud/ScanLine/MotionTrail/CinematicCamera active |
SorterDigitalTwinContinuous.tsx, PhysicalPlaybackItem.tsx |
| Console noise | No app console.log; only THREE deprecation + Playwright GPU warnings |
N/A (acceptable) |
| setState in useFrame | None found; camera uses ref + direct Three.js mutation | SorterDigitalTwinContinuous.tsx |
4. Acceptance criteria for fix (reference)
- B:
main_belt → inspection → junction → b_transfer → chute_b → b_bin_floor → settled MAX_VISIBLE_ITEMS ≤ 6ENABLE_DEMO_EFFECTS = falseby default- Settled items: simplified mesh, neutral material
- Production video + screenshots after deploy