<?xml version="1.0" encoding="utf-8"?><testsuites name="pytest tests"><testsuite name="pytest" errors="0" failures="0" skipped="0" tests="25" time="141.649" timestamp="2026-08-10T08:37:33.231542+00:00" hostname="agent-env-bf990382-1303-463d-afa4-e24275c1e61f"><testcase classname="tests.test_face_attendance.TestEnrollFace" name="test_requires_bearer" time="3.702" /><testcase classname="tests.test_face_attendance.TestEnrollFace" name="test_no_face_returns_422" time="4.961" /><testcase classname="tests.test_face_attendance.TestEnrollFace" name="test_enroll_then_persist" time="5.976" /><testcase classname="tests.test_face_attendance.TestMatchFace" name="test_requires_bearer" time="0.104" /><testcase classname="tests.test_face_attendance.TestMatchFace" name="test_invalid_base64_returns_400" time="1.017" /><testcase classname="tests.test_face_attendance.TestMatchFace" name="test_match_after_enroll" time="9.487" /><testcase classname="tests.test_face_attendance.TestMatchFace" name="test_match_creates_attendance_record" time="19.091" /><testcase classname="tests.test_face_box_overlay.TestFaceBoxSingle" name="test_single_face_has_normalized_box" time="9.991" /><testcase classname="tests.test_face_box_overlay.TestFaceBoxSingle" name="test_matched_box_present" time="4.642" /><testcase classname="tests.test_face_box_overlay.TestFaceBoxMulti" name="test_two_faces_both_have_boxes" time="5.336" /><testcase classname="tests.test_face_box_overlay.TestFaceBoxMulti" name="test_unmatched_face_also_carries_box" time="5.317" /><testcase classname="tests.test_face_box_overlay.TestFaceBoxMulti" name="test_boxes_do_not_overlap_horizontally" time="5.354" /><testcase classname="tests.test_face_box_overlay.TestOpenApiSchema" name="test_facebox_and_facematchitem_schema" time="0.003" /><testcase classname="tests.test_face_quality_multi.TestEnrolQualityGate" name="test_dark_image_rejected" time="5.823" /><testcase classname="tests.test_face_quality_multi.TestEnrolQualityGate" name="test_overexposed_image_rejected" time="1.018" /><testcase classname="tests.test_face_quality_multi.TestEnrolQualityGate" name="test_blurred_image_rejected" time="1.462" /><testcase classname="tests.test_face_quality_multi.TestEnrolQualityGate" name="test_two_faces_rejected" time="1.477" /><testcase classname="tests.test_face_quality_multi.TestEnrolQualityGate" name="test_face_too_far_rejected" time="1.287" /><testcase classname="tests.test_face_quality_multi.TestEnrolQualityGate" name="test_zero_faces_rejected" time="1.123" /><testcase classname="tests.test_face_quality_multi.TestEnrolQualityGate" name="test_happy_path_then_match" time="9.538" /><testcase classname="tests.test_face_quality_multi.TestMultiFaceMatch" name="test_schema_contains_faces_detected_and_matches" time="4.573" /><testcase classname="tests.test_face_quality_multi.TestMultiFaceMatch" name="test_no_face_frame" time="1.080" /><testcase classname="tests.test_face_quality_multi.TestMultiFaceMatch" name="test_same_face_twice_dedupes" time="5.277" /><testcase classname="tests.test_face_quality_multi.TestMultiFaceMatch" name="test_two_different_employees" time="26.573" /><testcase classname="tests.test_face_quality_multi.TestMultiFaceMatch" name="test_no_match_fallback" time="6.116" /></testsuite></testsuites>