Test run: 2026-06-27T20:00:45Z
Branch: feat/incremental-reindex
Python: 3.14.5 (main, May 10 2026, 18:26:20) [GCC 16.1.1 20260430]
Total: 242  Passed: 242  Failed: 0  Errors: 0
======================================================================

============================= test session starts ==============================
platform linux -- Python 3.14.5, pytest-9.1.1, pluggy-1.6.0 -- /home/turbyho/.fw-context/.venv/bin/python3
cachedir: .pytest_cache
rootdir: /home/turbyho/dev/sw/work/tools/fw-context-mcp
configfile: pyproject.toml
plugins: anyio-4.14.0
collecting ... collected 242 items

tests/test_build.py::TestDetectBuildSystem::test_mbed_os_detected_via_dotfile PASSED [  0%]
tests/test_build.py::TestDetectBuildSystem::test_mbed_os_detected_via_mbed_os_dir PASSED [  0%]
tests/test_build.py::TestDetectBuildSystem::test_zephyr_detected_via_west_yml PASSED [  1%]
tests/test_build.py::TestDetectBuildSystem::test_zephyr_detected_via_zephyr_dir PASSED [  1%]
tests/test_build.py::TestDetectBuildSystem::test_platformio_detected PASSED [  2%]
tests/test_build.py::TestDetectBuildSystem::test_unknown_returns_none PASSED [  2%]
tests/test_build.py::TestDetectBuildSystem::test_mbed_wins_over_zephyr_when_both_present PASSED [  2%]
tests/test_build.py::TestParseMbedDotfile::test_parses_valid_file PASSED [  3%]
tests/test_build.py::TestParseMbedDotfile::test_ignores_comments_and_empty_lines PASSED [  3%]
tests/test_build.py::TestParseMbedDotfile::test_missing_file_returns_empty_dict PASSED [  4%]
tests/test_build.py::TestMbedTargetFromCustomTargets::test_extracts_first_board PASSED [  4%]
tests/test_build.py::TestMbedTargetFromCustomTargets::test_skips_non_board_keys PASSED [  4%]
tests/test_build.py::TestMbedTargetFromCustomTargets::test_missing_file_returns_none PASSED [  5%]
tests/test_build.py::TestMbedTargetFromCustomTargets::test_invalid_json_returns_none PASSED [  5%]
tests/test_build.py::TestCheckCompleteness::test_empty_compile_commands_warns PASSED [  6%]
tests/test_build.py::TestCheckCompleteness::test_small_cc_vs_many_sources_warns PASSED [  6%]
tests/test_build.py::TestCheckCompleteness::test_large_cc_no_warning PASSED [  7%]
tests/test_build.py::TestCheckCompleteness::test_cannot_parse_returns_warning PASSED [  7%]
tests/test_build.py::TestBuildConfig::test_defaults PASSED               [  7%]
tests/test_build.py::TestBuildConfig::test_override_fields PASSED        [  8%]
tests/test_compile_commands.py::TestIsSourceFile::test_c_source PASSED   [  8%]
tests/test_compile_commands.py::TestIsSourceFile::test_cpp_source PASSED [  9%]
tests/test_compile_commands.py::TestIsSourceFile::test_header_is_not_source PASSED [  9%]
tests/test_compile_commands.py::TestIsSourceFile::test_other_extensions PASSED [  9%]
tests/test_compile_commands.py::TestDetectLanguage::test_cpp_by_extension PASSED [ 10%]
tests/test_compile_commands.py::TestDetectLanguage::test_cpp_by_std_flag PASSED [ 10%]
tests/test_compile_commands.py::TestDetectLanguage::test_c_by_default PASSED [ 11%]
tests/test_compile_commands.py::TestInferTarget::test_cortex_m4 PASSED   [ 11%]
tests/test_compile_commands.py::TestInferTarget::test_cortex_m33 PASSED  [ 11%]
tests/test_compile_commands.py::TestInferTarget::test_no_mcpu PASSED     [ 12%]
tests/test_compile_commands.py::TestInferTarget::test_empty_args PASSED  [ 12%]
tests/test_compile_commands.py::TestInferTarget::test_arm_compiler_name PASSED [ 13%]
tests/test_compile_commands.py::TestInferTarget::test_riscv_compiler_name PASSED [ 13%]
tests/test_compile_commands.py::TestExpandResponseFile::test_expands_valid_file PASSED [ 14%]
tests/test_compile_commands.py::TestExpandResponseFile::test_missing_file_returns_empty PASSED [ 14%]
tests/test_compile_commands.py::TestExpandResponseFile::test_relative_path PASSED [ 14%]
tests/test_compile_commands.py::TestNormalizeArgs::test_drops_output_flag PASSED [ 15%]
tests/test_compile_commands.py::TestNormalizeArgs::test_drops_dependency_flags PASSED [ 15%]
tests/test_compile_commands.py::TestNormalizeArgs::test_drops_lto PASSED [ 16%]
tests/test_compile_commands.py::TestNormalizeArgs::test_drops_pipe PASSED [ 16%]
tests/test_compile_commands.py::TestNormalizeArgs::test_drops_save_temps PASSED [ 16%]
tests/test_compile_commands.py::TestNormalizeArgs::test_drops_specs PASSED [ 17%]
tests/test_compile_commands.py::TestNormalizeArgs::test_drops_specs_with_space PASSED [ 17%]
tests/test_compile_commands.py::TestNormalizeArgs::test_drops_gcc_only_warnings PASSED [ 18%]
tests/test_compile_commands.py::TestNormalizeArgs::test_injects_target_for_cortex PASSED [ 18%]
tests/test_compile_commands.py::TestNormalizeArgs::test_no_target_without_mcpu PASSED [ 19%]
tests/test_compile_commands.py::TestNormalizeArgs::test_removes_source_file PASSED [ 19%]
tests/test_compile_commands.py::TestNormalizeArgs::test_expands_response_file PASSED [ 19%]
tests/test_compile_commands.py::TestGccSystemIncludes::test_no_lib_gcc_returns_empty PASSED [ 20%]
tests/test_compile_commands.py::TestGccSystemIncludes::test_real_toolchain_structure PASSED [ 20%]
tests/test_compile_commands.py::TestParse::test_parse_minimal PASSED     [ 21%]
tests/test_compile_commands.py::TestParse::test_parse_empty_file PASSED  [ 21%]
tests/test_compile_commands.py::TestParse::test_parse_command_string PASSED [ 21%]
tests/test_compile_commands.py::TestSourceExts::test_c PASSED            [ 22%]
tests/test_compile_commands.py::TestSourceExts::test_cpp PASSED          [ 22%]
tests/test_compile_commands.py::TestSourceExts::test_cc PASSED           [ 23%]
tests/test_compile_commands.py::TestSourceExts::test_cxx PASSED          [ 23%]
tests/test_config.py::TestDeepMerge::test_override_scalar PASSED         [ 23%]
tests/test_config.py::TestDeepMerge::test_nested_merge PASSED            [ 24%]
tests/test_config.py::TestDeepMerge::test_new_key PASSED                 [ 24%]
tests/test_config.py::TestDeepMerge::test_empty_override PASSED          [ 25%]
tests/test_config.py::TestDeepMerge::test_empty_base PASSED              [ 25%]
tests/test_config.py::TestFromDict::test_empty_dict PASSED               [ 26%]
tests/test_config.py::TestFromDict::test_project_name PASSED             [ 26%]
tests/test_config.py::TestFromDict::test_index_settings PASSED           [ 26%]
tests/test_config.py::TestFromDict::test_llm_settings PASSED             [ 27%]
tests/test_config.py::TestFromDict::test_llm_enabled_default PASSED      [ 27%]
tests/test_config.py::TestFromDict::test_llm_enabled_false PASSED        [ 28%]
tests/test_config.py::TestDeriveProjectId::test_git_repo_produces_stable_id PASSED [ 28%]
tests/test_config.py::TestDeriveProjectId::test_non_git_directory PASSED [ 28%]
tests/test_config.py::TestDeriveProjectId::test_different_dirs_produce_different_ids PASSED [ 29%]
tests/test_config.py::TestLocalConfig::test_local_overrides_shared PASSED [ 29%]
tests/test_config.py::TestLocalConfig::test_local_missing_is_ok PASSED   [ 30%]
tests/test_config.py::TestLocalConfig::test_local_can_add_new_sections PASSED [ 30%]
tests/test_config.py::TestLocalConfig::test_local_index_db_dir_override PASSED [ 30%]
tests/test_config.py::TestLocalConfig::test_ensure_project_local_config_creates_file PASSED [ 31%]
tests/test_config.py::TestLocalConfig::test_ensure_project_local_config_idempotent PASSED [ 31%]
tests/test_config.py::TestLocalConfig::test_load_with_local_toml PASSED  [ 32%]
tests/test_config.py::TestSourceRootPaths::test_existing_roots PASSED    [ 32%]
tests/test_config.py::TestSourceRootPaths::test_no_existing_roots PASSED [ 33%]
tests/test_config.py::TestSourceRootPaths::test_exclude_root_paths PASSED [ 33%]
tests/test_config_hash.py::TestNormalizeEntry::test_removes_compiler_binary PASSED [ 33%]
tests/test_config_hash.py::TestNormalizeEntry::test_removes_transient_flags PASSED [ 34%]
tests/test_config_hash.py::TestNormalizeEntry::test_keeps_compilation_flags PASSED [ 34%]
tests/test_config_hash.py::TestNormalizeEntry::test_args_are_sorted PASSED [ 35%]
tests/test_config_hash.py::TestNormalizeEntry::test_normalizes_file_path PASSED [ 35%]
tests/test_config_hash.py::TestNormalizeEntry::test_handles_command_string PASSED [ 35%]
tests/test_config_hash.py::TestNormalizeEntry::test_expands_response_files PASSED [ 36%]
tests/test_config_hash.py::TestCompute::test_identical_inputs_produce_same_hash PASSED [ 36%]
tests/test_config_hash.py::TestCompute::test_different_flags_produce_different_hash PASSED [ 37%]
tests/test_config_hash.py::TestCompute::test_transient_flags_dont_affect_hash PASSED [ 37%]
tests/test_config_hash.py::TestCompute::test_output_path_doesnt_affect_hash PASSED [ 38%]
tests/test_config_hash.py::TestCompute::test_hash_is_hex_string PASSED   [ 38%]
tests/test_db.py::TestOpenDb::test_creates_database PASSED               [ 38%]
tests/test_db.py::TestOpenDb::test_creates_tables PASSED                 [ 39%]
tests/test_db.py::TestOpenDb::test_idempotent PASSED                     [ 39%]
tests/test_db.py::TestOpenDb::test_mtime_column_migration PASSED         [ 40%]
tests/test_db.py::TestOpenDb::test_file_path_column_migration PASSED     [ 40%]
tests/test_db.py::TestTransaction::test_commit PASSED                    [ 40%]
tests/test_db.py::TestTransaction::test_rollback PASSED                  [ 41%]
tests/test_db.py::TestUpsertProject::test_insert_new PASSED              [ 41%]
tests/test_db.py::TestUpsertProject::test_replace_existing PASSED        [ 42%]
tests/test_db.py::TestUpsertBuildConfig::test_insert PASSED              [ 42%]
tests/test_db.py::TestUpsertBuildConfig::test_ignore_duplicate PASSED    [ 42%]
tests/test_db.py::TestUpsertFile::test_insert_new PASSED                 [ 43%]
tests/test_db.py::TestUpsertFile::test_update_existing PASSED            [ 43%]
tests/test_db.py::TestGetFileMtimes::test_empty PASSED                   [ 44%]
tests/test_db.py::TestGetFileMtimes::test_with_files PASSED              [ 44%]
tests/test_db.py::TestGetFileMtimeIndexed::test_existing_file PASSED     [ 45%]
tests/test_db.py::TestGetFileMtimeIndexed::test_nonexistent_file PASSED  [ 45%]
tests/test_db.py::TestInsertSymbolsBatch::test_insert PASSED             [ 45%]
tests/test_db.py::TestInsertSymbolsBatch::test_promotion_to_definition PASSED [ 46%]
tests/test_db.py::TestInsertSymbolsBatch::test_definition_not_demoted PASSED [ 46%]
tests/test_db.py::TestDeleteSymbolsForFile::test_delete PASSED           [ 47%]
tests/test_db.py::TestGetActiveConfig::test_returns_most_recent PASSED   [ 47%]
tests/test_db.py::TestGetActiveConfig::test_none_for_unknown_project PASSED [ 47%]
tests/test_db.py::TestGetAllProjects::test_returns_projects PASSED       [ 48%]
tests/test_db.py::TestGetAllProjects::test_empty_db PASSED               [ 48%]
tests/test_db.py::TestSearchSymbols::test_fts5_search PASSED             [ 49%]
tests/test_db.py::TestSearchSymbols::test_fts5_search_by_path PASSED     [ 49%]
tests/test_db.py::TestSearchSymbols::test_fts5_search_by_name_tokens PASSED [ 50%]
tests/test_db.py::TestSearchSymbols::test_search_no_results PASSED       [ 50%]
tests/test_db.py::TestSearchSymbols::test_search_limit PASSED            [ 50%]
tests/test_db.py::TestExpandQuery::test_bare_word_gets_wildcard PASSED   [ 51%]
tests/test_db.py::TestExpandQuery::test_multiple_words_all_get_wildcards PASSED [ 51%]
tests/test_db.py::TestExpandQuery::test_existing_wildcard_preserved PASSED [ 52%]
tests/test_db.py::TestExpandQuery::test_cpp_scope_gets_expansion PASSED  [ 52%]
tests/test_db.py::TestExpandQuery::test_cpp_scope_with_multiple_tokens PASSED [ 52%]
tests/test_db.py::TestExpandQuery::test_column_filter_bypassed PASSED    [ 53%]
tests/test_db.py::TestExpandQuery::test_quoted_string_bypassed PASSED    [ 53%]
tests/test_db.py::TestExpandQuery::test_fts5_operators_bypassed PASSED   [ 54%]
tests/test_db.py::TestExpandQuery::test_or_operator_bypassed PASSED      [ 54%]
tests/test_db.py::TestExpandQuery::test_parentheses_bypassed PASSED      [ 54%]
tests/test_db.py::TestForeignKeyConstraint::test_upsert_file_requires_build_config PASSED [ 55%]
tests/test_db.py::TestForeignKeyConstraint::test_valid_fk_passes PASSED  [ 55%]
tests/test_db.py::TestRefs::test_count_refs_empty PASSED                 [ 56%]
tests/test_db.py::TestRefs::test_insert_and_find_call PASSED             [ 56%]
tests/test_db.py::TestRefs::test_find_refs_kind_filter PASSED            [ 57%]
tests/test_db.py::TestRefs::test_find_refs_unknown_caller_null_from_usr PASSED [ 57%]
tests/test_db.py::TestRefs::test_delete_refs_for_file PASSED             [ 57%]
tests/test_db.py::TestRefs::test_find_refs_no_match PASSED               [ 58%]
tests/test_db.py::TestRefs::test_find_refs_with_partial_namespace PASSED [ 58%]
tests/test_db.py::TestRefs::test_find_refs_partial_namespace_aggregate PASSED [ 59%]
tests/test_db.py::TestEnumValue::test_enum_constant_with_value PASSED    [ 59%]
tests/test_db.py::TestEnumValue::test_get_file_map_groups_by_parent_enum PASSED [ 59%]
tests/test_db.py::TestEnumValue::test_enum_constant_searchable_by_name PASSED [ 60%]
tests/test_db.py::TestIntegrityCheck::test_integrity_ok PASSED           [ 60%]
tests/test_db.py::TestIntegrityCheck::test_corrupt_db_raises_database_corruption_error PASSED [ 61%]
tests/test_db.py::TestIntegrityCheck::test_corrupt_db_includes_path_in_message PASSED [ 61%]
tests/test_db.py::TestIntegrityCheck::test_corrupt_db_has_action_hint PASSED [ 61%]
tests/test_db.py::TestInheritance::test_insert_and_query_bases PASSED    [ 62%]
tests/test_db.py::TestInheritance::test_insert_and_query_derived PASSED  [ 62%]
tests/test_db.py::TestInheritance::test_multiple_inheritance PASSED      [ 63%]
tests/test_db.py::TestInheritance::test_virtual_inheritance_flag PASSED  [ 63%]
tests/test_db.py::TestInheritance::test_delete_inheritance_for_file PASSED [ 64%]
tests/test_db.py::TestInheritance::test_on_conflict_update PASSED        [ 64%]
tests/test_db.py::TestParentUsr::test_parent_usr_stored PASSED           [ 64%]
tests/test_db.py::TestParentUsr::test_get_class_members PASSED           [ 65%]
tests/test_db.py::TestParentUsr::test_get_class_members_empty PASSED     [ 65%]
tests/test_db.py::TestParentUsr::test_parent_usr_column_migration PASSED [ 66%]
tests/test_db.py::TestTemplateTracking::test_is_template_flag_stored PASSED [ 66%]
tests/test_db.py::TestTemplateTracking::test_get_template_instances PASSED [ 66%]
tests/test_db.py::TestTemplateTracking::test_get_template_instances_empty PASSED [ 67%]
tests/test_db.py::TestTemplateTracking::test_template_usr_column_migration PASSED [ 67%]
tests/test_db.py::TestFileAnalysis::test_upsert_and_query PASSED         [ 68%]
tests/test_db.py::TestFileAnalysis::test_no_analysis_for_unknown_file PASSED [ 68%]
tests/test_db.py::TestFileAnalysis::test_upsert_replaces_existing PASSED [ 69%]
tests/test_db.py::TestFileAnalysis::test_file_analysis_table_exists PASSED [ 69%]
tests/test_db.py::TestOverrides::test_insert_and_query_overrides PASSED  [ 69%]
tests/test_db.py::TestOverrides::test_no_overrides_for_non_virtual PASSED [ 70%]
tests/test_db.py::TestOverrides::test_overrides_unique_constraint PASSED [ 70%]
tests/test_db.py::TestOverrides::test_overrides_table_exists PASSED      [ 71%]
tests/test_incremental_reindex.py::TestContentHashHelpers::test_read_file_lines_success PASSED [ 71%]
tests/test_incremental_reindex.py::TestContentHashHelpers::test_read_file_lines_not_found PASSED [ 71%]
tests/test_incremental_reindex.py::TestContentHashHelpers::test_read_body_normal PASSED [ 72%]
tests/test_incremental_reindex.py::TestContentHashHelpers::test_read_body_invalid_range PASSED [ 72%]
tests/test_incremental_reindex.py::TestContentHashHelpers::test_compute_content_hash_deterministic PASSED [ 73%]
tests/test_incremental_reindex.py::TestContentHashHelpers::test_compute_content_hash_differs_on_body_change PASSED [ 73%]
tests/test_incremental_reindex.py::TestContentHashHelpers::test_compute_content_hash_differs_on_signature_change PASSED [ 73%]
tests/test_incremental_reindex.py::TestContentHashHelpers::test_compute_content_hash_ignores_trailing_whitespace PASSED [ 74%]
tests/test_incremental_reindex.py::TestContentHashHelpers::test_compute_content_hash_sensitive_to_internal_whitespace PASSED [ 74%]
tests/test_incremental_reindex.py::TestContentHashHelpers::test_compute_content_hash_includes_docstring PASSED [ 75%]
tests/test_incremental_reindex.py::TestIncrementalReindex::test_reindex_unchanged_file_preserves_symbols PASSED [ 75%]
tests/test_incremental_reindex.py::TestIncrementalReindex::test_index_all_files_present PASSED [ 76%]
tests/test_incremental_reindex.py::TestIncrementalReindex::test_reindex_after_modifying_function_body PASSED [ 76%]
tests/test_incremental_reindex.py::TestIncrementalReindex::test_reindex_preserves_analysis_for_unchanged_symbols PASSED [ 76%]
tests/test_incremental_reindex.py::TestIncrementalReindex::test_reindex_after_adding_new_function PASSED [ 77%]
tests/test_incremental_reindex.py::TestIncrementalReindex::test_reindex_after_deleting_function PASSED [ 77%]
tests/test_incremental_reindex.py::TestIncrementalReindex::test_reindex_header_only_file PASSED [ 78%]
tests/test_incremental_reindex.py::TestMoveDetection::test_move_detection_same_usr_different_file PASSED [ 78%]
tests/test_incremental_reindex.py::TestMoveDetection::test_move_detection_without_analysis_skips PASSED [ 78%]
tests/test_incremental_reindex.py::TestAutoReindexStale::test_stale_files_detected PASSED [ 79%]
tests/test_incremental_reindex.py::TestAutoReindexStale::test_auto_reindex_stale_integration PASSED [ 79%]
tests/test_incremental_reindex.py::TestAutoReindexStale::test_auto_reindex_empty_list PASSED [ 80%]
tests/test_incremental_reindex.py::TestReindexFileImplEdgeCases::test_nonexistent_file PASSED [ 80%]
tests/test_incremental_reindex.py::TestReindexFileImplEdgeCases::test_file_not_in_compile_commands PASSED [ 80%]
tests/test_incremental_reindex.py::TestReindexFileImplEdgeCases::test_with_analysis_flag_false_skips_llm PASSED [ 81%]
tests/test_incremental_reindex.py::TestReindexFileImplEdgeCases::test_no_index_exists PASSED [ 81%]
tests/test_incremental_reindex.py::TestStoreSymbolsForUnitAnalysisRestore::test_phase1_saves_analysis_before_delete PASSED [ 82%]
tests/test_incremental_reindex.py::TestStoreSymbolsForUnitAnalysisRestore::test_phase3_does_not_restore_when_content_changed PASSED [ 82%]
tests/test_incremental_reindex.py::TestStoreSymbolsForUnitAnalysisRestore::test_symbols_without_analysis_not_in_saved_analyses PASSED [ 83%]
tests/test_incremental_reindex.py::TestStoreSymbolsForUnitAnalysisRestore::test_analysis_columns_synced_on_restore PASSED [ 83%]
tests/test_incremental_reindex.py::TestLlvmAnalysisConsistency::test_initial_index_generates_analysis PASSED [ 83%]
tests/test_incremental_reindex.py::TestLlvmAnalysisConsistency::test_line_numbers_consistent_after_reindex PASSED [ 84%]
tests/test_incremental_reindex.py::TestLlvmAnalysisConsistency::test_kinds_and_definitions_correct PASSED [ 84%]
tests/test_incremental_reindex.py::TestLlvmAnalysisConsistency::test_reindex_with_analysis_regenerates_for_changed_symbol PASSED [ 85%]
tests/test_incremental_reindex.py::TestLlvmAnalysisConsistency::test_unchanged_symbol_keeps_analysis_after_reindex PASSED [ 85%]
tests/test_incremental_reindex.py::TestLlvmAnalysisConsistency::test_new_symbol_gets_analysis_after_reindex PASSED [ 85%]
tests/test_incremental_reindex.py::TestLlvmAnalysisConsistency::test_line_numbers_updated_after_inserting_code PASSED [ 86%]
tests/test_incremental_reindex.py::TestLlvmAnalysisConsistency::test_analysis_consistency_after_multiple_reindexes PASSED [ 86%]
tests/test_server.py::TestAbsPath::test_relative_joined_with_root PASSED [ 87%]
tests/test_server.py::TestAbsPath::test_absolute_returned_unchanged PASSED [ 87%]
tests/test_server.py::TestAbsPath::test_empty_path_passthrough PASSED    [ 88%]
tests/test_server.py::TestAbsPath::test_nested_relative PASSED           [ 88%]
tests/test_server.py::TestReadSymbolBody::test_balances_braces_for_function PASSED [ 88%]
tests/test_server.py::TestReadSymbolBody::test_single_line_body PASSED   [ 89%]
tests/test_server.py::TestReadSymbolBody::test_declaration_without_braces_small_window PASSED [ 89%]
tests/test_server.py::TestReadSymbolBody::test_missing_file_returns_empty PASSED [ 90%]
tests/test_server.py::TestReadSymbolBody::test_out_of_range_line PASSED  [ 90%]
tests/test_server.py::TestReadSymbolBody::test_end_line_exact_range_preferred PASSED [ 90%]
tests/test_server.py::TestReadSymbolBody::test_end_line_clamped_to_file PASSED [ 91%]
tests/test_server.py::TestReadSymbolBody::test_end_line_zero_falls_back_to_braces PASSED [ 91%]
tests/test_server.py::TestLookupSymbolSQL::test_exact_match_on_qualified_name PASSED [ 92%]
tests/test_server.py::TestLookupSymbolSQL::test_exact_match_on_short_name_still_works PASSED [ 92%]
tests/test_server.py::TestLookupSymbolSQL::test_exact_no_match_on_wrong_qualified_name PASSED [ 92%]
tests/test_server.py::TestLookupSymbolSQL::test_prefix_match_on_qualified_name PASSED [ 93%]
tests/test_server.py::TestLookupSymbolSQL::test_prefix_match_on_short_name_still_works PASSED [ 93%]
tests/test_server.py::TestLookupSymbolSQL::test_prefix_match_multiple_results PASSED [ 94%]
tests/test_server.py::TestLookupSymbolSQL::test_definitions_sorted_first PASSED [ 94%]
tests/test_server.py::TestLikeEscaping::test_underscore_not_wildcard_in_name_tokens PASSED [ 95%]
tests/test_server.py::TestLikeEscaping::test_underscore_matches_literal_underscore PASSED [ 95%]
tests/test_server.py::TestLikeEscaping::test_percent_not_wildcard_in_name_tokens PASSED [ 95%]
tests/test_server.py::TestLikeEscaping::test_percent_matches_literal_percent PASSED [ 96%]
tests/test_server.py::TestLikeEscaping::test_backslash_escaped_in_like PASSED [ 96%]
tests/test_server.py::TestLikeEscaping::test_docstring_like_escapes_underscore PASSED [ 97%]
tests/test_server.py::TestLikeEscaping::test_single_quote_escaped_in_like PASSED [ 97%]
tests/test_server.py::TestLikeEscaping::test_empty_term_escaped_safely PASSED [ 97%]
tests/test_server.py::TestLikeEscaping::test_combined_special_chars PASSED [ 98%]
tests/test_server.py::TestFallbackToSearchCode::test_missing_db_returns_graceful_error PASSED [ 98%]
tests/test_server.py::TestFallbackToSearchCode::test_empty_query_fallback PASSED [ 99%]
tests/test_server.py::TestFallbackToSearchCode::test_get_active_build_docstring_covers_schema_staleness PASSED [ 99%]
tests/test_server.py::TestFallbackToSearchCode::test_get_active_build_docstring_stale_field PASSED [100%]

======================== 242 passed in 92.70s (0:01:32) ========================
