← back to Dw Photo Capture

5x/out/features-sweep3.json

1 lines

{"sweep":"3","base":"http://127.0.0.1:9890","local":"http://127.0.0.1:9890","fm":"http://127.0.0.1:9899","at":"2026-09-19T17:08:02.950Z","secs":8,"total":33,"passed":33,"failed":0,"skipped":0,"gemini_cost_usd":0,"gemini_calls":0,"results":[{"id":"B0","name":"/batch serves 200 text/html with auth (toolpanel + pv canvas in markup), 401 without","engine":"http","vp":"local","pass":true,"detail":"auth=200 noauth=401 tools=true pv=true"},{"id":"B1","name":"meta.side=psku → <SKU>_psku_{original,master,web}.jpg written + served","engine":"http","vp":"local","pass":true,"detail":"status=200 paths={\"original\":\"/photos/batch/5x-3-1789837674990/ZZ5X-BATCH_psku_original.jpg\",\"master\":\"/photos/batch/5x-3-1789837674990/ZZ5X-BATCH_psku_master.jpg\",\"web\":\"/photos/batch/5x-3-1789837674990/ZZ5X-BATCH_psku_web.jpg\"} readback=[200,200,200] errors=[]"},{"id":"B2","name":"meta.side=info on the SAME sku → <SKU>_info_*.jpg written; psku files NOT overwritten (both sets, distinct bytes)","engine":"http","vp":"local","pass":true,"detail":"info=[200,200,200] psku_orig 3612→3612B info_orig 53116B"},{"id":"B3","name":"no side (single shot) → legacy <SKU>_{original,master,web}.jpg (back-compat)","engine":"http","vp":"local","pass":true,"detail":"paths={\"original\":\"/photos/batch/5x-3-1789837674990/ZZ5X-BATCH_original.jpg\",\"master\":\"/photos/batch/5x-3-1789837674990/ZZ5X-BATCH_master.jpg\",\"web\":\"/photos/batch/5x-3-1789837674990/ZZ5X-BATCH_web.jpg\"} readback=[200,200,200]"},{"id":"B4","name":"unknown side (zzz / ../../evil / 42) → falls back to legacy naming; side never reaches the filename","engine":"http","vp":"local","pass":true,"detail":"{\"web\":\"/photos/batch/5x-3-1789837674990/ZZ5X-BATCH-B4_web.jpg\"} | {\"web\":\"/photos/batch/5x-3-1789837674990/ZZ5X-BATCH-B4_web.jpg\"} | {\"web\":\"/photos/batch/5x-3-1789837674990/ZZ5X-BATCH-B4_web.jpg\"}"},{"id":"B5","name":"re-shoot same sku+side → 200 ok, identical paths (overwrite, no dup files); manifest = one clean JSON line per accepted POST","engine":"http","vp":"local","pass":true,"detail":"paths_same=true manifest=7 lines / 7 accepted sides=[\"psku\",\"info\",null,\"zzz\",\"../../evil\",42,\"psku\"]"},{"id":"B6","name":"degenerate <200B blob rejected per-variant (master still saved); all-degenerate → 500 ok:false; traversal in session/sku sanitized + /photos/.. → 404; empty/no-variant → 400","engine":"http","vp":"local","pass":true,"detail":"b6a=200/[\"original: size 4\"] b6b=500 b6c=200:{\"web\":\"/photos/batch/......etc/....server.js_web.jpg\"} b6d=400 b6e=400 trav=404/404/404"},{"id":"B7.0","name":"Resume → shoot view; movable tools panel renders center-bottom, on-screen, expanded","engine":"chromium","vp":"ipad","pass":true,"detail":"{\"shoot\":true,\"tools\":true,\"tog\":\"▾\",\"onScreen\":true,\"centered\":true,\"hBatch\":\"5x Harness ui\"}"},{"id":"B7.1","name":"Brightness/Warmth/Hue sliders at 0 (+ labels), Reset present; SKU + vendor/pattern/colour fields + shutter in the panel","engine":"chromium","vp":"ipad","pass":true,"detail":"{\"sliders\":[\"0\",\"0\",\"0\"],\"labels\":[\"0\",\"0\",\"0\"],\"reset\":true,\"fields\":true}"},{"id":"B7.2","name":"Auto-snap is UNCHECKED by default (operator-paced)","engine":"chromium","vp":"ipad","pass":true,"detail":"checked=false"},{"id":"B7.3","name":"side badge starts on \"PSku Photo\"; WYSIWYG preview canvas #pv + overlay #ov both present","engine":"chromium","vp":"ipad","pass":true,"detail":"{\"badge\":\"PSku Photo\",\"pv\":true,\"ov\":true}"},{"id":"B7.4","name":"shoot view fills the viewport (100dvh)","engine":"chromium","vp":"ipad","pass":true,"detail":"stage=1366 inner=1366"},{"id":"B7.5","name":"fake camera opens → live WYSIWYG preview canvas is sized + painting frames","engine":"chromium","vp":"ipad","pass":true,"detail":"{\"cam\":true,\"w\":640,\"h\":480,\"nonzero\":true}"},{"id":"B7.6","name":"panel toggle collapses (body hidden, ▸, persisted) and re-expands (▾)","engine":"chromium","vp":"ipad","pass":true,"detail":"{\"col\":{\"c\":true,\"t\":\"▸\",\"bodyShown\":false,\"ls\":{\"collapsed\":true}},\"exp\":{\"c\":false,\"t\":\"▾\",\"bodyShown\":true}}"},{"id":"B7.7","name":"slider changes persist to localStorage dwbatch.tune and survive a reload (sticky to the next photo)","engine":"chromium","vp":"ipad","pass":true,"detail":"{\"t1\":{\"ls\":{\"bright\":25,\"warm\":-40,\"hue\":0},\"lb\":\"25\",\"lw\":\"-40\"},\"t2\":{\"b\":\"25\",\"w\":\"-40\",\"h\":\"0\",\"lb\":\"25\"}}"},{"id":"B7.8","name":"↺ Reset colour → all sliders 0 and persisted 0","engine":"chromium","vp":"ipad","pass":true,"detail":"{\"ls\":{\"bright\":0,\"warm\":0,\"hue\":0},\"v\":[\"0\",\"0\",\"0\"]}"},{"id":"B7.10","name":"Resume (\"Pick up where I left off\") reloads the persisted gray-card calibration → straight to SHOOT, CAL chip = ok (not none), no DRIFT overlay","engine":"chromium","vp":"ipad","pass":true,"detail":"{\"chip\":\"ok\",\"cls\":\"d ok\",\"calStored\":true,\"resumePaths\":[\"calib\",\"shoot\"]}"},{"id":"B7.11","name":"Resume with NO stored calibration falls through to the CALIB view (same as Start) and #cSave stores a self-consistent cal","engine":"chromium","vp":"ipad","pass":true,"detail":"{\"first\":\"calib\",\"calStored\":true}"},{"id":"B7.9","name":"harness guard: no real /api/batch-shot writes, no /api/identify (Gemini) calls reached the server from the UI test","engine":"chromium","vp":"ipad","pass":true,"detail":"batch-shot intercepted=0 identify intercepted=0"},{"id":"ERR","name":"zero console errors + zero pageerrors (batch shoot UI)","engine":"chromium","vp":"ipad","pass":true,"detail":""},{"id":"B7.0","name":"Resume → shoot view; movable tools panel renders center-bottom, on-screen, expanded","engine":"chromium","vp":"iphone","pass":true,"detail":"{\"shoot\":true,\"tools\":true,\"tog\":\"▾\",\"onScreen\":true,\"centered\":true,\"hBatch\":\"5x Harness ui\"}"},{"id":"B7.1","name":"Brightness/Warmth/Hue sliders at 0 (+ labels), Reset present; SKU + vendor/pattern/colour fields + shutter in the panel","engine":"chromium","vp":"iphone","pass":true,"detail":"{\"sliders\":[\"0\",\"0\",\"0\"],\"labels\":[\"0\",\"0\",\"0\"],\"reset\":true,\"fields\":true}"},{"id":"B7.2","name":"Auto-snap is UNCHECKED by default (operator-paced)","engine":"chromium","vp":"iphone","pass":true,"detail":"checked=false"},{"id":"B7.3","name":"side badge starts on \"PSku Photo\"; WYSIWYG preview canvas #pv + overlay #ov both present","engine":"chromium","vp":"iphone","pass":true,"detail":"{\"badge\":\"PSku Photo\",\"pv\":true,\"ov\":true}"},{"id":"B7.4","name":"shoot view fills the viewport (100dvh)","engine":"chromium","vp":"iphone","pass":true,"detail":"stage=844 inner=844"},{"id":"B7.5","name":"fake camera opens → live WYSIWYG preview canvas is sized + painting frames","engine":"chromium","vp":"iphone","pass":true,"detail":"{\"cam\":true,\"w\":640,\"h\":480,\"nonzero\":true}"},{"id":"B7.6","name":"panel toggle collapses (body hidden, ▸, persisted) and re-expands (▾)","engine":"chromium","vp":"iphone","pass":true,"detail":"{\"col\":{\"c\":true,\"t\":\"▸\",\"bodyShown\":false,\"ls\":{\"collapsed\":true}},\"exp\":{\"c\":false,\"t\":\"▾\",\"bodyShown\":true}}"},{"id":"B7.7","name":"slider changes persist to localStorage dwbatch.tune and survive a reload (sticky to the next photo)","engine":"chromium","vp":"iphone","pass":true,"detail":"{\"t1\":{\"ls\":{\"bright\":25,\"warm\":-40,\"hue\":0},\"lb\":\"25\",\"lw\":\"-40\"},\"t2\":{\"b\":\"25\",\"w\":\"-40\",\"h\":\"0\",\"lb\":\"25\"}}"},{"id":"B7.8","name":"↺ Reset colour → all sliders 0 and persisted 0","engine":"chromium","vp":"iphone","pass":true,"detail":"{\"ls\":{\"bright\":0,\"warm\":0,\"hue\":0},\"v\":[\"0\",\"0\",\"0\"]}"},{"id":"B7.10","name":"Resume (\"Pick up where I left off\") reloads the persisted gray-card calibration → straight to SHOOT, CAL chip = ok (not none), no DRIFT overlay","engine":"chromium","vp":"iphone","pass":true,"detail":"{\"chip\":\"ok\",\"cls\":\"d ok\",\"calStored\":true,\"resumePaths\":[\"calib\",\"shoot\"]}"},{"id":"B7.11","name":"Resume with NO stored calibration falls through to the CALIB view (same as Start) and #cSave stores a self-consistent cal","engine":"chromium","vp":"iphone","pass":true,"detail":"{\"first\":\"calib\",\"calStored\":true}"},{"id":"B7.9","name":"harness guard: no real /api/batch-shot writes, no /api/identify (Gemini) calls reached the server from the UI test","engine":"chromium","vp":"iphone","pass":true,"detail":"batch-shot intercepted=0 identify intercepted=0"},{"id":"ERR","name":"zero console errors + zero pageerrors (batch shoot UI)","engine":"chromium","vp":"iphone","pass":true,"detail":""}]}