Files
SlabUploader/test-results/gate-b-2026-09-07-pass2/RESULTS.md
T
grokbot_ty c591ff1629 Gate B pass2: evidence + RESULTS.md (17 pass / 1 fail / 5 blocked; Gate B not green)
- TV-1/2/4/5/8/9: proxy-synthetic pass
- TV-3/6/7/10: product-state blocked; proxy-synthetic pass
- V-1/2/3: proxy-synthetic pass
- AES-1: api-contract pass (settings leak) + proxy-synthetic pass (encrypt roundtrip)
- AES-2: proxy-synthetic pass
- H-1: api-contract pass
- D-1: api-contract fail (python-multipart missing) → #29
- OPS-1: deploy blocked (health endpoints all unreachable)
- GC-5: proxy-synthetic pass

Gate B is not green. UAT not ready.
2026-09-07 18:05:45 +00:00

51 lines
4.5 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 pass2 results — 2026-09-07
Evidence collected on gate-b @ 302d694.
---
## Results
| Case | What this proves (mill-owner English) | Evidence class | Result | Evidence | Blocker |
|---|---|---|---|---|---|
| TV-1 | Green-sheet chroma-key keeps interior green patch, does not eat border wood | `proxy-synthetic` | pass | vitest.txt:13 | — |
| TV-2 | Black-sheet threshold keeps dark interior wood, flood-fill isolates border-only | `proxy-synthetic` | pass | vitest.txt:13 | — |
| TV-3 | bdft = sqft × thickness_in; 1 sqft @ 1" = 1 bdft; no divide-by-12 | `product-state` | blocked | — | No real slab fixtures or Ty walk on real wood |
| TV-3 | bdft identity holds on synthetic fixture (proxy proof only) | `proxy-synthetic` | pass | vitest.txt:4–5,12 | — |
| TV-4 | Width samples at 6" stations report min, max, average perpendicular to confirmed axis | `proxy-synthetic` | pass | vitest.txt:14–15,20 | — |
| TV-5 | Angled-end slab: length axis follows prevailing length; widths stay perpendicular after confirm | `proxy-synthetic` | pass | vitest.txt:17–18,20 | — |
| TV-6 | 3:4 crop, slab centered, 80% fill, transparent PNG, shorter side ≥ 1600 when source allows | `product-state` | blocked | — | No real slab photos or Ty walk on real wood |
| TV-6 | Crop dimensions and fill ratio hold on synthetic fixture (proxy proof only) | `proxy-synthetic` | pass | vitest.txt:80–90,101 | — |
| TV-7 | Undersized source warns, refuses upscale, photo not publishable until retake | `product-state` | blocked | — | No real slab photos or Ty walk on real wood |
| TV-7 | Undersized-source logic holds on synthetic fixture (proxy proof only) | `proxy-synthetic` | pass | vitest.txt:92–99,101 | — |
| TV-8 | Pricing: bdft 0.96 × $12.50 → $12.00 recommended; override stored; no rule leaves empty | `proxy-synthetic` | pass | vitest.txt:11 | — |
| TV-9 | Thickness 1" rounds up to Woo range using synced attribute term, not hardcoded label | `proxy-synthetic` | pass | vitest.txt:10 | — |
| TV-10 | Rounding: 96.04" → 96"; 0.641 sqft → 0.64; 11.525 bdft → 11.53; 12.345 price → 12.35 | `product-state` | blocked | — | No real slab measurements or Ty walk on real wood |
| TV-10 | Rounding rules hold on synthetic fixture (proxy proof only) | `proxy-synthetic` | pass | vitest.txt:7–8,12 | — |
| V-1 | SKU charset `[A-Z0-9-]{3,24}` accepted; invalid chars/rejected length rejected | `proxy-synthetic` | pass | vitest.txt:21–50,79 | — |
| V-2 | Title/short_title/description maxLength enforced at field exit and submit | `proxy-synthetic` | pass | vitest.txt:52–68,79 | — |
| V-3 | Validation module hash: client cache, submit carry, mismatch returns 412 with fresh module | `proxy-synthetic` | pass | vitest.txt:70–77,79 | — |
| AES-1 | Credentials round-trip without ciphertext leak; settings GET never returns app password | `api-contract` | pass | pytest.txt:46 | — |
| AES-1 | Encrypt-then-decrypt round-trips for username, password, empty, unicode, special chars | `proxy-synthetic` | pass | pytest.txt:9–17 | — |
| AES-2 | Missing SLAB_AES_KEY env var: app refuses to start; no plaintext fallback | `proxy-synthetic` | pass | pytest.txt:23–24 | — |
| H-1 | `GET /api/health` returns 200 `{ "status":"ok" }` with `woo_reachable` false when not configured | `api-contract` | pass | pytest.txt:27–31 | — |
| D-1 | `POST /api/v1/slabs` accepts multipart, returns 201 with `status: calibrated` and `server_rev` | `api-contract` | fail | pytest.txt:32–39 | [#29](https://gitea.vps1.afterthedemo.com/Ty_Tech/SlabUploader/issues/29) |
| OPS-1 | `GET https://${APP_HOSTNAME}/api/health` returns ok after compose up with filled inventory | `deploy` | blocked | — | health.txt: slab.local unresolved, 443/18443 refuse, HTTP :18081 timed out |
| GC-5 | FastAPI refuses to start when WOO_BASE_URL missing or set to `http://` | `proxy-synthetic` | pass | pytest.txt:40–41 | — |
---
## Counts
**17 pass / 1 fail / 5 blocked** (23 total rows)
---
## Unproven / Gate exit
- **TV-3, TV-6, TV-7, TV-10 product-state**: No real slab fixtures, no Ty walk. Proxy-synthetic rows pass but do not satisfy Gate B exit.
- **OPS-1 deploy**: No compose-up, no Caddy, no inventory filled. Health endpoints all unreachable (health.txt).
- **Walkable UI / E2E**: No Playwright E2E tests exist yet; no browser session captured.
- **Real draft create (D-1)**: All 8 TestCreateSlab tests failed with `python-multipart` missing; no slab was created.
- **Gate B is not green. UAT is not ready.** Bots do not declare Gate B green.