[ "tests/test_app.py::test_app_starts_without_a_search", "tests/test_app.py::test_empty_and_non_numeric_input_is_handled[ ]", "tests/test_app.py::test_empty_and_non_numeric_input_is_handled[!!!]", "tests/test_app.py::test_empty_and_non_numeric_input_is_handled[]", "tests/test_app.py::test_empty_and_non_numeric_input_is_handled[abc]", "tests/test_app.py::test_listed_but_not_drawn_part_shows_the_page_and_says_so", "tests/test_app.py::test_low_confidence_result_is_shown_as_approximate", "tests/test_app.py::test_messy_input_is_normalized_then_found", "tests/test_app.py::test_multiple_occurrences_offer_a_selector", "tests/test_app.py::test_no_ocr_engine_is_loaded_during_a_search", "tests/test_app.py::test_selecting_another_occurrence_switches_page", "tests/test_app.py::test_unknown_part_is_reported_not_crashed", "tests/test_app.py::test_valid_part_shows_metadata_and_an_image", "tests/test_index_db.py::test_canonical_name_breaks_ties_by_first_appearance", "tests/test_index_db.py::test_canonical_name_takes_the_majority_spelling", "tests/test_index_db.py::test_counts_match_the_document", "tests/test_index_db.py::test_lookup_returns_part_with_its_pages", "tests/test_index_db.py::test_page_metadata_points_at_the_right_diagram", "tests/test_index_db.py::test_rebuild_is_idempotent", "tests/test_localizer.py::test_boxed_callout_is_detected_as_an_assembly", "tests/test_localizer.py::test_boxed_callout_is_recognised_as_an_assembly", "tests/test_localizer.py::test_callout_with_no_leader_line_falls_back_conservatively", "tests/test_localizer.py::test_dashed_and_solid_leaders_both_trace[False]", "tests/test_localizer.py::test_dashed_and_solid_leaders_both_trace[True]", "tests/test_localizer.py::test_every_result_reports_the_tier_that_produced_it", "tests/test_localizer.py::test_leader_crossing_a_large_structure_finds_the_small_target_beyond_it", "tests/test_localizer.py::test_leader_crossing_a_large_structure_still_finds_the_small_target", "tests/test_localizer.py::test_leader_reaches_its_target_and_ignores_a_nearer_decoy", "tests/test_localizer.py::test_leader_reaches_target_and_ignores_a_nearer_decoy", "tests/test_localizer.py::test_override_wins_and_is_labelled_as_such", "tests/test_localizer.py::test_oversized_target_is_capped_rather_than_asserted", "tests/test_localizer.py::test_solid_and_dashed_leaders_both_trace[False]", "tests/test_localizer.py::test_solid_and_dashed_leaders_both_trace[True]", "tests/test_lookup.py::test_index_is_ready", "tests/test_lookup.py::test_index_is_ready_reports_a_missing_database", "tests/test_lookup.py::test_low_confidence_methods_are_labelled_as_approximate", "tests/test_lookup.py::test_multiple_occurrences_are_all_returned_and_ordered", "tests/test_lookup.py::test_normalize_query_keeps_only_digits[ 30642 -30642]", "tests/test_lookup.py::test_normalize_query_keeps_only_digits[-]", "tests/test_lookup.py::test_normalize_query_keeps_only_digits[30642-30642]", "tests/test_lookup.py::test_normalize_query_keeps_only_digits[30642\\n-30642]", "tests/test_lookup.py::test_normalize_query_keeps_only_digits[PART-30642-30642]", "tests/test_lookup.py::test_normalize_query_keeps_only_digits[abc-]", "tests/test_lookup.py::test_normalize_query_keeps_only_digits[no. 30642-30642]", "tests/test_lookup.py::test_part_listed_but_never_drawn_is_still_findable", "tests/test_lookup.py::test_repeated_instances_on_one_page_are_all_kept", "tests/test_lookup.py::test_suggestions_only_offered_by_prefix", "tests/test_lookup.py::test_unknown_part_returns_none", "tests/test_lookup.py::test_valid_part_returns_metadata_and_a_located_box", "tests/test_matcher.py::test_assign_instances_numbers_repeated_callouts", "tests/test_matcher.py::test_fuzzy_match_needs_higher_confidence", "tests/test_matcher.py::test_header_and_footer_strips_are_furniture", "tests/test_matcher.py::test_labels_for_page_accepts_callouts_and_reports_rejects", "tests/test_matcher.py::test_normalize_strips_everything_but_digits[*30638-30638]", "tests/test_matcher.py::test_normalize_strips_everything_but_digits[*7.4012-74012]", "tests/test_matcher.py::test_normalize_strips_everything_but_digits[-74506-74506]", "tests/test_matcher.py::test_normalize_strips_everything_but_digits[30642-30642]", "tests/test_matcher.py::test_normalize_strips_everything_but_digits[D / PU-S-12-12]", "tests/test_matcher.py::test_normalize_strips_everything_but_digits[Seite 18-18]", "tests/test_matcher.py::test_snap_drops_ambiguous_matches", "tests/test_matcher.py::test_snap_exact_and_fuzzy", "tests/test_matcher.py::test_snap_refuses_to_invent_part_numbers", "tests/test_overlay.py::test_annotation_does_not_modify_the_array_passed_in", "tests/test_overlay.py::test_annotation_does_not_modify_the_cached_image_on_disk", "tests/test_overlay.py::test_box_outside_the_image_is_clipped", "tests/test_overlay.py::test_caption_shows_the_part_number", "tests/test_overlay.py::test_encode_png_round_trips", "tests/test_overlay.py::test_every_instance_is_boxed_and_numbered", "tests/test_overlay.py::test_load_diagram_raises_on_a_missing_file", "tests/test_overlay.py::test_load_diagram_reads_the_cached_png", "tests/test_overlay.py::test_missing_component_box_is_skipped_not_crashed", "tests/test_overlay.py::test_red_rectangle_lands_on_the_stored_box", "tests/test_pdf_loader.py::test_cached_png_matches_the_native_image", "tests/test_pdf_loader.py::test_decoy_guard_rejects_off_page_images", "tests/test_pdf_loader.py::test_detects_exactly_the_thirty_catalogue_pages", "tests/test_pdf_loader.py::test_every_catalogue_page_yields_a_native_resolution_diagram", "tests/test_pdf_loader.py::test_front_matter_is_not_a_catalogue_page", "tests/test_pdf_loader.py::test_reused_xref_resolves_per_page", "tests/test_phase3_db.py::test_boxes_lie_inside_their_diagram", "tests/test_phase3_db.py::test_every_label_references_a_known_part_and_page", "tests/test_phase3_db.py::test_every_method_is_a_known_tier", "tests/test_phase3_db.py::test_labels_and_components_are_paired", "tests/test_phase3_db.py::test_lookup_answers_part_to_page_box_method_confidence", "tests/test_phase3_db.py::test_multi_page_part_returns_every_page", "tests/test_phase3_db.py::test_normalized_view_is_resolution_independent", "tests/test_phase3_db.py::test_reannotation_does_not_duplicate", "tests/test_table_parser.py::test_document_wide_totals", "tests/test_table_parser.py::test_footnote_marker_is_split_off_the_german_name", "tests/test_table_parser.py::test_malformed_part_number_is_flagged_not_corrupted", "tests/test_table_parser.py::test_page_26_matches_the_printed_table", "tests/test_table_parser.py::test_page_52_footnotes_filtered_but_later_parts_kept", "tests/test_table_parser.py::test_part_numbers_are_strings" ]