The best-benchmarked open-source AI memory system. And it's free.
3259 matches across 16 categories. Click a row to expand file-level details.
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | tools/find_orphan_claude_jsonls.sh | 3 | # ----------------------------------------------------------------------------- |
| MEDIUM | tools/find_orphan_claude_jsonls.sh | 14 | # ----------------------------------------------------------------------------- |
| MEDIUM | tests/test_closets.py | 222 | # ── Tier 6a — date + line-range pointer segment ──────────────────────── |
| MEDIUM | tests/test_closets.py | 506 | # ── _extract_drawer_ids_from_closet ─────────────────────────────────── |
| MEDIUM | tests/test_closets.py | 526 | # ── search_memories closet-first path ──────────────────────────────── |
| MEDIUM | tests/test_closets.py | 579 | # ── entity metadata ────────────────────────────────────────────────── |
| MEDIUM | tests/test_closets.py | 692 | # ── BM25 hybrid search (real IDF over candidate corpus) ────────────── |
| MEDIUM | tests/test_closets.py | 66 | # ── mine_lock ──────────────────────────────────────────────────────────── |
| MEDIUM | tests/test_closets.py | 149 | # ── build_closet_lines ───────────────────────────────────────────────── |
| MEDIUM | tests/test_closets.py | 350 | # ── upsert_closet_lines ─────────────────────────────────────────────── |
| MEDIUM | tests/test_closets.py | 389 | # ── purge_file_closets ──────────────────────────────────────────────── |
| MEDIUM | tests/test_closets.py | 409 | # ── project miner: closet rebuild end-to-end ────────────────────────── |
| MEDIUM | tests/test_closets.py | 754 | # ── diary ingest ───────────────────────────────────────────────────── |
| MEDIUM | tests/test_closets.py | 932 | # ── #1539: per-entry drawers, oversized-entry chunking ───────── |
| MEDIUM | tests/test_closets.py | 1211 | # ── cross-wing tunnels ─────────────────────────────────────────────── |
| MEDIUM | tests/test_closets.py | 1285 | # ── regression: symmetry, durability, validation, concurrency ───── |
| MEDIUM | tests/test_closets.py | 1385 | # ── drawer-grep neighbor expansion ──────────────────────────────────── |
| MEDIUM | tests/test_searcher.py | 15 | # ── search_memories (API) ────────────────────────────────────────────── |
| MEDIUM | tests/test_searcher.py | 200 | # ── BM25 internals: None / empty document safety ───────────────────── |
| MEDIUM | tests/test_searcher.py | 238 | # ── search() (CLI print function) ───────────────────────────────────── |
| MEDIUM | tests/test_miner_fts5_validation.py | 116 | # ── 1. Helper returns silently on a clean palace ──────────────────── |
| MEDIUM | tests/test_miner_fts5_validation.py | 127 | # ── 2. Helper raises MineValidationError on corrupt sqlite ────────── |
| MEDIUM | tests/test_miner_fts5_validation.py | 206 | # ── 4. Dry-run skips validation ───────────────────────────────────── |
| MEDIUM | tests/test_miner_fts5_validation.py | 24 | # ── Helpers ───────────────────────────────────────────────────────── |
| MEDIUM | tests/test_miner_fts5_validation.py | 158 | # ── 3. cmd_mine surfaces MineValidationError as exit-1 + banner ───── |
| MEDIUM | tests/test_split_mega_files.py | 6 | # ── Config loading ───────────────────────────────────────────────────── |
| MEDIUM | tests/test_split_mega_files.py | 54 | # ── Config: force_reload and invalid JSON ────────────────────────────── |
| MEDIUM | tests/test_split_mega_files.py | 94 | # ── is_true_session_start ────────────────────────────────────────────── |
| MEDIUM | tests/test_split_mega_files.py | 175 | # ── extract_timestamp ────────────────────────────────────────────────── |
| MEDIUM | tests/test_split_mega_files.py | 198 | # ── extract_subject ──────────────────────────────────────────────────── |
| MEDIUM | tests/test_split_mega_files.py | 231 | # ── split_file ───────────────────────────────────────────────────────── |
| MEDIUM | tests/test_split_mega_files.py | 126 | # ── find_session_boundaries ──────────────────────────────────────────── |
| MEDIUM | tests/test_palace_graph_tunnels.py | 502 | # ============================================================================= |
| MEDIUM | tests/test_palace_graph_tunnels.py | 504 | # ============================================================================= |
| MEDIUM | tests/test_palace_graph_tunnels.py | 575 | # ============================================================================= |
| MEDIUM | tests/test_palace_graph_tunnels.py | 577 | # ============================================================================= |
| MEDIUM | tests/test_corpus_origin_integration.py | 1049 | # ───────────────────────────────────────────────────────────────────────── |
| MEDIUM | tests/test_corpus_origin_integration.py | 1056 | # ───────────────────────────────────────────────────────────────────────── |
| MEDIUM | tests/test_corpus_origin_integration.py | 1721 | # ───────────────────────────────────────────────────────────────────────── |
| MEDIUM | tests/test_corpus_origin_integration.py | 1730 | # ───────────────────────────────────────────────────────────────────────── |
| MEDIUM | tests/test_corpus_origin_integration.py | 114 | # ── Baseline test: pin v3.3.3 behavior ──────────────────────────────────── |
| MEDIUM | tests/test_corpus_origin_integration.py | 152 | # ── corpus-origin test: with corpus_origin, personas reclassify ─────────── |
| MEDIUM | tests/test_corpus_origin_integration.py | 192 | # ── discover_entities (project_scanner) threads corpus_origin ───────────── |
| MEDIUM | tests/test_corpus_origin_integration.py | 243 | # ── Pass 0 — cmd_init runs corpus_origin and writes origin.json ────────── |
| MEDIUM | tests/test_corpus_origin_integration.py | 416 | # ── llm_refine consumer wiring ──────────────────────────────────────────── |
| MEDIUM | tests/test_corpus_origin_integration.py | 508 | # ── mempalace mine --redetect-origin flag ─────────────────────────────── |
| MEDIUM | tests/test_corpus_origin_integration.py | 645 | # ── --llm default flip + graceful fallback ─────────────────────────────── |
| MEDIUM | tests/test_corpus_origin_integration.py | 803 | # ── End-to-end pipeline + edge cases ────────────────────────────────────── |
| MEDIUM | tests/test_corpus_origin_integration.py | 1315 | # ───────────────────────────────────────────────────────────────────────── |
| MEDIUM | tests/test_corpus_origin_integration.py | 1331 | # ───────────────────────────────────────────────────────────────────────── |
| MEDIUM | tests/test_corpus_origin_integration.py | 1392 | # ───────────────────────────────────────────────────────────────────────── |
| MEDIUM | tests/test_corpus_origin_integration.py | 1410 | # ───────────────────────────────────────────────────────────────────────── |
| MEDIUM | tests/test_corpus_origin_integration.py | 1833 | # ───────────────────────────────────────────────────────────────────────── |
| MEDIUM | tests/test_corpus_origin_integration.py | 1842 | # ───────────────────────────────────────────────────────────────────────── |
| MEDIUM | tests/test_dedup.py | 9 | # ── get_source_groups ───────────────────────────────────────────────── |
| MEDIUM | tests/test_dedup.py | 108 | # ── dedup_source_group ──────────────────────────────────────────────── |
| MEDIUM | tests/test_dedup.py | 198 | # ── show_stats ──────────────────────────────────────────────────────── |
| MEDIUM | tests/test_dedup.py | 230 | # ── dedup_palace ────────────────────────────────────────────────────── |
| MEDIUM | tests/test_closet_llm.py | 22 | # ── LLMConfig ───────────────────────────────────────────────────────────── |
| MEDIUM | tests/test_closet_llm.py | 63 | # ── _parsed_to_closet_lines ────────────────────────────────────────────── |
| 658 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | CONTRIBUTING.md | 46 | def test_function_never_fabricates_output_on_random_input(s): |
| LOW | tests/test_closets.py | 210 | def test_emits_fallback_line_when_nothing_extractable(self): |
| LOW | tests/test_closets.py | 217 | def test_pointer_references_first_three_drawers(self): |
| LOW | tests/test_closets.py | 224 | def test_includes_date_line_segment_when_metas_provided(self): |
| LOW | tests/test_closets.py | 510 | def test_parses_single_pointer(self): |
| LOW | tests/test_closets.py | 513 | def test_parses_multiple_pointers_per_line(self): |
| LOW | tests/test_closets.py | 517 | def test_dedupes_across_lines(self): |
| LOW | tests/test_closets.py | 521 | def test_empty_doc_returns_empty(self): |
| LOW | tests/test_closets.py | 530 | def test_pure_drawer_when_no_closets(self, palace_path, seeded_collection): |
| LOW | tests/test_closets.py | 540 | def test_closet_boost_marks_hit_as_drawer_plus_closet(self, palace_path, seeded_collection): |
| LOW | tests/test_closets.py | 583 | def test_extracts_capitalized_names(self): |
| LOW | tests/test_closets.py | 589 | def test_empty_for_no_entities(self): |
| LOW | tests/test_closets.py | 598 | def test_stoplist_filters_sentence_starters(self): |
| LOW | tests/test_closets.py | 696 | def test_scores_positive_for_matching_doc(self): |
| LOW | tests/test_closets.py | 704 | def test_scores_zero_when_no_overlap(self): |
| LOW | tests/test_closets.py | 708 | def test_idf_downweights_terms_present_in_every_doc(self): |
| LOW | tests/test_closets.py | 88 | def test_lock_acquires_and_releases(self, tmp_path): |
| LOW | tests/test_closets.py | 99 | def test_lock_blocks_concurrent_access(self, tmp_path): |
| LOW | tests/test_closets.py | 153 | def test_emits_pointer_line_shape(self): |
| LOW | tests/test_closets.py | 174 | def test_extracts_section_headers_as_topics(self): |
| LOW | tests/test_closets.py | 181 | def test_entity_stoplist_filters_sentence_starters(self): |
| LOW | tests/test_closets.py | 199 | def test_real_proper_nouns_survive_stoplist(self): |
| LOW | tests/test_closets.py | 299 | def test_date_segment_uses_filed_at_date_portion_only(self): |
| LOW | tests/test_closets.py | 320 | def test_content_date_preferred_over_filed_at(self): |
| LOW | tests/test_closets.py | 354 | def test_overwrites_existing_closet_does_not_append(self, palace_path): |
| LOW | tests/test_closets.py | 372 | def test_packs_into_multiple_closets_without_splitting_lines(self, palace_path): |
| LOW | tests/test_closets.py | 393 | def test_deletes_only_the_targeted_source(self, palace_path): |
| LOW | tests/test_closets.py | 413 | def test_remine_replaces_closets_completely(self, tmp_path): |
| LOW | tests/test_closets.py | 563 | def test_max_distance_filters_hybrid_hits(self, palace_path, seeded_collection): |
| LOW | tests/test_closets.py | 613 | def test_capped_list_never_truncates_a_name(self): |
| LOW | tests/test_closets.py | 657 | def test_known_registry_is_cached_by_mtime(self, monkeypatch, tmp_path): |
| LOW | tests/test_closets.py | 721 | def test_empty_inputs_return_zeros(self): |
| LOW | tests/test_closets.py | 726 | def test_hybrid_rank_promotes_keyword_match(self): |
| LOW | tests/test_closets.py | 739 | def test_hybrid_rank_absolute_normalization(self): |
| LOW | tests/test_closets.py | 758 | def test_ingest_creates_drawers_and_closets(self, tmp_path): |
| LOW | tests/test_closets.py | 772 | def test_ingest_skips_unchanged_on_second_run(self, tmp_path): |
| LOW | tests/test_closets.py | 786 | def test_ingest_detects_same_size_content_edit(self, tmp_path): |
| LOW | tests/test_closets.py | 823 | def test_legacy_state_backfills_content_hash(self, tmp_path): |
| LOW | tests/test_closets.py | 864 | def test_state_file_lives_outside_diary_dir(self, tmp_path): |
| LOW | tests/test_closets.py | 894 | def test_wing_prefixed_drawer_id_prevents_cross_diary_collision(self, tmp_path): |
| LOW | tests/test_closets.py | 934 | def test_diary_multiple_entries_one_drawer_each(self, tmp_path): |
| LOW | tests/test_closets.py | 955 | def test_large_diary_with_oversized_entry_chunks_within_entry(self, tmp_path): |
| LOW | tests/test_closets.py | 990 | def test_incremental_appends_new_entry_only(self, tmp_path): |
| LOW | tests/test_closets.py | 1017 | def test_entry_count_watermark_matches_drawer_count(self, tmp_path): |
| LOW | tests/test_closets.py | 1044 | def test_diary_chunk_index_is_global_across_entries(self, tmp_path): |
| LOW | tests/test_closets.py | 1081 | def test_diary_entry_deletion_purges_orphan_drawers(self, tmp_path): |
| LOW | tests/test_closets.py | 1116 | def test_diary_header_only_entry_produces_drawer(self, tmp_path): |
| LOW | tests/test_closets.py | 1142 | def test_diary_atomic_batched_upsert_on_failure(self, tmp_path, monkeypatch): |
| LOW | tests/test_closets.py | 1253 | def test_list_tunnels_with_and_without_filter(self): |
| LOW | tests/test_closets.py | 1267 | def test_dedup_same_endpoints_updates_label(self): |
| LOW | tests/test_closets.py | 1274 | def test_follow_tunnels_returns_connected_endpoints(self): |
| LOW | tests/test_closets.py | 1297 | def test_follow_tunnels_works_from_either_endpoint(self): |
| LOW | tests/test_closets.py | 1310 | def test_empty_endpoint_fields_rejected(self): |
| LOW | tests/test_closets.py | 1325 | def test_corrupt_tunnel_file_does_not_lose_new_writes(self): |
| LOW | tests/test_closets.py | 1343 | def test_atomic_write_leaves_no_stray_tmp_file(self): |
| LOW | tests/test_closets.py | 1352 | def test_concurrent_creates_preserve_all_tunnels(self): |
| LOW | tests/test_closets.py | 1378 | def test_created_at_is_timezone_aware(self): |
| LOW | tests/test_closets.py | 1414 | def test_expand_returns_matched_plus_neighbors(self, palace_path): |
| LOW | tests/test_closets.py | 1433 | def test_expand_at_start_of_file_only_has_next_neighbor(self, palace_path): |
| LOW | tests/test_closets.py | 1447 | def test_expand_at_end_of_file_only_has_prev_neighbor(self, palace_path): |
| 1941 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tools/find_orphan_claude_jsonls.sh | 55 | except Exception: |
| LOW | tools/find_orphan_claude_jsonls.sh | 89 | except Exception: |
| MEDIUM | tests/test_closets.py | 1359 | def worker(i): |
| LOW | tests/test_closets.py | 1363 | except Exception as e: |
| LOW | tests/conftest.py | 74 | except Exception: |
| LOW | tests/test_hooks_cli.py | 649 | except Exception: |
| LOW | tests/test_repair.py | 1856 | except Exception: |
| LOW | tests/test_migrate.py | 283 | except Exception: |
| LOW | tests/benchmarks/conftest.py | 107 | except Exception: |
| LOW | tests/benchmarks/conftest.py | 114 | except Exception: |
| LOW | tests/benchmarks/conftest.py | 138 | except Exception: |
| LOW | tests/benchmarks/test_knowledge_graph_bench.py | 191 | except Exception: |
| LOW | tests/benchmarks/test_knowledge_graph_bench.py | 233 | except Exception: |
| LOW | tests/benchmarks/test_knowledge_graph_bench.py | 244 | except Exception: |
| LOW | mempalace/repair.py | 236 | except Exception: |
| LOW | mempalace/repair.py | 239 | except Exception as exc: |
| LOW | mempalace/repair.py | 242 | except Exception: |
| LOW | mempalace/repair.py | 72 | except Exception: |
| LOW | mempalace/repair.py | 99 | except Exception: |
| LOW | mempalace/repair.py | 112 | except Exception: |
| LOW | mempalace/repair.py | 121 | except Exception: |
| LOW | mempalace/repair.py | 292 | except Exception: |
| LOW | mempalace/repair.py | 300 | except Exception: |
| LOW | mempalace/repair.py | 356 | except Exception: |
| LOW | mempalace/repair.py | 361 | except Exception: |
| LOW | mempalace/repair.py | 494 | except Exception: |
| LOW | mempalace/repair.py | 591 | except Exception: |
| LOW | mempalace/repair.py | 714 | except Exception as exc: |
| LOW | mempalace/repair.py | 779 | except Exception as e: |
| LOW | mempalace/repair.py | 842 | except Exception as restore_error: |
| LOW | mempalace/repair.py | 944 | except Exception as exc: # noqa: BLE001 — chromadb raises many shapes |
| LOW | mempalace/repair.py | 1189 | except Exception as exc: # noqa: BLE001 |
| LOW | mempalace/repair.py | 1321 | except Exception: |
| LOW | mempalace/repair.py | 1327 | except Exception: |
| LOW | mempalace/repair.py | 1548 | except Exception: |
| LOW | mempalace/sync.py | 298 | except Exception as exc: |
| LOW | mempalace/hallways.py | 110 | except Exception: |
| LOW | mempalace/hallways.py | 204 | except Exception: |
| LOW | mempalace/miner.py | 181 | except Exception: |
| LOW | mempalace/miner.py | 622 | except Exception: |
| LOW | mempalace/miner.py | 1019 | except Exception: |
| LOW | mempalace/miner.py | 1051 | except Exception: |
| LOW | mempalace/miner.py | 1072 | except Exception: |
| LOW | mempalace/miner.py | 1147 | except Exception: |
| LOW | mempalace/miner.py | 1356 | except Exception: |
| LOW | mempalace/miner.py | 1711 | except Exception as e: |
| LOW | mempalace/miner.py | 1727 | except Exception as e: |
| LOW | mempalace/miner.py | 1743 | except Exception as e: |
| LOW | mempalace/miner.py | 1802 | except Exception as exc: |
| LOW | mempalace/palace_graph.py | 86 | except Exception: |
| LOW | mempalace/palace_graph.py | 378 | except Exception: |
| LOW | mempalace/palace_graph.py | 477 | except Exception: |
| LOW | mempalace/palace_graph.py | 699 | except Exception: |
| LOW | mempalace/onboarding.py | 263 | except Exception: |
| LOW | mempalace/searcher.py | 228 | except Exception: |
| LOW | mempalace/searcher.py | 248 | except Exception: |
| LOW | mempalace/searcher.py | 275 | except Exception: |
| LOW | mempalace/searcher.py | 343 | except Exception as e: |
| LOW | mempalace/searcher.py | 680 | except Exception: |
| LOW | mempalace/searcher.py | 813 | except Exception as e: |
| 139 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/test_miner_fts5_validation.py | 10 | |
| LOW | tests/test_corpus_origin_integration.py | 25 | |
| LOW | tests/test_hooks_shell.py | 20 | |
| LOW | tests/test_format_miner.py | 12 | |
| LOW | tests/test_format_miner.py | 610 | |
| LOW | tests/test_hnsw_capacity.py | 9 | |
| LOW | tests/test_chroma_collection_lock.py | 26 | |
| LOW | tests/test_hooks_bash_compat.py | 17 | |
| LOW | tests/test_dynamics.py | 10 | |
| LOW | tests/test_fact_checker.py | 19 | |
| LOW | tests/test_palace_locks.py | 10 | |
| LOW | tests/benchmarks/benchmark_dialect.py | 1 | |
| LOW | tests/benchmarks/benchmark_dialect.py | 3 | |
| LOW | mempalace/sync.py | 20 | |
| LOW | mempalace/convo_scanner.py | 22 | |
| LOW | mempalace/project_scanner.py | 18 | |
| LOW | mempalace/hallways.py | 33 | |
| LOW | mempalace/palace_graph.py | 21 | |
| LOW | mempalace/embedding.py | 32 | |
| LOW | mempalace/__init__.py | 38 | |
| LOW | mempalace/fact_checker.py | 28 | |
| LOW | mempalace/llm_refine.py | 21 | |
| LOW | mempalace/llm_client.py | 24 | |
| LOW | mempalace/corpus_origin.py | 35 | |
| LOW | mempalace/_stdio.py | 25 | |
| LOW | mempalace/format_miner.py | 59 | |
| LOW | mempalace/sweeper.py | 39 | |
| LOW | mempalace/entity_detector.py | 33 | |
| LOW | mempalace/dynamics.py | 29 | |
| LOW | mempalace/backends/registry.py | 15 | |
| LOW | mempalace/backends/__init__.py | 17 | |
| LOW | mempalace/backends/__init__.py | 17 | |
| LOW | mempalace/backends/__init__.py | 17 | |
| LOW | mempalace/backends/__init__.py | 17 | |
| LOW | mempalace/backends/__init__.py | 17 | |
| LOW | mempalace/backends/__init__.py | 17 | |
| LOW | mempalace/backends/__init__.py | 17 | |
| LOW | mempalace/backends/__init__.py | 17 | |
| LOW | mempalace/backends/__init__.py | 17 | |
| LOW | mempalace/backends/__init__.py | 17 | |
| LOW | mempalace/backends/__init__.py | 17 | |
| LOW | mempalace/backends/__init__.py | 17 | |
| LOW | mempalace/backends/__init__.py | 17 | |
| LOW | mempalace/backends/__init__.py | 32 | |
| LOW | mempalace/backends/__init__.py | 32 | |
| LOW | mempalace/backends/__init__.py | 33 | |
| LOW | mempalace/backends/__init__.py | 33 | |
| LOW | mempalace/backends/__init__.py | 33 | |
| LOW | mempalace/backends/__init__.py | 33 | |
| LOW | mempalace/backends/__init__.py | 33 | |
| LOW | mempalace/backends/__init__.py | 33 | |
| LOW | mempalace/backends/__init__.py | 33 | |
| LOW | mempalace/sources/transforms.py | 24 | |
| LOW | mempalace/sources/registry.py | 20 | |
| LOW | mempalace/sources/__init__.py | 19 | |
| LOW | mempalace/sources/__init__.py | 19 | |
| LOW | mempalace/sources/__init__.py | 19 | |
| LOW | mempalace/sources/__init__.py | 19 | |
| LOW | mempalace/sources/__init__.py | 19 | |
| LOW | mempalace/sources/__init__.py | 19 | |
| 48 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tools/render_jsonl.py | 20 | |
| LOW | tests/test_corpus_origin_integration.py | 1334 | |
| LOW | tests/conftest.py | 55 | |
| LOW | tests/conftest.py | 63 | |
| LOW | tests/test_hooks_cli.py | 691 | |
| LOW | tests/test_hooks_cli.py | 707 | |
| LOW | tests/test_hooks_cli.py | 742 | |
| LOW | tests/test_hooks_cli.py | 791 | |
| LOW | tests/test_hooks_cli.py | 829 | |
| LOW | tests/test_hooks_cli.py | 840 | |
| LOW | tests/test_hooks_cli.py | 983 | |
| LOW | tests/test_hooks_cli.py | 1033 | |
| LOW | tests/test_hnsw_capacity.py | 358 | |
| LOW | tests/test_chroma_collection_lock.py | 80 | |
| LOW | tests/test_palace_locks.py | 46 | |
| LOW | tests/test_palace_locks.py | 222 | |
| LOW | tests/benchmarks/report.py | 34 | |
| LOW | mempalace/repair.py | 104 | |
| LOW | mempalace/repair.py | 247 | |
| LOW | mempalace/repair.py | 325 | |
| LOW | mempalace/repair.py | 972 | |
| LOW | mempalace/repair.py | 1427 | |
| LOW | mempalace/sync.py | 203 | |
| LOW | mempalace/convo_scanner.py | 57 | |
| LOW | mempalace/project_scanner.py | 444 | |
| LOW | mempalace/miner.py | 472 | |
| LOW | mempalace/miner.py | 580 | |
| LOW | mempalace/miner.py | 684 | |
| LOW | mempalace/miner.py | 1456 | |
| LOW | mempalace/miner.py | 1592 | |
| LOW | mempalace/palace_graph.py | 90 | |
| LOW | mempalace/palace_graph.py | 189 | |
| LOW | mempalace/palace_graph.py | 640 | |
| LOW | mempalace/room_detector_local.py | 100 | |
| LOW | mempalace/room_detector_local.py | 195 | |
| LOW | mempalace/dialect.py | 806 | |
| LOW | mempalace/dialect.py | 928 | |
| LOW | mempalace/knowledge_graph.py | 328 | |
| LOW | mempalace/knowledge_graph.py | 529 | |
| LOW | mempalace/onboarding.py | 113 | |
| LOW | mempalace/onboarding.py | 145 | |
| LOW | mempalace/onboarding.py | 390 | |
| LOW | mempalace/searcher.py | 398 | |
| LOW | mempalace/exporter.py | 68 | |
| LOW | mempalace/normalize.py | 178 | |
| LOW | mempalace/normalize.py | 405 | |
| LOW | mempalace/normalize.py | 446 | |
| LOW | mempalace/normalize.py | 488 | |
| LOW | mempalace/normalize.py | 569 | |
| LOW | mempalace/llm_refine.py | 109 | |
| LOW | mempalace/cli.py | 230 | |
| LOW | mempalace/cli.py | 776 | |
| LOW | mempalace/dedup.py | 79 | |
| LOW | mempalace/llm_client.py | 44 | |
| LOW | mempalace/corpus_origin.py | 332 | |
| LOW | mempalace/entity_registry.py | 448 | |
| LOW | mempalace/entity_registry.py | 622 | |
| LOW | mempalace/entity_registry.py | 667 | |
| LOW | mempalace/format_miner.py | 583 | |
| LOW | mempalace/format_miner.py | 690 | |
| 53 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | pyproject.toml | 81 | # Pre-commit framework — gates every local ``git commit`` on the |
| LOW | pyproject.toml | 101 | dml = ["onnxruntime-directml>=1.16"] |
| LOW | tools/backup_claude_jsonls.sh | 1 | #!/usr/bin/env bash |
| LOW | tools/find_orphan_claude_jsonls.sh | 1 | #!/usr/bin/env bash |
| LOW | tests/test_corpus_origin_integration.py | 1321 | # must use feature names ("corpus_origin", "corpus-origin detection") |
| LOW | tests/test_format_miner.py | 561 | |
| LOW | tests/test_convo_miner.py | 301 | # ── _is_ai_tool_path / _resolve_wing — wing_api auto-routing ─────────── |
| LOW | mempalace/repair.py | 921 | try: |
| LOW | mempalace/miner.py | 101 | # magnitude of safety margin against the original lockfile case |
| LOW | mempalace/miner.py | 901 | |
| LOW | mempalace/miner.py | 921 | # anywhere and no filesystem mtime return None (caller uses filed_at). |
| LOW | mempalace/miner.py | 1341 | # Lock this file so concurrent agents don't interleave delete+insert. |
| LOW | mempalace/miner.py | 1361 | # request for pathological files. A bad chunk can fail its sub-batch; |
| LOW | mempalace/palace_graph.py | 581 | # Preserve original creation timestamp on label updates. |
| LOW | mempalace/palace_graph.py | 701 | |
| LOW | mempalace/__init__.py | 1 | """MemPalace — Give your AI a memory. No API key required.""" |
| LOW | mempalace/__init__.py | 41 | # warnings ("capture() takes 1 positional argument but 3 were given"). In 1.x the |
| LOW | mempalace/cli.py | 121 | |
| LOW | mempalace/corpus_origin.py | 41 | |
| LOW | mempalace/format_miner.py | 741 | # MempalaceConfig + chunk_text are imported at module level (above) so |
| LOW | mempalace/palace.py | 501 | |
| LOW | mempalace/palace.py | 741 | treated as exchange-mode drawers. |
| LOW | mempalace/diary_ingest.py | 221 | # Per-entry drawers, with character chunking inside any entry |
| LOW | mempalace/hooks_cli.py | 261 | resolved = Path(mempal_dir).expanduser().resolve() |
| LOW | mempalace/hooks_cli.py | 281 | # a directory of per-target slots, claimed via ``O_CREAT | O_EXCL`` so the |
| LOW | mempalace/mcp_server.py | 501 | ``quarantine_stale_hnsw`` per #1322), so the second attempt heals the |
| LOW | mempalace/mcp_server.py | 521 | # branches that actually open a collection so warm-cache reads stay |
| LOW | mempalace/mcp_server.py | 1681 | # embedding model never sees a document above ``chunk_size``. |
| LOW | mempalace/mcp_server.py | 2821 | # Drop leaked PYTHONPATH so any subprocess this server spawns starts |
| LOW | mempalace/entity_detector.py | 41 | |
| LOW | mempalace/entity_detector.py | 81 | # ==================== KNOWN-SYSTEMS COMPOUND LEXICON (Tier 3 linguistics cleanup) ==================== |
| LOW | mempalace/backends/chroma.py | 101 | if not _hnsw_link_lists_is_usable_for_payload(seg_dir): |
| LOW | mempalace/backends/chroma.py | 121 | # (palace 376 MB, link_lists.bin 0 bytes, no segfault) in 2026-04. |
| LOW | mempalace/backends/chroma.py | 461 | # synchronization windows worth (2 × sync_threshold) is a safe steady- |
| LOW | mempalace/backends/chroma.py | 1401 | |
| LOW | hooks/mempal_save_hook.sh | 1 | #!/bin/bash |
| LOW | hooks/mempal_save_hook.sh | 21 | # "type": "command", |
| LOW | hooks/mempal_save_hook.sh | 41 | # transcript_path — path to the JSONL transcript file |
| LOW | hooks/mempal_save_hook.sh | 61 | # is always mined regardless — this is purely additive. |
| LOW | hooks/mempal_save_hook.sh | 101 | if [ "$AUTO_SAVE" = "false" ]; then |
| LOW | hooks/mempal_save_hook.sh | 121 | # default, and the hook silently produced zero saves (#1440). |
| LOW | hooks/mempal_save_hook.sh | 141 | # where another local user on a shared box could read the traceback, |
| LOW | hooks/mempal_save_hook.sh | 181 | TRANSCRIPT_PATH=$(printf '%s\n' "$_mempal_parsed" | sed -n '4p') |
| LOW | hooks/mempal_save_hook.sh | 201 | # silently absorbed by bash (the canonical way to read N bytes from |
| LOW | hooks/mempal_precompact_hook.sh | 1 | #!/bin/bash |
| LOW | hooks/mempal_precompact_hook.sh | 21 | # "hooks": { |
| LOW | hooks/mempal_precompact_hook.sh | 41 | # Claude Code sends JSON on stdin with: |
| LOW | hooks/mempal_precompact_hook.sh | 101 | # read sanitized values from one-per-line stdout into shell variables |
| LOW | hooks/mempal_precompact_hook.sh | 141 | SESSION_ID=$(printf '%s\n' "$_mempal_parsed" | sed -n '2p') |
| LOW | benchmarks/model_eval/candidates.yaml | 1 | # Candidate models for evaluation. |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | tests/test_hall_detection.py | 109 | # Create a conversation file with technical content |
| MEDIUM | tests/test_mcp_server.py | 640 | # Create a collection so status works |
| MEDIUM | tests/test_mcp_server.py | 670 | # Create the DB file (init does this) but NOT the collection |
| MEDIUM | tests/test_mcp_server.py | 2187 | # Create a real collection so _get_collection succeeds |
| MEDIUM | tests/test_repair.py | 318 | # Create a valid sqlite file so the repair preflight can run quick_check. |
| MEDIUM | tests/test_miner.py | 2003 | # Create a real file with known mtime. |
| MEDIUM | tests/test_backends.py | 1557 | # Create the collection using the default (minilm-based) EF. |
| MEDIUM | tests/benchmarks/test_knowledge_graph_bench.py | 58 | # Create a hub entity connected to many others |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | tests/test_palace_graph_tunnels.py | 93 | # instead of raising — keeps read-path filters robust to bad records. |
| MEDIUM | tests/test_hooks_bash_compat.py | 144 | # leaks debug output here would silently break the harness contract. |
| LOW | mempalace/room_detector_local.py | 329 | # If still nothing, just use general |
| MEDIUM | mempalace/format_miner.py | 317 | """Convert ``path`` to plain text via MarkItDown, with comprehensive fringe-case handling. |
| MEDIUM | hooks/mempal_save_hook.sh | 67 | # Why this is nontrivial: GUI-launched Claude Code on macOS (or any harness |
| MEDIUM | hooks/mempal_save_hook.sh | 128 | # every Stop hook for users on i18n harnesses or unusual harness configs. |
| MEDIUM | benchmarks/model_eval/metrics.py | 25 | # the harness can land on develop independently of the model-router PR. |
| MEDIUM | .claude-plugin/hooks/mempal-stop-hook.sh | 3 | # All logic lives in mempalace.hooks_cli for cross-harness extensibility |
| MEDIUM | .claude-plugin/hooks/mempal-precompact-hook.sh | 3 | # All logic lives in mempalace.hooks_cli for cross-harness extensibility |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | tests/test_hooks_cli.py | 592 | '{"type":"x","cwd":null}\n' |
| HIGH | tests/test_hooks_cli.py | 587 | """A cwd field that isn't a string (e.g. null, number) must be skipped.""" |
| HIGH | tests/test_save_hook_mines.py | 115 | script.write_text(f'{func_src}\nis_valid_transcript_path "$1" && echo OK || echo NO\n') |
| HIGH | tests/test_corpus_origin.py | 283 | "primary_platform": null, |
| HIGH | benchmarks/mine_bench.py | 17 | uv venv /tmp/gpu && source /tmp/gpu/bin/activate |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/test_closets.py | 211 | content = "lorem ipsum dolor sit amet consectetur adipiscing elit" |
| LOW | tests/test_closets.py | 211 | content = "lorem ipsum dolor sit amet consectetur adipiscing elit" |
| LOW | tests/test_miner_fts5_validation.py | 215 | big = "lorem ipsum " * 500 |
| LOW | tests/test_miner_fts5_validation.py | 253 | (src / "big.md").write_text("lorem ipsum " * 200) |
| LOW | tests/test_miner_fts5_validation.py | 303 | (src / "big.md").write_text("lorem ipsum " * 200) |
| LOW | tests/conftest.py | 232 | kg.add_triple("Alice", "works_at", "Acme Corp", valid_from="2020-01-01", valid_to="2024-12-31") |
| LOW | tests/test_project_scanner.py | 114 | assert _looks_like_real_name("Jane Doe") |
| LOW | tests/test_project_scanner.py | 155 | ("Jane Doe", "jane@work.com", "r"), |
| LOW | tests/test_project_scanner.py | 156 | ("Jane Doe", "jane@personal.com", "r"), |
| LOW | tests/test_project_scanner.py | 159 | assert people["Jane Doe"].total_commits == 2 |
| LOW | tests/test_project_scanner.py | 160 | assert len(people["Jane Doe"].emails) == 2 |
| LOW | tests/test_project_scanner.py | 263 | def _init_git_repo(path: Path, name: str = "Jane Doe", email: str = "jane@example.com"): |
| LOW | tests/test_project_scanner.py | 343 | assert [person.name for person in people] == ["Jane Doe"] |
| LOW | tests/test_project_scanner.py | 364 | people = [PersonInfo(name="Jane Doe", total_commits=5, repos={"r"})] |
| LOW | tests/test_project_scanner.py | 371 | assert d["people"][0]["name"] == "Jane Doe" |
| LOW | tests/test_project_scanner.py | 331 | _init_git_repo(tmp_path, name="Jane Doe", email="jane@example.com") |
| LOW | tests/test_knowledge_graph.py | 105 | assert "Acme Corp" in employers |
| LOW | tests/test_knowledge_graph.py | 112 | assert "Acme Corp" not in employers |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | mempalace/onboarding.py | 84 | # Step 1: Mode selection |
| LOW | mempalace/onboarding.py | 268 | # Step 6: Ambiguity warnings |
| LOW | mempalace/onboarding.py | 399 | # Step 1: Mode |
| LOW | mempalace/onboarding.py | 409 | # Step 2: People |
| LOW | mempalace/onboarding.py | 412 | # Step 3: Projects |
| LOW | mempalace/onboarding.py | 415 | # Step 4: Wings (stored in config, not registry — just show user) |
| LOW | mempalace/onboarding.py | 418 | # Step 5: Auto-detect additional people from files |
| LOW | mempalace/onboarding.py | 451 | # Step 6: Warn about ambiguous names |
| LOW | mempalace/onboarding.py | 141 | # Step 2: People |
| LOW | mempalace/onboarding.py | 196 | # Step 3: Projects |
| LOW | mempalace/onboarding.py | 222 | # Step 4: Wings |
| LOW | mempalace/onboarding.py | 244 | # Step 5: Auto-detect from files |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/test_readme_claims.py | 556 | # Check if either miner references 'hall' in the metadata it writes |
| LOW | tests/test_save_hook_mines.py | 53 | # Check if MEMPAL_DIR defaults to empty |
| LOW | tests/test_miner.py | 1846 | # Set mtime to a known value (2023-07-15 12:00 UTC) |
| LOW | tests/benchmarks/test_search_bench.py | 86 | # Check if needle content appears in top 5 |
| LOW | tests/benchmarks/data_generator.py | 365 | # Write files distributed across room directories |
| LOW | tests/benchmarks/test_palace_boost.py | 173 | # Check if boost increases with scale (the hypothesis) |
| LOW | mempalace/normalize.py | 206 | # Check if this message is tool_results only (no user text) |
| LOW | mempalace/entity_registry.py | 466 | # Check if this is an ambiguous word |
| LOW | benchmarks/convomem_bench.py | 201 | # Check if any retrieved message matches evidence |
| LOW | benchmarks/membench_bench.py | 376 | # Check if any target turn is retrieved. |
| LOW | benchmarks/longmemeval_bench.py | 3217 | # Print results |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | mempalace/repair.py | 0 | select count(*) from embeddings e join segments s on e.segment_id = s.id join collections c on s.collection = c.id where |
| HIGH | mempalace/mcp_server.py | 0 | select count(*) from embeddings e join segments s on e.segment_id = s.id join collections c on s.collection = c.id where |
| HIGH | mempalace/backends/chroma.py | 0 | select count(*) from embeddings e join segments s on e.segment_id = s.id join collections c on s.collection = c.id where |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | mempalace/palace_graph.py | 498 | Create an explicit (symmetric) tunnel between two locations in the palace. Tunnels are undirected: ``create_tunnel( |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/test_mcp_server.py | 3065 | def helper(req): |
| LOW | mempalace/mcp_server.py | 2447 | def handle_request(request): |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | …nchmarks/results_convomem_raw_top10_20260414_1649.json | 1873 | "question": "I just got a Slack message from a colleague that I need to handle later. What's a good way to keep trac |