Files
SlabUploader/test-results/gate-b-2026-09-07/RESULTS.md
T
grokbot_ty a3addc699f Fix evidence line citations in Gate B results
Corrected all 19 evidence line references in RESULTS.md to point at
the actual PASS/FAIL lines verified by nl -ba:

- TV-1: 25-26 → 33-34 (green-sheet pass)
- TV-2: 27-28 → 35-36 (black-sheet pass)
- TV-3: 15-16 → 22-23 (bdft identity pass)
- TV-4: 21-24 → 31 (width samples pass)
- TV-5: 25-26 → 32 (angled-end pass)
- TV-6: 123-127 → 142-145 (3:4 crop pass)
- TV-7: 128-132 → 146-148 (undersized source pass)
- TV-8: 6-11 → 4-9 (pricing pass)
- TV-9: 12-14 → 10-15 (thickness band pass)
- TV-10: 15-16 → 24 (rounding pass)
- V-1: 36-57 → 96-104 (SKU validation pass)
- V-2: 66-87 → 105-115 (content maxLength pass)
- V-3: 88-95 → 116-120 (version hash pass)
- AES-1: 36-43 → 30-43 (roundtrip pass)
- AES-2: 51-52 → 44-45 (missing key pass)
- H-1: 5-9 → 9-13 (health endpoint pass)
- D-1: 11-35 → 14-21 (CreateSlab fail)
- OPS-1: 15-47 → 18-26 (HTTPS not run)
- GC-5: 22-28 → 22-29 (woo_base_url pass)
2026-09-07 17:22:06 +00:00

5.0 KiB
Raw Blame History

Gate B Results — 2026-09-07

Evidence branch: gate-b · tip b3e2faf (evidence logs from this commit; report fixed in next)


Results

Every Gate B test case from docs/TEST-SPEC.md, stated in plain English for the mill owner.

Case What this proves for the mill product Result Evidence Blocker
TV-1 Green-background photos: the slab interior stays visible after the green sheet is removed. pass test-results/gate-b-2026-09-07/vitest.txt:33-34 —
TV-2 Black-background photos: the slab interior stays visible after the black sheet is removed; only border-connected dark pixels are cut out. pass test-results/gate-b-2026-09-07/vitest.txt:35-36 —
TV-3 Board feet math is correct: bdft = sqft × thickness (no divide-by-12). 1 sqft at 1 inch thick = 1 bdft. pass test-results/gate-b-2026-09-07/vitest.txt:22-23 —
TV-4 Width samples measured at every 6 inches along the length axis report min, max, and average correctly. pass test-results/gate-b-2026-09-07/vitest.txt:31 —
TV-5 Slabs with one angled end: the length axis follows the full length, and widths stay perpendicular. pass test-results/gate-b-2026-09-07/vitest.txt:32 —
TV-6 Output photos are cropped to 3:4 ratio, slab fills 80% of the frame, shorter side ≥ 1600 px, saved as transparent PNG. pass test-results/gate-b-2026-09-07/vitest.txt:142-145 —
TV-7 If the source photo is too small to make a good output, the system warns and refuses to upscale — requires a retake. pass test-results/gate-b-2026-09-07/vitest.txt:146-148 —
TV-8 Pricing: recommended price = bdft × price-per-bdft; user overrides are stored and rounded correctly. pass test-results/gate-b-2026-09-07/vitest.txt:4-9 —
TV-9 Thickness in inches maps to the right WooCommerce range label (e.g. 1" rounds up to "1"–1 1/2""). pass test-results/gate-b-2026-09-07/vitest.txt:10-15 —
TV-10 All numbers round half-up to 2 decimals (length, sqft, bdft, price). pass test-results/gate-b-2026-09-07/vitest.txt:24 —
V-1 SKU must be 3–24 characters, uppercase letters, digits, and hyphens only. Valid SKUs accepted; invalid ones rejected. pass test-results/gate-b-2026-09-07/vitest.txt:96-104 —
V-2 Title, short title, and description have WooCommerce character limits enforced. pass test-results/gate-b-2026-09-07/vitest.txt:105-115 —
V-3 The validation module version hash works: the server returns a fresh module when the client's cached version is stale. pass test-results/gate-b-2026-09-07/vitest.txt:116-120 —
AES-1 WooCommerce credentials are encrypted at rest and decrypt back to the original values; ciphertext never leaks in settings responses. pass test-results/gate-b-2026-09-07/pytest.txt:30-43 —
AES-2 Without the AES key, the app refuses to start — no fallback to storing secrets in plain text. pass test-results/gate-b-2026-09-07/pytest.txt:44-45 —
H-1 Health endpoint returns OK with version and woo_reachable: false when no store is configured. pass test-results/gate-b-2026-09-07/pytest.txt:9-13 —
D-1 Creating a slab draft via the API (multipart upload with data, files, metadata) returns 201, sets status to calibrated, and returns server revision. fail test-results/gate-b-2026-09-07/pytest.txt:14-21 #29 — python-multipart not installed
OPS-1 After deploying Docker Compose, GET https://APP_HOSTNAME/api/health returns OK. not run test-results/gate-b-2026-09-07/health.txt:18-26 HTTPS path broken: slab.local unresolved; ports 443/18443 refused. HTTP :18081 health returned 200 (interim only).
GC-5 The app refuses to start without WOO_BASE_URL or with an http:// URL. The store URL is read-only in settings. pass test-results/gate-b-2026-09-07/pytest.txt:22-29 —

Summary

17 pass · 1 fail · 1 not run


Unproven

The following are not covered by any passing test or evidence at this gate:

  • Walkable UI / phone capture — The frontend on the host is a stub. No phone or desktop browser flow has been exercised end to end (capture → mask → axis → numbers → review → publish).
  • HTTPS deployment — OPS-1 was not run. The HTTPS path to the deployed app is not working. HTTP-only health on port 18081 returned OK but is not the specified deployment path.
  • Real draft create on the deployed stack — D-1 failed because python-multipart is missing. The API cannot accept multipart form data (the format used to upload slab photos and metadata). Issue #29 tracks this blocker.
  • End-to-end browser flows — No Playwright or browser-based tests have been executed. All passing tests are isolated unit or API contract tests against synthetic fixtures, not real browser sessions.

Gate B is not green. UAT is not ready.