Files
SlabUploader/test-results/gate-b-2026-09-07-pass4/RESULTS.md
T

37 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Gate B Results — 2026-09-07 pass 4
Evidence on **gate-b** @ `18a453a`.
| Case | What this proves (mill-owner) | Evidence class | Result | Evidence | Blocker |
|---|---|---|---|---|---|
| TV-1 | Green-sheet mask: green interior patch stays, border pixels removed, U2Net not invoked | proxy-synthetic | pass | vitest.txt:4 | |
| TV-2 | Black-sheet mask: dark wood interior stays, flood-fill isolates border-connected pixels only | proxy-synthetic | pass | vitest.txt:4 | |
| TV-3 | bdft = sqft × thickness_in; identity 1 sqft @ 1" = 1 bdft; no divide-by-12 | product-state | blocked | No PNG under `fixtures/real/`; vitest skip :6 | |
| TV-3 | bdft identity computed correctly by pure module | proxy-synthetic | pass | vitest.txt:74-75,80 | |
| TV-4 | Width samples at 6" stations report min/max/average perpendicular to confirmed axis | proxy-synthetic | pass | vitest.txt:7-8,14 | |
| TV-5 | Angled-end slab: length axis follows prevailing length; widths stay perpendicular after confirm | proxy-synthetic | pass | vitest.txt:10-11,14 | |
| TV-6 | 3:4 crop, 80% fill, transparent PNG, shorter side ≥1600 when source allows | product-state | blocked | No PNG under `fixtures/real/`; vitest skip :5 | |
| TV-6 | 3:4 crop, 80% fill, ≥1600px computed correctly by pure module | proxy-synthetic | pass | vitest.txt:84-105 | |
| TV-7 | Undersized source warns, refuses upscale, photo not publishable until retake | product-state | blocked | No PNG under `fixtures/real/`; vitest skip :13 | |
| TV-7 | Undersized detection and no-upscale logic correct | proxy-synthetic | pass | vitest.txt:96-106 | |
| TV-8 | Pricing: bdft × price_per_bdft; override sticks; missing rule leaves rec empty | proxy-synthetic | pass | vitest.txt:83 | |
| TV-9 | Thickness 1" → Woo range rounds up using synced attribute term | proxy-synthetic | pass | vitest.txt:82 | |
| TV-10 | Rounding: 96.04→96", 0.641→0.64 sqft, 11.525→11.53 bdft, 12.345→12.35 price; half-up 2 decimals | product-state | blocked | No PNG under `fixtures/real/`; vitest skip :81 | |
| TV-10 | Rounding logic correct | proxy-synthetic | pass | vitest.txt:77-78,80 | |
| V-1 | SKU charset `[A-Z0-9-]{3,24}` accepted; invalid values rejected with errors | proxy-synthetic | pass | vitest.txt:15-44,73 | |
| V-2 | Title/short_title/description maxLength enforced at field exit and submit | proxy-synthetic | pass | vitest.txt:46-62,73 | |
| V-3 | Validation module hash: client caches; mismatch returns 412 with fresh module | proxy-synthetic | pass | vitest.txt:64-71,73 | |
| AES-1 | Encrypt-decrypt round-trip; ciphertext never in GET settings; password never returned | api-contract | pass | pytest.txt:46 (settings never returns app_password) | |
| AES-1 | Encrypt-decrypt round-trip; ciphertext ≠ plaintext; fresh nonce each call | proxy-synthetic | pass | pytest.txt:9-17 (8 roundtrip tests) | |
| AES-2 | Missing SLAB_AES_KEY refuses startup; no plaintext fallback | proxy-synthetic | pass | pytest.txt:23-24 (missing_key_refuses, too_short_refuses) | |
| H-1 | GET /api/health returns 200 `{ "status":"ok" }` with woo_reachable false | api-contract | pass | pytest.txt:27-31 (health: 200, ok status, woo_reachable false, shape, lifespan) | |
| D-1 | POST /api/v1/slabs accepts multipart data JSON + files; returns 201 calibrated with server_rev | api-contract | pass | pytest.txt:32-39 (8 TestCreateSlab: 201, calibrated, server_rev, shape, multiple photos, missing data 400, duplicate 409, lifespan) | |
| OPS-1 | GET https://${APP_HOSTNAME}/api/health returns 200 after compose up | deploy | pass | health.txt:2-13 (HTTP/2 200, status ok, woo_reachable false). Self-signed cert (curl -k); phones need CA. UI at / returns 200 text/html. | |
| UI-BVT-1 | Select Photos label has for/id, file selection advances to mask step, Process Photos button enabled, knobs adjustable | e2e | pass | playwright-bvt.txt:4-9 (4 passed: label for/id, file→mask, button enabled, full flow knobs) | |
**Counts:** pass = 20, blocked = 4, fail = 0. Total rows = 24.
**Gate B is not green.** TV-3, TV-6, TV-7, TV-10 product-state rows are blocked (no real fixtures under `fixtures/real/`). All proxy-synthetic companions passed. OPS-1 deploy pass confirmed on `https://100.64.0.9` but self-signed. UI-BVT-1 is a Select Photos click-path BVT only, not a full capture→publish human-walk.
**UNPROVEN:** TV-3/6/7/10 product-state (no real PNGs); full UAT/human-walk; other UI flows beyond Select Photos BVT.