[
  {
    "name": "TestMineLock",
    "kind": "Class",
    "line": 85,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "TestBuildClosetLines",
    "kind": "Class",
    "line": 150,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "TestUpsertClosetLines",
    "kind": "Class",
    "line": 224,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "TestPurgeFileClosets",
    "kind": "Class",
    "line": 263,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "TestMinerClosetRebuild",
    "kind": "Class",
    "line": 283,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "TestExtractDrawerIds",
    "kind": "Class",
    "line": 331,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "TestSearchMemoriesHybrid",
    "kind": "Class",
    "line": 351,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "TestEntityMetadata",
    "kind": "Class",
    "line": 404,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "TestBM25",
    "kind": "Class",
    "line": 517,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "TestDiaryIngest",
    "kind": "Class",
    "line": 579,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "TestTunnels",
    "kind": "Class",
    "line": 677,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "TestDrawerGrepExpansion",
    "kind": "Class",
    "line": 848,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_lock_acquires_and_releases",
    "kind": "Method",
    "line": 86,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_lock_blocks_concurrent_access",
    "kind": "Method",
    "line": 97,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_emits_pointer_line_shape",
    "kind": "Method",
    "line": 151,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_extracts_section_headers_as_topics",
    "kind": "Method",
    "line": 172,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_entity_stoplist_filters_sentence_starters",
    "kind": "Method",
    "line": 179,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_real_proper_nouns_survive_stoplist",
    "kind": "Method",
    "line": 197,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_emits_fallback_line_when_nothing_extractable",
    "kind": "Method",
    "line": 208,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_pointer_references_first_three_drawers",
    "kind": "Method",
    "line": 215,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_overwrites_existing_closet_does_not_append",
    "kind": "Method",
    "line": 225,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_packs_into_multiple_closets_without_splitting_lines",
    "kind": "Method",
    "line": 243,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_deletes_only_the_targeted_source",
    "kind": "Method",
    "line": 264,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_remine_replaces_closets_completely",
    "kind": "Method",
    "line": 284,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_parses_single_pointer",
    "kind": "Method",
    "line": 332,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_parses_multiple_pointers_per_line",
    "kind": "Method",
    "line": 335,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_dedupes_across_lines",
    "kind": "Method",
    "line": 339,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_empty_doc_returns_empty",
    "kind": "Method",
    "line": 343,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_pure_drawer_when_no_closets",
    "kind": "Method",
    "line": 352,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_closet_boost_marks_hit_as_drawer_plus_closet",
    "kind": "Method",
    "line": 362,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_max_distance_filters_hybrid_hits",
    "kind": "Method",
    "line": 385,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_extracts_capitalized_names",
    "kind": "Method",
    "line": 405,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_empty_for_no_entities",
    "kind": "Method",
    "line": 411,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_semicolon_separated",
    "kind": "Method",
    "line": 415,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_stoplist_filters_sentence_starters",
    "kind": "Method",
    "line": 420,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_capped_list_never_truncates_a_name",
    "kind": "Method",
    "line": 435,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_known_registry_is_cached_by_mtime",
    "kind": "Method",
    "line": 479,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_scores_positive_for_matching_doc",
    "kind": "Method",
    "line": 518,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_scores_zero_when_no_overlap",
    "kind": "Method",
    "line": 526,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_idf_downweights_terms_present_in_every_doc",
    "kind": "Method",
    "line": 530,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_empty_inputs_return_zeros",
    "kind": "Method",
    "line": 543,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_hybrid_rank_promotes_keyword_match",
    "kind": "Method",
    "line": 548,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_hybrid_rank_absolute_normalization",
    "kind": "Method",
    "line": 561,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_ingest_creates_drawers_and_closets",
    "kind": "Method",
    "line": 580,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_ingest_skips_unchanged_on_second_run",
    "kind": "Method",
    "line": 594,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_state_file_lives_outside_diary_dir",
    "kind": "Method",
    "line": 608,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_wing_prefixed_drawer_id_prevents_cross_diary_collision",
    "kind": "Method",
    "line": 638,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "setup_method",
    "kind": "Method",
    "line": 683,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "teardown_method",
    "kind": "Method",
    "line": 690,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_create_tunnel",
    "kind": "Method",
    "line": 698,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_list_tunnels_with_and_without_filter",
    "kind": "Method",
    "line": 707,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_delete_tunnel",
    "kind": "Method",
    "line": 716,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_dedup_same_endpoints_updates_label",
    "kind": "Method",
    "line": 721,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_follow_tunnels_returns_connected_endpoints",
    "kind": "Method",
    "line": 728,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_tunnel_is_symmetric",
    "kind": "Method",
    "line": 741,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_follow_tunnels_works_from_either_endpoint",
    "kind": "Method",
    "line": 751,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_empty_endpoint_fields_rejected",
    "kind": "Method",
    "line": 764,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_corrupt_tunnel_file_does_not_lose_new_writes",
    "kind": "Method",
    "line": 779,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_atomic_write_leaves_no_stray_tmp_file",
    "kind": "Method",
    "line": 797,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_concurrent_creates_preserve_all_tunnels",
    "kind": "Method",
    "line": 806,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_created_at_is_timezone_aware",
    "kind": "Method",
    "line": 832,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_expand_returns_matched_plus_neighbors",
    "kind": "Method",
    "line": 868,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_expand_at_start_of_file_only_has_next_neighbor",
    "kind": "Method",
    "line": 887,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_expand_at_end_of_file_only_has_prev_neighbor",
    "kind": "Method",
    "line": 901,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_expand_single_drawer_file_returns_just_matched",
    "kind": "Method",
    "line": 915,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_expand_falls_back_when_metadata_missing",
    "kind": "Method",
    "line": 926,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "test_hybrid_search_enrichment_populates_drawer_index_and_total",
    "kind": "Method",
    "line": 934,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "counting_open",
    "kind": "Method",
    "line": 496,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "worker",
    "kind": "Method",
    "line": 813,
    "file_path": "mempalace/tests/test_closets.py"
  },
  {
    "name": "TestSearchMemories",
    "kind": "Class",
    "line": 18,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "TestSearchCLI",
    "kind": "Class",
    "line": 127,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "test_basic_search",
    "kind": "Method",
    "line": 19,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "test_wing_filter",
    "kind": "Method",
    "line": 25,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "test_room_filter",
    "kind": "Method",
    "line": 29,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "test_wing_and_room_filter",
    "kind": "Method",
    "line": 33,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "test_n_results_limit",
    "kind": "Method",
    "line": 37,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "test_no_palace_returns_error",
    "kind": "Method",
    "line": 41,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "test_result_fields",
    "kind": "Method",
    "line": 45,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "test_created_at_contains_filed_at",
    "kind": "Method",
    "line": 56,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "test_created_at_fallback_when_filed_at_missing",
    "kind": "Method",
    "line": 62,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "test_search_memories_query_error",
    "kind": "Method",
    "line": 77,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "test_search_memories_filters_in_result",
    "kind": "Method",
    "line": 87,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "test_search_memories_handles_none_metadata",
    "kind": "Method",
    "line": 92,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "test_search_prints_results",
    "kind": "Method",
    "line": 128,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "test_search_with_wing_filter",
    "kind": "Method",
    "line": 133,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "test_search_with_room_filter",
    "kind": "Method",
    "line": 138,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "test_search_with_wing_and_room",
    "kind": "Method",
    "line": 143,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "test_search_no_palace_raises",
    "kind": "Method",
    "line": 149,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "test_search_no_results",
    "kind": "Method",
    "line": 153,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "test_search_query_error_raises",
    "kind": "Method",
    "line": 161,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "test_search_n_results",
    "kind": "Method",
    "line": 170,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "test_search_handles_none_metadata_without_crash",
    "kind": "Method",
    "line": 176,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "mock_get_collection",
    "kind": "Method",
    "line": 105,
    "file_path": "mempalace/tests/test_searcher.py"
  },
  {
    "name": "test_load_known_people_falls_back_when_config_missing",
    "kind": "Function",
    "line": 9,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_load_known_people_from_list_config",
    "kind": "Function",
    "line": 17,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_load_known_people_from_dict_config",
    "kind": "Function",
    "line": 27,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_extract_people_uses_username_map",
    "kind": "Function",
    "line": 37,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_extract_people_detects_names_from_content",
    "kind": "Function",
    "line": 48,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_load_known_names_force_reload",
    "kind": "Function",
    "line": 57,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_load_known_names_invalid_json",
    "kind": "Function",
    "line": 71,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_load_known_names_caching",
    "kind": "Function",
    "line": 81,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_is_true_session_start_yes",
    "kind": "Function",
    "line": 97,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_is_true_session_start_no_ctrl_e",
    "kind": "Function",
    "line": 102,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_is_true_session_start_no_previous_messages",
    "kind": "Function",
    "line": 114,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_find_session_boundaries_two_sessions",
    "kind": "Function",
    "line": 129,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_find_session_boundaries_none",
    "kind": "Function",
    "line": 150,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_find_session_boundaries_context_restore_skipped",
    "kind": "Function",
    "line": 155,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_extract_timestamp_found",
    "kind": "Function",
    "line": 178,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_extract_timestamp_not_found",
    "kind": "Function",
    "line": 185,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_extract_timestamp_only_checks_first_50",
    "kind": "Function",
    "line": 192,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_extract_subject_found",
    "kind": "Function",
    "line": 201,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_extract_subject_skips_commands",
    "kind": "Function",
    "line": 207,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_extract_subject_fallback",
    "kind": "Function",
    "line": 213,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_extract_subject_short_prompt_skipped",
    "kind": "Function",
    "line": 219,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_extract_subject_truncated",
    "kind": "Function",
    "line": 225,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_split_file_creates_output",
    "kind": "Function",
    "line": 247,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_split_file_dry_run",
    "kind": "Function",
    "line": 257,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_split_file_not_mega",
    "kind": "Function",
    "line": 267,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_split_file_output_dir_none",
    "kind": "Function",
    "line": 275,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "test_split_file_tiny_fragments_skipped",
    "kind": "Function",
    "line": 284,
    "file_path": "mempalace/tests/test_split_mega_files.py"
  },
  {
    "name": "TestTunnelStorage",
    "kind": "Class",
    "line": 17,
    "file_path": "mempalace/tests/test_palace_graph_tunnels.py"
  },
  {
    "name": "TestExplicitTunnels",
    "kind": "Class",
    "line": 41,
    "file_path": "mempalace/tests/test_palace_graph_tunnels.py"
  },
  {
    "name": "test_load_tunnels_missing_file_returns_empty_list",
    "kind": "Method",
    "line": 18,
    "file_path": "mempalace/tests/test_palace_graph_tunnels.py"
  },
  {
    "name": "test_load_tunnels_corrupt_file_returns_empty_list",
    "kind": "Method",
    "line": 22,
    "file_path": "mempalace/tests/test_palace_graph_tunnels.py"
  },
  {
    "name": "test_save_and_load_round_trip",
    "kind": "Method",
    "line": 27,
    "file_path": "mempalace/tests/test_palace_graph_tunnels.py"
  },
  {
    "name": "test_create_tunnel_deduplicates_reverse_order_and_updates_label",
    "kind": "Method",
    "line": 42,
    "file_path": "mempalace/tests/test_palace_graph_tunnels.py"
  },
  {
    "name": "test_create_tunnel_rejects_empty_names",
    "kind": "Method",
    "line": 60,
    "file_path": "mempalace/tests/test_palace_graph_tunnels.py"
  },
  {
    "name": "test_list_tunnels_filters_by_either_side",
    "kind": "Method",
    "line": 66,
    "file_path": "mempalace/tests/test_palace_graph_tunnels.py"
  },
  {
    "name": "test_delete_tunnel_removes_saved_tunnel",
    "kind": "Method",
    "line": 76,
    "file_path": "mempalace/tests/test_palace_graph_tunnels.py"
  },
  {
    "name": "test_follow_tunnels_returns_direction_and_preview",
    "kind": "Method",
    "line": 86,
    "file_path": "mempalace/tests/test_palace_graph_tunnels.py"
  },
  {
    "name": "test_follow_tunnels_returns_connections_even_if_collection_lookup_fails",
    "kind": "Method",
    "line": 118,
    "file_path": "mempalace/tests/test_palace_graph_tunnels.py"
  },
  {
    "name": "test_run_instructions_valid_name",
    "kind": "Function",
    "line": 10,
    "file_path": "mempalace/tests/test_instructions_cli.py"
  },
  {
    "name": "test_run_instructions_all_available",
    "kind": "Function",
    "line": 19,
    "file_path": "mempalace/tests/test_instructions_cli.py"
  },
  {
    "name": "test_run_instructions_invalid_name",
    "kind": "Function",
    "line": 27,
    "file_path": "mempalace/tests/test_instructions_cli.py"
  },
  {
    "name": "test_run_instructions_missing_md_file",
    "kind": "Function",
    "line": 37,
    "file_path": "mempalace/tests/test_instructions_cli.py"
  },
  {
    "name": "TestChunkExchanges",
    "kind": "Class",
    "line": 10,
    "file_path": "mempalace/tests/test_convo_miner_unit.py"
  },
  {
    "name": "TestDetectConvoRoom",
    "kind": "Class",
    "line": 62,
    "file_path": "mempalace/tests/test_convo_miner_unit.py"
  },
  {
    "name": "TestScanConvos",
    "kind": "Class",
    "line": 84,
    "file_path": "mempalace/tests/test_convo_miner_unit.py"
  },
  {
    "name": "test_exchange_chunking",
    "kind": "Method",
    "line": 11,
    "file_path": "mempalace/tests/test_convo_miner_unit.py"
  },
  {
    "name": "test_paragraph_fallback",
    "kind": "Method",
    "line": 24,
    "file_path": "mempalace/tests/test_convo_miner_unit.py"
  },
  {
    "name": "test_paragraph_line_group_fallback",
    "kind": "Method",
    "line": 34,
    "file_path": "mempalace/tests/test_convo_miner_unit.py"
  },
  {
    "name": "test_empty_content",
    "kind": "Method",
    "line": 41,
    "file_path": "mempalace/tests/test_convo_miner_unit.py"
  },
  {
    "name": "test_short_content_skipped",
    "kind": "Method",
    "line": 45,
    "file_path": "mempalace/tests/test_convo_miner_unit.py"
  },
  {
    "name": "test_long_ai_response_not_truncated",
    "kind": "Method",
    "line": 50,
    "file_path": "mempalace/tests/test_convo_miner_unit.py"
  },
  {
    "name": "test_technical_room",
    "kind": "Method",
    "line": 63,
    "file_path": "mempalace/tests/test_convo_miner_unit.py"
  },
  {
    "name": "test_planning_room",
    "kind": "Method",
    "line": 67,
    "file_path": "mempalace/tests/test_convo_miner_unit.py"
  },
  {
    "name": "test_architecture_room",
    "kind": "Method",
    "line": 71,
    "file_path": "mempalace/tests/test_convo_miner_unit.py"
  },
  {
    "name": "test_decisions_room",
    "kind": "Method",
    "line": 75,
    "file_path": "mempalace/tests/test_convo_miner_unit.py"
  },
  {
    "name": "test_general_fallback",
    "kind": "Method",
    "line": 79,
    "file_path": "mempalace/tests/test_convo_miner_unit.py"
  },
  {
    "name": "test_scan_finds_txt_and_md",
    "kind": "Method",
    "line": 85,
    "file_path": "mempalace/tests/test_convo_miner_unit.py"
  },
  {
    "name": "test_scan_skips_git_dir",
    "kind": "Method",
    "line": 95,
    "file_path": "mempalace/tests/test_convo_miner_unit.py"
  },
  {
    "name": "test_scan_skips_meta_json",
    "kind": "Method",
    "line": 103,
    "file_path": "mempalace/tests/test_convo_miner_unit.py"
  },
  {
    "name": "test_scan_empty_dir",
    "kind": "Method",
    "line": 111,
    "file_path": "mempalace/tests/test_convo_miner_unit.py"
  },
  {
    "name": "test_get_source_groups_basic",
    "kind": "Function",
    "line": 12,
    "file_path": "mempalace/tests/test_dedup.py"
  },
  {
    "name": "test_get_source_groups_below_min",
    "kind": "Function",
    "line": 33,
    "file_path": "mempalace/tests/test_dedup.py"
  },
  {
    "name": "test_get_source_groups_source_filter",
    "kind": "Function",
    "line": 50,
    "file_path": "mempalace/tests/test_dedup.py"
  },
  {
    "name": "test_get_source_groups_wing_filter",
    "kind": "Function",
    "line": 72,
    "file_path": "mempalace/tests/test_dedup.py"
  },
  {
    "name": "test_get_source_groups_missing_source_file",
    "kind": "Function",
    "line": 94,
    "file_path": "mempalace/tests/test_dedup.py"
  },
  {
    "name": "test_dedup_source_group_all_unique",
    "kind": "Function",
    "line": 111,
    "file_path": "mempalace/tests/test_dedup.py"
  },
  {
    "name": "test_dedup_source_group_with_duplicate",
    "kind": "Function",
    "line": 127,
    "file_path": "mempalace/tests/test_dedup.py"
  },
  {
    "name": "test_dedup_source_group_short_docs_deleted",
    "kind": "Function",
    "line": 146,
    "file_path": "mempalace/tests/test_dedup.py"
  },
  {
    "name": "test_dedup_source_group_empty_doc_deleted",
    "kind": "Function",
    "line": 157,
    "file_path": "mempalace/tests/test_dedup.py"
  },
  {
    "name": "test_dedup_source_group_live_deletes",
    "kind": "Function",
    "line": 168,
    "file_path": "mempalace/tests/test_dedup.py"
  },
  {
    "name": "test_dedup_source_group_query_failure_keeps",
    "kind": "Function",
    "line": 183,
    "file_path": "mempalace/tests/test_dedup.py"
  },
  {
    "name": "test_show_stats",
    "kind": "Function",
    "line": 209,
    "file_path": "mempalace/tests/test_dedup.py"
  },
  {
    "name": "test_dedup_palace_dry_run",
    "kind": "Function",
    "line": 236,
    "file_path": "mempalace/tests/test_dedup.py"
  },
  {
    "name": "test_dedup_palace_with_wing",
    "kind": "Function",
    "line": 251,
    "file_path": "mempalace/tests/test_dedup.py"
  },
  {
    "name": "test_dedup_palace_no_groups",
    "kind": "Function",
    "line": 264,
    "file_path": "mempalace/tests/test_dedup.py"
  },
  {
    "name": "TestLLMConfig",
    "kind": "Class",
    "line": 25,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "TestParsedToLines",
    "kind": "Class",
    "line": 66,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "TestCallLLM",
    "kind": "Class",
    "line": 111,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "TestRegenerateClosets",
    "kind": "Class",
    "line": 207,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "test_reads_env_vars",
    "kind": "Method",
    "line": 26,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "test_cli_flags_override_env",
    "kind": "Method",
    "line": 35,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "test_trailing_slash_stripped",
    "kind": "Method",
    "line": 42,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "test_missing_reports_required",
    "kind": "Method",
    "line": 46,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "test_key_is_optional",
    "kind": "Method",
    "line": 57,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "test_topics_become_pointers",
    "kind": "Method",
    "line": 67,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "test_quotes_and_summary_included",
    "kind": "Method",
    "line": 74,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "test_caps_topics_at_15",
    "kind": "Method",
    "line": 85,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "read",
    "kind": "Method",
    "line": 107,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "test_request_shape_and_parsing",
    "kind": "Method",
    "line": 115,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "test_omits_auth_header_when_no_key",
    "kind": "Method",
    "line": 154,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "test_strips_code_fences",
    "kind": "Method",
    "line": 172,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "test_returns_none_on_invalid_json",
    "kind": "Method",
    "line": 188,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "test_missing_config_returns_error",
    "kind": "Method",
    "line": 208,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "test_regen_purges_regex_closets_and_stamps_normalize_version",
    "kind": "Method",
    "line": 216,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "test_regen_uses_basename_not_split_slash",
    "kind": "Method",
    "line": 299,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "fake_urlopen",
    "kind": "Method",
    "line": 119,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "fake_urlopen",
    "kind": "Method",
    "line": 158,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "fake_urlopen",
    "kind": "Method",
    "line": 176,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "fake_urlopen",
    "kind": "Method",
    "line": 191,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "fake_urlopen",
    "kind": "Method",
    "line": 261,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "fake_urlopen",
    "kind": "Method",
    "line": 319,
    "file_path": "mempalace/tests/test_closet_llm.py"
  },
  {
    "name": "TestDetectHall",
    "kind": "Class",
    "line": 11,
    "file_path": "mempalace/tests/test_hall_detection.py"
  },
  {
    "name": "TestDrawerHasHallMetadata",
    "kind": "Class",
    "line": 75,
    "file_path": "mempalace/tests/test_hall_detection.py"
  },
  {
    "name": "TestConvoMinerWritesHalls",
    "kind": "Class",
    "line": 98,
    "file_path": "mempalace/tests/test_hall_detection.py"
  },
  {
    "name": "TestDetectHallCaching",
    "kind": "Class",
    "line": 127,
    "file_path": "mempalace/tests/test_hall_detection.py"
  },
  {
    "name": "TestMineProjectWritesHalls",
    "kind": "Class",
    "line": 149,
    "file_path": "mempalace/tests/test_hall_detection.py"
  },
  {
    "name": "test_function_exists",
    "kind": "Method",
    "line": 14,
    "file_path": "mempalace/tests/test_hall_detection.py"
  },
  {
    "name": "test_technical_content",
    "kind": "Method",
    "line": 19,
    "file_path": "mempalace/tests/test_hall_detection.py"
  },
  {
    "name": "test_emotions_content",
    "kind": "Method",
    "line": 25,
    "file_path": "mempalace/tests/test_hall_detection.py"
  },
  {
    "name": "test_family_content",
    "kind": "Method",
    "line": 31,
    "file_path": "mempalace/tests/test_hall_detection.py"
  },
  {
    "name": "test_memory_content",
    "kind": "Method",
    "line": 37,
    "file_path": "mempalace/tests/test_hall_detection.py"
  },
  {
    "name": "test_creative_content",
    "kind": "Method",
    "line": 43,
    "file_path": "mempalace/tests/test_hall_detection.py"
  },
  {
    "name": "test_identity_content",
    "kind": "Method",
    "line": 49,
    "file_path": "mempalace/tests/test_hall_detection.py"
  },
  {
    "name": "test_consciousness_content",
    "kind": "Method",
    "line": 55,
    "file_path": "mempalace/tests/test_hall_detection.py"
  },
  {
    "name": "test_general_fallback",
    "kind": "Method",
    "line": 61,
    "file_path": "mempalace/tests/test_hall_detection.py"
  },
  {
    "name": "test_highest_score_wins",
    "kind": "Method",
    "line": 67,
    "file_path": "mempalace/tests/test_hall_detection.py"
  },
  {
    "name": "test_add_drawer_includes_hall",
    "kind": "Method",
    "line": 78,
    "file_path": "mempalace/tests/test_hall_detection.py"
  },
  {
    "name": "test_convo_miner_drawers_have_hall",
    "kind": "Method",
    "line": 101,
    "file_path": "mempalace/tests/test_hall_detection.py"
  },
  {
    "name": "test_detect_hall_does_not_reread_config",
    "kind": "Method",
    "line": 130,
    "file_path": "mempalace/tests/test_hall_detection.py"
  },
  {
    "name": "test_mined_drawers_have_hall",
    "kind": "Method",
    "line": 152,
    "file_path": "mempalace/tests/test_hall_detection.py"
  },
  {
    "name": "TestHybridInvariant",
    "kind": "Class",
    "line": 58,
    "file_path": "mempalace/tests/test_hybrid_search.py"
  },
  {
    "name": "TestClosetMetadata",
    "kind": "Class",
    "line": 109,
    "file_path": "mempalace/tests/test_hybrid_search.py"
  },
  {
    "name": "test_no_closets_degrades_to_direct_drawer_search",
    "kind": "Method",
    "line": 59,
    "file_path": "mempalace/tests/test_hybrid_search.py"
  },
  {
    "name": "test_weak_closets_do_not_hide_direct_drawer_hits",
    "kind": "Method",
    "line": 68,
    "file_path": "mempalace/tests/test_hybrid_search.py"
  },
  {
    "name": "test_closet_boost_lifts_matching_drawer",
    "kind": "Method",
    "line": 87,
    "file_path": "mempalace/tests/test_hybrid_search.py"
  },
  {
    "name": "test_closet_preview_exposed_when_boosted",
    "kind": "Method",
    "line": 110,
    "file_path": "mempalace/tests/test_hybrid_search.py"
  },
  {
    "name": "test_drawer_only_hits_have_no_closet_preview",
    "kind": "Method",
    "line": 124,
    "file_path": "mempalace/tests/test_hybrid_search.py"
  },
  {
    "name": "tmp_dir",
    "kind": "Function",
    "line": 73,
    "file_path": "mempalace/tests/conftest.py"
  },
  {
    "name": "palace_path",
    "kind": "Function",
    "line": 81,
    "file_path": "mempalace/tests/conftest.py"
  },
  {
    "name": "config",
    "kind": "Function",
    "line": 89,
    "file_path": "mempalace/tests/conftest.py"
  },
  {
    "name": "collection",
    "kind": "Function",
    "line": 101,
    "file_path": "mempalace/tests/conftest.py"
  },
  {
    "name": "seeded_collection",
    "kind": "Function",
    "line": 111,
    "file_path": "mempalace/tests/conftest.py"
  },
  {
    "name": "seeded_kg",
    "kind": "Function",
    "line": 178,
    "file_path": "mempalace/tests/conftest.py"
  },
  {
    "name": "TestConvoMinerSizeCap",
    "kind": "Class",
    "line": 15,
    "file_path": "mempalace/tests/test_convo_miner_size_cap.py"
  },
  {
    "name": "test_max_file_size_accommodates_long_transcripts",
    "kind": "Method",
    "line": 16,
    "file_path": "mempalace/tests/test_convo_miner_size_cap.py"
  },
  {
    "name": "test_common_english_words_has_expected_entries",
    "kind": "Function",
    "line": 23,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_common_english_words_is_lowercase",
    "kind": "Function",
    "line": 31,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_person_context_patterns_is_nonempty",
    "kind": "Function",
    "line": 39,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_load_from_nonexistent_dir",
    "kind": "Function",
    "line": 46,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_save_and_load_roundtrip",
    "kind": "Function",
    "line": 54,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_save_creates_file",
    "kind": "Function",
    "line": 68,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_seed_registers_people",
    "kind": "Function",
    "line": 77,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_seed_registers_projects",
    "kind": "Function",
    "line": 94,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_seed_sets_mode",
    "kind": "Function",
    "line": 100,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_seed_flags_ambiguous_names",
    "kind": "Function",
    "line": 106,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_seed_with_aliases",
    "kind": "Function",
    "line": 121,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_seed_skips_empty_names",
    "kind": "Function",
    "line": 134,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_lookup_known_person",
    "kind": "Function",
    "line": 147,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_lookup_known_project",
    "kind": "Function",
    "line": 160,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_lookup_unknown_word",
    "kind": "Function",
    "line": 168,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_lookup_case_insensitive",
    "kind": "Function",
    "line": 176,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_lookup_alias",
    "kind": "Function",
    "line": 187,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_lookup_ambiguous_word_as_person",
    "kind": "Function",
    "line": 202,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_lookup_ambiguous_word_as_concept",
    "kind": "Function",
    "line": 213,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_research_local_only_by_default",
    "kind": "Function",
    "line": 227,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_research_with_allow_network",
    "kind": "Function",
    "line": 244,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_research_caches_result",
    "kind": "Function",
    "line": 257,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_research_local_only_not_cached",
    "kind": "Function",
    "line": 278,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_confirm_research_adds_to_people",
    "kind": "Function",
    "line": 287,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_wikipedia_404_returns_unknown",
    "kind": "Function",
    "line": 302,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_extract_people_from_query",
    "kind": "Function",
    "line": 324,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_extract_unknown_candidates",
    "kind": "Function",
    "line": 342,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_extract_unknown_candidates_skips_known",
    "kind": "Function",
    "line": 349,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_summary",
    "kind": "Function",
    "line": 363,
    "file_path": "mempalace/tests/test_entity_registry.py"
  },
  {
    "name": "test_extract_memories_empty_text",
    "kind": "Function",
    "line": 20,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_extract_memories_no_markers",
    "kind": "Function",
    "line": 25,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_extract_memories_short_text_skipped",
    "kind": "Function",
    "line": 30,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_extract_memories_decision",
    "kind": "Function",
    "line": 39,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_extract_memories_preference",
    "kind": "Function",
    "line": 53,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_extract_memories_milestone",
    "kind": "Function",
    "line": 67,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_extract_memories_problem",
    "kind": "Function",
    "line": 81,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_extract_memories_emotional",
    "kind": "Function",
    "line": 97,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_extract_memories_chunk_index_increments",
    "kind": "Function",
    "line": 111,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_score_markers_with_matches",
    "kind": "Function",
    "line": 126,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_score_markers_no_matches",
    "kind": "Function",
    "line": 135,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_get_sentiment_positive",
    "kind": "Function",
    "line": 143,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_get_sentiment_negative",
    "kind": "Function",
    "line": 147,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_get_sentiment_neutral",
    "kind": "Function",
    "line": 151,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_has_resolution_true",
    "kind": "Function",
    "line": 158,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_has_resolution_false",
    "kind": "Function",
    "line": 162,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_is_code_line_detects_code",
    "kind": "Function",
    "line": 169,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_is_code_line_allows_prose",
    "kind": "Function",
    "line": 175,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_extract_prose_strips_code_blocks",
    "kind": "Function",
    "line": 183,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_extract_prose_returns_original_if_all_code",
    "kind": "Function",
    "line": 191,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_split_into_segments_by_paragraph",
    "kind": "Function",
    "line": 201,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_split_into_segments_by_turns",
    "kind": "Function",
    "line": 207,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_split_into_segments_single_block",
    "kind": "Function",
    "line": 217,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_all_markers_has_five_types",
    "kind": "Function",
    "line": 228,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_positive_words",
    "kind": "Function",
    "line": 241,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "test_negative_words",
    "kind": "Function",
    "line": 246,
    "file_path": "mempalace/tests/test_general_extractor.py"
  },
  {
    "name": "write_file",
    "kind": "Function",
    "line": 12,
    "file_path": "mempalace/tests/test_exporter.py"
  },
  {
    "name": "test_export_creates_structure",
    "kind": "Function",
    "line": 58,
    "file_path": "mempalace/tests/test_exporter.py"
  },
  {
    "name": "test_export_markdown_content",
    "kind": "Function",
    "line": 84,
    "file_path": "mempalace/tests/test_exporter.py"
  },
  {
    "name": "test_export_index_content",
    "kind": "Function",
    "line": 107,
    "file_path": "mempalace/tests/test_exporter.py"
  },
  {
    "name": "test_export_empty_palace",
    "kind": "Function",
    "line": 126,
    "file_path": "mempalace/tests/test_exporter.py"
  },
  {
    "name": "TestHandleRequest",
    "kind": "Class",
    "line": 44,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "TestReadTools",
    "kind": "Class",
    "line": 214,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "TestSearchTool",
    "kind": "Class",
    "line": 330,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "TestWriteTools",
    "kind": "Class",
    "line": 429,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "TestKGTools",
    "kind": "Class",
    "line": 622,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "TestDiaryTools",
    "kind": "Class",
    "line": 672,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "TestCacheInvalidation",
    "kind": "Class",
    "line": 747,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_initialize",
    "kind": "Method",
    "line": 45,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_initialize_negotiates_client_version",
    "kind": "Method",
    "line": 52,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_initialize_negotiates_older_supported_version",
    "kind": "Method",
    "line": 64,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_initialize_unknown_version_falls_back_to_latest",
    "kind": "Method",
    "line": 76,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_initialize_missing_version_uses_oldest",
    "kind": "Method",
    "line": 90,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_notifications_initialized_returns_none",
    "kind": "Method",
    "line": 96,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_ping_returns_empty_result",
    "kind": "Method",
    "line": 102,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_tools_list",
    "kind": "Method",
    "line": 109,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_null_arguments_does_not_hang",
    "kind": "Method",
    "line": 120,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_unknown_tool",
    "kind": "Method",
    "line": 137,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_unknown_method",
    "kind": "Method",
    "line": 149,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_any_notification_returns_none",
    "kind": "Method",
    "line": 155,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_unknown_method_no_id_returns_none",
    "kind": "Method",
    "line": 168,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_malformed_method_none",
    "kind": "Method",
    "line": 175,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_tools_call_dispatches",
    "kind": "Method",
    "line": 191,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_status_cold_start_no_collection",
    "kind": "Method",
    "line": 215,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_status_empty_palace",
    "kind": "Method",
    "line": 234,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_status_with_data",
    "kind": "Method",
    "line": 244,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_status_handles_none_metadata_without_partial",
    "kind": "Method",
    "line": 253,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_list_wings",
    "kind": "Method",
    "line": 285,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_list_rooms_all",
    "kind": "Method",
    "line": 293,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_list_rooms_filtered",
    "kind": "Method",
    "line": 302,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_get_taxonomy",
    "kind": "Method",
    "line": 310,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_no_palace_returns_error",
    "kind": "Method",
    "line": 319,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_search_basic",
    "kind": "Method",
    "line": 331,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_search_with_wing_filter",
    "kind": "Method",
    "line": 342,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_search_with_room_filter",
    "kind": "Method",
    "line": 349,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_search_min_similarity_backwards_compat",
    "kind": "Method",
    "line": 356,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_list_rooms_rejects_invalid_wing",
    "kind": "Method",
    "line": 372,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_search_rejects_invalid_room",
    "kind": "Method",
    "line": 381,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_list_drawers_rejects_invalid_wing",
    "kind": "Method",
    "line": 390,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_find_tunnels_rejects_invalid_wing",
    "kind": "Method",
    "line": 399,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_wal_redacts_sensitive_fields",
    "kind": "Method",
    "line": 408,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_add_drawer",
    "kind": "Method",
    "line": 430,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_add_drawer_duplicate_detection",
    "kind": "Method",
    "line": 446,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_add_drawer_shared_header_no_collision",
    "kind": "Method",
    "line": 460,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_delete_drawer",
    "kind": "Method",
    "line": 483,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_delete_drawer_not_found",
    "kind": "Method",
    "line": 491,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_check_duplicate",
    "kind": "Method",
    "line": 498,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_get_drawer",
    "kind": "Method",
    "line": 517,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_get_drawer_not_found",
    "kind": "Method",
    "line": 527,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_list_drawers",
    "kind": "Method",
    "line": 534,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_list_drawers_with_wing_filter",
    "kind": "Method",
    "line": 542,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_list_drawers_with_room_filter",
    "kind": "Method",
    "line": 552,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_list_drawers_pagination",
    "kind": "Method",
    "line": 562,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_list_drawers_negative_offset_clamped",
    "kind": "Method",
    "line": 571,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_update_drawer_content",
    "kind": "Method",
    "line": 580,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_update_drawer_wing_and_room",
    "kind": "Method",
    "line": 592,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_update_drawer_not_found",
    "kind": "Method",
    "line": 603,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_update_drawer_noop",
    "kind": "Method",
    "line": 610,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_kg_add",
    "kind": "Method",
    "line": 623,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_kg_query",
    "kind": "Method",
    "line": 635,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_kg_invalidate",
    "kind": "Method",
    "line": 642,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_kg_timeline",
    "kind": "Method",
    "line": 654,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_kg_stats",
    "kind": "Method",
    "line": 661,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_diary_write_and_read",
    "kind": "Method",
    "line": 673,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_diary_read_empty",
    "kind": "Method",
    "line": 692,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_diary_write_same_second_shared_prefix_no_collision",
    "kind": "Method",
    "line": 701,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_mtime_change_invalidates_cache",
    "kind": "Method",
    "line": 750,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_inode_change_invalidates_cache",
    "kind": "Method",
    "line": 771,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_missing_db_invalidates_cache",
    "kind": "Method",
    "line": 793,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_reconnect_reports_failure_when_no_palace",
    "kind": "Method",
    "line": 819,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_reconnect_reports_success",
    "kind": "Method",
    "line": 832,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "FrozenDateTime",
    "kind": "Class",
    "line": 710,
    "file_path": "mempalace/tests/test_mcp_server.py"
  },
  {
    "name": "test_canonical_lang_lowercase_passthrough",
    "kind": "Function",
    "line": 29,
    "file_path": "mempalace/tests/test_i18n_lang_case.py"
  },
  {
    "name": "test_canonical_lang_uppercase_resolves",
    "kind": "Function",
    "line": 34,
    "file_path": "mempalace/tests/test_i18n_lang_case.py"
  },
  {
    "name": "test_canonical_lang_unknown_returns_none",
    "kind": "Function",
    "line": 41,
    "file_path": "mempalace/tests/test_i18n_lang_case.py"
  },
  {
    "name": "test_load_lang_case_insensitive",
    "kind": "Function",
    "line": 46,
    "file_path": "mempalace/tests/test_i18n_lang_case.py"
  },
  {
    "name": "test_entity_section_loads_for_uppercase_input",
    "kind": "Function",
    "line": 57,
    "file_path": "mempalace/tests/test_i18n_lang_case.py"
  },
  {
    "name": "test_get_entity_patterns_case_insensitive",
    "kind": "Function",
    "line": 64,
    "file_path": "mempalace/tests/test_i18n_lang_case.py"
  },
  {
    "name": "test_get_entity_patterns_shares_cache_across_cases",
    "kind": "Function",
    "line": 71,
    "file_path": "mempalace/tests/test_i18n_lang_case.py"
  },
  {
    "name": "test_unknown_language_still_falls_back_to_english",
    "kind": "Function",
    "line": 82,
    "file_path": "mempalace/tests/test_i18n_lang_case.py"
  },
  {
    "name": "TestToolCount",
    "kind": "Class",
    "line": 61,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "TestReadmeToolsExistInCode",
    "kind": "Class",
    "line": 86,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "TestNoUnlistedTools",
    "kind": "Class",
    "line": 117,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "TestClosetsExist",
    "kind": "Class",
    "line": 140,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "TestClosetFirstSearch",
    "kind": "Class",
    "line": 164,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "TestBM25HybridSearch",
    "kind": "Class",
    "line": 190,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "TestEntityMetadataExtraction",
    "kind": "Class",
    "line": 219,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "TestStripNoise",
    "kind": "Class",
    "line": 242,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "TestDiaryIngest",
    "kind": "Class",
    "line": 266,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "TestFactChecker",
    "kind": "Class",
    "line": 293,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "TestTunnelFunctions",
    "kind": "Class",
    "line": 320,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "TestClosetLLM",
    "kind": "Class",
    "line": 357,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "TestMineLock",
    "kind": "Class",
    "line": 384,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "TestVersionConsistency",
    "kind": "Class",
    "line": 418,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "TestVersionBadge",
    "kind": "Class",
    "line": 445,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "TestDialectNotLossless",
    "kind": "Class",
    "line": 473,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "TestReadmeDialectNotLossless",
    "kind": "Class",
    "line": 505,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "TestHallMetadata",
    "kind": "Class",
    "line": 536,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "TestBackendAbstraction",
    "kind": "Class",
    "line": 593,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "TestI18n",
    "kind": "Class",
    "line": 632,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "TestWakeUpTokenCost",
    "kind": "Class",
    "line": 663,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "TestReadmeProjectStructureVersion",
    "kind": "Class",
    "line": 704,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "TestReadmeToolCountConsistency",
    "kind": "Class",
    "line": 731,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "TestAAAKSpecToolHandler",
    "kind": "Class",
    "line": 750,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_readme_tool_count_matches_code",
    "kind": "Method",
    "line": 64,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_every_readme_tool_exists_in_tools_dict",
    "kind": "Method",
    "line": 89,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_no_undocumented_tools",
    "kind": "Method",
    "line": 120,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_get_closets_collection_exists",
    "kind": "Method",
    "line": 143,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_closets_importable",
    "kind": "Method",
    "line": 152,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_closet_boost_search_exists",
    "kind": "Method",
    "line": 167,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_searcher_imports_closets",
    "kind": "Method",
    "line": 176,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_bm25_in_searcher",
    "kind": "Method",
    "line": 193,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_entity_extraction_in_palace_or_miner",
    "kind": "Method",
    "line": 222,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_strip_noise_exists",
    "kind": "Method",
    "line": 245,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_strip_noise_importable",
    "kind": "Method",
    "line": 254,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_diary_ingest_module_exists",
    "kind": "Method",
    "line": 269,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_diary_ingest_importable",
    "kind": "Method",
    "line": 278,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_fact_checker_module_exists",
    "kind": "Method",
    "line": 296,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_fact_checker_importable",
    "kind": "Method",
    "line": 305,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_find_tunnels_exists",
    "kind": "Method",
    "line": 323,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_traverse_exists",
    "kind": "Method",
    "line": 332,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_graph_stats_exists",
    "kind": "Method",
    "line": 338,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_tunnel_functions_importable",
    "kind": "Method",
    "line": 343,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_closet_llm_module_exists",
    "kind": "Method",
    "line": 360,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_closet_llm_importable",
    "kind": "Method",
    "line": 369,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_mine_lock_exists",
    "kind": "Method",
    "line": 387,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_mine_lock_importable",
    "kind": "Method",
    "line": 396,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_mine_lock_is_context_manager",
    "kind": "Method",
    "line": 402,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_version_py_matches_pyproject",
    "kind": "Method",
    "line": 421,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_readme_badge_matches_version_py",
    "kind": "Method",
    "line": 448,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_dialect_docstring_says_not_lossless",
    "kind": "Method",
    "line": 476,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_dialect_docstring_does_not_claim_lossless",
    "kind": "Method",
    "line": 487,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_readme_dialect_line_not_lossless",
    "kind": "Method",
    "line": 514,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_hall_keywords_defined_in_config",
    "kind": "Method",
    "line": 539,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_miners_write_hall_metadata",
    "kind": "Method",
    "line": 547,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_readme_hall_types_match_config",
    "kind": "Method",
    "line": 571,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_backends_base_exists",
    "kind": "Method",
    "line": 596,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_backends_chroma_exists",
    "kind": "Method",
    "line": 608,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_backends_importable",
    "kind": "Method",
    "line": 618,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_i18n_directory_exists",
    "kind": "Method",
    "line": 635,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_at_least_8_language_files",
    "kind": "Method",
    "line": 640,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_english_baseline_exists",
    "kind": "Method",
    "line": 650,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_readme_wakeup_cost_matches_layers",
    "kind": "Method",
    "line": 666,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_readme_pyproject_version_claim",
    "kind": "Method",
    "line": 707,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_all_tool_count_mentions_consistent",
    "kind": "Method",
    "line": 734,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_aaak_spec_handler_exists",
    "kind": "Method",
    "line": 753,
    "file_path": "mempalace/tests/test_readme_claims.py"
  },
  {
    "name": "test_layer0_reads_identity_file",
    "kind": "Function",
    "line": 12,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer0_caches_text",
    "kind": "Function",
    "line": 21,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer0_missing_file_returns_default",
    "kind": "Function",
    "line": 32,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer0_token_estimate",
    "kind": "Function",
    "line": 40,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer0_token_estimate_empty",
    "kind": "Function",
    "line": 49,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer0_strips_whitespace",
    "kind": "Function",
    "line": 56,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer0_default_path",
    "kind": "Function",
    "line": 64,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer1_no_palace",
    "kind": "Function",
    "line": 84,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer1_generates_essential_story",
    "kind": "Function",
    "line": 93,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer1_empty_palace",
    "kind": "Function",
    "line": 116,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer1_with_wing_filter",
    "kind": "Function",
    "line": 130,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer1_truncates_long_snippets",
    "kind": "Function",
    "line": 149,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer1_respects_max_chars",
    "kind": "Function",
    "line": 165,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer1_importance_from_various_keys",
    "kind": "Function",
    "line": 183,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer1_batch_exception_breaks",
    "kind": "Function",
    "line": 204,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer2_no_palace",
    "kind": "Function",
    "line": 225,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer2_retrieve_with_wing",
    "kind": "Function",
    "line": 233,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer2_retrieve_with_room",
    "kind": "Function",
    "line": 251,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer2_retrieve_wing_and_room",
    "kind": "Function",
    "line": 268,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer2_retrieve_empty",
    "kind": "Function",
    "line": 287,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer2_retrieve_no_filter",
    "kind": "Function",
    "line": 301,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer2_retrieve_error",
    "kind": "Function",
    "line": 317,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer2_truncates_long_snippets",
    "kind": "Function",
    "line": 331,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer3_no_palace",
    "kind": "Function",
    "line": 359,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer3_search_raw_no_palace",
    "kind": "Function",
    "line": 367,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer3_search_with_results",
    "kind": "Function",
    "line": 375,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer3_search_no_results",
    "kind": "Function",
    "line": 395,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer3_search_with_wing_filter",
    "kind": "Function",
    "line": 409,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer3_search_with_room_filter",
    "kind": "Function",
    "line": 428,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer3_search_with_wing_and_room",
    "kind": "Function",
    "line": 447,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer3_search_error",
    "kind": "Function",
    "line": 466,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer3_search_truncates_long_docs",
    "kind": "Function",
    "line": 480,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer3_search_raw_returns_dicts",
    "kind": "Function",
    "line": 498,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer3_search_raw_with_filters",
    "kind": "Function",
    "line": 520,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_layer3_search_raw_error",
    "kind": "Function",
    "line": 539,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_memory_stack_wake_up",
    "kind": "Function",
    "line": 556,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_memory_stack_wake_up_with_wing",
    "kind": "Function",
    "line": 573,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_memory_stack_recall",
    "kind": "Function",
    "line": 589,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_memory_stack_search",
    "kind": "Function",
    "line": 604,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_memory_stack_status",
    "kind": "Function",
    "line": 619,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "test_memory_stack_status_with_palace",
    "kind": "Function",
    "line": 639,
    "file_path": "mempalace/tests/test_layers.py"
  },
  {
    "name": "TestJsonlNotSilentlySkipped",
    "kind": "Class",
    "line": 31,
    "file_path": "mempalace/tests/test_miner_jsonl_visibility.py"
  },
  {
    "name": "test_jsonl_in_readable_extensions",
    "kind": "Method",
    "line": 32,
    "file_path": "mempalace/tests/test_miner_jsonl_visibility.py"
  },
  {
    "name": "test_scan_project_picks_up_jsonl_file",
    "kind": "Method",
    "line": 52,
    "file_path": "mempalace/tests/test_miner_jsonl_visibility.py"
  },
  {
    "name": "test_large_jsonl_not_silently_dropped_by_size_cap",
    "kind": "Method",
    "line": 72,
    "file_path": "mempalace/tests/test_miner_jsonl_visibility.py"
  },
  {
    "name": "test_scan_project_picks_up_50mb_jsonl",
    "kind": "Method",
    "line": 91,
    "file_path": "mempalace/tests/test_miner_jsonl_visibility.py"
  },
  {
    "name": "fake_stat",
    "kind": "Method",
    "line": 108,
    "file_path": "mempalace/tests/test_miner_jsonl_visibility.py"
  },
  {
    "name": "TestPassthrough",
    "kind": "Class",
    "line": 19,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "TestQuestionExtraction",
    "kind": "Class",
    "line": 52,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "TestTailSentence",
    "kind": "Class",
    "line": 87,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "TestTailTruncation",
    "kind": "Class",
    "line": 121,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "TestLengthGuards",
    "kind": "Class",
    "line": 144,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "TestMetadata",
    "kind": "Class",
    "line": 167,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "TestRealWorldScenarios",
    "kind": "Class",
    "line": 193,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_short_query_unchanged",
    "kind": "Method",
    "line": 22,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_empty_query",
    "kind": "Method",
    "line": 28,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_none_query",
    "kind": "Method",
    "line": 34,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_exactly_safe_length",
    "kind": "Method",
    "line": 39,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_one_over_safe_length_triggers_sanitization",
    "kind": "Method",
    "line": 45,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_question_at_end_of_long_text",
    "kind": "Method",
    "line": 55,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_japanese_question_mark",
    "kind": "Method",
    "line": 63,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_multiple_questions_takes_last",
    "kind": "Method",
    "line": 71,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_question_in_system_prompt_ignored_when_real_question_exists",
    "kind": "Method",
    "line": 77,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_command_style_query",
    "kind": "Method",
    "line": 90,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_keyword_style_query",
    "kind": "Method",
    "line": 98,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_long_candidate_uses_last_sentence_fragment",
    "kind": "Method",
    "line": 105,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_long_candidate_strips_wrapping_quotes",
    "kind": "Method",
    "line": 111,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_single_long_line_no_sentences",
    "kind": "Method",
    "line": 124,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_truncation_preserves_tail",
    "kind": "Method",
    "line": 132,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_tail_sentence_fallback_preserves_tail_without_delimiters",
    "kind": "Method",
    "line": 137,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_max_query_length_reduced",
    "kind": "Method",
    "line": 147,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_output_never_exceeds_max",
    "kind": "Method",
    "line": 150,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_extraction_too_short_falls_through",
    "kind": "Method",
    "line": 158,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_original_length_preserved",
    "kind": "Method",
    "line": 170,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_clean_length_matches_clean_query",
    "kind": "Method",
    "line": 176,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_sanitized_flag_true_when_changed",
    "kind": "Method",
    "line": 182,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_sanitized_flag_false_when_unchanged",
    "kind": "Method",
    "line": 188,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_mempalace_wakeup_prepended",
    "kind": "Method",
    "line": 196,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_memory_md_prepended",
    "kind": "Method",
    "line": 212,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_2000_char_system_prompt_with_question",
    "kind": "Method",
    "line": 227,
    "file_path": "mempalace/tests/test_query_sanitizer.py"
  },
  {
    "name": "test_sanitize_normal_id",
    "kind": "Function",
    "line": 32,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_sanitize_strips_dangerous_chars",
    "kind": "Function",
    "line": 36,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_sanitize_empty_returns_unknown",
    "kind": "Function",
    "line": 40,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_count_human_messages_basic",
    "kind": "Function",
    "line": 54,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_count_skips_command_messages",
    "kind": "Function",
    "line": 67,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_count_handles_list_content",
    "kind": "Function",
    "line": 79,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_count_missing_file",
    "kind": "Function",
    "line": 96,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_count_empty_file",
    "kind": "Function",
    "line": 100,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_count_malformed_json_lines",
    "kind": "Function",
    "line": 106,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_stop_hook_passthrough_when_active",
    "kind": "Function",
    "line": 130,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_stop_hook_passthrough_when_active_string",
    "kind": "Function",
    "line": 140,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_stop_hook_passthrough_below_interval",
    "kind": "Function",
    "line": 150,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_stop_hook_blocks_at_interval",
    "kind": "Function",
    "line": 164,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_stop_hook_tracks_save_point",
    "kind": "Function",
    "line": 179,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_session_start_passes_through",
    "kind": "Function",
    "line": 199,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_precompact_allows",
    "kind": "Function",
    "line": 211,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_log_writes_to_hook_log",
    "kind": "Function",
    "line": 223,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_log_oserror_is_silenced",
    "kind": "Function",
    "line": 232,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_maybe_auto_ingest_no_env",
    "kind": "Function",
    "line": 242,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_maybe_auto_ingest_with_env",
    "kind": "Function",
    "line": 249,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_maybe_auto_ingest_with_transcript",
    "kind": "Function",
    "line": 261,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_maybe_auto_ingest_oserror",
    "kind": "Function",
    "line": 273,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_maybe_auto_ingest_skips_when_mine_running",
    "kind": "Function",
    "line": 284,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_mine_already_running_no_file",
    "kind": "Function",
    "line": 299,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_mine_already_running_dead_pid",
    "kind": "Function",
    "line": 305,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_mine_already_running_live_pid",
    "kind": "Function",
    "line": 313,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_mine_already_running_corrupt_file",
    "kind": "Function",
    "line": 321,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_get_mine_dir_mempal_dir",
    "kind": "Function",
    "line": 332,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_get_mine_dir_transcript_fallback",
    "kind": "Function",
    "line": 342,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_get_mine_dir_empty",
    "kind": "Function",
    "line": 350,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_parse_harness_input_unknown",
    "kind": "Function",
    "line": 359,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_parse_harness_input_valid",
    "kind": "Function",
    "line": 366,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_stop_hook_oserror_on_last_save_read",
    "kind": "Function",
    "line": 378,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_stop_hook_oserror_on_write",
    "kind": "Function",
    "line": 395,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_precompact_with_mempal_dir",
    "kind": "Function",
    "line": 423,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_precompact_with_mempal_dir_oserror",
    "kind": "Function",
    "line": 438,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_precompact_with_timeout",
    "kind": "Function",
    "line": 452,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_precompact_mines_transcript_dir",
    "kind": "Function",
    "line": 467,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_run_hook_dispatches_session_start",
    "kind": "Function",
    "line": 488,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_run_hook_dispatches_stop",
    "kind": "Function",
    "line": 498,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_run_hook_dispatches_precompact",
    "kind": "Function",
    "line": 517,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_run_hook_unknown_hook",
    "kind": "Function",
    "line": 526,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_run_hook_invalid_json",
    "kind": "Function",
    "line": 534,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_validate_transcript_rejects_path_traversal",
    "kind": "Function",
    "line": 546,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_validate_transcript_rejects_wrong_extension",
    "kind": "Function",
    "line": 552,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_validate_transcript_accepts_valid_paths",
    "kind": "Function",
    "line": 559,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_validate_transcript_empty_string",
    "kind": "Function",
    "line": 574,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_count_rejects_traversal_path",
    "kind": "Function",
    "line": 579,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_count_logs_warning_on_rejected_path",
    "kind": "Function",
    "line": 584,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_validate_transcript_accepts_platform_native_path",
    "kind": "Function",
    "line": 593,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_stop_hook_rejects_injected_stop_hook_active",
    "kind": "Function",
    "line": 605,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "bad_write_text",
    "kind": "Function",
    "line": 403,
    "file_path": "mempalace/tests/test_hooks_cli.py"
  },
  {
    "name": "test_extract_candidates_finds_frequent_names",
    "kind": "Function",
    "line": 25,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_extract_candidates_ignores_stopwords",
    "kind": "Function",
    "line": 32,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_extract_candidates_requires_min_frequency",
    "kind": "Function",
    "line": 39,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_extract_candidates_finds_multi_word_names",
    "kind": "Function",
    "line": 47,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_extract_candidates_empty_text",
    "kind": "Function",
    "line": 54,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_score_entity_person_verbs",
    "kind": "Function",
    "line": 62,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_score_entity_project_verbs",
    "kind": "Function",
    "line": 70,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_score_entity_dialogue_markers",
    "kind": "Function",
    "line": 78,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_score_entity_code_ref",
    "kind": "Function",
    "line": 85,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_score_entity_no_signals",
    "kind": "Function",
    "line": 92,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_classify_entity_no_signals_gives_uncertain",
    "kind": "Function",
    "line": 103,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_classify_entity_strong_project",
    "kind": "Function",
    "line": 115,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_classify_entity_strong_person_needs_two_signal_types",
    "kind": "Function",
    "line": 126,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_classify_entity_pronoun_only_is_uncertain",
    "kind": "Function",
    "line": 140,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_classify_entity_mixed_signals",
    "kind": "Function",
    "line": 151,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_detect_entities_with_person_file",
    "kind": "Function",
    "line": 166,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_detect_entities_with_project_file",
    "kind": "Function",
    "line": 186,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_detect_entities_empty_files",
    "kind": "Function",
    "line": 207,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_detect_entities_handles_missing_file",
    "kind": "Function",
    "line": 214,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_detect_entities_respects_max_files",
    "kind": "Function",
    "line": 220,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_scan_for_detection_finds_prose",
    "kind": "Function",
    "line": 235,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_scan_for_detection_skips_git_dir",
    "kind": "Function",
    "line": 245,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_stopwords_contains_common_words",
    "kind": "Function",
    "line": 258,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_prose_extensions",
    "kind": "Function",
    "line": 264,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_print_entity_list_with_entities",
    "kind": "Function",
    "line": 272,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_print_entity_list_empty",
    "kind": "Function",
    "line": 284,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_confirm_entities_yes_mode",
    "kind": "Function",
    "line": 293,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_confirm_entities_accept_all",
    "kind": "Function",
    "line": 304,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_confirm_entities_edit_reclassify_uncertain",
    "kind": "Function",
    "line": 315,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_confirm_entities_add_mode",
    "kind": "Function",
    "line": 341,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_scan_for_detection_fallback_to_all_readable",
    "kind": "Function",
    "line": 366,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_scan_for_detection_max_files",
    "kind": "Function",
    "line": 378,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_extract_candidates_default_languages_is_english_only",
    "kind": "Function",
    "line": 435,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_extract_candidates_with_extra_locale_picks_up_new_charset",
    "kind": "Function",
    "line": 442,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_extract_candidates_with_cyrillic_locale",
    "kind": "Function",
    "line": 460,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_score_entity_unions_person_verbs_across_languages",
    "kind": "Function",
    "line": 477,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_get_entity_patterns_unknown_lang_falls_back_to_english",
    "kind": "Function",
    "line": 503,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_get_entity_patterns_dedupes_across_overlapping_languages",
    "kind": "Function",
    "line": 512,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_build_patterns_cache_is_keyed_by_language",
    "kind": "Function",
    "line": 522,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_normalize_langs_handles_string_input",
    "kind": "Function",
    "line": 541,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_config_entity_languages_defaults_to_english",
    "kind": "Function",
    "line": 551,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_config_entity_languages_from_env",
    "kind": "Function",
    "line": 561,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_config_set_entity_languages_persists",
    "kind": "Function",
    "line": 570,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_config_set_entity_languages_empty_falls_back_to_english",
    "kind": "Function",
    "line": 582,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_devanagari_candidate_extraction_with_boundary_chars",
    "kind": "Function",
    "line": 617,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_devanagari_candidate_without_boundary_chars_truncates",
    "kind": "Function",
    "line": 626,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_devanagari_person_verb_fires_with_boundary_chars",
    "kind": "Function",
    "line": 637,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_devanagari_person_verb_silent_without_boundary_chars",
    "kind": "Function",
    "line": 647,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "test_boundary_chars_english_regression",
    "kind": "Function",
    "line": 658,
    "file_path": "mempalace/tests/test_entity_detector.py"
  },
  {
    "name": "TestPlainTextCompression",
    "kind": "Class",
    "line": 11,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "TestEntityDetection",
    "kind": "Class",
    "line": 40,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "TestEmotionDetection",
    "kind": "Class",
    "line": 57,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "TestTopicExtraction",
    "kind": "Class",
    "line": 70,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "TestKeySentenceExtraction",
    "kind": "Class",
    "line": 88,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "TestCompressionStats",
    "kind": "Class",
    "line": 106,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "TestZettelEncoding",
    "kind": "Class",
    "line": 133,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "TestDecode",
    "kind": "Class",
    "line": 162,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "test_compress_basic",
    "kind": "Method",
    "line": 12,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "test_compress_with_metadata",
    "kind": "Method",
    "line": 20,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "test_compress_produces_entity_codes",
    "kind": "Method",
    "line": 29,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "test_compress_empty_text",
    "kind": "Method",
    "line": 34,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "test_known_entities",
    "kind": "Method",
    "line": 41,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "test_auto_code_unknown_entities",
    "kind": "Method",
    "line": 46,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "test_skip_names",
    "kind": "Method",
    "line": 51,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "test_detect_emotions",
    "kind": "Method",
    "line": 58,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "test_max_three_emotions",
    "kind": "Method",
    "line": 63,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "test_extract_topics",
    "kind": "Method",
    "line": 71,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "test_boosts_technical_terms",
    "kind": "Method",
    "line": 80,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "test_extract_key_sentence",
    "kind": "Method",
    "line": 89,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "test_truncates_long_sentences",
    "kind": "Method",
    "line": 99,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "test_stats",
    "kind": "Method",
    "line": 107,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "test_count_tokens",
    "kind": "Method",
    "line": 115,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "test_compression_stats_keys",
    "kind": "Method",
    "line": 118,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "test_encode_zettel",
    "kind": "Method",
    "line": 134,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "test_encode_tunnel",
    "kind": "Method",
    "line": 153,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "test_decode_roundtrip",
    "kind": "Method",
    "line": 163,
    "file_path": "mempalace/tests/test_dialect.py"
  },
  {
    "name": "TestSeedFromEntityFacts",
    "kind": "Class",
    "line": 13,
    "file_path": "mempalace/tests/test_knowledge_graph_extra.py"
  },
  {
    "name": "TestQueryRelationshipWithTime",
    "kind": "Class",
    "line": 98,
    "file_path": "mempalace/tests/test_knowledge_graph_extra.py"
  },
  {
    "name": "test_seed_person_with_partner",
    "kind": "Method",
    "line": 14,
    "file_path": "mempalace/tests/test_knowledge_graph_extra.py"
  },
  {
    "name": "test_seed_child",
    "kind": "Method",
    "line": 32,
    "file_path": "mempalace/tests/test_knowledge_graph_extra.py"
  },
  {
    "name": "test_seed_sibling",
    "kind": "Method",
    "line": 48,
    "file_path": "mempalace/tests/test_knowledge_graph_extra.py"
  },
  {
    "name": "test_seed_dog",
    "kind": "Method",
    "line": 62,
    "file_path": "mempalace/tests/test_knowledge_graph_extra.py"
  },
  {
    "name": "test_seed_with_interests",
    "kind": "Method",
    "line": 76,
    "file_path": "mempalace/tests/test_knowledge_graph_extra.py"
  },
  {
    "name": "test_seed_minimal_facts",
    "kind": "Method",
    "line": 90,
    "file_path": "mempalace/tests/test_knowledge_graph_extra.py"
  },
  {
    "name": "test_query_relationship_with_as_of",
    "kind": "Method",
    "line": 99,
    "file_path": "mempalace/tests/test_knowledge_graph_extra.py"
  },
  {
    "name": "test_first_or_empty_handles_empty_outer_list",
    "kind": "Function",
    "line": 15,
    "file_path": "mempalace/tests/test_empty_chromadb_results.py"
  },
  {
    "name": "test_first_or_empty_handles_outer_with_empty_inner",
    "kind": "Function",
    "line": 23,
    "file_path": "mempalace/tests/test_empty_chromadb_results.py"
  },
  {
    "name": "test_first_or_empty_handles_missing_key",
    "kind": "Function",
    "line": 29,
    "file_path": "mempalace/tests/test_empty_chromadb_results.py"
  },
  {
    "name": "test_first_or_empty_handles_none_inner",
    "kind": "Function",
    "line": 33,
    "file_path": "mempalace/tests/test_empty_chromadb_results.py"
  },
  {
    "name": "test_first_or_empty_returns_inner_list_for_normal_result",
    "kind": "Function",
    "line": 38,
    "file_path": "mempalace/tests/test_empty_chromadb_results.py"
  },
  {
    "name": "test_raw_indexing_still_raises_to_document_the_bug",
    "kind": "Function",
    "line": 43,
    "file_path": "mempalace/tests/test_empty_chromadb_results.py"
  },
  {
    "name": "test_folder_room_map_has_expected_mappings",
    "kind": "Function",
    "line": 19,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_folder_room_map_alternative_names",
    "kind": "Function",
    "line": 27,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_detect_rooms_from_folders_standard_layout",
    "kind": "Function",
    "line": 38,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_detect_rooms_from_folders_always_has_general",
    "kind": "Function",
    "line": 49,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_detect_rooms_from_folders_empty_dir",
    "kind": "Function",
    "line": 55,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_detect_rooms_from_folders_skips_oserror_at_top_level",
    "kind": "Function",
    "line": 62,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_detect_rooms_from_folders_skips_oserror_nested",
    "kind": "Function",
    "line": 90,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_detect_rooms_from_folders_skips_iterdir_oserror",
    "kind": "Function",
    "line": 114,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_detect_rooms_from_folders_skips_git",
    "kind": "Function",
    "line": 138,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_detect_rooms_from_folders_nested_dirs",
    "kind": "Function",
    "line": 148,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_detect_rooms_from_folders_room_has_description",
    "kind": "Function",
    "line": 159,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_detect_rooms_from_folders_room_has_keywords",
    "kind": "Function",
    "line": 168,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_detect_rooms_from_folders_custom_named_dirs",
    "kind": "Function",
    "line": 177,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_detect_rooms_from_files_with_matching_filenames",
    "kind": "Function",
    "line": 188,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_detect_rooms_from_files_empty_dir",
    "kind": "Function",
    "line": 197,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_detect_rooms_from_files_caps_at_six",
    "kind": "Function",
    "line": 203,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_save_config_creates_yaml",
    "kind": "Function",
    "line": 215,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_save_config_valid_yaml",
    "kind": "Function",
    "line": 229,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_print_proposed_structure",
    "kind": "Function",
    "line": 244,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_get_user_approval_accept_all",
    "kind": "Function",
    "line": 260,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_get_user_approval_edit_remove",
    "kind": "Function",
    "line": 267,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_get_user_approval_add_room",
    "kind": "Function",
    "line": 279,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_detect_rooms_local_yes_mode",
    "kind": "Function",
    "line": 298,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_detect_rooms_local_fallback_to_files",
    "kind": "Function",
    "line": 308,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_detect_rooms_local_missing_dir",
    "kind": "Function",
    "line": 319,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "test_detect_rooms_local_interactive",
    "kind": "Function",
    "line": 327,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "patched_is_dir",
    "kind": "Function",
    "line": 76,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "patched_is_dir",
    "kind": "Function",
    "line": 100,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "patched_iterdir",
    "kind": "Function",
    "line": 123,
    "file_path": "mempalace/tests/test_room_detector_local.py"
  },
  {
    "name": "TestSaveHookAutoMines",
    "kind": "Class",
    "line": 14,
    "file_path": "mempalace/tests/test_save_hook_mines.py"
  },
  {
    "name": "test_hook_mines_transcript_path",
    "kind": "Method",
    "line": 17,
    "file_path": "mempalace/tests/test_save_hook_mines.py"
  },
  {
    "name": "test_mempal_dir_default_not_empty",
    "kind": "Method",
    "line": 45,
    "file_path": "mempalace/tests/test_save_hook_mines.py"
  },
  {
    "name": "TestShouldSkip",
    "kind": "Class",
    "line": 18,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "TestEditDistance",
    "kind": "Class",
    "line": 62,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "test_get_system_words_returns_set",
    "kind": "Function",
    "line": 83,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "test_spellcheck_user_text_passthrough_no_autocorrect",
    "kind": "Function",
    "line": 91,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "test_spellcheck_user_text_with_speller",
    "kind": "Function",
    "line": 98,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "test_spellcheck_preserves_technical_terms",
    "kind": "Function",
    "line": 113,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "test_transcript_line_user_turn",
    "kind": "Function",
    "line": 130,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "test_transcript_line_assistant_turn",
    "kind": "Function",
    "line": 137,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "test_transcript_line_empty_user_turn",
    "kind": "Function",
    "line": 143,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "test_spellcheck_transcript_processes_content",
    "kind": "Function",
    "line": 152,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "test_short_tokens_skipped",
    "kind": "Method",
    "line": 21,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "test_digits_skipped",
    "kind": "Method",
    "line": 26,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "test_camelcase_skipped",
    "kind": "Method",
    "line": 31,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "test_allcaps_skipped",
    "kind": "Method",
    "line": 35,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "test_technical_skipped",
    "kind": "Method",
    "line": 39,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "test_url_skipped",
    "kind": "Method",
    "line": 43,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "test_code_or_emoji_skipped",
    "kind": "Method",
    "line": 47,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "test_known_name_skipped",
    "kind": "Method",
    "line": 51,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "test_normal_word_not_skipped",
    "kind": "Method",
    "line": 54,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "test_identical",
    "kind": "Method",
    "line": 63,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "test_empty_strings",
    "kind": "Method",
    "line": 66,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "test_single_edit",
    "kind": "Method",
    "line": 71,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "test_known_distance",
    "kind": "Method",
    "line": 76,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "fake_speller",
    "kind": "Function",
    "line": 101,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "fake_speller",
    "kind": "Function",
    "line": 116,
    "file_path": "mempalace/tests/test_spellcheck.py"
  },
  {
    "name": "test_get_palace_path_from_config",
    "kind": "Function",
    "line": 14,
    "file_path": "mempalace/tests/test_repair.py"
  },
  {
    "name": "test_get_palace_path_fallback",
    "kind": "Function",
    "line": 22,
    "file_path": "mempalace/tests/test_repair.py"
  },
  {
    "name": "test_paginate_ids_single_batch",
    "kind": "Function",
    "line": 32,
    "file_path": "mempalace/tests/test_repair.py"
  },
  {
    "name": "test_paginate_ids_empty",
    "kind": "Function",
    "line": 39,
    "file_path": "mempalace/tests/test_repair.py"
  },
  {
    "name": "test_paginate_ids_with_where",
    "kind": "Function",
    "line": 46,
    "file_path": "mempalace/tests/test_repair.py"
  },
  {
    "name": "test_paginate_ids_offset_exception_fallback",
    "kind": "Function",
    "line": 53,
    "file_path": "mempalace/tests/test_repair.py"
  },
  {
    "name": "test_scan_palace_no_ids",
    "kind": "Function",
    "line": 78,
    "file_path": "mempalace/tests/test_repair.py"
  },
  {
    "name": "test_scan_palace_all_good",
    "kind": "Function",
    "line": 90,
    "file_path": "mempalace/tests/test_repair.py"
  },
  {
    "name": "test_scan_palace_with_bad_ids",
    "kind": "Function",
    "line": 107,
    "file_path": "mempalace/tests/test_repair.py"
  },
  {
    "name": "test_scan_palace_with_wing_filter",
    "kind": "Function",
    "line": 132,
    "file_path": "mempalace/tests/test_repair.py"
  },
  {
    "name": "test_prune_corrupt_no_file",
    "kind": "Function",
    "line": 151,
    "file_path": "mempalace/tests/test_repair.py"
  },
  {
    "name": "test_prune_corrupt_dry_run",
    "kind": "Function",
    "line": 157,
    "file_path": "mempalace/tests/test_repair.py"
  },
  {
    "name": "test_prune_corrupt_confirmed",
    "kind": "Function",
    "line": 166,
    "file_path": "mempalace/tests/test_repair.py"
  },
  {
    "name": "test_prune_corrupt_delete_failure_fallback",
    "kind": "Function",
    "line": 179,
    "file_path": "mempalace/tests/test_repair.py"
  },
  {
    "name": "test_rebuild_index_no_palace",
    "kind": "Function",
    "line": 197,
    "file_path": "mempalace/tests/test_repair.py"
  },
  {
    "name": "test_rebuild_index_empty_palace",
    "kind": "Function",
    "line": 205,
    "file_path": "mempalace/tests/test_repair.py"
  },
  {
    "name": "test_rebuild_index_success",
    "kind": "Function",
    "line": 216,
    "file_path": "mempalace/tests/test_repair.py"
  },
  {
    "name": "test_rebuild_index_error_reading",
    "kind": "Function",
    "line": 250,
    "file_path": "mempalace/tests/test_repair.py"
  },
  {
    "name": "get_side_effect",
    "kind": "Function",
    "line": 111,
    "file_path": "mempalace/tests/test_repair.py"
  },
  {
    "name": "test_all_languages_load",
    "kind": "Function",
    "line": 7,
    "file_path": "mempalace/tests/test_i18n.py"
  },
  {
    "name": "test_interpolation",
    "kind": "Function",
    "line": 27,
    "file_path": "mempalace/tests/test_i18n.py"
  },
  {
    "name": "test_dialect_loads_lang",
    "kind": "Function",
    "line": 38,
    "file_path": "mempalace/tests/test_i18n.py"
  },
  {
    "name": "test_dialect_compress_samples",
    "kind": "Function",
    "line": 48,
    "file_path": "mempalace/tests/test_i18n.py"
  },
  {
    "name": "test_korean_status_drawers_uses_count",
    "kind": "Function",
    "line": 72,
    "file_path": "mempalace/tests/test_i18n.py"
  },
  {
    "name": "test_from_config_defaults_to_english",
    "kind": "Function",
    "line": 79,
    "file_path": "mempalace/tests/test_i18n.py"
  },
  {
    "name": "test_package_version_matches_pyproject",
    "kind": "Function",
    "line": 16,
    "file_path": "mempalace/tests/test_version_consistency.py"
  },
  {
    "name": "test_mcp_initialize_reports_package_version",
    "kind": "Function",
    "line": 20,
    "file_path": "mempalace/tests/test_version_consistency.py"
  },
  {
    "name": "test_default_wings_has_expected_keys",
    "kind": "Function",
    "line": 30,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_default_wings_work_has_projects",
    "kind": "Function",
    "line": 36,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_default_wings_personal_has_family",
    "kind": "Function",
    "line": 40,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_default_wings_combo_has_both",
    "kind": "Function",
    "line": 44,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_default_wings_values_are_lists",
    "kind": "Function",
    "line": 50,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_warn_ambiguous_flags_common_words",
    "kind": "Function",
    "line": 59,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_warn_ambiguous_empty_list",
    "kind": "Function",
    "line": 70,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_warn_ambiguous_no_ambiguous_names",
    "kind": "Function",
    "line": 75,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_warn_ambiguous_multiple_hits",
    "kind": "Function",
    "line": 84,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_quick_setup_creates_registry",
    "kind": "Function",
    "line": 99,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_quick_setup_work_mode",
    "kind": "Function",
    "line": 111,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_quick_setup_empty",
    "kind": "Function",
    "line": 123,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_quick_setup_saves_to_disk",
    "kind": "Function",
    "line": 129,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_generate_aaak_bootstrap_creates_files",
    "kind": "Function",
    "line": 141,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_generate_aaak_bootstrap_entities_content",
    "kind": "Function",
    "line": 154,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_generate_aaak_bootstrap_facts_content",
    "kind": "Function",
    "line": 166,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_generate_aaak_bootstrap_empty_people",
    "kind": "Function",
    "line": 180,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_generate_aaak_bootstrap_collision",
    "kind": "Function",
    "line": 186,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_generate_aaak_bootstrap_no_relationship",
    "kind": "Function",
    "line": 198,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_hr_prints_line",
    "kind": "Function",
    "line": 209,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_header_prints_banner",
    "kind": "Function",
    "line": 215,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_ask_with_default_uses_default",
    "kind": "Function",
    "line": 225,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_ask_with_default_uses_input",
    "kind": "Function",
    "line": 231,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_ask_no_default",
    "kind": "Function",
    "line": 237,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_yn_default_yes_empty_input",
    "kind": "Function",
    "line": 246,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_yn_default_no_empty_input",
    "kind": "Function",
    "line": 251,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_yn_explicit_yes",
    "kind": "Function",
    "line": 256,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_yn_explicit_no",
    "kind": "Function",
    "line": 261,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_ask_mode_work",
    "kind": "Function",
    "line": 269,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_ask_mode_personal",
    "kind": "Function",
    "line": 274,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_ask_mode_combo",
    "kind": "Function",
    "line": 279,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_ask_mode_retries_on_bad_input",
    "kind": "Function",
    "line": 284,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_ask_people_personal_mode",
    "kind": "Function",
    "line": 292,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_ask_people_work_mode",
    "kind": "Function",
    "line": 300,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_ask_people_combo_mode",
    "kind": "Function",
    "line": 308,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_ask_people_with_nickname",
    "kind": "Function",
    "line": 323,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_ask_people_empty_name_skipped",
    "kind": "Function",
    "line": 329,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_ask_projects_personal_returns_empty",
    "kind": "Function",
    "line": 338,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_ask_projects_work_mode",
    "kind": "Function",
    "line": 343,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_ask_projects_empty_entry_stops",
    "kind": "Function",
    "line": 349,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_ask_wings_accept_defaults",
    "kind": "Function",
    "line": 358,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_ask_wings_custom",
    "kind": "Function",
    "line": 364,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_auto_detect_no_files",
    "kind": "Function",
    "line": 373,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_auto_detect_filters_known",
    "kind": "Function",
    "line": 378,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_auto_detect_filters_low_confidence",
    "kind": "Function",
    "line": 398,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_auto_detect_handles_exception",
    "kind": "Function",
    "line": 412,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_run_onboarding_basic_flow",
    "kind": "Function",
    "line": 421,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "test_run_onboarding_with_ambiguous_names",
    "kind": "Function",
    "line": 439,
    "file_path": "mempalace/tests/test_onboarding.py"
  },
  {
    "name": "mock_claude_jsonl",
    "kind": "Function",
    "line": 24,
    "file_path": "mempalace/tests/test_sweeper.py"
  },
  {
    "name": "TestSweeperParsing",
    "kind": "Class",
    "line": 73,
    "file_path": "mempalace/tests/test_sweeper.py"
  },
  {
    "name": "TestSweeperTandem",
    "kind": "Class",
    "line": 145,
    "file_path": "mempalace/tests/test_sweeper.py"
  },
  {
    "name": "TestSweeperDrawerMetadata",
    "kind": "Class",
    "line": 295,
    "file_path": "mempalace/tests/test_sweeper.py"
  },
  {
    "name": "test_parse_yields_only_user_and_assistant",
    "kind": "Method",
    "line": 74,
    "file_path": "mempalace/tests/test_sweeper.py"
  },
  {
    "name": "test_parse_extracts_session_id_and_timestamp",
    "kind": "Method",
    "line": 85,
    "file_path": "mempalace/tests/test_sweeper.py"
  },
  {
    "name": "test_parse_normalizes_assistant_content_list_to_text",
    "kind": "Method",
    "line": 94,
    "file_path": "mempalace/tests/test_sweeper.py"
  },
  {
    "name": "test_parse_preserves_tool_blocks_verbatim",
    "kind": "Method",
    "line": 104,
    "file_path": "mempalace/tests/test_sweeper.py"
  },
  {
    "name": "test_sweep_empty_palace_ingests_all_messages",
    "kind": "Method",
    "line": 148,
    "file_path": "mempalace/tests/test_sweeper.py"
  },
  {
    "name": "test_sweep_is_idempotent",
    "kind": "Method",
    "line": 158,
    "file_path": "mempalace/tests/test_sweeper.py"
  },
  {
    "name": "test_sweep_resumes_from_cursor",
    "kind": "Method",
    "line": 172,
    "file_path": "mempalace/tests/test_sweeper.py"
  },
  {
    "name": "test_sweep_recovers_untaken_message_at_cursor_timestamp",
    "kind": "Method",
    "line": 228,
    "file_path": "mempalace/tests/test_sweeper.py"
  },
  {
    "name": "test_drawer_has_session_id_and_timestamp_metadata",
    "kind": "Method",
    "line": 299,
    "file_path": "mempalace/tests/test_sweeper.py"
  },
  {
    "name": "TestLoadKnownNames",
    "kind": "Class",
    "line": 11,
    "file_path": "mempalace/tests/test_spellcheck_extra.py"
  },
  {
    "name": "TestSpellerEdgeCases",
    "kind": "Class",
    "line": 36,
    "file_path": "mempalace/tests/test_spellcheck_extra.py"
  },
  {
    "name": "test_returns_names_from_registry",
    "kind": "Method",
    "line": 12,
    "file_path": "mempalace/tests/test_spellcheck_extra.py"
  },
  {
    "name": "test_returns_empty_on_exception",
    "kind": "Method",
    "line": 27,
    "file_path": "mempalace/tests/test_spellcheck_extra.py"
  },
  {
    "name": "test_capitalized_word_skipped",
    "kind": "Method",
    "line": 37,
    "file_path": "mempalace/tests/test_spellcheck_extra.py"
  },
  {
    "name": "test_system_word_not_corrected",
    "kind": "Method",
    "line": 50,
    "file_path": "mempalace/tests/test_spellcheck_extra.py"
  },
  {
    "name": "test_high_edit_distance_rejected",
    "kind": "Method",
    "line": 62,
    "file_path": "mempalace/tests/test_spellcheck_extra.py"
  },
  {
    "name": "fake_speller",
    "kind": "Method",
    "line": 40,
    "file_path": "mempalace/tests/test_spellcheck_extra.py"
  },
  {
    "name": "fake_speller",
    "kind": "Method",
    "line": 53,
    "file_path": "mempalace/tests/test_spellcheck_extra.py"
  },
  {
    "name": "fake_speller",
    "kind": "Method",
    "line": 65,
    "file_path": "mempalace/tests/test_spellcheck_extra.py"
  },
  {
    "name": "write_file",
    "kind": "Function",
    "line": 13,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "scanned_files",
    "kind": "Function",
    "line": 18,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "test_project_mining",
    "kind": "Function",
    "line": 23,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "test_load_config_uses_defaults_when_yaml_missing",
    "kind": "Function",
    "line": 55,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "test_scan_project_respects_gitignore",
    "kind": "Function",
    "line": 69,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "test_scan_project_respects_nested_gitignore",
    "kind": "Function",
    "line": 84,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "test_scan_project_allows_nested_gitignore_override",
    "kind": "Function",
    "line": 100,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "test_scan_project_allows_gitignore_negation_when_parent_dir_is_visible",
    "kind": "Function",
    "line": 115,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "test_scan_project_does_not_reinclude_file_from_ignored_directory",
    "kind": "Function",
    "line": 129,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "test_scan_project_can_disable_gitignore",
    "kind": "Function",
    "line": 143,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "test_scan_project_can_include_ignored_directory",
    "kind": "Function",
    "line": 156,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "test_scan_project_can_include_specific_ignored_file",
    "kind": "Function",
    "line": 169,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "test_scan_project_can_include_exact_file_without_known_extension",
    "kind": "Function",
    "line": 185,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "test_scan_project_include_override_beats_skip_dirs",
    "kind": "Function",
    "line": 198,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "test_scan_project_skip_dirs_still_apply_without_override",
    "kind": "Function",
    "line": 214,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "test_entity_metadata_finds_cyrillic_names",
    "kind": "Function",
    "line": 227,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "test_file_already_mined_check_mtime",
    "kind": "Function",
    "line": 244,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "test_mine_dry_run_with_tiny_file_no_crash",
    "kind": "Function",
    "line": 310,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "test_status_missing_palace_does_not_create_empty_collection",
    "kind": "Function",
    "line": 336,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "test_status_handles_none_metadata_without_crash",
    "kind": "Function",
    "line": 346,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "test_file_already_mined_returns_false_for_stale_normalize_version",
    "kind": "Function",
    "line": 383,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "test_add_drawer_stamps_normalize_version",
    "kind": "Function",
    "line": 425,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "FakeCol",
    "kind": "Class",
    "line": 355,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "count",
    "kind": "Method",
    "line": 356,
    "file_path": "mempalace/tests/test_miner.py"
  },
  {
    "name": "test_config_bad_json",
    "kind": "Function",
    "line": 9,
    "file_path": "mempalace/tests/test_config_extra.py"
  },
  {
    "name": "test_people_map_from_file",
    "kind": "Function",
    "line": 16,
    "file_path": "mempalace/tests/test_config_extra.py"
  },
  {
    "name": "test_people_map_bad_json",
    "kind": "Function",
    "line": 22,
    "file_path": "mempalace/tests/test_config_extra.py"
  },
  {
    "name": "test_people_map_missing",
    "kind": "Function",
    "line": 28,
    "file_path": "mempalace/tests/test_config_extra.py"
  },
  {
    "name": "test_topic_wings_default",
    "kind": "Function",
    "line": 33,
    "file_path": "mempalace/tests/test_config_extra.py"
  },
  {
    "name": "test_hall_keywords_default",
    "kind": "Function",
    "line": 39,
    "file_path": "mempalace/tests/test_config_extra.py"
  },
  {
    "name": "test_init_idempotent",
    "kind": "Function",
    "line": 45,
    "file_path": "mempalace/tests/test_config_extra.py"
  },
  {
    "name": "test_save_people_map",
    "kind": "Function",
    "line": 54,
    "file_path": "mempalace/tests/test_config_extra.py"
  },
  {
    "name": "test_env_mempal_palace_path",
    "kind": "Function",
    "line": 63,
    "file_path": "mempalace/tests/test_config_extra.py"
  },
  {
    "name": "test_collection_name_from_config",
    "kind": "Function",
    "line": 74,
    "file_path": "mempalace/tests/test_config_extra.py"
  },
  {
    "name": "test_default_config",
    "kind": "Function",
    "line": 9,
    "file_path": "mempalace/tests/test_config.py"
  },
  {
    "name": "test_config_from_file",
    "kind": "Function",
    "line": 15,
    "file_path": "mempalace/tests/test_config.py"
  },
  {
    "name": "test_env_override",
    "kind": "Function",
    "line": 23,
    "file_path": "mempalace/tests/test_config.py"
  },
  {
    "name": "test_init",
    "kind": "Function",
    "line": 30,
    "file_path": "mempalace/tests/test_config.py"
  },
  {
    "name": "test_sanitize_name_ascii",
    "kind": "Function",
    "line": 40,
    "file_path": "mempalace/tests/test_config.py"
  },
  {
    "name": "test_sanitize_name_latvian",
    "kind": "Function",
    "line": 44,
    "file_path": "mempalace/tests/test_config.py"
  },
  {
    "name": "test_sanitize_name_cjk",
    "kind": "Function",
    "line": 48,
    "file_path": "mempalace/tests/test_config.py"
  },
  {
    "name": "test_sanitize_name_cyrillic",
    "kind": "Function",
    "line": 52,
    "file_path": "mempalace/tests/test_config.py"
  },
  {
    "name": "test_sanitize_name_rejects_leading_underscore",
    "kind": "Function",
    "line": 56,
    "file_path": "mempalace/tests/test_config.py"
  },
  {
    "name": "test_sanitize_name_rejects_path_traversal",
    "kind": "Function",
    "line": 61,
    "file_path": "mempalace/tests/test_config.py"
  },
  {
    "name": "test_sanitize_name_rejects_empty",
    "kind": "Function",
    "line": 66,
    "file_path": "mempalace/tests/test_config.py"
  },
  {
    "name": "test_kg_value_accepts_commas",
    "kind": "Function",
    "line": 74,
    "file_path": "mempalace/tests/test_config.py"
  },
  {
    "name": "test_kg_value_accepts_colons",
    "kind": "Function",
    "line": 78,
    "file_path": "mempalace/tests/test_config.py"
  },
  {
    "name": "test_kg_value_accepts_parentheses",
    "kind": "Function",
    "line": 82,
    "file_path": "mempalace/tests/test_config.py"
  },
  {
    "name": "test_kg_value_accepts_slashes",
    "kind": "Function",
    "line": 86,
    "file_path": "mempalace/tests/test_config.py"
  },
  {
    "name": "test_kg_value_accepts_hash",
    "kind": "Function",
    "line": 90,
    "file_path": "mempalace/tests/test_config.py"
  },
  {
    "name": "test_kg_value_accepts_unicode",
    "kind": "Function",
    "line": 94,
    "file_path": "mempalace/tests/test_config.py"
  },
  {
    "name": "test_kg_value_strips_whitespace",
    "kind": "Function",
    "line": 98,
    "file_path": "mempalace/tests/test_config.py"
  },
  {
    "name": "test_kg_value_rejects_empty",
    "kind": "Function",
    "line": 102,
    "file_path": "mempalace/tests/test_config.py"
  },
  {
    "name": "test_kg_value_rejects_whitespace_only",
    "kind": "Function",
    "line": 107,
    "file_path": "mempalace/tests/test_config.py"
  },
  {
    "name": "test_kg_value_rejects_null_bytes",
    "kind": "Function",
    "line": 112,
    "file_path": "mempalace/tests/test_config.py"
  },
  {
    "name": "test_kg_value_rejects_over_length",
    "kind": "Function",
    "line": 117,
    "file_path": "mempalace/tests/test_config.py"
  },
  {
    "name": "TestExtractClaims",
    "kind": "Class",
    "line": 39,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "TestEntityConfusion",
    "kind": "Class",
    "line": 70,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "TestEditDistance",
    "kind": "Class",
    "line": 104,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "TestFlattenNames",
    "kind": "Class",
    "line": 140,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "palace_with_kg",
    "kind": "Function",
    "line": 155,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "TestKGContradictions",
    "kind": "Class",
    "line": 169,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "TestCheckTextContract",
    "kind": "Class",
    "line": 239,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "TestCLI",
    "kind": "Class",
    "line": 262,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_parses_x_is_ys_z",
    "kind": "Method",
    "line": 40,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_parses_xs_z_is_y",
    "kind": "Method",
    "line": 50,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_ignores_sentences_without_possessive_role",
    "kind": "Method",
    "line": 57,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_multiple_claims_in_one_text",
    "kind": "Method",
    "line": 61,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_flags_near_name_when_only_one_mentioned",
    "kind": "Method",
    "line": 71,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_no_false_positive_when_both_names_mentioned",
    "kind": "Method",
    "line": 81,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_no_issues_when_registry_empty",
    "kind": "Method",
    "line": 88,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_no_issues_when_no_mentioned_names",
    "kind": "Method",
    "line": 92,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_registry_dict_shape_is_supported",
    "kind": "Method",
    "line": 96,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_basic_distances",
    "kind": "Method",
    "line": 105,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_empty_strings",
    "kind": "Method",
    "line": 110,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_performance_bounded_by_mentioned_names",
    "kind": "Method",
    "line": 115,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_handles_list_categories",
    "kind": "Method",
    "line": 141,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_handles_dict_categories",
    "kind": "Method",
    "line": 144,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_skips_falsy_entries",
    "kind": "Method",
    "line": 147,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_kg_init_uses_db_path_not_palace_path_kwarg",
    "kind": "Method",
    "line": 170,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_relationship_mismatch_detected",
    "kind": "Method",
    "line": 183,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_no_false_positive_when_kg_has_no_facts_about_subject",
    "kind": "Method",
    "line": 200,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_stale_fact_detected",
    "kind": "Method",
    "line": 205,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_current_fact_same_triple_is_not_flagged",
    "kind": "Method",
    "line": 223,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_missing_palace_does_not_crash",
    "kind": "Method",
    "line": 229,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_empty_text_returns_empty_list",
    "kind": "Method",
    "line": 240,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_registry_confusion_path_isolated_from_kg",
    "kind": "Method",
    "line": 243,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_exits_nonzero_when_issues_found",
    "kind": "Method",
    "line": 263,
    "file_path": "mempalace/tests/test_fact_checker.py"
  },
  {
    "name": "test_base_adapter_is_abstract_without_required_methods",
    "kind": "Function",
    "line": 73,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_conforming_adapter_instantiates_and_yields_typed_records",
    "kind": "Function",
    "line": 82,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_is_current_default_is_false_always_reextracts",
    "kind": "Function",
    "line": 91,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_source_summary_default_uses_adapter_name",
    "kind": "Function",
    "line": 98,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_source_ref_options_default_is_empty_dict",
    "kind": "Function",
    "line": 105,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_reserved_transformations_registry_has_all_13",
    "kind": "Function",
    "line": 118,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_utf8_replace_invalid_handles_bad_bytes",
    "kind": "Function",
    "line": 137,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_newline_normalize_converts_crlf_and_cr",
    "kind": "Function",
    "line": 142,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_whitespace_trim_strips_boundaries",
    "kind": "Function",
    "line": 146,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_whitespace_collapse_internal_caps_at_two_blanks",
    "kind": "Function",
    "line": 150,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_line_trim_strips_each_line",
    "kind": "Function",
    "line": 156,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_line_join_spaces_preserves_paragraph_breaks",
    "kind": "Function",
    "line": 160,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_blank_line_drop_removes_blanks_only",
    "kind": "Function",
    "line": 165,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_get_transformation_resolves_reserved_and_rejects_unknown",
    "kind": "Function",
    "line": 169,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_register_and_get_adapter_roundtrip",
    "kind": "Function",
    "line": 180,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_get_adapter_class_returns_class_not_instance",
    "kind": "Function",
    "line": 189,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_get_adapter_unknown_raises_key_error",
    "kind": "Function",
    "line": 194,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_unregister_drops_registration_and_cached_instance",
    "kind": "Function",
    "line": 199,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_resolve_adapter_priority_order",
    "kind": "Function",
    "line": 208,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_palace_context_upsert_drawer_stamps_adapter_metadata",
    "kind": "Function",
    "line": 253,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_palace_context_drawer_id_is_sha256_prefix_not_sha1",
    "kind": "Function",
    "line": 283,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_palace_context_skip_current_item_sets_flag",
    "kind": "Function",
    "line": 304,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_palace_context_emit_dispatches_to_hooks_and_swallows_errors",
    "kind": "Function",
    "line": 315,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_palace_context_uses_route_hint_when_present",
    "kind": "Function",
    "line": 337,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_knowledge_graph_add_triple_accepts_source_drawer_id_and_adapter_name",
    "kind": "Function",
    "line": 349,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_knowledge_graph_fresh_schema_includes_new_columns",
    "kind": "Function",
    "line": 379,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_knowledge_graph_migration_adds_missing_columns_to_old_schema",
    "kind": "Function",
    "line": 398,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_knowledge_graph_add_triple_backwards_compatible_without_new_kwargs",
    "kind": "Function",
    "line": 445,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_entry_point_group_exists_and_returns_zero_or_more_adapters",
    "kind": "Function",
    "line": 462,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "ingest",
    "kind": "Method",
    "line": 49,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "describe_schema",
    "kind": "Method",
    "line": 53,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "upsert",
    "kind": "Method",
    "line": 229,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "query",
    "kind": "Method",
    "line": 232,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "delete",
    "kind": "Method",
    "line": 238,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "count",
    "kind": "Method",
    "line": 241,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "add_triple",
    "kind": "Method",
    "line": 249,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "good_hook",
    "kind": "Function",
    "line": 319,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "bad_hook",
    "kind": "Function",
    "line": 322,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "Incomplete",
    "kind": "Class",
    "line": 76,
    "file_path": "mempalace/tests/test_sources.py"
  },
  {
    "name": "test_convo_mining",
    "kind": "Function",
    "line": 12,
    "file_path": "mempalace/tests/test_convo_miner.py"
  },
  {
    "name": "test_mine_convos_does_not_reprocess_short_files",
    "kind": "Function",
    "line": 33,
    "file_path": "mempalace/tests/test_convo_miner.py"
  },
  {
    "name": "test_mine_convos_does_not_reprocess_empty_chunk_files",
    "kind": "Function",
    "line": 61,
    "file_path": "mempalace/tests/test_convo_miner.py"
  },
  {
    "name": "test_mine_convos_rebuilds_stale_drawers_after_schema_bump",
    "kind": "Function",
    "line": 80,
    "file_path": "mempalace/tests/test_convo_miner.py"
  },
  {
    "name": "test_chroma_collection_returns_typed_query_result",
    "kind": "Function",
    "line": 66,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_chroma_collection_returns_typed_get_result",
    "kind": "Function",
    "line": 80,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_query_result_empty_preserves_outer_dimension",
    "kind": "Function",
    "line": 92,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_typed_results_support_dict_compat_access",
    "kind": "Function",
    "line": 100,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_chroma_collection_query_empty_result_preserves_outer_shape",
    "kind": "Function",
    "line": 110,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_chroma_collection_rejects_unknown_where_operator",
    "kind": "Function",
    "line": 122,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_chroma_collection_delegates_writes",
    "kind": "Function",
    "line": 130,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_registry_exposes_chroma_by_default",
    "kind": "Function",
    "line": 143,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_registry_unknown_backend_raises",
    "kind": "Function",
    "line": 149,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_resolve_backend_priority_order",
    "kind": "Function",
    "line": 154,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_chroma_detect_matches_palace_with_chroma_sqlite",
    "kind": "Function",
    "line": 167,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_query_rejects_missing_input",
    "kind": "Function",
    "line": 173,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_query_rejects_both_texts_and_embeddings",
    "kind": "Function",
    "line": 180,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_query_rejects_empty_input_list",
    "kind": "Function",
    "line": 187,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_query_empty_preserves_embeddings_outer_shape_when_requested",
    "kind": "Function",
    "line": 194,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_chroma_cache_invalidates_when_db_file_missing",
    "kind": "Function",
    "line": 207,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_chroma_cache_picks_up_db_created_after_first_open",
    "kind": "Function",
    "line": 243,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_base_collection_update_default_rejects_mismatched_lengths",
    "kind": "Function",
    "line": 269,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_chroma_backend_accepts_palace_ref_kwarg",
    "kind": "Function",
    "line": 282,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_chroma_backend_create_false_raises_without_creating_directory",
    "kind": "Function",
    "line": 294,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_chroma_backend_create_true_creates_directory_and_collection",
    "kind": "Function",
    "line": 307,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_chroma_backend_creates_collection_with_cosine_distance",
    "kind": "Function",
    "line": 323,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_fix_blob_seq_ids_converts_blobs_to_integers",
    "kind": "Function",
    "line": 337,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_fix_blob_seq_ids_noop_without_blobs",
    "kind": "Function",
    "line": 361,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_fix_blob_seq_ids_noop_without_database",
    "kind": "Function",
    "line": 378,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_quarantine_stale_hnsw_renames_drifted_segment",
    "kind": "Function",
    "line": 399,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_quarantine_stale_hnsw_leaves_fresh_segment_alone",
    "kind": "Function",
    "line": 414,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_quarantine_stale_hnsw_no_palace",
    "kind": "Function",
    "line": 423,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_quarantine_stale_hnsw_skips_already_quarantined",
    "kind": "Function",
    "line": 431,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "upsert",
    "kind": "Method",
    "line": 44,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "update",
    "kind": "Method",
    "line": 47,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "query",
    "kind": "Method",
    "line": 50,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "delete",
    "kind": "Method",
    "line": 58,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "count",
    "kind": "Method",
    "line": 61,
    "file_path": "mempalace/tests/test_backends.py"
  },
  {
    "name": "test_migrate_requires_palace_database",
    "kind": "Function",
    "line": 9,
    "file_path": "mempalace/tests/test_migrate.py"
  },
  {
    "name": "test_migrate_aborts_without_confirmation",
    "kind": "Function",
    "line": 20,
    "file_path": "mempalace/tests/test_migrate.py"
  },
  {
    "name": "TestKGCloseLock",
    "kind": "Class",
    "line": 7,
    "file_path": "mempalace/tests/test_kg_thread_safety.py"
  },
  {
    "name": "test_close_holds_lock",
    "kind": "Method",
    "line": 8,
    "file_path": "mempalace/tests/test_kg_thread_safety.py"
  },
  {
    "name": "TestSaveHookVerboseMode",
    "kind": "Class",
    "line": 11,
    "file_path": "mempalace/tests/test_save_hook_verbose.py"
  },
  {
    "name": "test_hook_checks_verbose_flag",
    "kind": "Method",
    "line": 14,
    "file_path": "mempalace/tests/test_save_hook_verbose.py"
  },
  {
    "name": "test_verbose_mode_blocks",
    "kind": "Method",
    "line": 30,
    "file_path": "mempalace/tests/test_save_hook_verbose.py"
  },
  {
    "name": "test_no_op_when_not_a_git_repo",
    "kind": "Function",
    "line": 19,
    "file_path": "mempalace/tests/test_init_gitignore_protection.py"
  },
  {
    "name": "test_creates_gitignore_with_both_entries",
    "kind": "Function",
    "line": 24,
    "file_path": "mempalace/tests/test_init_gitignore_protection.py"
  },
  {
    "name": "test_appends_only_missing_entries",
    "kind": "Function",
    "line": 33,
    "file_path": "mempalace/tests/test_init_gitignore_protection.py"
  },
  {
    "name": "test_idempotent_when_both_already_present",
    "kind": "Function",
    "line": 46,
    "file_path": "mempalace/tests/test_init_gitignore_protection.py"
  },
  {
    "name": "test_handles_gitignore_without_trailing_newline",
    "kind": "Function",
    "line": 54,
    "file_path": "mempalace/tests/test_init_gitignore_protection.py"
  },
  {
    "name": "test_cmd_status_default_palace",
    "kind": "Function",
    "line": 29,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_status_custom_palace",
    "kind": "Function",
    "line": 39,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_search_calls_search",
    "kind": "Function",
    "line": 54,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_search_error_exits",
    "kind": "Function",
    "line": 71,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_instructions_calls_run_instructions",
    "kind": "Function",
    "line": 85,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_hook_calls_run_hook",
    "kind": "Function",
    "line": 95,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_init_no_entities",
    "kind": "Function",
    "line": 106,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_init_with_entities",
    "kind": "Function",
    "line": 118,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_init_with_entities_zero_total",
    "kind": "Function",
    "line": 134,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_mine_projects_mode",
    "kind": "Function",
    "line": 153,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_mine_convos_mode",
    "kind": "Function",
    "line": 182,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_mine_include_ignored_comma_split",
    "kind": "Function",
    "line": 210,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_wakeup",
    "kind": "Function",
    "line": 235,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_split_basic",
    "kind": "Function",
    "line": 250,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_split_all_options",
    "kind": "Function",
    "line": 257,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_main_no_args_prints_help",
    "kind": "Function",
    "line": 269,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_main_status_dispatches",
    "kind": "Function",
    "line": 276,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_main_search_dispatches",
    "kind": "Function",
    "line": 285,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_main_init_dispatches",
    "kind": "Function",
    "line": 294,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_main_mine_dispatches",
    "kind": "Function",
    "line": 303,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_main_wakeup_dispatches",
    "kind": "Function",
    "line": 312,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_main_split_dispatches",
    "kind": "Function",
    "line": 321,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_mcp_command_prints_setup_guidance",
    "kind": "Function",
    "line": 330,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_mcp_command_uses_custom_palace_path_when_provided",
    "kind": "Function",
    "line": 344,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_main_hook_no_subcommand_prints_help",
    "kind": "Function",
    "line": 359,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_main_hook_run_dispatches",
    "kind": "Function",
    "line": 366,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_main_instructions_no_subcommand_prints_help",
    "kind": "Function",
    "line": 378,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_main_instructions_dispatches",
    "kind": "Function",
    "line": 385,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_main_repair_dispatches",
    "kind": "Function",
    "line": 394,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_main_compress_dispatches",
    "kind": "Function",
    "line": 403,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_repair_no_palace",
    "kind": "Function",
    "line": 426,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_repair_requires_palace_database",
    "kind": "Function",
    "line": 436,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_repair_error_reading",
    "kind": "Function",
    "line": 448,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_repair_zero_drawers",
    "kind": "Function",
    "line": 463,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_repair_success",
    "kind": "Function",
    "line": 479,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_repair_aborts_without_confirmation",
    "kind": "Function",
    "line": 502,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_compress_no_palace",
    "kind": "Function",
    "line": 525,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_compress_no_drawers",
    "kind": "Function",
    "line": 538,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_compress_dry_run",
    "kind": "Function",
    "line": 560,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_compress_with_config",
    "kind": "Function",
    "line": 598,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_compress_stores_results",
    "kind": "Function",
    "line": 620,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_cmd_repair_trailing_slash_does_not_recurse",
    "kind": "Function",
    "line": 661,
    "file_path": "mempalace/tests/test_cli.py"
  },
  {
    "name": "test_plain_text",
    "kind": "Function",
    "line": 24,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_claude_json",
    "kind": "Function",
    "line": 31,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_empty",
    "kind": "Function",
    "line": 39,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_normalize_io_error",
    "kind": "Function",
    "line": 46,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_normalize_already_has_markers",
    "kind": "Function",
    "line": 55,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_normalize_json_content_detected_by_brace",
    "kind": "Function",
    "line": 64,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_normalize_whitespace_only",
    "kind": "Function",
    "line": 73,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_extract_content_string",
    "kind": "Function",
    "line": 83,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_extract_content_list_of_strings",
    "kind": "Function",
    "line": 87,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_extract_content_list_of_blocks",
    "kind": "Function",
    "line": 91,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_extract_content_dict",
    "kind": "Function",
    "line": 96,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_extract_content_none",
    "kind": "Function",
    "line": 100,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_extract_content_mixed_list",
    "kind": "Function",
    "line": 104,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_use_bash",
    "kind": "Function",
    "line": 112,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_use_bash_truncates_long_command",
    "kind": "Function",
    "line": 123,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_use_read",
    "kind": "Function",
    "line": 130,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_use_read_with_range",
    "kind": "Function",
    "line": 141,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_use_grep",
    "kind": "Function",
    "line": 152,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_use_grep_with_glob",
    "kind": "Function",
    "line": 163,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_use_glob",
    "kind": "Function",
    "line": 174,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_use_edit",
    "kind": "Function",
    "line": 185,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_use_write",
    "kind": "Function",
    "line": 196,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_use_unknown_tool",
    "kind": "Function",
    "line": 207,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_use_unknown_tool_truncates",
    "kind": "Function",
    "line": 219,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_result_bash_short",
    "kind": "Function",
    "line": 229,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_result_bash_head_tail",
    "kind": "Function",
    "line": 236,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_result_bash_exactly_40_lines",
    "kind": "Function",
    "line": 250,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_result_read_omitted",
    "kind": "Function",
    "line": 260,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_result_edit_omitted",
    "kind": "Function",
    "line": 266,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_result_write_omitted",
    "kind": "Function",
    "line": 272,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_result_grep_short",
    "kind": "Function",
    "line": 278,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_result_grep_caps_at_20",
    "kind": "Function",
    "line": 286,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_result_glob_caps_at_20",
    "kind": "Function",
    "line": 296,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_result_unknown_short",
    "kind": "Function",
    "line": 306,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_result_unknown_truncates",
    "kind": "Function",
    "line": 312,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_result_list_content",
    "kind": "Function",
    "line": 320,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_format_tool_result_empty",
    "kind": "Function",
    "line": 328,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_claude_code_jsonl_valid",
    "kind": "Function",
    "line": 337,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_claude_code_jsonl_user_type",
    "kind": "Function",
    "line": 348,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_claude_code_jsonl_too_few_messages",
    "kind": "Function",
    "line": 358,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_claude_code_jsonl_invalid_json_lines",
    "kind": "Function",
    "line": 364,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_claude_code_jsonl_non_dict_entries",
    "kind": "Function",
    "line": 374,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_codex_jsonl_valid",
    "kind": "Function",
    "line": 387,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_codex_jsonl_no_session_meta",
    "kind": "Function",
    "line": 398,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_codex_jsonl_skips_non_event_msg",
    "kind": "Function",
    "line": 408,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_codex_jsonl_non_string_message",
    "kind": "Function",
    "line": 420,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_codex_jsonl_empty_text_skipped",
    "kind": "Function",
    "line": 431,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_codex_jsonl_payload_not_dict",
    "kind": "Function",
    "line": 442,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_claude_ai_flat_messages",
    "kind": "Function",
    "line": 456,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_claude_ai_dict_with_messages_key",
    "kind": "Function",
    "line": 466,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_claude_ai_privacy_export",
    "kind": "Function",
    "line": 477,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_claude_ai_not_a_list",
    "kind": "Function",
    "line": 491,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_claude_ai_too_few_messages",
    "kind": "Function",
    "line": 496,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_claude_ai_dict_with_chat_messages_key",
    "kind": "Function",
    "line": 502,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_claude_ai_privacy_export_non_dict_items",
    "kind": "Function",
    "line": 513,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_claude_ai_privacy_export_messages_key",
    "kind": "Function",
    "line": 529,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_claude_ai_privacy_export_sender_field",
    "kind": "Function",
    "line": 546,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_claude_ai_privacy_export_text_fallback",
    "kind": "Function",
    "line": 561,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_claude_ai_privacy_export_null_text",
    "kind": "Function",
    "line": 576,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_claude_ai_privacy_export_per_conversation",
    "kind": "Function",
    "line": 591,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_claude_ai_privacy_export_skips_empty_conversations",
    "kind": "Function",
    "line": 621,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_chatgpt_json_valid",
    "kind": "Function",
    "line": 645,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_chatgpt_json_no_mapping",
    "kind": "Function",
    "line": 676,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_chatgpt_json_not_dict",
    "kind": "Function",
    "line": 681,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_chatgpt_json_fallback_root",
    "kind": "Function",
    "line": 686,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_chatgpt_json_too_few_messages",
    "kind": "Function",
    "line": 720,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_slack_json_valid",
    "kind": "Function",
    "line": 745,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_slack_json_not_a_list",
    "kind": "Function",
    "line": 755,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_slack_json_too_few_messages",
    "kind": "Function",
    "line": 760,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_slack_json_skips_non_message_types",
    "kind": "Function",
    "line": 766,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_slack_json_three_users",
    "kind": "Function",
    "line": 776,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_slack_json_empty_text_skipped",
    "kind": "Function",
    "line": 787,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_slack_json_username_fallback",
    "kind": "Function",
    "line": 797,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_slack_json_has_provenance_footer",
    "kind": "Function",
    "line": 806,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_slack_json_preserves_speaker_id",
    "kind": "Function",
    "line": 819,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_slack_json_attacker_first_message_attributed",
    "kind": "Function",
    "line": 830,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_slack_json_sanitizes_speaker_id",
    "kind": "Function",
    "line": 842,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_try_normalize_json_invalid_json",
    "kind": "Function",
    "line": 858,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_try_normalize_json_valid_but_unknown_schema",
    "kind": "Function",
    "line": 863,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_messages_to_transcript_basic",
    "kind": "Function",
    "line": 871,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_messages_to_transcript_consecutive_users",
    "kind": "Function",
    "line": 879,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_messages_to_transcript_assistant_first",
    "kind": "Function",
    "line": 887,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_extract_content_with_tool_use",
    "kind": "Function",
    "line": 898,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_extract_content_with_tool_result",
    "kind": "Function",
    "line": 909,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_extract_content_tool_result_without_map_uses_fallback",
    "kind": "Function",
    "line": 918,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_claude_code_jsonl_captures_tool_output",
    "kind": "Function",
    "line": 927,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_claude_code_jsonl_read_result_omitted",
    "kind": "Function",
    "line": 971,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_claude_code_jsonl_tool_only_user_message_not_counted",
    "kind": "Function",
    "line": 1013,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_extract_content_text_only_backward_compat",
    "kind": "Function",
    "line": 1054,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_extract_content_string_unchanged",
    "kind": "Function",
    "line": 1065,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_claude_code_jsonl_thinking_blocks_ignored",
    "kind": "Function",
    "line": 1071,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_normalize_rejects_large_file",
    "kind": "Function",
    "line": 1094,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "TestStripNoisePreservesUserContent",
    "kind": "Class",
    "line": 1112,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "TestStripNoiseRemovesSystemChrome",
    "kind": "Class",
    "line": 1171,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_user_discusses_stop_hook_in_prose",
    "kind": "Method",
    "line": 1115,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_user_mentions_system_reminder_inline",
    "kind": "Method",
    "line": 1127,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_ctrl_o_hint_in_prose_preserved",
    "kind": "Method",
    "line": 1138,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_current_time_inline_in_prose",
    "kind": "Method",
    "line": 1148,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_plus_n_lines_marker_inline",
    "kind": "Method",
    "line": 1152,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_dangling_open_tag_does_not_span_messages",
    "kind": "Method",
    "line": 1156,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_strips_line_anchored_system_reminder_block",
    "kind": "Method",
    "line": 1174,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_strips_system_reminder_with_blockquote_prefix",
    "kind": "Method",
    "line": 1187,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_strips_standalone_ran_hook_line",
    "kind": "Method",
    "line": 1195,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_strips_known_hook_names",
    "kind": "Method",
    "line": 1201,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_strips_current_time_standalone",
    "kind": "Method",
    "line": 1206,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_strips_collapsed_lines_marker",
    "kind": "Method",
    "line": 1212,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_strips_token_count_ctrl_o_chrome",
    "kind": "Method",
    "line": 1218,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_strips_each_known_noise_tag",
    "kind": "Method",
    "line": 1226,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_collapses_excessive_blank_lines",
    "kind": "Method",
    "line": 1240,
    "file_path": "mempalace/tests/test_normalize.py"
  },
  {
    "name": "test_module_import_redirects_stdout_to_stderr",
    "kind": "Function",
    "line": 18,
    "file_path": "mempalace/tests/test_mcp_stdio_protection.py"
  },
  {
    "name": "test_restore_stdout_returns_real_stdout",
    "kind": "Function",
    "line": 44,
    "file_path": "mempalace/tests/test_mcp_stdio_protection.py"
  },
  {
    "name": "test_mcp_server_no_stdout_noise_on_clean_exit",
    "kind": "Function",
    "line": 70,
    "file_path": "mempalace/tests/test_mcp_stdio_protection.py"
  },
  {
    "name": "TestEntityOperations",
    "kind": "Class",
    "line": 9,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "TestTripleOperations",
    "kind": "Class",
    "line": 26,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "TestQueries",
    "kind": "Class",
    "line": 49,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "TestInvalidation",
    "kind": "Class",
    "line": 83,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "TestTimeline",
    "kind": "Class",
    "line": 93,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "TestWALMode",
    "kind": "Class",
    "line": 120,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "TestStats",
    "kind": "Class",
    "line": 128,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "test_add_entity",
    "kind": "Method",
    "line": 10,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "test_add_entity_normalizes_id",
    "kind": "Method",
    "line": 14,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "test_add_entity_upsert",
    "kind": "Method",
    "line": 18,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "test_add_triple_creates_entities",
    "kind": "Method",
    "line": 27,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "test_add_triple_with_dates",
    "kind": "Method",
    "line": 33,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "test_duplicate_triple_returns_existing_id",
    "kind": "Method",
    "line": 37,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "test_invalidated_triple_allows_re_add",
    "kind": "Method",
    "line": 42,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "test_query_outgoing",
    "kind": "Method",
    "line": 50,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "test_query_incoming",
    "kind": "Method",
    "line": 56,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "test_query_both_directions",
    "kind": "Method",
    "line": 60,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "test_query_as_of_filters_expired",
    "kind": "Method",
    "line": 66,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "test_query_as_of_shows_current",
    "kind": "Method",
    "line": 72,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "test_query_relationship",
    "kind": "Method",
    "line": 78,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "test_invalidate_sets_valid_to",
    "kind": "Method",
    "line": 84,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "test_timeline_all",
    "kind": "Method",
    "line": 94,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "test_timeline_entity",
    "kind": "Method",
    "line": 98,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "test_timeline_global_has_limit",
    "kind": "Method",
    "line": 103,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "test_timeline_entity_has_limit",
    "kind": "Method",
    "line": 110,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "test_wal_mode_enabled",
    "kind": "Method",
    "line": 121,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "test_stats_empty",
    "kind": "Method",
    "line": 129,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "test_stats_seeded",
    "kind": "Method",
    "line": 134,
    "file_path": "mempalace/tests/test_knowledge_graph.py"
  },
  {
    "name": "TestBuildGraph",
    "kind": "Class",
    "line": 40,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "TestTraverse",
    "kind": "Class",
    "line": 121,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "TestFindTunnels",
    "kind": "Class",
    "line": 158,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "TestGraphStats",
    "kind": "Class",
    "line": 194,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "TestFuzzyMatch",
    "kind": "Class",
    "line": 220,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "fake_get",
    "kind": "Function",
    "line": 17,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "test_empty_collection",
    "kind": "Method",
    "line": 41,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "test_falsy_collection",
    "kind": "Method",
    "line": 47,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "test_single_wing_no_edges",
    "kind": "Method",
    "line": 53,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "test_multi_wing_creates_edges",
    "kind": "Method",
    "line": 65,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "test_general_room_excluded",
    "kind": "Method",
    "line": 89,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "test_missing_wing_excluded",
    "kind": "Method",
    "line": 98,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "test_dates_capped_at_five",
    "kind": "Method",
    "line": 107,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "test_traverse_known_room",
    "kind": "Method",
    "line": 131,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "test_traverse_unknown_room",
    "kind": "Method",
    "line": 140,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "test_traverse_max_hops",
    "kind": "Method",
    "line": 147,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "test_find_all_tunnels",
    "kind": "Method",
    "line": 168,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "test_find_tunnels_with_wing_filter",
    "kind": "Method",
    "line": 174,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "test_find_tunnels_no_match",
    "kind": "Method",
    "line": 179,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "test_find_tunnels_both_wings",
    "kind": "Method",
    "line": 184,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "test_empty_graph",
    "kind": "Method",
    "line": 195,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "test_stats_with_data",
    "kind": "Method",
    "line": 202,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "test_exact_substring",
    "kind": "Method",
    "line": 221,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "test_partial_word_match",
    "kind": "Method",
    "line": 226,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "test_no_match",
    "kind": "Method",
    "line": 231,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "test_hyphenated_query",
    "kind": "Method",
    "line": 236,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "test_max_results",
    "kind": "Method",
    "line": 241,
    "file_path": "mempalace/tests/test_palace_graph.py"
  },
  {
    "name": "pytest_addoption",
    "kind": "Function",
    "line": 13,
    "file_path": "mempalace/tests/benchmarks/conftest.py"
  },
  {
    "name": "bench_scale",
    "kind": "Function",
    "line": 28,
    "file_path": "mempalace/tests/benchmarks/conftest.py"
  },
  {
    "name": "bench_report_path",
    "kind": "Function",
    "line": 34,
    "file_path": "mempalace/tests/benchmarks/conftest.py"
  },
  {
    "name": "palace_dir",
    "kind": "Function",
    "line": 40,
    "file_path": "mempalace/tests/benchmarks/conftest.py"
  },
  {
    "name": "kg_db",
    "kind": "Function",
    "line": 48,
    "file_path": "mempalace/tests/benchmarks/conftest.py"
  },
  {
    "name": "config_dir",
    "kind": "Function",
    "line": 54,
    "file_path": "mempalace/tests/benchmarks/conftest.py"
  },
  {
    "name": "project_dir",
    "kind": "Function",
    "line": 65,
    "file_path": "mempalace/tests/benchmarks/conftest.py"
  },
  {
    "name": "BenchmarkResults",
    "kind": "Class",
    "line": 75,
    "file_path": "mempalace/tests/benchmarks/conftest.py"
  },
  {
    "name": "bench_results",
    "kind": "Function",
    "line": 88,
    "file_path": "mempalace/tests/benchmarks/conftest.py"
  },
  {
    "name": "pytest_terminal_summary",
    "kind": "Function",
    "line": 93,
    "file_path": "mempalace/tests/benchmarks/conftest.py"
  },
  {
    "name": "record",
    "kind": "Method",
    "line": 81,
    "file_path": "mempalace/tests/benchmarks/conftest.py"
  },
  {
    "name": "TestSearchLatencyVsSize",
    "kind": "Class",
    "line": 18,
    "file_path": "mempalace/tests/benchmarks/test_search_bench.py"
  },
  {
    "name": "TestSearchRecallAtScale",
    "kind": "Class",
    "line": 59,
    "file_path": "mempalace/tests/benchmarks/test_search_bench.py"
  },
  {
    "name": "TestSearchFilteredVsUnfiltered",
    "kind": "Class",
    "line": 103,
    "file_path": "mempalace/tests/benchmarks/test_search_bench.py"
  },
  {
    "name": "TestConcurrentSearch",
    "kind": "Class",
    "line": 160,
    "file_path": "mempalace/tests/benchmarks/test_search_bench.py"
  },
  {
    "name": "TestSearchNResultsScaling",
    "kind": "Class",
    "line": 214,
    "file_path": "mempalace/tests/benchmarks/test_search_bench.py"
  },
  {
    "name": "test_search_latency_curve",
    "kind": "Method",
    "line": 24,
    "file_path": "mempalace/tests/benchmarks/test_search_bench.py"
  },
  {
    "name": "test_recall_at_k",
    "kind": "Method",
    "line": 65,
    "file_path": "mempalace/tests/benchmarks/test_search_bench.py"
  },
  {
    "name": "test_filter_impact",
    "kind": "Method",
    "line": 106,
    "file_path": "mempalace/tests/benchmarks/test_search_bench.py"
  },
  {
    "name": "test_concurrent_queries",
    "kind": "Method",
    "line": 163,
    "file_path": "mempalace/tests/benchmarks/test_search_bench.py"
  },
  {
    "name": "test_n_results_latency",
    "kind": "Method",
    "line": 218,
    "file_path": "mempalace/tests/benchmarks/test_search_bench.py"
  },
  {
    "name": "run_search",
    "kind": "Method",
    "line": 184,
    "file_path": "mempalace/tests/benchmarks/test_search_bench.py"
  },
  {
    "name": "TestSearchMemoryProfile",
    "kind": "Class",
    "line": 35,
    "file_path": "mempalace/tests/benchmarks/test_memory_profile.py"
  },
  {
    "name": "TestToolStatusMemoryProfile",
    "kind": "Class",
    "line": 72,
    "file_path": "mempalace/tests/benchmarks/test_memory_profile.py"
  },
  {
    "name": "TestLayer1MemoryProfile",
    "kind": "Class",
    "line": 114,
    "file_path": "mempalace/tests/benchmarks/test_memory_profile.py"
  },
  {
    "name": "TestHeapSnapshot",
    "kind": "Class",
    "line": 148,
    "file_path": "mempalace/tests/benchmarks/test_memory_profile.py"
  },
  {
    "name": "test_search_rss_growth",
    "kind": "Method",
    "line": 38,
    "file_path": "mempalace/tests/benchmarks/test_memory_profile.py"
  },
  {
    "name": "test_tool_status_repeated_calls",
    "kind": "Method",
    "line": 75,
    "file_path": "mempalace/tests/benchmarks/test_memory_profile.py"
  },
  {
    "name": "test_layer1_repeated_generate",
    "kind": "Method",
    "line": 117,
    "file_path": "mempalace/tests/benchmarks/test_memory_profile.py"
  },
  {
    "name": "test_search_heap_top_allocators",
    "kind": "Method",
    "line": 151,
    "file_path": "mempalace/tests/benchmarks/test_memory_profile.py"
  },
  {
    "name": "TestMineThroughput",
    "kind": "Class",
    "line": 36,
    "file_path": "mempalace/tests/benchmarks/test_ingest_bench.py"
  },
  {
    "name": "TestChunkThroughput",
    "kind": "Class",
    "line": 102,
    "file_path": "mempalace/tests/benchmarks/test_ingest_bench.py"
  },
  {
    "name": "TestReingestSkipOverhead",
    "kind": "Class",
    "line": 135,
    "file_path": "mempalace/tests/benchmarks/test_ingest_bench.py"
  },
  {
    "name": "test_mine_files_per_second",
    "kind": "Method",
    "line": 40,
    "file_path": "mempalace/tests/benchmarks/test_ingest_bench.py"
  },
  {
    "name": "test_mine_peak_rss",
    "kind": "Method",
    "line": 66,
    "file_path": "mempalace/tests/benchmarks/test_ingest_bench.py"
  },
  {
    "name": "test_chunk_text_throughput",
    "kind": "Method",
    "line": 106,
    "file_path": "mempalace/tests/benchmarks/test_ingest_bench.py"
  },
  {
    "name": "test_skip_check_cost",
    "kind": "Method",
    "line": 138,
    "file_path": "mempalace/tests/benchmarks/test_ingest_bench.py"
  },
  {
    "name": "sample_rss",
    "kind": "Method",
    "line": 81,
    "file_path": "mempalace/tests/benchmarks/test_ingest_bench.py"
  },
  {
    "name": "TestToolStatusOOM",
    "kind": "Class",
    "line": 69,
    "file_path": "mempalace/tests/benchmarks/test_mcp_bench.py"
  },
  {
    "name": "TestToolListWingsUnbounded",
    "kind": "Class",
    "line": 112,
    "file_path": "mempalace/tests/benchmarks/test_mcp_bench.py"
  },
  {
    "name": "TestToolGetTaxonomyUnbounded",
    "kind": "Class",
    "line": 131,
    "file_path": "mempalace/tests/benchmarks/test_mcp_bench.py"
  },
  {
    "name": "TestClientReinstantiation",
    "kind": "Class",
    "line": 150,
    "file_path": "mempalace/tests/benchmarks/test_mcp_bench.py"
  },
  {
    "name": "TestToolSearchLatency",
    "kind": "Class",
    "line": 186,
    "file_path": "mempalace/tests/benchmarks/test_mcp_bench.py"
  },
  {
    "name": "TestDuplicateCheckCost",
    "kind": "Class",
    "line": 210,
    "file_path": "mempalace/tests/benchmarks/test_mcp_bench.py"
  },
  {
    "name": "test_tool_status_rss_growth",
    "kind": "Method",
    "line": 75,
    "file_path": "mempalace/tests/benchmarks/test_mcp_bench.py"
  },
  {
    "name": "test_tool_status_latency",
    "kind": "Method",
    "line": 93,
    "file_path": "mempalace/tests/benchmarks/test_mcp_bench.py"
  },
  {
    "name": "test_list_wings_latency",
    "kind": "Method",
    "line": 116,
    "file_path": "mempalace/tests/benchmarks/test_mcp_bench.py"
  },
  {
    "name": "test_get_taxonomy_latency",
    "kind": "Method",
    "line": 135,
    "file_path": "mempalace/tests/benchmarks/test_mcp_bench.py"
  },
  {
    "name": "test_reinstantiation_overhead",
    "kind": "Method",
    "line": 153,
    "file_path": "mempalace/tests/benchmarks/test_mcp_bench.py"
  },
  {
    "name": "test_search_latency",
    "kind": "Method",
    "line": 190,
    "file_path": "mempalace/tests/benchmarks/test_mcp_bench.py"
  },
  {
    "name": "test_duplicate_check_latency",
    "kind": "Method",
    "line": 214,
    "file_path": "mempalace/tests/benchmarks/test_mcp_bench.py"
  },
  {
    "name": "test_detect_entities_benchmark",
    "kind": "Function",
    "line": 7,
    "file_path": "mempalace/tests/benchmarks/benchmark_dialect.py"
  },
  {
    "name": "TestRecallThresholdSingleRoom",
    "kind": "Class",
    "line": 104,
    "file_path": "mempalace/tests/benchmarks/test_recall_threshold.py"
  },
  {
    "name": "test_single_room_recall",
    "kind": "Method",
    "line": 114,
    "file_path": "mempalace/tests/benchmarks/test_recall_threshold.py"
  },
  {
    "name": "test_single_room_no_filter_recall",
    "kind": "Method",
    "line": 154,
    "file_path": "mempalace/tests/benchmarks/test_recall_threshold.py"
  },
  {
    "name": "TestGetAllMetadatasOOM",
    "kind": "Class",
    "line": 36,
    "file_path": "mempalace/tests/benchmarks/test_chromadb_stress.py"
  },
  {
    "name": "TestQueryDegradation",
    "kind": "Class",
    "line": 70,
    "file_path": "mempalace/tests/benchmarks/test_chromadb_stress.py"
  },
  {
    "name": "TestBulkInsertPerformance",
    "kind": "Class",
    "line": 108,
    "file_path": "mempalace/tests/benchmarks/test_chromadb_stress.py"
  },
  {
    "name": "TestMaxCollectionSize",
    "kind": "Class",
    "line": 167,
    "file_path": "mempalace/tests/benchmarks/test_chromadb_stress.py"
  },
  {
    "name": "test_get_all_metadatas_rss",
    "kind": "Method",
    "line": 47,
    "file_path": "mempalace/tests/benchmarks/test_chromadb_stress.py"
  },
  {
    "name": "test_query_latency_at_size",
    "kind": "Method",
    "line": 76,
    "file_path": "mempalace/tests/benchmarks/test_chromadb_stress.py"
  },
  {
    "name": "test_sequential_vs_batched",
    "kind": "Method",
    "line": 111,
    "file_path": "mempalace/tests/benchmarks/test_chromadb_stress.py"
  },
  {
    "name": "test_incremental_growth",
    "kind": "Method",
    "line": 170,
    "file_path": "mempalace/tests/benchmarks/test_chromadb_stress.py"
  },
  {
    "name": "TestWakeUpCost",
    "kind": "Class",
    "line": 32,
    "file_path": "mempalace/tests/benchmarks/test_layers_bench.py"
  },
  {
    "name": "TestLayer1UnboundedFetch",
    "kind": "Class",
    "line": 66,
    "file_path": "mempalace/tests/benchmarks/test_layers_bench.py"
  },
  {
    "name": "TestWakeUpTokenBudget",
    "kind": "Class",
    "line": 125,
    "file_path": "mempalace/tests/benchmarks/test_layers_bench.py"
  },
  {
    "name": "TestLayer2Retrieval",
    "kind": "Class",
    "line": 157,
    "file_path": "mempalace/tests/benchmarks/test_layers_bench.py"
  },
  {
    "name": "TestLayer3Search",
    "kind": "Class",
    "line": 183,
    "file_path": "mempalace/tests/benchmarks/test_layers_bench.py"
  },
  {
    "name": "test_wakeup_latency",
    "kind": "Method",
    "line": 38,
    "file_path": "mempalace/tests/benchmarks/test_layers_bench.py"
  },
  {
    "name": "test_layer1_rss_growth",
    "kind": "Method",
    "line": 72,
    "file_path": "mempalace/tests/benchmarks/test_layers_bench.py"
  },
  {
    "name": "test_layer1_wing_filtered",
    "kind": "Method",
    "line": 94,
    "file_path": "mempalace/tests/benchmarks/test_layers_bench.py"
  },
  {
    "name": "test_token_budget",
    "kind": "Method",
    "line": 131,
    "file_path": "mempalace/tests/benchmarks/test_layers_bench.py"
  },
  {
    "name": "test_layer2_latency",
    "kind": "Method",
    "line": 160,
    "file_path": "mempalace/tests/benchmarks/test_layers_bench.py"
  },
  {
    "name": "test_layer3_latency",
    "kind": "Method",
    "line": 186,
    "file_path": "mempalace/tests/benchmarks/test_layers_bench.py"
  },
  {
    "name": "PalaceDataGenerator",
    "kind": "Class",
    "line": 234,
    "file_path": "mempalace/tests/benchmarks/data_generator.py"
  },
  {
    "name": "generate_project_tree",
    "kind": "Method",
    "line": 349,
    "file_path": "mempalace/tests/benchmarks/data_generator.py"
  },
  {
    "name": "generate_conversation_files",
    "kind": "Method",
    "line": 382,
    "file_path": "mempalace/tests/benchmarks/data_generator.py"
  },
  {
    "name": "populate_palace_directly",
    "kind": "Method",
    "line": 404,
    "file_path": "mempalace/tests/benchmarks/data_generator.py"
  },
  {
    "name": "generate_kg_triples",
    "kind": "Method",
    "line": 484,
    "file_path": "mempalace/tests/benchmarks/data_generator.py"
  },
  {
    "name": "generate_search_queries",
    "kind": "Method",
    "line": 531,
    "file_path": "mempalace/tests/benchmarks/data_generator.py"
  },
  {
    "name": "TestTripleInsertionRate",
    "kind": "Class",
    "line": 18,
    "file_path": "mempalace/tests/benchmarks/test_knowledge_graph_bench.py"
  },
  {
    "name": "TestQueryEntityLatency",
    "kind": "Class",
    "line": 49,
    "file_path": "mempalace/tests/benchmarks/test_knowledge_graph_bench.py"
  },
  {
    "name": "TestTimelinePerformance",
    "kind": "Class",
    "line": 84,
    "file_path": "mempalace/tests/benchmarks/test_knowledge_graph_bench.py"
  },
  {
    "name": "TestTemporalQueryAccuracy",
    "kind": "Class",
    "line": 115,
    "file_path": "mempalace/tests/benchmarks/test_knowledge_graph_bench.py"
  },
  {
    "name": "TestSQLiteConcurrentAccess",
    "kind": "Class",
    "line": 161,
    "file_path": "mempalace/tests/benchmarks/test_knowledge_graph_bench.py"
  },
  {
    "name": "TestKGStats",
    "kind": "Class",
    "line": 264,
    "file_path": "mempalace/tests/benchmarks/test_knowledge_graph_bench.py"
  },
  {
    "name": "test_insertion_throughput",
    "kind": "Method",
    "line": 22,
    "file_path": "mempalace/tests/benchmarks/test_knowledge_graph_bench.py"
  },
  {
    "name": "test_query_latency_vs_relationships",
    "kind": "Method",
    "line": 52,
    "file_path": "mempalace/tests/benchmarks/test_knowledge_graph_bench.py"
  },
  {
    "name": "test_timeline_latency",
    "kind": "Method",
    "line": 88,
    "file_path": "mempalace/tests/benchmarks/test_knowledge_graph_bench.py"
  },
  {
    "name": "test_as_of_filtering",
    "kind": "Method",
    "line": 118,
    "file_path": "mempalace/tests/benchmarks/test_knowledge_graph_bench.py"
  },
  {
    "name": "test_concurrent_writers",
    "kind": "Method",
    "line": 164,
    "file_path": "mempalace/tests/benchmarks/test_knowledge_graph_bench.py"
  },
  {
    "name": "test_concurrent_read_write",
    "kind": "Method",
    "line": 213,
    "file_path": "mempalace/tests/benchmarks/test_knowledge_graph_bench.py"
  },
  {
    "name": "test_stats_latency",
    "kind": "Method",
    "line": 268,
    "file_path": "mempalace/tests/benchmarks/test_knowledge_graph_bench.py"
  },
  {
    "name": "writer",
    "kind": "Method",
    "line": 179,
    "file_path": "mempalace/tests/benchmarks/test_knowledge_graph_bench.py"
  },
  {
    "name": "reader",
    "kind": "Method",
    "line": 228,
    "file_path": "mempalace/tests/benchmarks/test_knowledge_graph_bench.py"
  },
  {
    "name": "writer",
    "kind": "Method",
    "line": 237,
    "file_path": "mempalace/tests/benchmarks/test_knowledge_graph_bench.py"
  },
  {
    "name": "record_metric",
    "kind": "Function",
    "line": 16,
    "file_path": "mempalace/tests/benchmarks/report.py"
  },
  {
    "name": "check_regression",
    "kind": "Function",
    "line": 34,
    "file_path": "mempalace/tests/benchmarks/report.py"
  },
  {
    "name": "TestFilteredVsUnfilteredRecall",
    "kind": "Class",
    "line": 18,
    "file_path": "mempalace/tests/benchmarks/test_palace_boost.py"
  },
  {
    "name": "TestFilterLatencyBenefit",
    "kind": "Class",
    "line": 81,
    "file_path": "mempalace/tests/benchmarks/test_palace_boost.py"
  },
  {
    "name": "TestBoostAtIncreasingScale",
    "kind": "Class",
    "line": 135,
    "file_path": "mempalace/tests/benchmarks/test_palace_boost.py"
  },
  {
    "name": "test_palace_boost_recall",
    "kind": "Method",
    "line": 24,
    "file_path": "mempalace/tests/benchmarks/test_palace_boost.py"
  },
  {
    "name": "test_filter_speedup",
    "kind": "Method",
    "line": 84,
    "file_path": "mempalace/tests/benchmarks/test_palace_boost.py"
  },
  {
    "name": "test_boost_scaling",
    "kind": "Method",
    "line": 138,
    "file_path": "mempalace/tests/benchmarks/test_palace_boost.py"
  },
  {
    "name": "scan_palace",
    "kind": "Function",
    "line": 81,
    "file_path": "mempalace/mempalace/repair.py"
  },
  {
    "name": "prune_corrupt",
    "kind": "Function",
    "line": 158,
    "file_path": "mempalace/mempalace/repair.py"
  },
  {
    "name": "rebuild_index",
    "kind": "Function",
    "line": 204,
    "file_path": "mempalace/mempalace/repair.py"
  },
  {
    "name": "sanitize_name",
    "kind": "Function",
    "line": 22,
    "file_path": "mempalace/mempalace/config.py"
  },
  {
    "name": "sanitize_kg_value",
    "kind": "Function",
    "line": 50,
    "file_path": "mempalace/mempalace/config.py"
  },
  {
    "name": "sanitize_content",
    "kind": "Function",
    "line": 74,
    "file_path": "mempalace/mempalace/config.py"
  },
  {
    "name": "MempalaceConfig",
    "kind": "Class",
    "line": 139,
    "file_path": "mempalace/mempalace/config.py"
  },
  {
    "name": "palace_path",
    "kind": "Method",
    "line": 167,
    "file_path": "mempalace/mempalace/config.py"
  },
  {
    "name": "collection_name",
    "kind": "Method",
    "line": 175,
    "file_path": "mempalace/mempalace/config.py"
  },
  {
    "name": "people_map",
    "kind": "Method",
    "line": 180,
    "file_path": "mempalace/mempalace/config.py"
  },
  {
    "name": "topic_wings",
    "kind": "Method",
    "line": 191,
    "file_path": "mempalace/mempalace/config.py"
  },
  {
    "name": "hall_keywords",
    "kind": "Method",
    "line": 196,
    "file_path": "mempalace/mempalace/config.py"
  },
  {
    "name": "entity_languages",
    "kind": "Method",
    "line": 201,
    "file_path": "mempalace/mempalace/config.py"
  },
  {
    "name": "set_entity_languages",
    "kind": "Method",
    "line": 218,
    "file_path": "mempalace/mempalace/config.py"
  },
  {
    "name": "hook_silent_save",
    "kind": "Method",
    "line": 237,
    "file_path": "mempalace/mempalace/config.py"
  },
  {
    "name": "hook_desktop_toast",
    "kind": "Method",
    "line": 242,
    "file_path": "mempalace/mempalace/config.py"
  },
  {
    "name": "set_hook_setting",
    "kind": "Method",
    "line": 246,
    "file_path": "mempalace/mempalace/config.py"
  },
  {
    "name": "init",
    "kind": "Method",
    "line": 257,
    "file_path": "mempalace/mempalace/config.py"
  },
  {
    "name": "save_people_map",
    "kind": "Method",
    "line": 281,
    "file_path": "mempalace/mempalace/config.py"
  },
  {
    "name": "GitignoreMatcher",
    "kind": "Class",
    "line": 81,
    "file_path": "mempalace/mempalace/miner.py"
  },
  {
    "name": "load_gitignore_matcher",
    "kind": "Function",
    "line": 197,
    "file_path": "mempalace/mempalace/miner.py"
  },
  {
    "name": "is_gitignored",
    "kind": "Function",
    "line": 204,
    "file_path": "mempalace/mempalace/miner.py"
  },
  {
    "name": "should_skip_dir",
    "kind": "Function",
    "line": 214,
    "file_path": "mempalace/mempalace/miner.py"
  },
  {
    "name": "normalize_include_paths",
    "kind": "Function",
    "line": 219,
    "file_path": "mempalace/mempalace/miner.py"
  },
  {
    "name": "is_exact_force_include",
    "kind": "Function",
    "line": 229,
    "file_path": "mempalace/mempalace/miner.py"
  },
  {
    "name": "is_force_included",
    "kind": "Function",
    "line": 242,
    "file_path": "mempalace/mempalace/miner.py"
  },
  {
    "name": "load_config",
    "kind": "Function",
    "line": 271,
    "file_path": "mempalace/mempalace/miner.py"
  },
  {
    "name": "detect_room",
    "kind": "Function",
    "line": 310,
    "file_path": "mempalace/mempalace/miner.py"
  },
  {
    "name": "chunk_text",
    "kind": "Function",
    "line": 357,
    "file_path": "mempalace/mempalace/miner.py"
  },
  {
    "name": "detect_hall",
    "kind": "Function",
    "line": 477,
    "file_path": "mempalace/mempalace/miner.py"
  },
  {
    "name": "add_drawer",
    "kind": "Function",
    "line": 544,
    "file_path": "mempalace/mempalace/miner.py"
  },
  {
    "name": "process_file",
    "kind": "Function",
    "line": 585,
    "file_path": "mempalace/mempalace/miner.py"
  },
  {
    "name": "scan_project",
    "kind": "Function",
    "line": 684,
    "file_path": "mempalace/mempalace/miner.py"
  },
  {
    "name": "mine",
    "kind": "Function",
    "line": 753,
    "file_path": "mempalace/mempalace/miner.py"
  },
  {
    "name": "status",
    "kind": "Function",
    "line": 841,
    "file_path": "mempalace/mempalace/miner.py"
  },
  {
    "name": "from_dir",
    "kind": "Method",
    "line": 89,
    "file_path": "mempalace/mempalace/miner.py"
  },
  {
    "name": "matches",
    "kind": "Method",
    "line": 139,
    "file_path": "mempalace/mempalace/miner.py"
  },
  {
    "name": "matches",
    "kind": "Method",
    "line": 176,
    "file_path": "mempalace/mempalace/miner.py"
  },
  {
    "name": "build_graph",
    "kind": "Function",
    "line": 41,
    "file_path": "mempalace/mempalace/palace_graph.py"
  },
  {
    "name": "traverse",
    "kind": "Function",
    "line": 107,
    "file_path": "mempalace/mempalace/palace_graph.py"
  },
  {
    "name": "find_tunnels",
    "kind": "Function",
    "line": 169,
    "file_path": "mempalace/mempalace/palace_graph.py"
  },
  {
    "name": "graph_stats",
    "kind": "Function",
    "line": 201,
    "file_path": "mempalace/mempalace/palace_graph.py"
  },
  {
    "name": "create_tunnel",
    "kind": "Function",
    "line": 315,
    "file_path": "mempalace/mempalace/palace_graph.py"
  },
  {
    "name": "list_tunnels",
    "kind": "Function",
    "line": 388,
    "file_path": "mempalace/mempalace/palace_graph.py"
  },
  {
    "name": "delete_tunnel",
    "kind": "Function",
    "line": 400,
    "file_path": "mempalace/mempalace/palace_graph.py"
  },
  {
    "name": "follow_tunnels",
    "kind": "Function",
    "line": 409,
    "file_path": "mempalace/mempalace/palace_graph.py"
  },
  {
    "name": "detect_rooms_from_folders",
    "kind": "Function",
    "line": 100,
    "file_path": "mempalace/mempalace/room_detector_local.py"
  },
  {
    "name": "detect_rooms_from_files",
    "kind": "Function",
    "line": 195,
    "file_path": "mempalace/mempalace/room_detector_local.py"
  },
  {
    "name": "print_proposed_structure",
    "kind": "Function",
    "line": 233,
    "file_path": "mempalace/mempalace/room_detector_local.py"
  },
  {
    "name": "get_user_approval",
    "kind": "Function",
    "line": 245,
    "file_path": "mempalace/mempalace/room_detector_local.py"
  },
  {
    "name": "save_config",
    "kind": "Function",
    "line": 282,
    "file_path": "mempalace/mempalace/room_detector_local.py"
  },
  {
    "name": "detect_rooms_local",
    "kind": "Function",
    "line": 304,
    "file_path": "mempalace/mempalace/room_detector_local.py"
  },
  {
    "name": "Dialect",
    "kind": "Class",
    "line": 300,
    "file_path": "mempalace/mempalace/dialect.py"
  },
  {
    "name": "from_config",
    "kind": "Method",
    "line": 351,
    "file_path": "mempalace/mempalace/dialect.py"
  },
  {
    "name": "save_config",
    "kind": "Method",
    "line": 368,
    "file_path": "mempalace/mempalace/dialect.py"
  },
  {
    "name": "encode_entity",
    "kind": "Method",
    "line": 389,
    "file_path": "mempalace/mempalace/dialect.py"
  },
  {
    "name": "encode_emotions",
    "kind": "Method",
    "line": 403,
    "file_path": "mempalace/mempalace/dialect.py"
  },
  {
    "name": "get_flags",
    "kind": "Method",
    "line": 412,
    "file_path": "mempalace/mempalace/dialect.py"
  },
  {
    "name": "compress",
    "kind": "Method",
    "line": 561,
    "file_path": "mempalace/mempalace/dialect.py"
  },
  {
    "name": "extract_key_quote",
    "kind": "Method",
    "line": 628,
    "file_path": "mempalace/mempalace/dialect.py"
  },
  {
    "name": "encode_zettel",
    "kind": "Method",
    "line": 703,
    "file_path": "mempalace/mempalace/dialect.py"
  },
  {
    "name": "encode_tunnel",
    "kind": "Method",
    "line": 734,
    "file_path": "mempalace/mempalace/dialect.py"
  },
  {
    "name": "encode_file",
    "kind": "Method",
    "line": 742,
    "file_path": "mempalace/mempalace/dialect.py"
  },
  {
    "name": "compress_file",
    "kind": "Method",
    "line": 777,
    "file_path": "mempalace/mempalace/dialect.py"
  },
  {
    "name": "compress_all",
    "kind": "Method",
    "line": 787,
    "file_path": "mempalace/mempalace/dialect.py"
  },
  {
    "name": "generate_layer1",
    "kind": "Method",
    "line": 806,
    "file_path": "mempalace/mempalace/dialect.py"
  },
  {
    "name": "decode",
    "kind": "Method",
    "line": 928,
    "file_path": "mempalace/mempalace/dialect.py"
  },
  {
    "name": "count_tokens",
    "kind": "Method",
    "line": 954,
    "file_path": "mempalace/mempalace/dialect.py"
  },
  {
    "name": "compression_stats",
    "kind": "Method",
    "line": 967,
    "file_path": "mempalace/mempalace/dialect.py"
  },
  {
    "name": "usage",
    "kind": "Function",
    "line": 990,
    "file_path": "mempalace/mempalace/dialect.py"
  },
  {
    "name": "KnowledgeGraph",
    "kind": "Class",
    "line": 50,
    "file_path": "mempalace/mempalace/knowledge_graph.py"
  },
  {
    "name": "close",
    "kind": "Method",
    "line": 124,
    "file_path": "mempalace/mempalace/knowledge_graph.py"
  },
  {
    "name": "add_entity",
    "kind": "Method",
    "line": 136,
    "file_path": "mempalace/mempalace/knowledge_graph.py"
  },
  {
    "name": "add_triple",
    "kind": "Method",
    "line": 149,
    "file_path": "mempalace/mempalace/knowledge_graph.py"
  },
  {
    "name": "invalidate",
    "kind": "Method",
    "line": 223,
    "file_path": "mempalace/mempalace/knowledge_graph.py"
  },
  {
    "name": "query_entity",
    "kind": "Method",
    "line": 240,
    "file_path": "mempalace/mempalace/knowledge_graph.py"
  },
  {
    "name": "query_relationship",
    "kind": "Method",
    "line": 297,
    "file_path": "mempalace/mempalace/knowledge_graph.py"
  },
  {
    "name": "timeline",
    "kind": "Method",
    "line": 328,
    "file_path": "mempalace/mempalace/knowledge_graph.py"
  },
  {
    "name": "stats",
    "kind": "Method",
    "line": 370,
    "file_path": "mempalace/mempalace/knowledge_graph.py"
  },
  {
    "name": "seed_from_entity_facts",
    "kind": "Method",
    "line": 395,
    "file_path": "mempalace/mempalace/knowledge_graph.py"
  },
  {
    "name": "run_onboarding",
    "kind": "Function",
    "line": 365,
    "file_path": "mempalace/mempalace/onboarding.py"
  },
  {
    "name": "quick_setup",
    "kind": "Function",
    "line": 458,
    "file_path": "mempalace/mempalace/onboarding.py"
  },
  {
    "name": "SearchError",
    "kind": "Class",
    "line": 26,
    "file_path": "mempalace/mempalace/searcher.py"
  },
  {
    "name": "build_where_filter",
    "kind": "Function",
    "line": 150,
    "file_path": "mempalace/mempalace/searcher.py"
  },
  {
    "name": "search",
    "kind": "Function",
    "line": 239,
    "file_path": "mempalace/mempalace/searcher.py"
  },
  {
    "name": "search_memories",
    "kind": "Function",
    "line": 304,
    "file_path": "mempalace/mempalace/searcher.py"
  },
  {
    "name": "export_palace",
    "kind": "Function",
    "line": 29,
    "file_path": "mempalace/mempalace/exporter.py"
  },
  {
    "name": "strip_noise",
    "kind": "Function",
    "line": 92,
    "file_path": "mempalace/mempalace/normalize.py"
  },
  {
    "name": "normalize",
    "kind": "Function",
    "line": 112,
    "file_path": "mempalace/mempalace/normalize.py"
  },
  {
    "name": "spellcheck_user_text",
    "kind": "Function",
    "line": 161,
    "file_path": "mempalace/mempalace/spellcheck.py"
  },
  {
    "name": "spellcheck_transcript_line",
    "kind": "Function",
    "line": 215,
    "file_path": "mempalace/mempalace/spellcheck.py"
  },
  {
    "name": "spellcheck_transcript",
    "kind": "Function",
    "line": 235,
    "file_path": "mempalace/mempalace/spellcheck.py"
  },
  {
    "name": "check_text",
    "kind": "Function",
    "line": 52,
    "file_path": "mempalace/mempalace/fact_checker.py"
  },
  {
    "name": "extract_memories",
    "kind": "Function",
    "line": 363,
    "file_path": "mempalace/mempalace/general_extractor.py"
  },
  {
    "name": "cmd_init",
    "kind": "Function",
    "line": 71,
    "file_path": "mempalace/mempalace/cli.py"
  },
  {
    "name": "cmd_mine",
    "kind": "Function",
    "line": 116,
    "file_path": "mempalace/mempalace/cli.py"
  },
  {
    "name": "cmd_sweep",
    "kind": "Function",
    "line": 149,
    "file_path": "mempalace/mempalace/cli.py"
  },
  {
    "name": "cmd_search",
    "kind": "Function",
    "line": 191,
    "file_path": "mempalace/mempalace/cli.py"
  },
  {
    "name": "cmd_wakeup",
    "kind": "Function",
    "line": 207,
    "file_path": "mempalace/mempalace/cli.py"
  },
  {
    "name": "cmd_split",
    "kind": "Function",
    "line": 221,
    "file_path": "mempalace/mempalace/cli.py"
  },
  {
    "name": "cmd_migrate",
    "kind": "Function",
    "line": 244,
    "file_path": "mempalace/mempalace/cli.py"
  },
  {
    "name": "cmd_status",
    "kind": "Function",
    "line": 256,
    "file_path": "mempalace/mempalace/cli.py"
  },
  {
    "name": "cmd_repair",
    "kind": "Function",
    "line": 263,
    "file_path": "mempalace/mempalace/cli.py"
  },
  {
    "name": "cmd_hook",
    "kind": "Function",
    "line": 354,
    "file_path": "mempalace/mempalace/cli.py"
  },
  {
    "name": "cmd_instructions",
    "kind": "Function",
    "line": 361,
    "file_path": "mempalace/mempalace/cli.py"
  },
  {
    "name": "cmd_mcp",
    "kind": "Function",
    "line": 368,
    "file_path": "mempalace/mempalace/cli.py"
  },
  {
    "name": "cmd_compress",
    "kind": "Function",
    "line": 389,
    "file_path": "mempalace/mempalace/cli.py"
  },
  {
    "name": "get_source_groups",
    "kind": "Function",
    "line": 51,
    "file_path": "mempalace/mempalace/dedup.py"
  },
  {
    "name": "dedup_source_group",
    "kind": "Function",
    "line": 79,
    "file_path": "mempalace/mempalace/dedup.py"
  },
  {
    "name": "show_stats",
    "kind": "Function",
    "line": 130,
    "file_path": "mempalace/mempalace/dedup.py"
  },
  {
    "name": "dedup_palace",
    "kind": "Function",
    "line": 150,
    "file_path": "mempalace/mempalace/dedup.py"
  },
  {
    "name": "EntityRegistry",
    "kind": "Class",
    "line": 272,
    "file_path": "mempalace/mempalace/entity_registry.py"
  },
  {
    "name": "load",
    "kind": "Method",
    "line": 307,
    "file_path": "mempalace/mempalace/entity_registry.py"
  },
  {
    "name": "save",
    "kind": "Method",
    "line": 317,
    "file_path": "mempalace/mempalace/entity_registry.py"
  },
  {
    "name": "mode",
    "kind": "Method",
    "line": 343,
    "file_path": "mempalace/mempalace/entity_registry.py"
  },
  {
    "name": "people",
    "kind": "Method",
    "line": 347,
    "file_path": "mempalace/mempalace/entity_registry.py"
  },
  {
    "name": "projects",
    "kind": "Method",
    "line": 351,
    "file_path": "mempalace/mempalace/entity_registry.py"
  },
  {
    "name": "ambiguous_flags",
    "kind": "Method",
    "line": 355,
    "file_path": "mempalace/mempalace/entity_registry.py"
  },
  {
    "name": "seed",
    "kind": "Method",
    "line": 360,
    "file_path": "mempalace/mempalace/entity_registry.py"
  },
  {
    "name": "lookup",
    "kind": "Method",
    "line": 412,
    "file_path": "mempalace/mempalace/entity_registry.py"
  },
  {
    "name": "research",
    "kind": "Method",
    "line": 520,
    "file_path": "mempalace/mempalace/entity_registry.py"
  },
  {
    "name": "confirm_research",
    "kind": "Method",
    "line": 560,
    "file_path": "mempalace/mempalace/entity_registry.py"
  },
  {
    "name": "learn_from_text",
    "kind": "Method",
    "line": 586,
    "file_path": "mempalace/mempalace/entity_registry.py"
  },
  {
    "name": "extract_people_from_query",
    "kind": "Method",
    "line": 631,
    "file_path": "mempalace/mempalace/entity_registry.py"
  },
  {
    "name": "extract_unknown_candidates",
    "kind": "Method",
    "line": 654,
    "file_path": "mempalace/mempalace/entity_registry.py"
  },
  {
    "name": "summary",
    "kind": "Method",
    "line": 673,
    "file_path": "mempalace/mempalace/entity_registry.py"
  },
  {
    "name": "parse_claude_jsonl",
    "kind": "Function",
    "line": 88,
    "file_path": "mempalace/mempalace/sweeper.py"
  },
  {
    "name": "get_palace_cursor",
    "kind": "Function",
    "line": 147,
    "file_path": "mempalace/mempalace/sweeper.py"
  },
  {
    "name": "sweep",
    "kind": "Function",
    "line": 193,
    "file_path": "mempalace/mempalace/sweeper.py"
  },
  {
    "name": "sweep_directory",
    "kind": "Function",
    "line": 302,
    "file_path": "mempalace/mempalace/sweeper.py"
  },
  {
    "name": "get_collection",
    "kind": "Function",
    "line": 53,
    "file_path": "mempalace/mempalace/palace.py"
  },
  {
    "name": "get_closets_collection",
    "kind": "Function",
    "line": 66,
    "file_path": "mempalace/mempalace/palace.py"
  },
  {
    "name": "build_closet_lines",
    "kind": "Function",
    "line": 163,
    "file_path": "mempalace/mempalace/palace.py"
  },
  {
    "name": "purge_file_closets",
    "kind": "Function",
    "line": 221,
    "file_path": "mempalace/mempalace/palace.py"
  },
  {
    "name": "upsert_closet_lines",
    "kind": "Function",
    "line": 234,
    "file_path": "mempalace/mempalace/palace.py"
  },
  {
    "name": "mine_lock",
    "kind": "Function",
    "line": 275,
    "file_path": "mempalace/mempalace/palace.py"
  },
  {
    "name": "file_already_mined",
    "kind": "Function",
    "line": 313,
    "file_path": "mempalace/mempalace/palace.py"
  },
  {
    "name": "run_instructions",
    "kind": "Function",
    "line": 16,
    "file_path": "mempalace/mempalace/instructions_cli.py"
  },
  {
    "name": "LLMConfig",
    "kind": "Class",
    "line": 92,
    "file_path": "mempalace/mempalace/closet_llm.py"
  },
  {
    "name": "regenerate_closets",
    "kind": "Function",
    "line": 194,
    "file_path": "mempalace/mempalace/closet_llm.py"
  },
  {
    "name": "missing",
    "kind": "Method",
    "line": 105,
    "file_path": "mempalace/mempalace/closet_llm.py"
  },
  {
    "name": "is_true_session_start",
    "kind": "Function",
    "line": 83,
    "file_path": "mempalace/mempalace/split_mega_files.py"
  },
  {
    "name": "find_session_boundaries",
    "kind": "Function",
    "line": 92,
    "file_path": "mempalace/mempalace/split_mega_files.py"
  },
  {
    "name": "extract_timestamp",
    "kind": "Function",
    "line": 101,
    "file_path": "mempalace/mempalace/split_mega_files.py"
  },
  {
    "name": "extract_people",
    "kind": "Function",
    "line": 134,
    "file_path": "mempalace/mempalace/split_mega_files.py"
  },
  {
    "name": "extract_subject",
    "kind": "Function",
    "line": 160,
    "file_path": "mempalace/mempalace/split_mega_files.py"
  },
  {
    "name": "split_file",
    "kind": "Function",
    "line": 179,
    "file_path": "mempalace/mempalace/split_mega_files.py"
  },
  {
    "name": "Layer0",
    "kind": "Class",
    "line": 34,
    "file_path": "mempalace/mempalace/layers.py"
  },
  {
    "name": "Layer1",
    "kind": "Class",
    "line": 76,
    "file_path": "mempalace/mempalace/layers.py"
  },
  {
    "name": "Layer2",
    "kind": "Class",
    "line": 185,
    "file_path": "mempalace/mempalace/layers.py"
  },
  {
    "name": "Layer3",
    "kind": "Class",
    "line": 243,
    "file_path": "mempalace/mempalace/layers.py"
  },
  {
    "name": "MemoryStack",
    "kind": "Class",
    "line": 357,
    "file_path": "mempalace/mempalace/layers.py"
  },
  {
    "name": "render",
    "kind": "Method",
    "line": 52,
    "file_path": "mempalace/mempalace/layers.py"
  },
  {
    "name": "token_estimate",
    "kind": "Method",
    "line": 67,
    "file_path": "mempalace/mempalace/layers.py"
  },
  {
    "name": "generate",
    "kind": "Method",
    "line": 92,
    "file_path": "mempalace/mempalace/layers.py"
  },
  {
    "name": "retrieve",
    "kind": "Method",
    "line": 196,
    "file_path": "mempalace/mempalace/layers.py"
  },
  {
    "name": "search",
    "kind": "Method",
    "line": 253,
    "file_path": "mempalace/mempalace/layers.py"
  },
  {
    "name": "search_raw",
    "kind": "Method",
    "line": 302,
    "file_path": "mempalace/mempalace/layers.py"
  },
  {
    "name": "wake_up",
    "kind": "Method",
    "line": 377,
    "file_path": "mempalace/mempalace/layers.py"
  },
  {
    "name": "recall",
    "kind": "Method",
    "line": 398,
    "file_path": "mempalace/mempalace/layers.py"
  },
  {
    "name": "search",
    "kind": "Method",
    "line": 402,
    "file_path": "mempalace/mempalace/layers.py"
  },
  {
    "name": "status",
    "kind": "Method",
    "line": 406,
    "file_path": "mempalace/mempalace/layers.py"
  },
  {
    "name": "usage",
    "kind": "Function",
    "line": 444,
    "file_path": "mempalace/mempalace/layers.py"
  },
  {
    "name": "ingest_diaries",
    "kind": "Function",
    "line": 75,
    "file_path": "mempalace/mempalace/diary_ingest.py"
  },
  {
    "name": "extract_drawers_from_sqlite",
    "kind": "Function",
    "line": 28,
    "file_path": "mempalace/mempalace/migrate.py"
  },
  {
    "name": "detect_chromadb_version",
    "kind": "Function",
    "line": 91,
    "file_path": "mempalace/mempalace/migrate.py"
  },
  {
    "name": "contains_palace_database",
    "kind": "Function",
    "line": 111,
    "file_path": "mempalace/mempalace/migrate.py"
  },
  {
    "name": "confirm_destructive_action",
    "kind": "Function",
    "line": 116,
    "file_path": "mempalace/mempalace/migrate.py"
  },
  {
    "name": "migrate",
    "kind": "Function",
    "line": 137,
    "file_path": "mempalace/mempalace/migrate.py"
  },
  {
    "name": "hook_stop",
    "kind": "Function",
    "line": 255,
    "file_path": "mempalace/mempalace/hooks_cli.py"
  },
  {
    "name": "hook_session_start",
    "kind": "Function",
    "line": 301,
    "file_path": "mempalace/mempalace/hooks_cli.py"
  },
  {
    "name": "hook_precompact",
    "kind": "Function",
    "line": 315,
    "file_path": "mempalace/mempalace/hooks_cli.py"
  },
  {
    "name": "run_hook",
    "kind": "Function",
    "line": 329,
    "file_path": "mempalace/mempalace/hooks_cli.py"
  },
  {
    "name": "sanitize_query",
    "kind": "Function",
    "line": 39,
    "file_path": "mempalace/mempalace/query_sanitizer.py"
  },
  {
    "name": "tool_status",
    "kind": "Function",
    "line": 296,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_list_wings",
    "kind": "Function",
    "line": 363,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_list_rooms",
    "kind": "Function",
    "line": 382,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_get_taxonomy",
    "kind": "Function",
    "line": 406,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_search",
    "kind": "Function",
    "line": 428,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_check_duplicate",
    "kind": "Function",
    "line": 471,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_get_aaak_spec",
    "kind": "Function",
    "line": 507,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_traverse_graph",
    "kind": "Function",
    "line": 512,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_find_tunnels",
    "kind": "Function",
    "line": 521,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_graph_stats",
    "kind": "Function",
    "line": 534,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_create_tunnel",
    "kind": "Function",
    "line": 542,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_list_tunnels",
    "kind": "Function",
    "line": 575,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_delete_tunnel",
    "kind": "Function",
    "line": 584,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_follow_tunnels",
    "kind": "Function",
    "line": 591,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_add_drawer",
    "kind": "Function",
    "line": 605,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_delete_drawer",
    "kind": "Function",
    "line": 667,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_get_drawer",
    "kind": "Function",
    "line": 698,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_list_drawers",
    "kind": "Function",
    "line": 720,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_update_drawer",
    "kind": "Function",
    "line": 771,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_kg_query",
    "kind": "Function",
    "line": 843,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_kg_add",
    "kind": "Function",
    "line": 855,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_kg_invalidate",
    "kind": "Function",
    "line": 882,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_kg_timeline",
    "kind": "Function",
    "line": 902,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_kg_stats",
    "kind": "Function",
    "line": 913,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_diary_write",
    "kind": "Function",
    "line": 921,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_diary_read",
    "kind": "Function",
    "line": 990,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_hook_settings",
    "kind": "Function",
    "line": 1041,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_memories_filed_away",
    "kind": "Function",
    "line": 1085,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "tool_reconnect",
    "kind": "Function",
    "line": 1119,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "handle_request",
    "kind": "Function",
    "line": 1571,
    "file_path": "mempalace/mempalace/mcp_server.py"
  },
  {
    "name": "extract_candidates",
    "kind": "Function",
    "line": 122,
    "file_path": "mempalace/mempalace/entity_detector.py"
  },
  {
    "name": "score_entity",
    "kind": "Function",
    "line": 215,
    "file_path": "mempalace/mempalace/entity_detector.py"
  },
  {
    "name": "classify_entity",
    "kind": "Function",
    "line": 294,
    "file_path": "mempalace/mempalace/entity_detector.py"
  },
  {
    "name": "detect_entities",
    "kind": "Function",
    "line": 364,
    "file_path": "mempalace/mempalace/entity_detector.py"
  },
  {
    "name": "confirm_entities",
    "kind": "Function",
    "line": 453,
    "file_path": "mempalace/mempalace/entity_detector.py"
  },
  {
    "name": "scan_for_detection",
    "kind": "Function",
    "line": 549,
    "file_path": "mempalace/mempalace/entity_detector.py"
  },
  {
    "name": "chunk_exchanges",
    "kind": "Function",
    "line": 98,
    "file_path": "mempalace/mempalace/convo_miner.py"
  },
  {
    "name": "detect_convo_room",
    "kind": "Function",
    "line": 258,
    "file_path": "mempalace/mempalace/convo_miner.py"
  },
  {
    "name": "scan_convos",
    "kind": "Function",
    "line": 281,
    "file_path": "mempalace/mempalace/convo_miner.py"
  },
  {
    "name": "mine_convos",
    "kind": "Function",
    "line": 366,
    "file_path": "mempalace/mempalace/convo_miner.py"
  },
  {
    "name": "register",
    "kind": "Function",
    "line": 35,
    "file_path": "mempalace/mempalace/backends/registry.py"
  },
  {
    "name": "unregister",
    "kind": "Function",
    "line": 48,
    "file_path": "mempalace/mempalace/backends/registry.py"
  },
  {
    "name": "available_backends",
    "kind": "Function",
    "line": 94,
    "file_path": "mempalace/mempalace/backends/registry.py"
  },
  {
    "name": "get_backend_class",
    "kind": "Function",
    "line": 100,
    "file_path": "mempalace/mempalace/backends/registry.py"
  },
  {
    "name": "get_backend",
    "kind": "Function",
    "line": 109,
    "file_path": "mempalace/mempalace/backends/registry.py"
  },
  {
    "name": "reset_backends",
    "kind": "Function",
    "line": 128,
    "file_path": "mempalace/mempalace/backends/registry.py"
  },
  {
    "name": "resolve_backend_for_palace",
    "kind": "Function",
    "line": 139,
    "file_path": "mempalace/mempalace/backends/registry.py"
  },
  {
    "name": "quarantine_stale_hnsw",
    "kind": "Function",
    "line": 52,
    "file_path": "mempalace/mempalace/backends/chroma.py"
  },
  {
    "name": "ChromaCollection",
    "kind": "Class",
    "line": 180,
    "file_path": "mempalace/mempalace/backends/chroma.py"
  },
  {
    "name": "ChromaBackend",
    "kind": "Class",
    "line": 378,
    "file_path": "mempalace/mempalace/backends/chroma.py"
  },
  {
    "name": "upsert",
    "kind": "Method",
    "line": 198,
    "file_path": "mempalace/mempalace/backends/chroma.py"
  },
  {
    "name": "update",
    "kind": "Method",
    "line": 206,
    "file_path": "mempalace/mempalace/backends/chroma.py"
  },
  {
    "name": "query",
    "kind": "Method",
    "line": 229,
    "file_path": "mempalace/mempalace/backends/chroma.py"
  },
  {
    "name": "delete",
    "kind": "Method",
    "line": 360,
    "file_path": "mempalace/mempalace/backends/chroma.py"
  },
  {
    "name": "count",
    "kind": "Method",
    "line": 369,
    "file_path": "mempalace/mempalace/backends/chroma.py"
  },
  {
    "name": "make_client",
    "kind": "Method",
    "line": 482,
    "file_path": "mempalace/mempalace/backends/chroma.py"
  },
  {
    "name": "backend_version",
    "kind": "Method",
    "line": 493,
    "file_path": "mempalace/mempalace/backends/chroma.py"
  },
  {
    "name": "get_collection",
    "kind": "Method",
    "line": 501,
    "file_path": "mempalace/mempalace/backends/chroma.py"
  },
  {
    "name": "close_palace",
    "kind": "Method",
    "line": 544,
    "file_path": "mempalace/mempalace/backends/chroma.py"
  },
  {
    "name": "close",
    "kind": "Method",
    "line": 552,
    "file_path": "mempalace/mempalace/backends/chroma.py"
  },
  {
    "name": "health",
    "kind": "Method",
    "line": 557,
    "file_path": "mempalace/mempalace/backends/chroma.py"
  },
  {
    "name": "detect",
    "kind": "Method",
    "line": 563,
    "file_path": "mempalace/mempalace/backends/chroma.py"
  },
  {
    "name": "get_or_create_collection",
    "kind": "Method",
    "line": 570,
    "file_path": "mempalace/mempalace/backends/chroma.py"
  },
  {
    "name": "delete_collection",
    "kind": "Method",
    "line": 574,
    "file_path": "mempalace/mempalace/backends/chroma.py"
  },
  {
    "name": "create_collection",
    "kind": "Method",
    "line": 578,
    "file_path": "mempalace/mempalace/backends/chroma.py"
  },
  {
    "name": "BackendError",
    "kind": "Class",
    "line": 26,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "PalaceNotFoundError",
    "kind": "Class",
    "line": 30,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "BackendClosedError",
    "kind": "Class",
    "line": 38,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "UnsupportedFilterError",
    "kind": "Class",
    "line": 42,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "DimensionMismatchError",
    "kind": "Class",
    "line": 49,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "EmbedderIdentityMismatchError",
    "kind": "Class",
    "line": 53,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "PalaceRef",
    "kind": "Class",
    "line": 63,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "HealthStatus",
    "kind": "Class",
    "line": 77,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "QueryResult",
    "kind": "Class",
    "line": 118,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "GetResult",
    "kind": "Class",
    "line": 155,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "BaseCollection",
    "kind": "Class",
    "line": 173,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "BaseBackend",
    "kind": "Class",
    "line": 296,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "healthy",
    "kind": "Method",
    "line": 82,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "unhealthy",
    "kind": "Method",
    "line": 86,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "empty",
    "kind": "Method",
    "line": 136,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "empty",
    "kind": "Method",
    "line": 164,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "upsert",
    "kind": "Method",
    "line": 187,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "query",
    "kind": "Method",
    "line": 197,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "delete",
    "kind": "Method",
    "line": 221,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "count",
    "kind": "Method",
    "line": 229,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "estimated_count",
    "kind": "Method",
    "line": 235,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "close",
    "kind": "Method",
    "line": 238,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "health",
    "kind": "Method",
    "line": 241,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "update",
    "kind": "Method",
    "line": 244,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "get_collection",
    "kind": "Method",
    "line": 309,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "close_palace",
    "kind": "Method",
    "line": 318,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "close",
    "kind": "Method",
    "line": 322,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "health",
    "kind": "Method",
    "line": 326,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "detect",
    "kind": "Method",
    "line": 331,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "resolve",
    "kind": "Method",
    "line": 354,
    "file_path": "mempalace/mempalace/backends/base.py"
  },
  {
    "name": "Transformation",
    "kind": "Class",
    "line": 30,
    "file_path": "mempalace/mempalace/sources/transforms.py"
  },
  {
    "name": "utf8_replace_invalid",
    "kind": "Function",
    "line": 47,
    "file_path": "mempalace/mempalace/sources/transforms.py"
  },
  {
    "name": "newline_normalize",
    "kind": "Function",
    "line": 56,
    "file_path": "mempalace/mempalace/sources/transforms.py"
  },
  {
    "name": "whitespace_trim",
    "kind": "Function",
    "line": 61,
    "file_path": "mempalace/mempalace/sources/transforms.py"
  },
  {
    "name": "whitespace_collapse_internal",
    "kind": "Function",
    "line": 69,
    "file_path": "mempalace/mempalace/sources/transforms.py"
  },
  {
    "name": "line_trim",
    "kind": "Function",
    "line": 82,
    "file_path": "mempalace/mempalace/sources/transforms.py"
  },
  {
    "name": "line_join_spaces",
    "kind": "Function",
    "line": 87,
    "file_path": "mempalace/mempalace/sources/transforms.py"
  },
  {
    "name": "blank_line_drop",
    "kind": "Function",
    "line": 98,
    "file_path": "mempalace/mempalace/sources/transforms.py"
  },
  {
    "name": "strip_tool_chrome",
    "kind": "Function",
    "line": 115,
    "file_path": "mempalace/mempalace/sources/transforms.py"
  },
  {
    "name": "tool_result_truncate",
    "kind": "Function",
    "line": 127,
    "file_path": "mempalace/mempalace/sources/transforms.py"
  },
  {
    "name": "tool_result_omitted",
    "kind": "Function",
    "line": 132,
    "file_path": "mempalace/mempalace/sources/transforms.py"
  },
  {
    "name": "spellcheck_user",
    "kind": "Function",
    "line": 137,
    "file_path": "mempalace/mempalace/sources/transforms.py"
  },
  {
    "name": "synthesized_marker",
    "kind": "Function",
    "line": 146,
    "file_path": "mempalace/mempalace/sources/transforms.py"
  },
  {
    "name": "speaker_role_assignment",
    "kind": "Function",
    "line": 151,
    "file_path": "mempalace/mempalace/sources/transforms.py"
  },
  {
    "name": "get_transformation",
    "kind": "Function",
    "line": 183,
    "file_path": "mempalace/mempalace/sources/transforms.py"
  },
  {
    "name": "register",
    "kind": "Function",
    "line": 41,
    "file_path": "mempalace/mempalace/sources/registry.py"
  },
  {
    "name": "unregister",
    "kind": "Function",
    "line": 52,
    "file_path": "mempalace/mempalace/sources/registry.py"
  },
  {
    "name": "available_adapters",
    "kind": "Function",
    "line": 96,
    "file_path": "mempalace/mempalace/sources/registry.py"
  },
  {
    "name": "get_adapter_class",
    "kind": "Function",
    "line": 102,
    "file_path": "mempalace/mempalace/sources/registry.py"
  },
  {
    "name": "get_adapter",
    "kind": "Function",
    "line": 111,
    "file_path": "mempalace/mempalace/sources/registry.py"
  },
  {
    "name": "reset_adapters",
    "kind": "Function",
    "line": 132,
    "file_path": "mempalace/mempalace/sources/registry.py"
  },
  {
    "name": "resolve_adapter_for_source",
    "kind": "Function",
    "line": 143,
    "file_path": "mempalace/mempalace/sources/registry.py"
  },
  {
    "name": "PalaceContext",
    "kind": "Class",
    "line": 49,
    "file_path": "mempalace/mempalace/sources/context.py"
  },
  {
    "name": "upsert",
    "kind": "Method",
    "line": 33,
    "file_path": "mempalace/mempalace/sources/context.py"
  },
  {
    "name": "query",
    "kind": "Method",
    "line": 34,
    "file_path": "mempalace/mempalace/sources/context.py"
  },
  {
    "name": "delete",
    "kind": "Method",
    "line": 36,
    "file_path": "mempalace/mempalace/sources/context.py"
  },
  {
    "name": "count",
    "kind": "Method",
    "line": 37,
    "file_path": "mempalace/mempalace/sources/context.py"
  },
  {
    "name": "add_triple",
    "kind": "Method",
    "line": 41,
    "file_path": "mempalace/mempalace/sources/context.py"
  },
  {
    "name": "upsert_drawer",
    "kind": "Method",
    "line": 91,
    "file_path": "mempalace/mempalace/sources/context.py"
  },
  {
    "name": "skip_current_item",
    "kind": "Method",
    "line": 111,
    "file_path": "mempalace/mempalace/sources/context.py"
  },
  {
    "name": "emit",
    "kind": "Method",
    "line": 117,
    "file_path": "mempalace/mempalace/sources/context.py"
  },
  {
    "name": "SourceAdapterError",
    "kind": "Class",
    "line": 33,
    "file_path": "mempalace/mempalace/sources/base.py"
  },
  {
    "name": "SourceNotFoundError",
    "kind": "Class",
    "line": 37,
    "file_path": "mempalace/mempalace/sources/base.py"
  },
  {
    "name": "AuthRequiredError",
    "kind": "Class",
    "line": 41,
    "file_path": "mempalace/mempalace/sources/base.py"
  },
  {
    "name": "AdapterClosedError",
    "kind": "Class",
    "line": 49,
    "file_path": "mempalace/mempalace/sources/base.py"
  },
  {
    "name": "TransformationViolationError",
    "kind": "Class",
    "line": 53,
    "file_path": "mempalace/mempalace/sources/base.py"
  },
  {
    "name": "SchemaConformanceError",
    "kind": "Class",
    "line": 58,
    "file_path": "mempalace/mempalace/sources/base.py"
  },
  {
    "name": "SourceRef",
    "kind": "Class",
    "line": 69,
    "file_path": "mempalace/mempalace/sources/base.py"
  },
  {
    "name": "RouteHint",
    "kind": "Class",
    "line": 85,
    "file_path": "mempalace/mempalace/sources/base.py"
  },
  {
    "name": "SourceItemMetadata",
    "kind": "Class",
    "line": 94,
    "file_path": "mempalace/mempalace/sources/base.py"
  },
  {
    "name": "DrawerRecord",
    "kind": "Class",
    "line": 109,
    "file_path": "mempalace/mempalace/sources/base.py"
  },
  {
    "name": "SourceSummary",
    "kind": "Class",
    "line": 125,
    "file_path": "mempalace/mempalace/sources/base.py"
  },
  {
    "name": "FieldSpec",
    "kind": "Class",
    "line": 136,
    "file_path": "mempalace/mempalace/sources/base.py"
  },
  {
    "name": "AdapterSchema",
    "kind": "Class",
    "line": 148,
    "file_path": "mempalace/mempalace/sources/base.py"
  },
  {
    "name": "BaseSourceAdapter",
    "kind": "Class",
    "line": 164,
    "file_path": "mempalace/mempalace/sources/base.py"
  },
  {
    "name": "ingest",
    "kind": "Method",
    "line": 200,
    "file_path": "mempalace/mempalace/sources/base.py"
  },
  {
    "name": "describe_schema",
    "kind": "Method",
    "line": 215,
    "file_path": "mempalace/mempalace/sources/base.py"
  },
  {
    "name": "is_current",
    "kind": "Method",
    "line": 226,
    "file_path": "mempalace/mempalace/sources/base.py"
  },
  {
    "name": "source_summary",
    "kind": "Method",
    "line": 239,
    "file_path": "mempalace/mempalace/sources/base.py"
  },
  {
    "name": "close",
    "kind": "Method",
    "line": 243,
    "file_path": "mempalace/mempalace/sources/base.py"
  },
  {
    "name": "available_languages",
    "kind": "Function",
    "line": 45,
    "file_path": "mempalace/mempalace/i18n/__init__.py"
  },
  {
    "name": "load_lang",
    "kind": "Function",
    "line": 50,
    "file_path": "mempalace/mempalace/i18n/__init__.py"
  },
  {
    "name": "current_lang",
    "kind": "Function",
    "line": 84,
    "file_path": "mempalace/mempalace/i18n/__init__.py"
  },
  {
    "name": "get_regex",
    "kind": "Function",
    "line": 89,
    "file_path": "mempalace/mempalace/i18n/__init__.py"
  },
  {
    "name": "get_entity_patterns",
    "kind": "Function",
    "line": 197,
    "file_path": "mempalace/mempalace/i18n/__init__.py"
  },
  {
    "name": "download_evidence_file",
    "kind": "Function",
    "line": 66,
    "file_path": "mempalace/benchmarks/convomem_bench.py"
  },
  {
    "name": "discover_files",
    "kind": "Function",
    "line": 86,
    "file_path": "mempalace/benchmarks/convomem_bench.py"
  },
  {
    "name": "load_evidence_items",
    "kind": "Function",
    "line": 111,
    "file_path": "mempalace/benchmarks/convomem_bench.py"
  },
  {
    "name": "retrieve_for_item",
    "kind": "Function",
    "line": 149,
    "file_path": "mempalace/benchmarks/convomem_bench.py"
  },
  {
    "name": "run_benchmark",
    "kind": "Function",
    "line": 229,
    "file_path": "mempalace/benchmarks/convomem_bench.py"
  },
  {
    "name": "load_membench",
    "kind": "Function",
    "line": 188,
    "file_path": "mempalace/benchmarks/membench_bench.py"
  },
  {
    "name": "index_turns",
    "kind": "Function",
    "line": 255,
    "file_path": "mempalace/benchmarks/membench_bench.py"
  },
  {
    "name": "run_membench",
    "kind": "Function",
    "line": 305,
    "file_path": "mempalace/benchmarks/membench_bench.py"
  },
  {
    "name": "normalize_answer",
    "kind": "Function",
    "line": 97,
    "file_path": "mempalace/benchmarks/locomo_bench.py"
  },
  {
    "name": "f1_score",
    "kind": "Function",
    "line": 106,
    "file_path": "mempalace/benchmarks/locomo_bench.py"
  },
  {
    "name": "load_conversation_sessions",
    "kind": "Function",
    "line": 126,
    "file_path": "mempalace/benchmarks/locomo_bench.py"
  },
  {
    "name": "build_corpus_from_sessions",
    "kind": "Function",
    "line": 152,
    "file_path": "mempalace/benchmarks/locomo_bench.py"
  },
  {
    "name": "palace_assign_rooms",
    "kind": "Function",
    "line": 474,
    "file_path": "mempalace/benchmarks/locomo_bench.py"
  },
  {
    "name": "llm_rerank_locomo",
    "kind": "Function",
    "line": 512,
    "file_path": "mempalace/benchmarks/locomo_bench.py"
  },
  {
    "name": "run_benchmark",
    "kind": "Function",
    "line": 621,
    "file_path": "mempalace/benchmarks/locomo_bench.py"
  },
  {
    "name": "compute_retrieval_recall",
    "kind": "Function",
    "line": 990,
    "file_path": "mempalace/benchmarks/locomo_bench.py"
  },
  {
    "name": "evidence_to_dialog_ids",
    "kind": "Function",
    "line": 998,
    "file_path": "mempalace/benchmarks/locomo_bench.py"
  },
  {
    "name": "evidence_to_session_ids",
    "kind": "Function",
    "line": 1002,
    "file_path": "mempalace/benchmarks/locomo_bench.py"
  },
  {
    "name": "ndcg",
    "kind": "Function",
    "line": 61,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "evaluate_retrieval",
    "kind": "Function",
    "line": 71,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "session_id_from_corpus_id",
    "kind": "Function",
    "line": 83,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "build_palace_and_retrieve",
    "kind": "Function",
    "line": 163,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "build_palace_and_retrieve_aaak",
    "kind": "Function",
    "line": 244,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "detect_room_for_text",
    "kind": "Function",
    "line": 386,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "build_palace_and_retrieve_rooms",
    "kind": "Function",
    "line": 399,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "build_palace_and_retrieve_hybrid",
    "kind": "Function",
    "line": 485,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "build_palace_and_retrieve_full",
    "kind": "Function",
    "line": 638,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "build_palace_and_retrieve_hybrid_v2",
    "kind": "Function",
    "line": 709,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "build_palace_and_retrieve_hybrid_v3",
    "kind": "Function",
    "line": 994,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "build_palace_and_retrieve_hybrid_v4",
    "kind": "Function",
    "line": 1339,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "classify_session_hall",
    "kind": "Function",
    "line": 1819,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "classify_question_hall",
    "kind": "Function",
    "line": 1918,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "build_palace_and_retrieve_palace",
    "kind": "Function",
    "line": 2000,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "diary_ingest_session",
    "kind": "Function",
    "line": 2370,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "build_palace_and_retrieve_diary",
    "kind": "Function",
    "line": 2445,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "llm_rerank",
    "kind": "Function",
    "line": 2765,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "run_benchmark",
    "kind": "Function",
    "line": 2936,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "extract_keywords",
    "kind": "Function",
    "line": 553,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "keyword_overlap",
    "kind": "Function",
    "line": 557,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "extract_keywords",
    "kind": "Function",
    "line": 787,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "keyword_overlap",
    "kind": "Function",
    "line": 791,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "parse_question_date",
    "kind": "Function",
    "line": 798,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "parse_time_offset_days",
    "kind": "Function",
    "line": 805,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "is_assistant_reference",
    "kind": "Function",
    "line": 831,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "extract_keywords",
    "kind": "Function",
    "line": 1074,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "keyword_overlap",
    "kind": "Function",
    "line": 1078,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "parse_question_date",
    "kind": "Function",
    "line": 1085,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "parse_time_offset_days",
    "kind": "Function",
    "line": 1091,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "is_assistant_reference",
    "kind": "Function",
    "line": 1113,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "extract_preferences",
    "kind": "Function",
    "line": 1157,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "extract_keywords",
    "kind": "Function",
    "line": 1422,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "keyword_overlap",
    "kind": "Function",
    "line": 1426,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "extract_quoted_phrases",
    "kind": "Function",
    "line": 1434,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "quoted_phrase_boost",
    "kind": "Function",
    "line": 1440,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "extract_person_names",
    "kind": "Function",
    "line": 1521,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "person_name_boost",
    "kind": "Function",
    "line": 1526,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "parse_question_date",
    "kind": "Function",
    "line": 1534,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "parse_time_offset_days",
    "kind": "Function",
    "line": 1540,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "is_assistant_reference",
    "kind": "Function",
    "line": 1562,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "extract_preferences",
    "kind": "Function",
    "line": 1612,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "extract_keywords",
    "kind": "Function",
    "line": 2079,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "keyword_overlap",
    "kind": "Function",
    "line": 2083,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "parse_question_date",
    "kind": "Function",
    "line": 2090,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "parse_time_offset_days",
    "kind": "Function",
    "line": 2096,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "extract_preferences",
    "kind": "Function",
    "line": 2138,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "hybrid_score",
    "kind": "Function",
    "line": 2226,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "apply_temporal",
    "kind": "Function",
    "line": 2230,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "extract_keywords",
    "kind": "Function",
    "line": 2528,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "keyword_overlap",
    "kind": "Function",
    "line": 2532,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "parse_question_date",
    "kind": "Function",
    "line": 2539,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "parse_time_offset_days",
    "kind": "Function",
    "line": 2545,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "extract_preferences",
    "kind": "Function",
    "line": 2587,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "hybrid_score",
    "kind": "Function",
    "line": 2672,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  },
  {
    "name": "apply_temporal",
    "kind": "Function",
    "line": 2681,
    "file_path": "mempalace/benchmarks/longmemeval_bench.py"
  }
]