<?xml version="1.0" encoding="utf-8"?><testsuites name="pytest tests"><testsuite name="pytest" errors="0" failures="0" skipped="0" tests="22" time="4.797" timestamp="2026-10-30T13:28:58.459709+00:00" hostname="Mac"><testcase classname="tests.test_pwa" name="test_exact_install_assets_types_and_headers" time="0.287" /><testcase classname="tests.test_pwa" name="test_no_fallback_html_for_missing_pwa_files_or_assets" time="0.156" /><testcase classname="tests.test_pwa" name="test_html_api_and_private_denials_remain_no_store" time="0.174" /><testcase classname="tests.test_pwa" name="test_fixed_qa_loopback_hostname_and_same_origin_write_boundary" time="0.146" /><testcase classname="tests.test_boundaries" name="test_fresh_businesses_empty_and_separate_files" time="0.187" /><testcase classname="tests.test_boundaries" name="test_auth_csrf_origin_host_and_security_headers" time="0.186" /><testcase classname="tests.test_boundaries" name="test_cross_business_reads_writes_and_body_tenant_spoof" time="0.244" /><testcase classname="tests.test_boundaries" name="test_public_capture_routes_exact_business_and_deduplicates_retries" time="0.189" /><testcase classname="tests.test_boundaries" name="test_two_customers_same_name_email_have_separate_portals" time="0.208" /><testcase classname="tests.test_boundaries" name="test_portal_drafts_hidden_acceptance_and_immediate_revocation" time="0.250" /><testcase classname="tests.test_boundaries" name="test_portal_replacing_code_revokes_old_session" time="0.178" /><testcase classname="tests.test_boundaries" name="test_money_rounding_invoice_snapshot_idempotency_and_overpayment" time="0.223" /><testcase classname="tests.test_boundaries" name="test_concurrent_payments_do_not_lose_or_double_count" time="0.213" /><testcase classname="tests.test_boundaries" name="test_optimistic_job_update_rejects_stale_version" time="0.216" /><testcase classname="tests.test_boundaries" name="test_site_draft_publish_restore_and_tenant_separation" time="0.215" /><testcase classname="tests.test_boundaries" name="test_image_validation_and_publication_access" time="0.256" /><testcase classname="tests.test_boundaries" name="test_password_change_and_logout_invalidate_sessions" time="0.250" /><testcase classname="tests.test_boundaries" name="test_rate_limit_and_no_sensitive_validation_echo" time="0.352" /><testcase classname="tests.test_boundaries" name="test_domain_simulator_no_default_and_unique_ownership" time="0.239" /><testcase classname="tests.test_boundaries" name="test_records_persist_across_app_restart" time="0.224" /><testcase classname="tests.test_boundaries" name="test_outbound_guard_blocks_socket_before_connection" time="0.016" /><testcase classname="tests.test_boundaries" name="test_static_server_does_not_serve_data_or_unknown_api" time="0.149" /></testsuite></testsuites>