Quality gates / quality (push) Canceled after 0s
The #16 demo scene stopped at the client guard, so the boundary the ticket is actually about — the server deciding from bytes, before any model work — was never on camera. The recording now lifts its own /api/analyze interceptor for one probe, posts non-image bytes to the running app, and reads the status and copy back out of that response. A 200 fails the recording. Both captions are required release gates, so a later release cannot drop the scene silently. Rehearsed against the real server: 400 not_an_image, card measured legible (opaque, in frame, no scroll), interceptor restored before the next scene.