<?xml version="1.0" encoding="utf-8"?><testsuites name="pytest tests"><testsuite name="pytest" errors="0" failures="0" skipped="1" tests="245" time="44.171" timestamp="2026-11-05T08:24:57.862915+00:00" hostname="modal"><testcase classname="tests.test_acceptance" name="test_rules_find_structured_spans" time="0.150" /><testcase classname="tests.test_acceptance" name="test_secret_is_not_in_the_vault" time="0.002" /><testcase classname="tests.test_acceptance" name="test_type_filter_drops_other_spans" time="0.000" /><testcase classname="tests.test_acceptance" name="test_two_people_get_distinct_placeholders" time="0.000" /><testcase classname="tests.test_acceptance" name="test_bad_offsets_are_dropped" time="0.000" /><testcase classname="tests.test_acceptance" name="test_chinese_phone_and_email_on_the_rule_lane" time="0.013" /><testcase classname="tests.test_acceptance" name="test_long_text_keeps_original_offsets" time="0.010" /><testcase classname="tests.test_acceptance" name="test_empty_string" time="0.000" /><testcase classname="tests.test_acceptance" name="test_redact_from_the_right" time="0.000" /><testcase classname="tests.test_acceptance" name="test_failed_luhn_and_bad_iban_are_absent" time="0.001" /><testcase classname="tests.test_acceptance" name="test_valid_iban_and_ip" time="0.001" /><testcase classname="tests.test_acceptance" name="test_unknown_type_and_non_string" time="0.000" /><testcase classname="tests.test_acceptance" name="test_missing_model_extra" time="0.001" /><testcase classname="tests.test_acceptance" name="test_overlap_guard_hides_text" time="0.000" /><testcase classname="tests.test_acceptance" name="test_merge_rank_prefer_length_and_score" time="0.001" /><testcase classname="tests.test_acceptance" name="test_tokenizer_edge_space_is_trimmed" time="0.000" /><testcase classname="tests.test_acceptance" name="test_window_shifts_offsets" time="0.000" /><testcase classname="tests.test_acceptance" name="test_score_exact_shift_and_leak" time="0.000" /><testcase classname="tests.test_acceptance" name="test_uie_accepts_only_a_matching_slice" time="0.000" /><testcase classname="tests.test_acceptance" name="test_presidio_bridge_and_batch_and_no_framework_import" time="0.001" /><testcase classname="tests.test_acceptance" name="test_closed_encoder_labels_fold_and_health_labels_do_not" time="0.000" /><testcase classname="tests.test_acceptance" name="test_same_slice_reuses_placeholder" time="0.000" /><testcase classname="tests.test_acceptance" name="test_version_is_single_sourced" time="0.001" /><testcase classname="tests.test_acceptance" name="test_merge_stays_linear_in_span_count" time="0.124" /><testcase classname="tests.test_country_profile" name="test_default_rules_do_not_silently_enable_a_country_profile" time="0.001" /><testcase classname="tests.test_country_profile" name="test_structural_exclusions_are_not_positive_recognitions[000-12-3456]" time="0.001" /><testcase classname="tests.test_country_profile" name="test_structural_exclusions_are_not_positive_recognitions[666-12-3456]" time="0.001" /><testcase classname="tests.test_country_profile" name="test_structural_exclusions_are_not_positive_recognitions[900-12-3456]" time="0.000" /><testcase classname="tests.test_country_profile" name="test_structural_exclusions_are_not_positive_recognitions[123-00-3456]" time="0.000" /><testcase classname="tests.test_country_profile" name="test_structural_exclusions_are_not_positive_recognitions[123-12-0000]" time="0.000" /><testcase classname="tests.test_country_profile" name="test_shape_alone_is_not_enough[Order 123-45-6789]" time="0.000" /><testcase classname="tests.test_country_profile" name="test_shape_alone_is_not_enough[123-45-6789]" time="0.000" /><testcase classname="tests.test_country_profile" name="test_shape_alone_is_not_enough[SSN policy uses order 123-45-6789]" time="0.000" /><testcase classname="tests.test_country_profile" name="test_unicode_folding_keeps_original_country_rule_offsets" time="0.000" /><testcase classname="tests.test_country_profile" name="test_unsupported_country_is_explicit" time="0.000" /><testcase classname="tests.test_demo_api" name="test_health_and_index" time="0.072" /><testcase classname="tests.test_demo_api" name="test_presets_mark_ready_and_missing" time="0.009" /><testcase classname="tests.test_demo_api" name="test_types_exclude_quasi_by_default" time="0.015" /><testcase classname="tests.test_demo_api" name="test_min_score_keeps_a_span_that_has_no_score" time="0.008" /><testcase classname="tests.test_demo_api" name="test_drop_unscored_is_opt_in_on_the_api" time="0.007" /><testcase classname="tests.test_demo_api" name="test_locate_returns_spans_and_slices" time="0.007" /><testcase classname="tests.test_demo_api" name="test_secret_never_reaches_the_vault" time="0.008" /><testcase classname="tests.test_demo_api" name="test_unknown_type_is_a_clean_error" time="0.006" /><testcase classname="tests.test_demo_api" name="test_long_source_is_refused" time="0.006" /><testcase classname="tests.test_demo_e2e" name="test_home_renders" time="3.864" /><testcase classname="tests.test_demo_e2e" name="test_rules_ticket_spans" time="2.890" /><testcase classname="tests.test_demo_e2e" name="test_secret_masked_without_vault_leak" time="3.107" /><testcase classname="tests.test_demo_e2e" name="test_type_filter_hides_person" time="3.256" /><testcase classname="tests.test_demo_e2e" name="test_chinese_line" time="3.144" /><testcase classname="tests.test_demo_e2e" name="test_numbered_placeholders" time="2.963" /><testcase classname="tests.test_demo_e2e" name="test_long_text_offsets" time="3.489" /><testcase classname="tests.test_demo_e2e" name="test_empty_source_is_refused" time="2.456" /><testcase classname="tests.test_demo_e2e" name="test_narrow_viewport" time="2.089" /><testcase classname="tests.test_demo_e2e" name="test_payload_matches_page" time="0.990" /><testcase classname="tests.test_demo_e2e" name="test_copy_json_button" time="3.005" /><testcase classname="tests.test_demo_e2e" name="test_score_floor_is_caller_policy" time="2.849" /><testcase classname="tests.test_demo_e2e" name="test_model_lane_finds_a_name" time="0.790"><skipped type="pytest.skip" message="the hf extra is not installed in this environment">/workspace/tests/test_demo_e2e.py:281: the hf extra is not installed in this environment</skipped></testcase><testcase classname="tests.test_demo_e2e" name="test_reidentification_risk_is_shown" time="1.640" /><testcase classname="tests.test_eval_corpora" name="test_registry_is_a_pin_not_a_moving_file" time="0.014" /><testcase classname="tests.test_eval_corpora" name="test_external_licenses_allow_redistribution" time="0.000" /><testcase classname="tests.test_eval_corpora" name="test_label_map_names_only_taxonomy_types" time="0.000" /><testcase classname="tests.test_eval_corpora" name="test_every_drop_names_a_reason" time="0.000" /><testcase classname="tests.test_eval_corpora" name="test_a_label_is_never_mapped_and_dropped" time="0.000" /><testcase classname="tests.test_eval_corpora" name="test_unknown_label_is_counted_not_guessed" time="0.000" /><testcase classname="tests.test_eval_corpora" name="test_a_dropped_label_is_counted_separately_from_an_unknown_one" time="0.000" /><testcase classname="tests.test_eval_corpora" name="test_a_type_outside_the_call_subset_is_out_of_scope" time="0.000" /><testcase classname="tests.test_eval_corpora" name="test_nested_gold_keeps_the_longer_span" time="0.000" /><testcase classname="tests.test_eval_corpora" name="test_gold_offsets_that_exceed_the_text_are_counted" time="0.000" /><testcase classname="tests.test_eval_corpora" name="test_text_copy_mismatch_is_counted_and_the_offset_is_kept" time="0.000" /><testcase classname="tests.test_eval_corpora" name="test_parquet_encoding_is_declared_per_corpus" time="0.000" /><testcase classname="tests.test_eval_corpora" name="test_a_bad_sha256_is_an_error_not_a_warning" time="0.002" /><testcase classname="tests.test_eval_corpora" name="test_build_docs_reads_the_pinned_columns" time="0.000" /><testcase classname="tests.test_eval_corpora" name="test_a_missing_slice_name_is_an_error" time="0.000" /><testcase classname="tests.test_eval_corpora" name="test_the_limit_takes_a_prefix_so_two_runs_read_the_same_rows" time="0.000" /><testcase classname="tests.test_eval_corpora" name="test_the_score_is_per_document_not_a_pooled_list" time="0.001" /><testcase classname="tests.test_eval_corpora" name="test_a_document_with_no_gold_and_no_hit_is_not_a_false_positive" time="0.001" /><testcase classname="tests.test_eval_corpora" name="test_a_repeated_gold_span_cannot_be_credited_twice" time="0.001" /><testcase classname="tests.test_eval_corpora" name="test_shift_wrong_type_and_miss_are_exclusive_and_add_up_to_fn" time="0.001" /><testcase classname="tests.test_eval_corpora" name="test_leakage_counts_a_high_severity_gold_span_that_survives" time="0.000" /><testcase classname="tests.test_eval_corpora" name="test_report_holds_counts_not_source_text" time="0.001" /><testcase classname="tests.test_eval_corpora" name="test_a_locator_exposes_the_taxonomy_and_its_detectors" time="0.000" /><testcase classname="tests.test_eval_corpora" name="test_a_report_names_the_class_of_each_type" time="0.000" /><testcase classname="tests.test_eval_corpora" name="test_bio_encoding_builds_spans_on_the_source_string" time="0.000" /><testcase classname="tests.test_eval_corpora" name="test_bio_encoding_does_not_merge_two_entities_of_one_type" time="0.000" /><testcase classname="tests.test_eval_corpora" name="test_bio_encoding_trims_the_entity_edge" time="0.000" /><testcase classname="tests.test_eval_corpora" name="test_spy_materialisation_is_reproducible_for_one_seed" time="0.004" /><testcase classname="tests.test_eval_gates" name="test_gates_fail_on_a_minority_slice_even_when_overall_recall_passes" time="0.000" /><testcase classname="tests.test_eval_gates" name="test_a_bad_result_cannot_pass[documents-0-policy0]" time="0.001" /><testcase classname="tests.test_eval_gates" name="test_a_bad_result_cannot_pass[gold_spans-0-policy1]" time="0.001" /><testcase classname="tests.test_eval_gates" name="test_a_bad_result_cannot_pass[dropped_offsets-1-policy2]" time="0.000" /><testcase classname="tests.test_eval_gates" name="test_a_bad_result_cannot_pass[high_severity_leaks-1-policy3]" time="0.000" /><testcase classname="tests.test_eval_gates" name="test_a_bad_result_cannot_pass[recall-nan-policy4]" time="0.000" /><testcase classname="tests.test_eval_gates" name="test_empty_report_and_unmapped_gold_cannot_pass" time="0.000" /><testcase classname="tests.test_eval_gates" name="test_invalid_policy_is_rejected[kwargs0]" time="0.000" /><testcase classname="tests.test_eval_gates" name="test_invalid_policy_is_rejected[kwargs1]" time="0.000" /><testcase classname="tests.test_eval_gates" name="test_invalid_policy_is_rejected[kwargs2]" time="0.000" /><testcase classname="tests.test_eval_gates" name="test_invalid_policy_is_rejected[kwargs3]" time="0.000" /><testcase classname="tests.test_eval_gates" name="test_invalid_policy_is_rejected[kwargs4]" time="0.000" /><testcase classname="tests.test_eval_gates" name="test_matched_evaluations_fingerprint_inputs_without_storing_them" time="0.027" /><testcase classname="tests.test_eval_gates" name="test_cli_persists_failed_report_and_returns_nonzero" time="0.004" /><testcase classname="tests.test_eval_gates" name="test_zero_document_limit_is_rejected_before_loading_a_model" time="0.002" /><testcase classname="tests.test_first_principles" name="test_losing_bridge_cannot_hide_disjoint_identifiers" time="0.000" /><testcase classname="tests.test_first_principles" name="test_dense_bridge_does_not_remove_separate_high_priority_spans" time="0.013" /><testcase classname="tests.test_first_principles" name="test_secret_overlap_never_restores_a_credential" time="0.000" /><testcase classname="tests.test_first_principles" name="test_checked_windows_cover_dense_unicode_without_token_overflow" time="0.001" /><testcase classname="tests.test_first_principles" name="test_impossible_schema_or_character_fails_without_copying_source" time="0.000" /><testcase classname="tests.test_first_principles" name="test_hf_tail_is_inferred_with_original_offsets" time="0.001" /><testcase classname="tests.test_first_principles" name="test_character_metrics_count_union_and_complete_containment" time="0.000" /><testcase classname="tests.test_first_principles" name="test_report_exposes_coverage_lost_to_overlap_policy_without_source_values" time="0.001" /><testcase classname="tests.test_first_principles" name="test_repeated_value_needs_every_mention_and_audited_negatives_measure_damage" time="0.001" /><testcase classname="tests.test_first_principles" name="test_unknown_model_labels_are_counted_without_serializing_them" time="0.000" /><testcase classname="tests.test_first_principles" name="test_spy_v2_ids_are_government_shapes_and_legacy_is_explicit" time="0.003" /><testcase classname="tests.test_first_principles" name="test_spy_does_not_mutate_global_faker_randomness" time="0.003" /><testcase classname="tests.test_first_principles" name="test_native_opf_rejects_decode_mismatch_and_invalid_claims" time="0.002" /><testcase classname="tests.test_hardening" name="test_cyrillic_a_does_not_leave_a_stray_character" time="0.001" /><testcase classname="tests.test_hardening" name="test_a_span_still_slices_the_source_string" time="0.001" /><testcase classname="tests.test_hardening" name="test_fullwidth_at_sign_is_found" time="0.000" /><testcase classname="tests.test_hardening" name="test_zero_width_space_inside_an_address_is_found" time="0.000" /><testcase classname="tests.test_hardening" name="test_fullwidth_digits_are_found" time="0.001" /><testcase classname="tests.test_hardening" name="test_several_confusables_in_one_value" time="0.000" /><testcase classname="tests.test_hardening" name="test_folding_can_be_turned_off" time="0.001" /><testcase classname="tests.test_hardening" name="test_plain_text_is_not_touched_by_folding" time="0.001" /><testcase classname="tests.test_hardening" name="test_fold_only_reports_change_when_it_changes_something" time="0.000" /><testcase classname="tests.test_hardening" name="test_fold_maps_back_to_the_source_index" time="0.000" /><testcase classname="tests.test_hardening" name="test_a_floor_keeps_the_types_that_have_no_score" time="0.001" /><testcase classname="tests.test_hardening" name="test_the_stricter_behaviour_is_opt_in" time="0.001" /><testcase classname="tests.test_hardening" name="test_a_low_score_is_still_filtered" time="0.000" /><testcase classname="tests.test_hardening" name="test_mask_mapping_masks_each_field_and_keeps_a_path" time="0.001" /><testcase classname="tests.test_hardening" name="test_two_fields_with_the_same_type_do_not_collide" time="0.001" /><testcase classname="tests.test_hardening" name="test_mask_mapping_does_not_mutate_the_input" time="0.000" /><testcase classname="tests.test_hardening" name="test_mask_mapping_walks_lists_and_keeps_the_shape" time="0.001" /><testcase classname="tests.test_hardening" name="test_mask_mapping_leaves_numbers_and_bools_alone" time="0.000" /><testcase classname="tests.test_hardening" name="test_a_decoded_json_payload_hides_no_escaped_address" time="0.001" /><testcase classname="tests.test_hardening" name="test_restore_mapping_reports_a_placeholder_it_cannot_resolve" time="0.000" /><testcase classname="tests.test_hardening" name="test_restore_mapping_can_check_the_response_for_new_pii" time="0.001" /><testcase classname="tests.test_hardening" name="test_masking_and_restoring_an_empty_tree_is_a_no_op" time="0.000" /><testcase classname="tests.test_hardening" name="test_a_masked_tree_round_trips_through_json" time="0.001" /><testcase classname="tests.test_model_runtime" name="test_gliner2_pins_the_entire_snapshot_and_uses_requested_device" time="0.000" /><testcase classname="tests.test_model_runtime" name="test_a_load_typeerror_never_retries_with_floating_weights[GlinerDetector-gliner-GLiNER]" time="0.001" /><testcase classname="tests.test_model_runtime" name="test_a_load_typeerror_never_retries_with_floating_weights[Gliner2Detector-gliner2-AutoExtractor]" time="0.001" /><testcase classname="tests.test_model_runtime" name="test_gliner_moves_to_gpu_and_evaluates" time="0.000" /><testcase classname="tests.test_model_runtime" name="test_hf_preserves_the_requested_device[cpu]" time="0.000" /><testcase classname="tests.test_model_runtime" name="test_hf_preserves_the_requested_device[cuda]" time="0.000" /><testcase classname="tests.test_model_runtime" name="test_hf_preserves_the_requested_device[cuda:1]" time="0.000" /><testcase classname="tests.test_model_runtime" name="test_hf_preserves_the_requested_device[mps]" time="0.000" /><testcase classname="tests.test_model_runtime" name="test_gliner2_rejects_a_reported_surface_that_disagrees_with_offsets" time="0.000" /><testcase classname="tests.test_native_candidates" name="test_unreviewed_custom_code_is_rejected_before_execution" time="0.001" /><testcase classname="tests.test_native_candidates" name="test_native_tracer_checks_dense_unicode_tail_and_ignores_sensitivity_gate" time="0.001" /><testcase classname="tests.test_native_candidates" name="test_native_tracer_rejects_invalid_offsets" time="0.000" /><testcase classname="tests.test_native_candidates" name="test_minilm_keeps_coarse_native_categories_and_deduplicates_windows" time="0.000" /><testcase classname="tests.test_native_candidates" name="test_minilm_rejects_a_disagreeing_claimed_surface" time="0.000" /><testcase classname="tests.test_principles" name="test_luhn_follows_iso_7812_length_and_leading_digit" time="0.000" /><testcase classname="tests.test_principles" name="test_iban_uses_mod_97" time="0.000" /><testcase classname="tests.test_principles" name="test_ip_rules_use_the_stdlib_validator" time="0.000" /><testcase classname="tests.test_principles" name="test_every_ip_span_passes_the_stdlib_validator" time="0.000" /><testcase classname="tests.test_principles" name="test_a_short_local_number_is_not_a_phone" time="0.001" /><testcase classname="tests.test_principles" name="test_a_valid_number_scores_one_and_a_shape_scores_null" time="0.001" /><testcase classname="tests.test_principles" name="test_card_digits_inside_an_iban_are_not_a_card" time="0.000" /><testcase classname="tests.test_principles" name="test_email_respects_rfc_5321_local_part_limit" time="0.001" /><testcase classname="tests.test_principles" name="test_secret_assignment_and_mention" time="0.000" /><testcase classname="tests.test_principles" name="test_no_score_floor_ships_with_the_library" time="0.000" /><testcase classname="tests.test_principles" name="test_a_floor_keeps_a_span_that_has_no_score" time="0.000" /><testcase classname="tests.test_principles" name="test_drop_unscored_restores_the_stricter_behaviour_on_request" time="0.000" /><testcase classname="tests.test_principles" name="test_threshold_field_is_gone_from_the_taxonomy" time="0.000" /><testcase classname="tests.test_principles" name="test_every_documented_example_keeps_the_slice_invariant" time="0.005" /><testcase classname="tests.test_principles" name="test_windows_always_advance_and_never_exceed_max" time="0.001" /><testcase classname="tests.test_principles" name="test_windows_cut_on_a_space_when_one_exists" time="0.000" /><testcase classname="tests.test_principles" name="test_merge_is_deterministic_across_input_order" time="0.000" /><testcase classname="tests.test_principles" name="test_payload_has_no_duplicate_span" time="0.001" /><testcase classname="tests.test_principles" name="test_no_rule_contains_a_magic_probability" time="0.001" /><testcase classname="tests.test_principles" name="test_every_preset_pins_a_revision" time="0.000" /><testcase classname="tests.test_protection" name="test_partial_secret_overlap_protects_whole_identifier_without_vault_fragments" time="0.000" /><testcase classname="tests.test_protection" name="test_independent_typed_selection_and_union_protection" time="0.001" /><testcase classname="tests.test_protection" name="test_seeded_interval_oracle_coverage_and_secret_exclusion" time="0.016" /><testcase classname="tests.test_protection" name="test_known_secret_repetitions_are_irreversible_even_under_other_labels" time="0.000" /><testcase classname="tests.test_protection" name="test_overlap_repetitions_include_all_literal_occurrences" time="0.000" /><testcase classname="tests.test_protection" name="test_plan_is_bound_to_source_without_serializing_source_or_hash" time="0.000" /><testcase classname="tests.test_protection" name="test_placeholder_literals_do_not_alias_generated_tokens" time="0.000" /><testcase classname="tests.test_protection" name="test_bad_candidates_raise_without_source_or_offset_repair[candidate0]" time="0.000" /><testcase classname="tests.test_protection" name="test_bad_candidates_raise_without_source_or_offset_repair[candidate1]" time="0.000" /><testcase classname="tests.test_protection" name="test_bad_candidates_raise_without_source_or_offset_repair[candidate2]" time="0.000" /><testcase classname="tests.test_protection" name="test_explicit_threshold_and_unscored_policy_apply_before_coverage" time="0.000" /><testcase classname="tests.test_protection" name="test_strict_diagnostics_reject_incomplete_detection" time="0.000" /><testcase classname="tests.test_protection" name="test_mapping_secret_reuse_across_leaves_is_never_vaulted" time="0.001" /><testcase classname="tests.test_protection" name="test_mapping_round_trip_and_literal_placeholder_collision" time="0.001" /><testcase classname="tests.test_protection" name="test_mapping_diagnostics_survive_when_all_predictions_are_rejected" time="0.000" /><testcase classname="tests.test_protection" name="test_secret_only_mapping_changed_is_true" time="0.000" /><testcase classname="tests.test_protection" name="test_actual_mask_and_report_preserve_high_severity_candidate_coverage" time="0.001" /><testcase classname="tests.test_protection" name="test_explicit_field_policy_masks_unrecognizable_values_without_model_calls" time="0.000" /><testcase classname="tests.test_protection" name="test_field_policy_secret_propagates_to_unlabeled_sibling" time="0.001" /><testcase classname="tests.test_protection" name="test_bad_field_policy_fails_explicitly[value0-policy0]" time="0.000" /><testcase classname="tests.test_protection" name="test_bad_field_policy_fails_explicitly[value1-policy1]" time="0.001" /><testcase classname="tests.test_protection" name="test_bad_field_policy_fails_explicitly[value2-policy2]" time="0.000" /><testcase classname="tests.test_protection" name="test_mapping_preserves_distinct_nonstring_keys_in_both_directions" time="0.001" /><testcase classname="tests.test_protection" name="test_a_literal_secret_placeholder_is_not_reused_as_its_own_redaction" time="0.000" /><testcase classname="tests.test_quasi" name="test_a_zip_a_birth_date_and_a_sex_is_reported" time="0.001" /><testcase classname="tests.test_quasi" name="test_the_result_carries_the_combination" time="0.001" /><testcase classname="tests.test_quasi" name="test_a_pair_is_medium_risk" time="0.000" /><testcase classname="tests.test_quasi" name="test_a_birth_date_with_a_sex_is_reported" time="0.000" /><testcase classname="tests.test_quasi" name="test_a_postcode_with_an_age_is_reported" time="0.000" /><testcase classname="tests.test_quasi" name="test_a_structured_postcode_needs_no_cue" time="0.000" /><testcase classname="tests.test_quasi" name="test_ordinary_text_is_not_flagged[Order 48291 shipped on 2026-11-04.]" time="0.000" /><testcase classname="tests.test_quasi" name="test_ordinary_text_is_not_flagged[Invoice total 1985.00 USD for SKU 12345.]" time="0.000" /><testcase classname="tests.test_quasi" name="test_ordinary_text_is_not_flagged[Meeting moved to 14 March 2027 at 10am.]" time="0.000" /><testcase classname="tests.test_quasi" name="test_ordinary_text_is_not_flagged[Call me at +852 5555 0101 about ticket 12345.]" time="0.000" /><testcase classname="tests.test_quasi" name="test_ordinary_text_is_not_flagged[The project code is 94110 and it is fine.]" time="0.000" /><testcase classname="tests.test_quasi" name="test_ordinary_text_is_not_flagged[Ada Lovelace met Grace Hopper at the lab.]" time="0.000" /><testcase classname="tests.test_quasi" name="test_ordinary_text_is_not_flagged[Version 2.1.0 released; see section 3.]" time="0.000" /><testcase classname="tests.test_quasi" name="test_ordinary_text_is_not_flagged[Delivered to SW1A 1AA on 2026-11-04.]" time="0.000" /><testcase classname="tests.test_quasi" name="test_ordinary_text_is_not_flagged[]" time="0.000" /><testcase classname="tests.test_quasi" name="test_a_date_needs_a_birth_cue" time="0.000" /><testcase classname="tests.test_quasi" name="test_a_bare_number_is_not_a_postcode" time="0.000" /><testcase classname="tests.test_quasi" name="test_the_check_runs_on_the_source_not_on_the_spans" time="0.000" /><testcase classname="tests.test_quasi" name="test_a_non_string_is_refused" time="0.000" /><testcase classname="tests.test_quasi" name="test_combination_to_dict_holds_no_value" time="0.000" /><testcase classname="tests.test_restore" name="test_restore_puts_a_value_back" time="0.001" /><testcase classname="tests.test_restore" name="test_restore_tolerates_a_lower_case_placeholder" time="0.000" /><testcase classname="tests.test_restore" name="test_restore_tolerates_space_drift_inside_the_brackets" time="0.000" /><testcase classname="tests.test_restore" name="test_restore_does_not_confuse_a_longer_token" time="0.001" /><testcase classname="tests.test_restore" name="test_restore_reports_a_token_the_vault_never_held" time="0.000" /><testcase classname="tests.test_restore" name="test_restore_reports_pii_the_model_returned" time="0.001" /><testcase classname="tests.test_restore" name="test_restore_does_not_flag_a_value_it_put_back" time="0.001" /><testcase classname="tests.test_restore" name="test_restore_leaves_a_secret_visible_and_reports_it" time="0.001" /><testcase classname="tests.test_restore" name="test_restore_keeps_nothing" time="0.000" /><testcase classname="tests.test_restore" name="test_restore_on_empty_vault_reports_every_token" time="0.000" /><testcase classname="tests.test_restore" name="test_restore_to_dict_shape" time="0.000" /><testcase classname="tests.test_restore" name="test_restore_rejects_a_bad_type" time="0.000" /><testcase classname="tests.test_restore" name="test_span_to_dict_round_trips" time="0.000" /><testcase classname="tests.test_site" name="test_ci_keeps_the_recorded_model_lane" time="0.017" /><testcase classname="tests.test_site" name="test_the_data_file_holds_only_fake_strings" time="0.001" /><testcase classname="tests.test_site" name="test_every_example_satisfies_the_span_contract" time="0.001" /><testcase classname="tests.test_site" name="test_the_demo_has_enough_examples_to_teach" time="0.001" /><testcase classname="tests.test_site" name="test_the_tutorial_output_matches_the_library" time="1.382" /><testcase classname="tests.test_site" name="test_the_built_site_passes_its_own_check" time="0.507" /><testcase classname="tests.test_site" name="test_a_rebuild_keeps_the_converted_images" time="0.238" /><testcase classname="tests.test_site" name="test_the_icon_set_is_complete" time="0.001" /><testcase classname="tests.test_site" name="test_every_icon_png_is_the_size_it_claims" time="0.001" /><testcase classname="tests.test_site" name="test_the_social_card_is_the_size_platforms_expect" time="0.000" /><testcase classname="tests.test_site" name="test_the_built_pages_carry_a_complete_social_head" time="0.000" /><testcase classname="tests.test_site" name="test_the_author_page_names_the_author_and_offers_a_call_to_action" time="0.000" /><testcase classname="tests.test_site" name="test_the_home_page_links_to_the_author" time="0.000" /><testcase classname="tests.test_site" name="test_the_author_artwork_is_present_and_small" time="0.000" /><testcase classname="tests.test_site" name="test_the_recognised_claim_matches_the_cited_source" time="0.000" /><testcase classname="tests.test_site_e2e" name="test_research_plan_and_evidence_in_browser[1440]" time="1.873" /><testcase classname="tests.test_site_e2e" name="test_research_plan_and_evidence_in_browser[390]" time="1.617" /></testsuite></testsuites>