Caddyfile.fragment exists with tls internal, not yet merged into running Caddy. Moving to post-M3.
Verified in main @ 0c00d25: 5 Playwright E2E specs exist (m3-create, photos-ready, review-photo-strip, settings-contrast, settings-species-pricing). Desktop browser matrix covered. Phone browsers…
Verified in main @ 0c00d25:
✅ INS-1: Health 503 on storage not writable (app.py:156-167) ✅ INS-2: RequestIdMiddleware, X-Request-Id on every request (app.py:95-105) ✅ INS-3: inference_log with…
Superseded: design went stateless-only. Full resend every call, no previous_response_id. test-inference returns "mode": "stateless" (inference.py:646).
Verified in main @ 0c00d25: docs/contracts/UX.md exists with full interaction specs. UAT actively running (M3 in UAT). Done.
Verified in main @ 0c00d25: health endpoint (app.py:156), request_id threading (:31-48), LOG_LEVEL (:57), inference latency logging (inference.py:337,508), inference_log written. Done.
Verified in main @ 0c00d25: woo.py uses wp_username + app_password (AES-GCM), no consumer keys. SETTINGS-15 enforced. Done.
Verified in main @ 0c00d25: REQUIREMENTS.md:18 CAPTURE-10 shipped (iOS Safari, Android Chrome, desktop Chrome/Edge/Firefox, hard stop, no polyfills). frontend/src/browser.ts implements the check.