The best-benchmarked open-source AI memory system. And it's free.
This report summarizes scanner evidence for MemPalace/mempalace, a Python project with 59,497 GitHub stars. SynthScan examined 348,645 lines of code across 671 source files, recording 8187 pattern matches distributed across 22 syntactic categories. The legacy adjusted pattern signal is 30.6 (High pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 5923 finding(s).
Are imports declared and package/API names verified? 377 finding(s).
Are wrappers, guards, and repeated structures necessary? 7276 finding(s).
Which changes need focused human review? 8187 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 8187 distinct pattern matches across 22 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | CONTRIBUTING.md | 46 | def test_function_never_fabricates_output_on_random_input(s): | CODE |
| LOW⚡ | tests/test_closets.py | 210 | def test_emits_fallback_line_when_nothing_extractable(self): | CODE |
| LOW⚡ | tests/test_closets.py | 217 | def test_pointer_references_first_three_drawers(self): | CODE |
| LOW⚡ | tests/test_closets.py | 224 | def test_includes_date_line_segment_when_metas_provided(self): | CODE |
| LOW⚡ | tests/test_closets.py | 510 | def test_parses_single_pointer(self): | CODE |
| LOW⚡ | tests/test_closets.py | 513 | def test_parses_multiple_pointers_per_line(self): | CODE |
| LOW⚡ | tests/test_closets.py | 517 | def test_dedupes_across_lines(self): | CODE |
| LOW⚡ | tests/test_closets.py | 521 | def test_empty_doc_returns_empty(self): | CODE |
| LOW⚡ | tests/test_closets.py | 530 | def test_pure_drawer_when_no_closets(self, palace_path, seeded_collection): | CODE |
| LOW⚡ | tests/test_closets.py | 540 | def test_closet_boost_marks_hit_as_drawer_plus_closet(self, palace_path, seeded_collection): | CODE |
| LOW⚡ | tests/test_closets.py | 590 | def test_extracts_capitalized_names(self): | CODE |
| LOW⚡ | tests/test_closets.py | 596 | def test_empty_for_no_entities(self): | CODE |
| LOW⚡ | tests/test_closets.py | 605 | def test_stoplist_filters_sentence_starters(self): | CODE |
| LOW⚡ | tests/test_closets.py | 703 | def test_scores_positive_for_matching_doc(self): | CODE |
| LOW⚡ | tests/test_closets.py | 711 | def test_scores_zero_when_no_overlap(self): | CODE |
| LOW⚡ | tests/test_closets.py | 715 | def test_idf_downweights_terms_present_in_every_doc(self): | CODE |
| LOW | tests/test_closets.py | 88 | def test_lock_acquires_and_releases(self, tmp_path): | CODE |
| LOW | tests/test_closets.py | 99 | def test_lock_blocks_concurrent_access(self, tmp_path): | CODE |
| LOW | tests/test_closets.py | 153 | def test_emits_pointer_line_shape(self): | CODE |
| LOW | tests/test_closets.py | 174 | def test_extracts_section_headers_as_topics(self): | CODE |
| LOW | tests/test_closets.py | 181 | def test_entity_stoplist_filters_sentence_starters(self): | CODE |
| LOW | tests/test_closets.py | 199 | def test_real_proper_nouns_survive_stoplist(self): | CODE |
| LOW | tests/test_closets.py | 299 | def test_date_segment_uses_filed_at_date_portion_only(self): | CODE |
| LOW | tests/test_closets.py | 320 | def test_content_date_preferred_over_filed_at(self): | CODE |
| LOW | tests/test_closets.py | 354 | def test_overwrites_existing_closet_does_not_append(self, palace_path): | CODE |
| LOW | tests/test_closets.py | 372 | def test_packs_into_multiple_closets_without_splitting_lines(self, palace_path): | CODE |
| LOW | tests/test_closets.py | 393 | def test_deletes_only_the_targeted_source(self, palace_path): | CODE |
| LOW | tests/test_closets.py | 413 | def test_remine_replaces_closets_completely(self, tmp_path): | CODE |
| LOW | tests/test_closets.py | 570 | def test_max_distance_filters_hybrid_hits(self, palace_path, seeded_collection): | CODE |
| LOW | tests/test_closets.py | 620 | def test_capped_list_never_truncates_a_name(self): | CODE |
| LOW | tests/test_closets.py | 664 | def test_known_registry_is_cached_by_mtime(self, monkeypatch, tmp_path): | CODE |
| LOW | tests/test_closets.py | 728 | def test_empty_inputs_return_zeros(self): | CODE |
| LOW | tests/test_closets.py | 733 | def test_hybrid_rank_promotes_keyword_match(self): | CODE |
| LOW | tests/test_closets.py | 746 | def test_hybrid_rank_absolute_normalization(self): | CODE |
| LOW | tests/test_closets.py | 765 | def test_ingest_creates_drawers_and_closets(self, tmp_path): | CODE |
| LOW | tests/test_closets.py | 779 | def test_ingested_drawers_carry_the_directory_they_were_read_from(self, tmp_path): | CODE |
| LOW | tests/test_closets.py | 803 | def test_ingest_skips_unchanged_on_second_run(self, tmp_path): | CODE |
| LOW | tests/test_closets.py | 817 | def test_ingest_detects_same_size_content_edit(self, tmp_path): | CODE |
| LOW | tests/test_closets.py | 854 | def test_legacy_state_backfills_content_hash(self, tmp_path): | CODE |
| LOW | tests/test_closets.py | 895 | def test_state_file_lives_outside_diary_dir(self, tmp_path): | CODE |
| LOW | tests/test_closets.py | 925 | def test_wing_prefixed_drawer_id_prevents_cross_diary_collision(self, tmp_path): | CODE |
| LOW | tests/test_closets.py | 965 | def test_diary_multiple_entries_one_drawer_each(self, tmp_path): | CODE |
| LOW | tests/test_closets.py | 986 | def test_large_diary_with_oversized_entry_chunks_within_entry(self, tmp_path): | CODE |
| LOW | tests/test_closets.py | 1021 | def test_incremental_appends_new_entry_only(self, tmp_path): | CODE |
| LOW | tests/test_closets.py | 1048 | def test_entry_count_watermark_matches_drawer_count(self, tmp_path): | CODE |
| LOW | tests/test_closets.py | 1075 | def test_diary_chunk_index_is_global_across_entries(self, tmp_path): | CODE |
| LOW | tests/test_closets.py | 1112 | def test_diary_entry_deletion_purges_orphan_drawers(self, tmp_path): | CODE |
| LOW | tests/test_closets.py | 1147 | def test_diary_header_only_entry_produces_drawer(self, tmp_path): | CODE |
| LOW | tests/test_closets.py | 1173 | def test_diary_atomic_batched_upsert_on_failure(self, tmp_path, monkeypatch): | CODE |
| LOW | tests/test_closets.py | 1284 | def test_list_tunnels_with_and_without_filter(self): | CODE |
| LOW | tests/test_closets.py | 1298 | def test_dedup_same_endpoints_updates_label(self): | CODE |
| LOW | tests/test_closets.py | 1305 | def test_follow_tunnels_returns_connected_endpoints(self): | CODE |
| LOW | tests/test_closets.py | 1328 | def test_follow_tunnels_works_from_either_endpoint(self): | CODE |
| LOW | tests/test_closets.py | 1341 | def test_empty_endpoint_fields_rejected(self): | CODE |
| LOW | tests/test_closets.py | 1356 | def test_corrupt_tunnel_file_does_not_lose_new_writes(self): | CODE |
| LOW | tests/test_closets.py | 1374 | def test_atomic_write_leaves_no_stray_tmp_file(self): | CODE |
| LOW | tests/test_closets.py | 1383 | def test_concurrent_creates_preserve_all_tunnels(self): | CODE |
| LOW | tests/test_closets.py | 1409 | def test_created_at_is_timezone_aware(self): | CODE |
| LOW | tests/test_closets.py | 1445 | def test_expand_returns_matched_plus_neighbors(self, palace_path): | CODE |
| LOW | tests/test_closets.py | 1464 | def test_expand_at_start_of_file_only_has_next_neighbor(self, palace_path): | CODE |
| 5310 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tools/find_orphan_claude_jsonls.sh | 3 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tools/find_orphan_claude_jsonls.sh | 14 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_closets.py | 222 | # ── Tier 6a — date + line-range pointer segment ──────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_closets.py | 506 | # ── _extract_drawer_ids_from_closet ─────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_closets.py | 526 | # ── search_memories closet-first path ──────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_closets.py | 586 | # ── entity metadata ────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_closets.py | 699 | # ── BM25 hybrid search (real IDF over candidate corpus) ────────────── | COMMENT |
| MEDIUM | tests/test_closets.py | 66 | # ── mine_lock ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_closets.py | 149 | # ── build_closet_lines ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_closets.py | 350 | # ── upsert_closet_lines ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_closets.py | 389 | # ── purge_file_closets ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_closets.py | 409 | # ── project miner: closet rebuild end-to-end ────────────────────────── | COMMENT |
| MEDIUM | tests/test_closets.py | 761 | # ── diary ingest ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_closets.py | 963 | # ── #1539: per-entry drawers, oversized-entry chunking ───────── | COMMENT |
| MEDIUM | tests/test_closets.py | 1242 | # ── cross-wing tunnels ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_closets.py | 1316 | # ── regression: symmetry, durability, validation, concurrency ───── | COMMENT |
| MEDIUM | tests/test_closets.py | 1416 | # ── drawer-grep neighbor expansion ──────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_hallways_palace_scoped.py | 24 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_hallways_palace_scoped.py | 26 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_hallways_palace_scoped.py | 58 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_hallways_palace_scoped.py | 60 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_hallways_palace_scoped.py | 106 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_hallways_palace_scoped.py | 108 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_searcher.py | 69 | # ── search_memories (API) ────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_searcher.py | 809 | # ── _tokenize stop-word filter ───────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_searcher.py | 1152 | # ── _result_drawer_id logical-id resolution (#2185) ──────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_searcher.py | 1181 | # ── since/before date window (#463) ──────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_searcher.py | 27 | # ── build_where_filter (unit) ────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_searcher.py | 400 | # ── BM25 internals: None / empty document safety ───────────────────── | COMMENT |
| MEDIUM | tests/test_searcher.py | 438 | # ── search() (CLI print function) ───────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_backups.py | 244 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_backups.py | 246 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_miner_fts5_validation.py | 125 | # ── 1. Helper returns silently on a clean palace ──────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_miner_fts5_validation.py | 136 | # ── 2. Helper raises MineValidationError on corrupt sqlite ────────── | COMMENT |
| MEDIUM⚡ | tests/test_miner_fts5_validation.py | 175 | # ── 3. cmd_mine surfaces MineValidationError as exit-1 + banner ───── | COMMENT |
| MEDIUM⚡ | tests/test_miner_fts5_validation.py | 223 | # ── 4. Dry-run skips validation ───────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_miner_fts5_validation.py | 25 | # ── Helpers ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_miner_fts5_validation.py | 868 | # ── 8. A mine that wrote nothing skips the check (#2684) ─────────── | COMMENT |
| MEDIUM⚡ | tests/test_split_mega_files.py | 6 | # ── Config loading ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_split_mega_files.py | 61 | # ── Config: force_reload and invalid JSON ────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_split_mega_files.py | 101 | # ── is_true_session_start ────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_split_mega_files.py | 182 | # ── extract_timestamp ────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_split_mega_files.py | 205 | # ── extract_subject ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_split_mega_files.py | 238 | # ── split_file ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_split_mega_files.py | 133 | # ── find_session_boundaries ──────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_palace_graph_tunnels.py | 517 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_palace_graph_tunnels.py | 519 | # ============================================================================= | COMMENT |
| MEDIUM | tests/test_palace_graph_tunnels.py | 590 | # ============================================================================= | COMMENT |
| MEDIUM | tests/test_palace_graph_tunnels.py | 592 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_logstream_sync.py | 90 | # ── HLC ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_logstream_sync.py | 140 | # ── Replica identity ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_logstream_sync.py | 173 | # ── Migration / backfill ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_logstream_sync.py | 392 | # ── HTTP endpoints + CLI (real wire) ───────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_logstream_sync.py | 339 | # ── Convergence (engine over simulated wire) ───────────────────────────── | STRING |
| MEDIUM | tests/test_logstream_sync.py | 225 | # ── Sync primitives ─────────────────────────────────────────────────────── | STRING |
| MEDIUM⚡ | tests/test_corpus_origin_integration.py | 1049 | # ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_corpus_origin_integration.py | 1056 | # ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_corpus_origin_integration.py | 1721 | # ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_corpus_origin_integration.py | 1730 | # ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_corpus_origin_integration.py | 114 | # ── Baseline test: pin v3.3.3 behavior ──────────────────────────────────── | COMMENT |
| 1027 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_update_awareness.py | 138 | except OSError: | CODE |
| HIGH | tests/test_hybrid_search.py | 34 | except Exception: | CODE |
| HIGH | tests/conftest.py | 110 | except ImportError: | CODE |
| HIGH | tests/conftest.py | 262 | except AttributeError: | CODE |
| HIGH | tests/conftest.py | 275 | except (ImportError, AttributeError): | CODE |
| HIGH | tests/conftest.py | 298 | except (ImportError, AttributeError): | CODE |
| HIGH | tests/conftest.py | 217 | except Exception: | CODE |
| HIGH | tests/conftest.py | 296 | except Exception: | CODE |
| HIGH | tests/conftest.py | 226 | except Exception: | CODE |
| HIGH | tests/conftest.py | 237 | except Exception: | CODE |
| HIGH | tests/conftest.py | 252 | except Exception: | CODE |
| HIGH | tests/test_milvus_backend.py | 368 | except Exception: | CODE |
| HIGH | tests/test_mine_lock_lifecycle.py | 217 | except Exception: | CODE |
| HIGH | tests/test_mine_lock_lifecycle.py | 223 | except Exception: | CODE |
| HIGH | tests/test_sqlite_exact_backend.py | 1038 | except threading.BrokenBarrierError: | CODE |
| HIGH | tests/test_known_entities_registry.py | 527 | except OSError: | CODE |
| HIGH | tests/test_live_pgvector_conformance.py | 61 | except Exception: | CODE |
| HIGH | tests/test_entity_detector.py | 737 | except OSError: | CODE |
| HIGH | tests/test_daemon.py | 259 | except Exception: # noqa: BLE001 - best-effort; we force-shutdown below | CODE |
| HIGH | tests/test_daemon.py | 266 | except Exception: # noqa: BLE001 | CODE |
| HIGH | tests/test_daemon.py | 270 | except Exception: # noqa: BLE001 | CODE |
| HIGH | tests/test_idle_watchdog_exit.py | 68 | except SystemExit: | CODE |
| HIGH | tests/test_repair.py | 3243 | except Exception: | CODE |
| HIGH | tests/test_rooms.py | 978 | except RuntimeError: | CODE |
| HIGH | tests/test_pgvector_backend.py | 1253 | except Exception: | CODE |
| HIGH | tests/test_pgvector_backend.py | 1309 | except threading.BrokenBarrierError: | CODE |
| HIGH | tests/test_migrate.py | 314 | except Exception: | CODE |
| HIGH | tests/test_migrate.py | 360 | except Exception: | CODE |
| HIGH | tests/test_encoding_repair.py | 923 | except Exception: | CODE |
| HIGH | tests/test_inproc_sqlite_locks.py | 113 | except OSError: | CODE |
| HIGH | tests/test_qdrant_backend.py | 557 | except Exception: | CODE |
| HIGH | tests/test_service_palace_env.py | 38 | except Exception: # noqa: BLE001 - the call's outcome is not what this asserts | CODE |
| HIGH | tests/test_service_palace_env.py | 51 | except Exception: # noqa: BLE001 | CODE |
| HIGH | tests/mcp/test_read_tools.py | 272 | except Exception: | CODE |
| HIGH | tests/benchmarks/conftest.py | 138 | except Exception: | CODE |
| HIGH | mempalace/repair.py | 153 | except OSError: | CODE |
| HIGH | mempalace/repair.py | 612 | except Exception: | CODE |
| HIGH | mempalace/repair.py | 2822 | except Exception: | CODE |
| HIGH | mempalace/repair.py | 530 | except Exception: | CODE |
| HIGH | mempalace/repair.py | 127 | except OSError: | CODE |
| HIGH | mempalace/repair.py | 539 | except Exception: | CODE |
| HIGH | mempalace/rooms.py | 892 | except FileNotFoundError: | CODE |
| HIGH | mempalace/sync.py | 468 | except (OSError, RuntimeError, ValueError): | CODE |
| HIGH | mempalace/sync.py | 442 | except (OSError, RuntimeError, ValueError): | CODE |
| HIGH | mempalace/query_parser.py | 284 | except ValueError: | CODE |
| HIGH | mempalace/query_parser.py | 290 | except Exception: | CODE |
| HIGH | mempalace/query_parser.py | 428 | except Exception: | CODE |
| HIGH | mempalace/query_parser.py | 839 | except Exception: | CODE |
| HIGH | mempalace/query_parser.py | 1410 | except Exception: | CODE |
| HIGH | mempalace/backups.py | 218 | except Exception: | CODE |
| HIGH | mempalace/config.py | 505 | except OSError: | CODE |
| HIGH | mempalace/config.py | 572 | except OSError: | CODE |
| HIGH | mempalace/config.py | 590 | except (OSError, NotImplementedError): | CODE |
| HIGH | mempalace/config.py | 565 | except (OSError, NotImplementedError): | CODE |
| HIGH | mempalace/config.py | 658 | except (OSError, NotImplementedError): | CODE |
| HIGH | mempalace/config.py | 1903 | except (OSError, NotImplementedError): | CODE |
| HIGH | mempalace/config.py | 1186 | except (json.JSONDecodeError, UnicodeDecodeError, OSError): | CODE |
| HIGH | mempalace/config.py | 1665 | except ValueError: | CODE |
| HIGH | mempalace/config.py | 1695 | except ValueError: | CODE |
| HIGH | mempalace/config.py | 1925 | except (OSError, NotImplementedError): | CODE |
| 154 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/find_orphan_claude_jsonls.sh | 55 | except Exception: | CODE |
| LOW | tools/find_orphan_claude_jsonls.sh | 89 | except Exception: | CODE |
| MEDIUM | tests/test_closets.py | 1390 | def worker(i): | CODE |
| LOW | tests/test_closets.py | 1394 | except Exception as e: | CODE |
| MEDIUM | tests/test_mcp_http_transport.py | 157 | def searcher(): | CODE |
| MEDIUM | tests/test_mcp_http_transport.py | 199 | def run_search(req_id): | CODE |
| MEDIUM | tests/test_mcp_http_transport.py | 374 | def writer(): | CODE |
| MEDIUM | tests/test_mcp_http_transport.py | 418 | def searcher(): | CODE |
| MEDIUM | tests/test_mcp_http_transport.py | 525 | def embedder(): | CODE |
| MEDIUM | tests/test_mcp_http_transport.py | 539 | def reconnect(): | CODE |
| LOW | tests/test_mcp_http_transport.py | 160 | except Exception as exc: | CODE |
| LOW | tests/test_mcp_http_transport.py | 202 | except Exception as exc: | CODE |
| LOW | tests/test_mcp_http_transport.py | 382 | except Exception as exc: | CODE |
| LOW | tests/test_mcp_http_transport.py | 421 | except Exception as exc: | CODE |
| LOW | tests/test_mcp_http_transport.py | 534 | except Exception as exc: | CODE |
| LOW | tests/test_mcp_http_transport.py | 549 | except Exception as exc: | CODE |
| LOW | tests/test_hybrid_search.py | 34 | except Exception: | CODE |
| LOW | tests/conftest.py | 217 | except Exception: | CODE |
| LOW | tests/conftest.py | 226 | except Exception: | CODE |
| LOW | tests/conftest.py | 237 | except Exception: | CODE |
| LOW | tests/conftest.py | 252 | except Exception: | CODE |
| LOW | tests/conftest.py | 296 | except Exception: | CODE |
| LOW | tests/test_milvus_backend.py | 368 | except Exception: | CODE |
| LOW | tests/test_mine_lock_lifecycle.py | 217 | except Exception: | CODE |
| LOW | tests/test_mine_lock_lifecycle.py | 223 | except Exception: | CODE |
| MEDIUM | tests/test_sqlite_exact_backend.py | 711 | def owner_a(): | CODE |
| LOW | tests/test_sqlite_exact_backend.py | 1056 | except Exception as exc: | STRING |
| LOW | tests/test_live_pgvector_conformance.py | 61 | except Exception: | CODE |
| LOW | tests/test_live_pgvector_conformance.py | 278 | except Exception as exc: # noqa: BLE001 - collected for the report | CODE |
| LOW | tests/test_live_pgvector_conformance.py | 315 | except Exception as exc: # noqa: BLE001 - collected for the report | CODE |
| LOW | tests/test_http_embedding_lifecycle.py | 95 | except Exception as e: | CODE |
| LOW | tests/test_http_embedding_lifecycle.py | 159 | except Exception as exc: | CODE |
| LOW | tests/test_http_embedding_lifecycle.py | 228 | except Exception as exc: | CODE |
| LOW | tests/test_http_embedding_lifecycle.py | 249 | except Exception as exc: | CODE |
| MEDIUM | tests/test_http_embedding_lifecycle.py | 80 | def run(name): | CODE |
| MEDIUM | tests/test_http_embedding_lifecycle.py | 142 | def infer(): | CODE |
| MEDIUM | tests/test_http_embedding_lifecycle.py | 218 | def original(): | CODE |
| MEDIUM | tests/test_http_embedding_lifecycle.py | 231 | def peer(): | CODE |
| LOW | tests/test_config_non_object.py | 44 | except Exception as exc: # noqa: BLE001 - recorded and compared below | CODE |
| LOW | tests/test_hooks_cli.py | 1113 | except Exception: | CODE |
| LOW⚡ | tests/test_daemon.py | 259 | except Exception: # noqa: BLE001 - best-effort; we force-shutdown below | CODE |
| LOW⚡ | tests/test_daemon.py | 266 | except Exception: # noqa: BLE001 | CODE |
| LOW⚡ | tests/test_daemon.py | 270 | except Exception: # noqa: BLE001 | CODE |
| LOW | tests/test_repair.py | 3243 | except Exception: | CODE |
| MEDIUM | tests/test_pgvector_backend.py | 1306 | def racing_connect(dsn): | CODE |
| LOW | tests/test_pgvector_backend.py | 1253 | except Exception: | CODE |
| LOW | tests/test_pgvector_backend.py | 1324 | except Exception as exc: | CODE |
| LOW | tests/test_migrate.py | 314 | except Exception: | CODE |
| LOW | tests/test_migrate.py | 360 | except Exception: | CODE |
| LOW | tests/test_encoding_repair.py | 923 | except Exception: | CODE |
| LOW | tests/test_inproc_sqlite_locks.py | 305 | except Exception as exc: # surfaced below | CODE |
| LOW | tests/test_qdrant_backend.py | 557 | except Exception: | CODE |
| LOW⚡ | tests/test_service_palace_env.py | 38 | except Exception: # noqa: BLE001 - the call's outcome is not what this asserts | CODE |
| LOW⚡ | tests/test_service_palace_env.py | 51 | except Exception: # noqa: BLE001 | CODE |
| MEDIUM | tests/test_embeddinggemma.py | 536 | def worker(slot): | CODE |
| LOW | tests/test_embeddinggemma.py | 539 | except Exception as exc: # surfaced below; a thread cannot fail the test itself | CODE |
| LOW | tests/mcp/test_guards.py | 30 | except Exception as exc: | CODE |
| LOW | tests/mcp/test_read_tools.py | 272 | except Exception: | CODE |
| LOW | tests/benchmarks/conftest.py | 107 | except Exception: | CODE |
| LOW | tests/benchmarks/conftest.py | 114 | except Exception: | CODE |
| 471 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_miner_fts5_validation.py | 11 | CODE | |
| LOW | tests/test_corpus_origin_integration.py | 25 | CODE | |
| LOW | tests/test_hook_write_routing.py | 1 | CODE | |
| LOW | tests/test_mine_lock_lifecycle.py | 1 | CODE | |
| LOW | tests/test_search_distinct_closet_results.py | 1 | CODE | |
| LOW | tests/test_rooms_pending_snapshot_contract.py | 3 | CODE | |
| LOW | tests/test_sync.py | 1429 | CODE | |
| LOW | tests/test_codex_plugin_manifest.py | 3 | CODE | |
| LOW | tests/test_repair_lock_safety.py | 16 | CODE | |
| LOW | tests/test_hooks_shell.py | 20 | CODE | |
| LOW | tests/test_cursor_plugin_manifest.py | 29 | CODE | |
| LOW | tests/test_vector_write_gate.py | 14 | CODE | |
| LOW | tests/test_format_miner.py | 12 | CODE | |
| LOW | tests/test_format_miner.py | 610 | CODE | |
| LOW | tests/test_hermes_integration.py | 12 | CODE | |
| LOW | tests/test_hnsw_capacity.py | 9 | CODE | |
| LOW | tests/test_cursor_hooks_install.py | 16 | CODE | |
| LOW | tests/test_write_routing.py | 1 | CODE | |
| LOW | tests/test_collision_scan.py | 16 | CODE | |
| LOW | tests/test_ids.py | 11 | CODE | |
| LOW | tests/test_antigravity_hooks_install.py | 15 | CODE | |
| LOW | tests/test_media.py | 1 | CODE | |
| LOW | tests/test_chroma_collection_lock.py | 26 | CODE | |
| LOW | tests/test_antigravity_hooks_shell.py | 20 | CODE | |
| LOW | tests/test_cursor_hooks_shell.py | 28 | CODE | |
| LOW | tests/test_hnsw_binary_header.py | 1 | CODE | |
| LOW | tests/test_hooks_bash_compat.py | 17 | CODE | |
| LOW | tests/test_dynamics.py | 10 | CODE | |
| LOW | tests/test_fact_checker.py | 19 | CODE | |
| LOW | tests/test_palace_locks.py | 10 | CODE | |
| LOW | tests/test_backends.py | 186 | CODE | |
| LOW | tests/test_qdrant_bulk_metadata_scroll.py | 72 | CODE | |
| LOW | tests/test_chroma_caller_vectors.py | 1 | CODE | |
| LOW | tests/test_service_palace_env.py | 3 | CODE | |
| LOW | tests/test_cli_write_routing.py | 1 | CODE | |
| LOW | tests/benchmarks/benchmark_dialect.py | 1 | CODE | |
| LOW | tests/benchmarks/benchmark_dialect.py | 3 | CODE | |
| LOW | mempalace/repair.py | 54 | CODE | |
| LOW | mempalace/repair.py | 54 | CODE | |
| LOW | mempalace/rooms.py | 28 | CODE | |
| LOW | mempalace/sync.py | 22 | CODE | |
| LOW | mempalace/logsync.py | 28 | CODE | |
| LOW | mempalace/logsync.py | 28 | CODE | |
| LOW | mempalace/query_parser.py | 8 | CODE | |
| LOW | mempalace/service.py | 9 | CODE | |
| LOW | mempalace/onnx_graph.py | 20 | CODE | |
| LOW | mempalace/media.py | 3 | CODE | |
| LOW | mempalace/convo_scanner.py | 22 | CODE | |
| LOW | mempalace/project_scanner.py | 18 | CODE | |
| LOW | mempalace/hallways.py | 33 | CODE | |
| LOW | mempalace/miner.py | 57 | CODE | |
| LOW | mempalace/palace_graph.py | 21 | CODE | |
| LOW | mempalace/tunnels_tool.py | 20 | CODE | |
| LOW | mempalace/embedding.py | 52 | CODE | |
| LOW | mempalace/write_routing.py | 11 | CODE | |
| LOW | mempalace/hook_shell.py | 9 | CODE | |
| LOW | mempalace/palace_audit.py | 26 | CODE | |
| LOW | mempalace/collision_scan.py | 24 | CODE | |
| LOW | mempalace/embeddinggemma2.py | 7 | CODE | |
| LOW | mempalace/__init__.py | 57 | CODE | |
| 280 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/render_jsonl.py | 20 | CODE | |
| LOW | tests/test_corpus_origin_integration.py | 1334 | CODE | |
| LOW | tests/conftest.py | 192 | CODE | |
| LOW | tests/conftest.py | 207 | CODE | |
| LOW | tests/test_repair_lock_safety.py | 39 | CODE | |
| LOW | tests/test_http_embedding_lifecycle.py | 129 | CODE | |
| LOW | tests/test_http_embedding_lifecycle.py | 180 | CODE | |
| LOW | tests/test_http_embedding_lifecycle.py | 205 | CODE | |
| LOW | tests/test_http_embedding_lifecycle.py | 142 | CODE | |
| LOW | tests/test_http_embedding_lifecycle.py | 231 | CODE | |
| LOW | tests/test_hooks_cli.py | 670 | CODE | |
| LOW | tests/test_hooks_cli.py | 703 | CODE | |
| LOW | tests/test_hooks_cli.py | 1155 | CODE | |
| LOW | tests/test_hooks_cli.py | 1171 | CODE | |
| LOW | tests/test_hooks_cli.py | 1198 | CODE | |
| LOW | tests/test_hooks_cli.py | 1233 | CODE | |
| LOW | tests/test_hooks_cli.py | 1267 | CODE | |
| LOW | tests/test_hooks_cli.py | 1316 | CODE | |
| LOW | tests/test_hooks_cli.py | 1354 | CODE | |
| LOW | tests/test_hooks_cli.py | 1365 | CODE | |
| LOW | tests/test_hooks_cli.py | 1520 | CODE | |
| LOW | tests/test_hooks_cli.py | 1570 | CODE | |
| LOW | tests/test_hooks_cli.py | 1595 | CODE | |
| LOW | tests/test_hnsw_capacity.py | 363 | CODE | |
| LOW | tests/test_sqlite_diary_rows.py | 268 | CODE | |
| LOW | tests/test_chroma_collection_lock.py | 80 | CODE | |
| LOW | tests/test_logstream_sse.py | 67 | CODE | |
| LOW | tests/test_miner.py | 2599 | CODE | |
| LOW | tests/test_sqlite_drawer_rows.py | 306 | CODE | |
| LOW | tests/test_palace_locks.py | 56 | CODE | |
| LOW | tests/test_palace_locks.py | 271 | CODE | |
| LOW | tests/benchmarks/report.py | 34 | CODE | |
| LOW | mempalace/repair.py | 219 | CODE | |
| LOW | mempalace/repair.py | 617 | CODE | |
| LOW | mempalace/repair.py | 707 | CODE | |
| LOW | mempalace/repair.py | 1337 | CODE | |
| LOW | mempalace/repair.py | 1636 | CODE | |
| LOW | mempalace/repair.py | 2098 | CODE | |
| LOW | mempalace/repair.py | 2923 | CODE | |
| LOW | mempalace/rooms.py | 458 | CODE | |
| LOW | mempalace/sync.py | 699 | CODE | |
| LOW | mempalace/logsync.py | 51 | CODE | |
| LOW | mempalace/query_parser.py | 106 | CODE | |
| LOW | mempalace/query_parser.py | 185 | CODE | |
| LOW | mempalace/query_parser.py | 326 | CODE | |
| LOW | mempalace/query_parser.py | 718 | CODE | |
| LOW | mempalace/query_parser.py | 1220 | CODE | |
| LOW | mempalace/service.py | 179 | CODE | |
| LOW | mempalace/onnx_graph.py | 72 | CODE | |
| LOW | mempalace/onnx_graph.py | 156 | CODE | |
| LOW | mempalace/onnx_graph.py | 333 | CODE | |
| LOW | mempalace/onnx_graph.py | 123 | CODE | |
| LOW | mempalace/onnx_graph.py | 226 | CODE | |
| LOW | mempalace/convo_scanner.py | 57 | CODE | |
| LOW | mempalace/project_scanner.py | 526 | CODE | |
| LOW | mempalace/config.py | 833 | CODE | |
| LOW | mempalace/hallways.py | 877 | CODE | |
| LOW | mempalace/miner.py | 648 | CODE | |
| LOW | mempalace/miner.py | 796 | CODE | |
| LOW | mempalace/miner.py | 1227 | CODE | |
| 188 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pyproject.toml | 81 | # without installing the optional model or its PyTorch dependencies. | COMMENT |
| LOW | pyproject.toml | 101 | # mypy — static type checker. Catches lazy ``list`` / ``dict`` | COMMENT |
| LOW | pyproject.toml | 141 | "soundfile>=0.13.1; python_version >= '3.10'", | COMMENT |
| LOW | docker-entrypoint.sh | 1 | #!/usr/bin/env sh | COMMENT |
| LOW | docker-compose.yml | 1 | # MemPalace via Docker Compose. | COMMENT |
| LOW | docker-compose.yml | 21 | tty: false | COMMENT |
| LOW | tools/backup_claude_jsonls.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tools/find_orphan_claude_jsonls.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | deploy/docker-compose.server.yml | 1 | # MemPalace remote team server — MCP over HTTP, backed by a central Qdrant. | COMMENT |
| LOW | tests/test_corpus_origin_integration.py | 1321 | # must use feature names ("corpus_origin", "corpus-origin detection") | COMMENT |
| LOW | tests/test_hnsw_payload_health.py | 181 | # ── Regression cover for the #1710 cumulative-counter fix ───────────── | COMMENT |
| LOW | tests/test_sync.py | 1861 | COMMENT | |
| LOW | tests/test_format_miner.py | 561 | COMMENT | |
| LOW | tests/test_hnsw_capacity.py | 1141 | COMMENT | |
| LOW | tests/test_convo_miner.py | 361 | holder.join(timeout=10) | COMMENT |
| LOW | tests/test_palace_locks.py | 441 | COMMENT | |
| LOW | tests/test_qdrant_bulk_metadata_scroll.py | 521 | COMMENT | |
| LOW | tests/test_qdrant_bulk_metadata_scroll.py | 541 | # this is a deliberate, explicitly-labeled VERBATIM COPY of the real | COMMENT |
| LOW | tests/test_normalize.py | 461 | # ── _try_gemini_jsonl ────────────────────────────────────────────────── | COMMENT |
| LOW | tests/test_normalize.py | 2061 | # Pi agent stores sessions as JSONL under | COMMENT |
| LOW | mempalace/repair.py | 241 | f"no-offset fallback failed after collecting {len(ids)} " | COMMENT |
| LOW | mempalace/repair.py | 261 | # HNSW-preflight-sweep work). | COMMENT |
| LOW | mempalace/repair.py | 1141 | print(" 3. Recover chroma.sqlite3 offline with sqlite3 `.recover` or `.dump`.") | COMMENT |
| LOW | mempalace/repair.py | 1161 | # The "intact content table" above is an assumption the message does not | COMMENT |
| LOW | mempalace/repair.py | 1181 | # Both alternatives are anchored. sqlite_integrity_errors returns the probe's | COMMENT |
| LOW | mempalace/repair.py | 1201 | # has an authority to be checked against, and a rebuild that reads it is only | COMMENT |
| LOW | mempalace/repair.py | 2361 | # (not yet archived). Must never take the mine-lock or rename anything. | COMMENT |
| LOW | mempalace/repair.py | 2621 | # because the cached System still holds the pre-rename schema. | COMMENT |
| LOW | mempalace/repair.py | 2741 | # whose name is now a broken symlink, as one that was never created | COMMENT |
| LOW | mempalace/sync.py | 141 | # is what the pass degrades to rather than what it normally does. A source's | COMMENT |
| LOW | mempalace/sync.py | 161 | # than assumed to fit. | COMMENT |
| LOW | mempalace/sync.py | 881 | if source_file: | COMMENT |
| LOW | mempalace/sync.py | 901 | # away, exactly as re-reading neither would let one that left condemn | COMMENT |
| LOW | mempalace/sync.py | 921 | # about neither. Two transitions inside the same window are | COMMENT |
| LOW | mempalace/config.py | 141 | # (as_of, valid_from, valid_to, ended). | COMMENT |
| LOW | mempalace/config.py | 621 | # it through, and truncating through it would empty a file nobody | COMMENT |
| LOW | mempalace/config.py | 781 | # "unparsed" it was read and is not a JSON object: a truncated write | COMMENT |
| LOW | mempalace/hallways.py | 761 | # spellings (``main.zig`` / ``src/main.zig``): the structural | COMMENT |
| LOW | mempalace/miner.py | 81 | # without it the fstat never runs and a named pipe carrying a | COMMENT |
| LOW | mempalace/miner.py | 221 | # runtime `bad allocation` errors on Windows (#1296), but at CHUNK_SIZE=800 | COMMENT |
| LOW | mempalace/miner.py | 701 | COMMENT | |
| LOW | mempalace/miner.py | 1061 | registry_path = _registry_write_target(registry_path) | COMMENT |
| LOW | mempalace/miner.py | 1441 | # | COMMENT |
| LOW | mempalace/miner.py | 1461 | COMMENT | |
| LOW | mempalace/miner.py | 1961 | COMMENT | |
| LOW | mempalace/miner.py | 2001 | # the source tree for this. A directory that cannot be stat'ed answers | COMMENT |
| LOW | mempalace/palace_graph.py | 1001 | # ``entities.json`` and are persisted by wing in | COMMENT |
| LOW | mempalace/embedding.py | 121 | # ahead of CPU, every Apple Silicon user running this model would otherwise | COMMENT |
| LOW | mempalace/embedding.py | 321 | _EMBEDDINGGEMMA_ONNX = "model_quantized.onnx" | COMMENT |
| LOW | mempalace/__init__.py | 1 | """MemPalace — Give your AI a memory. No API key required.""" | COMMENT |
| LOW | mempalace/__init__.py | 61 | # posthog client is a no-op stub, so this is now harmless — kept as a guard in | COMMENT |
| LOW | mempalace/__init__.py | 81 | # search paths) to the 0.x chromadb hnswlib binding. Filtering | COMMENT |
| LOW | mempalace/encoding_repair.py | 81 | ) | COMMENT |
| LOW | mempalace/corpus_origin.py | 41 | COMMENT | |
| LOW | mempalace/sweeper.py | 361 | # A non-regular match is not a sweep failure, it is nothing to sweep. | COMMENT |
| LOW | mempalace/ids.py | 21 | # Audits compare like-for-like: drawers without ``id_recipe`` are treated | COMMENT |
| LOW | mempalace/layers.py | 201 | # absent on virtually every drawer and ties at the default, which used | COMMENT |
| LOW | mempalace/diary_ingest.py | 181 | # Which directory this diary was read from, so ``sync`` decides an | COMMENT |
| LOW | mempalace/diary_ingest.py | 201 | # transient I/O). Log at debug to preserve diagnostics | COMMENT |
| LOW | mempalace/migrate.py | 241 | COMMENT | |
| 108 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/test_palace_graph_tunnels.py | 93 | # instead of raising — keeps read-path filters robust to bad records. | COMMENT |
| MEDIUM⚡ | tests/test_hooks_cli.py | 616 | # here: _count_human_messages counts both harness shapes, and we assert only | COMMENT |
| MEDIUM⚡ | tests/test_hooks_cli.py | 617 | # the harness -> agent_name routing, not transcript parsing. | COMMENT |
| MEDIUM | tests/test_hooks_bash_compat.py | 152 | # leaks debug output here would silently break the harness contract. | COMMENT |
| MEDIUM⚡ | tests/test_hooks_bash_compat.py | 349 | # and the bottom call supplies the ``--hook session-end --harness`` args | COMMENT |
| MEDIUM⚡ | tests/test_cli_logstream.py | 733 | # a harness backgrounds this process to receive. | COMMENT |
| MEDIUM | mempalace/repair.py | 2594 | # harness), renaming the directory fails atomically UP FRONT on | COMMENT |
| MEDIUM | mempalace/hallways.py | 219 | # harness's tool names, generic nouns, and files every repo has. Matched | COMMENT |
| LOW | mempalace/room_detector_local.py | 418 | # If still nothing, just use general | COMMENT |
| MEDIUM⚡ | mempalace/format_miner.py | 322 | """Convert ``path`` to plain text via MarkItDown, with comprehensive fringe-case handling. | STRING |
| MEDIUM | mempalace/hooks_cli.py | 908 | #: Markers of harness-injected text that lands in the transcript with | COMMENT |
| MEDIUM | mempalace/hooks_cli.py | 1648 | # Validate the harness-provided transcript path before touching it | COMMENT |
| MEDIUM | mempalace/backends/base.py | 828 | #: no-op, so a benchmark harness can trust the set. Backends MAY add their | COMMENT |
| MEDIUM | mempalace/cli/cmd_coord.py | 155 | # silently, leaving a harness waiting on a watcher it believes will | COMMENT |
| MEDIUM | mempalace/mcp_server/runtime.py | 40 | # this palace, a stdio server spawned by an agent harness must not open its | COMMENT |
| MEDIUM | hooks/mempal_save_hook.sh | 67 | # Why this is nontrivial: GUI-launched Claude Code on macOS (or any harness | COMMENT |
| MEDIUM | hooks/mempal_save_hook.sh | 128 | # every Stop hook for users on i18n harnesses or unusual harness configs. | COMMENT |
| MEDIUM | hooks/mempal_session_end_hook.sh | 9 | # exited. All logic lives in mempalace.hooks_cli for cross-harness extensibility. | COMMENT |
| MEDIUM | hooks/mempal_session_end_hook.sh | 40 | # Return immediately so the harness never blocks on session exit. | COMMENT |
| MEDIUM | hooks/antigravity/lib/common.sh | 258 | # a hostile / malformed harness payload cannot inject command tokens. | COMMENT |
| MEDIUM | benchmarks/model_eval/metrics.py | 25 | # the harness can land on develop independently of the model-router PR. | COMMENT |
| MEDIUM | benchmarks/lean_mempalace/rust/Cargo.toml | 19 | # Keep this historical comparison harness outside the production workspace. | COMMENT |
| MEDIUM | .claude-plugin/hooks/mempal-stop-hook.sh | 3 | # All logic lives in mempalace.hooks_cli for cross-harness extensibility | COMMENT |
| MEDIUM | .claude-plugin/hooks/mempal-session-end-hook.sh | 11 | # mempalace.hooks_cli for cross-harness extensibility. | COMMENT |
| MEDIUM | .claude-plugin/hooks/mempal-session-end-hook.sh | 42 | # Return immediately so the harness never blocks on session exit. | COMMENT |
| MEDIUM | .claude-plugin/hooks/mempal-precompact-hook.sh | 3 | # All logic lives in mempalace.hooks_cli for cross-harness extensibility | COMMENT |
| MEDIUM | .dsh-plugin/cordis.patch.yml | 18 | # The palace, served through the harness's own MCP client by MemPalace's | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | CHANGELOG.md | 1082 | - **`mempalace repair` can now recover palaces whose HNSW segment writer is stuck on `apply_logs`.** Both the existing ` | CODE |
| MEDIUM | pyproject.toml | 33 | # Multilingual embedding model deps. Onboarding now offers the | COMMENT |
| MEDIUM | pyproject.toml | 121 | # Hardware acceleration for the ONNX embedding model. Install exactly one: | COMMENT |
| MEDIUM | docker-compose.yml | 11 | # config, and the cached embedding model across runs. | COMMENT |
| MEDIUM | website/guide/antigravity.md | 272 | ## Joining the shared brain (multi-agent) | COMMENT |
| MEDIUM | tests/test_closets.py | 994 | # the embedding model's hard token limit. This trips the size-cap | COMMENT |
| MEDIUM⚡ | tests/test_miner.py | 2864 | # hallucinates dates on benign inputs. These tests pin the fix: junk | COMMENT |
| MEDIUM | tests/test_migrate_wings.py | 68 | # Explicit embeddings keep the test hermetic (no embedding model needed) — | COMMENT |
| MEDIUM | tests/mcp/test_protocol.py | 359 | # palace scaffold on disk before the user runs ``mempalace init``. | COMMENT |
| MEDIUM | mempalace/miner.py | 1468 | # would hallucinate dates from any digit-bearing text (Igor's reproductions | COMMENT |
| MEDIUM | mempalace/miner.py | 1482 | # padding from today's date, which is hallucination, not extraction. | COMMENT |
| MEDIUM | mempalace/miner.py | 1671 | # (no fuzzy=True) — without it, dateutil hallucinates dates from any | COMMENT |
| MEDIUM | mempalace/mcp_server/tools_diary.py | 89 | # embedding model never sees a document above ``chunk_size``. | COMMENT |
| MEDIUM | mempalace/mcp_server/tools_diary.py | 103 | # if the embedding model fails mid-loop. ``col.add`` (not | COMMENT |
| MEDIUM | mempalace/mcp_server/tools_write.py | 605 | # embedding model never sees a document above ``chunk_size``. | COMMENT |
| MEDIUM | hooks/mempal_precompact_hook.sh | 5 | # gets compressed to free up context window space. | COMMENT |
| MEDIUM | benchmarks/BENCHMARKS.md | 761 | Same purpose as #2: isolate the contribution of a better embedding model from the contribution of heuristics. | CODE |
| MEDIUM | benchmarks/model_eval/runner.py | 73 | # Tasks that score via semantic similarity and require an embedding model. | COMMENT |
| MEDIUM | benchmarks/model_eval/README.md | 34 | # This script reads candidates.yaml and pulls every tier-1 model + the embedding model | COMMENT |
| MEDIUM | benchmarks/model_eval/reports/2026-05-10-analysis.md | 200 | ### The 0.36 "hallucination rate" on qwen3:4b memory extraction is a scoring artifact | COMMENT |
| MEDIUM | scripts/docker-smoke.sh | 91 | # First run also downloads the ~80 MB embedding model into the volume, so this | COMMENT |
| MEDIUM | .github/workflows/docker-publish.yml | 53 | # Reaches Chroma's S3 once to fetch the ~80 MB embedding model, so it is | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_version_guard.py | 229 | (".claude-plugin/plugin.json", '{"version": null}'), | CODE |
| HIGH⚡ | tests/test_hooks_cli.py | 978 | '{"type":"x","cwd":null}\n' | CODE |
| HIGH⚡ | tests/test_hooks_cli.py | 973 | """A cwd field that isn't a string (e.g. null, number) must be skipped.""" | STRING |
| HIGH | tests/test_save_hook_mines.py | 115 | script.write_text(f'{func_src}\nis_valid_transcript_path "$1" && echo OK || echo NO\n') | CODE |
| HIGH | tests/test_corpus_origin.py | 283 | "primary_platform": null, | CODE |
| HIGH | tests/test_cli.py | 1615 | Otherwise ``repair --dry-run && repair --yes`` walks into the destructive | STRING |
| HIGH | tests/mcp/test_protocol.py | 2103 | the alias only fills in when 'entry' is absent or null, not merely falsy. | STRING |
| HIGH | tests/mcp/test_write_tools.py | 92 | # One pre-mutation intent (result: null) + one post-mutation outcome. | COMMENT |
| HIGH | mempalace/mcp_server/protocol.py | 848 | # all (or passed it as null). An explicit entry — even "" — wins. | COMMENT |
| HIGH | benchmarks/mine_bench.py | 17 | uv venv /tmp/gpu && source /tmp/gpu/bin/activate | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_mine_lock_lifecycle.py | 20 | def _set_home(monkeypatch, tmp_path: Path) -> None: | CODE |
| LOW | tests/test_hnsw_capacity.py | 406 | def _set_drawer_created_at(palace: str, timestamps: dict[int, str]) -> None: | CODE |
| LOW | mempalace/sync.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | mempalace/sync.py | 979 | __all__ = [ | CODE |
| LOW | mempalace/logsync.py | 43 | __all__ = ["PEERS_FILENAME", "SyncPeerError", "load_peers", "sync_all", "sync_with_peer"] | CODE |
| LOW | mempalace/media.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | mempalace/config.py | 1549 | def set_embedding_model(self, model: str) -> None: | CODE |
| LOW | mempalace/config.py | 1565 | def set_backend(self, backend: str) -> None: | CODE |
| LOW⚡ | mempalace/hallways.py | 59 | __all__ = [ | CODE |
| LOW | mempalace/miner.py | 868 | def _set_wing_topics(existing: dict, wing_key: str, topics_for_wing: list, coerce) -> None: | CODE |
| LOW | mempalace/room_detector_local.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | mempalace/embedding.py | 64 | logger = logging.getLogger(__name__) | CODE |
| LOW | mempalace/embedding.py | 75 | def set_embedding_section_hook(hook) -> None: | CODE |
| LOW | mempalace/embeddinggemma2.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | mempalace/__init__.py | 86 | __all__ = ["__version__"] | CODE |
| LOW | mempalace/wal.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | mempalace/server_registry.py | 34 | logger = logging.getLogger(__name__) | CODE |
| LOW | mempalace/format_miner.py | 97 | __all__ = [ | CODE |
| LOW | mempalace/sweeper.py | 52 | logger = logging.getLogger(__name__) | CODE |
| LOW | mempalace/hub_client.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | mempalace/diary_ingest.py | 39 | logger = logging.getLogger(__name__) | CODE |
| LOW | mempalace/dynamics.py | 311 | __all__ = [ | CODE |
| LOW | mempalace/mcp_proxy.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | mempalace/backends/_inproc_sqlite.py | 79 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | mempalace/backends/milvus.py | 353 | def set_embedder_identity(self, identity) -> None: | CODE |
| LOW | mempalace/backends/milvus.py | 50 | logger = logging.getLogger(__name__) | CODE |
| LOW | mempalace/backends/milvus.py | 1055 | def _set_embedder_identity(self, palace: PalaceRef, collection_name: str, identity) -> None: | CODE |
| LOW | mempalace/backends/milvus.py | 1325 | __all__ = [ | CODE |
| LOW | mempalace/backends/qdrant.py | 49 | logger = logging.getLogger(__name__) | CODE |
| LOW | mempalace/backends/qdrant.py | 719 | def set_embedder_identity(self, identity) -> None: | CODE |
| LOW | mempalace/backends/qdrant.py | 1339 | def _set_embedder_identity(self, palace: PalaceRef, collection_name: str, identity) -> None: | CODE |
| LOW | mempalace/backends/qdrant.py | 1524 | __all__ = ["QdrantBackend", "QdrantCollection"] | CODE |
| LOW | mempalace/backends/registry.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | mempalace/backends/embedding_wrapper.py | 143 | def set_embedder_identity(self, identity) -> None: | CODE |
| LOW | mempalace/backends/__init__.py | 58 | __all__ = [ | CODE |
| LOW | mempalace/backends/pgvector.py | 73 | logger = logging.getLogger(__name__) | CODE |
| LOW | mempalace/backends/pgvector.py | 1092 | def set_embedder_identity(self, identity) -> None: | CODE |
| LOW | mempalace/backends/pgvector.py | 1892 | def _set_embedder_identity(self, palace: PalaceRef, collection_name: str, identity) -> None: | CODE |
| LOW | mempalace/backends/rust_exact.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | mempalace/backends/chroma.py | 3894 | def set_embedder_identity(self, identity) -> None: | CODE |
| LOW | mempalace/backends/chroma.py | 47 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | mempalace/backends/base.py | 512 | def set_embedder_identity(self, identity: EmbedderIdentity) -> None: | CODE |
| LOW | mempalace/backends/sqlite_exact.py | 46 | logger = logging.getLogger(__name__) | CODE |
| LOW | mempalace/backends/sqlite_exact.py | 682 | def set_embedder_identity(self, identity) -> None: | CODE |
| LOW | mempalace/backends/sqlite_exact.py | 1989 | __all__ = ["SQLiteExactBackend", "SQLiteExactCollection"] | STRING |
| LOW | mempalace/sources/media.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | mempalace/sources/registry.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | mempalace/sources/__init__.py | 48 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | mempalace/onboarding.py | 84 | # Step 1: Mode selection | COMMENT |
| LOW⚡ | mempalace/onboarding.py | 268 | # Step 6: Ambiguity warnings | COMMENT |
| LOW⚡ | mempalace/onboarding.py | 399 | # Step 1: Mode | COMMENT |
| LOW⚡ | mempalace/onboarding.py | 409 | # Step 2: People | COMMENT |
| LOW⚡ | mempalace/onboarding.py | 412 | # Step 3: Projects | COMMENT |
| LOW⚡ | mempalace/onboarding.py | 415 | # Step 4: Wings (stored in config, not registry — just show user) | COMMENT |
| LOW⚡ | mempalace/onboarding.py | 418 | # Step 5: Auto-detect additional people from files | COMMENT |
| LOW | mempalace/onboarding.py | 451 | # Step 6: Warn about ambiguous names | COMMENT |
| LOW⚡ | mempalace/onboarding.py | 141 | # Step 2: People | STRING |
| LOW⚡ | mempalace/onboarding.py | 196 | # Step 3: Projects | STRING |
| LOW⚡ | mempalace/onboarding.py | 222 | # Step 4: Wings | STRING |
| LOW⚡ | mempalace/onboarding.py | 244 | # Step 5: Auto-detect from files | STRING |
| LOW⚡ | mempalace/instructions/status.md | 5 | ## Step 1: Gather Palace Status | COMMENT |
| LOW⚡ | mempalace/instructions/status.md | 12 | ## Step 2: Display Wing/Room/Drawer Counts | COMMENT |
| LOW⚡ | mempalace/instructions/status.md | 22 | ## Step 3: Knowledge Graph Stats (MCP only) | COMMENT |
| LOW⚡ | mempalace/instructions/status.md | 32 | ## Step 4: Suggest Next Actions | COMMENT |
| LOW | mempalace/instructions/init.md | 6 | ## Step 1: Check Python version | COMMENT |
| LOW | mempalace/instructions/init.md | 12 | ## Step 2: Check if mempalace is already installed | COMMENT |
| LOW | mempalace/instructions/init.md | 24 | ## Step 3: Install mempalace | COMMENT |
| LOW⚡ | mempalace/instructions/init.md | 48 | ## Step 4: Ask for project directory | COMMENT |
| LOW⚡ | mempalace/instructions/init.md | 54 | ## Step 5: Initialize the palace | COMMENT |
| LOW⚡ | mempalace/instructions/init.md | 60 | ## Step 6: Configure MCP server | COMMENT |
| LOW | mempalace/instructions/init.md | 73 | ## Step 7: Verify installation | COMMENT |
| LOW | mempalace/instructions/init.md | 80 | ## Step 8: Show next steps | COMMENT |
| LOW | mempalace/instructions/audit.md | 9 | ## Step 1: Run the audit | COMMENT |
| LOW | mempalace/instructions/audit.md | 26 | ## Step 2: Present the scorecard | COMMENT |
| LOW | mempalace/instructions/audit.md | 47 | ## Step 3: Repair session, one layer at a time | COMMENT |
| LOW | mempalace/instructions/audit.md | 229 | ## Step 4: Re-run and report | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_hall_detection.py | 109 | # Create a conversation file with technical content | COMMENT |
| MEDIUM | tests/test_repair.py | 545 | # Create a valid sqlite file so the repair preflight can run quick_check. | COMMENT |
| MEDIUM | tests/test_miner.py | 2997 | # Create a real file with known mtime. | COMMENT |
| MEDIUM⚡ | tests/test_backends.py | 2615 | # Create the collection using the default (minilm-based) EF. | COMMENT |
| MEDIUM⚡ | tests/mcp/test_protocol.py | 841 | # Create a collection so status works | COMMENT |
| MEDIUM⚡ | tests/mcp/test_protocol.py | 868 | # Create a real collection so _get_collection succeeds | COMMENT |
| MEDIUM | tests/mcp/test_read_tools.py | 32 | # Create the DB file (init does this) but NOT the collection | COMMENT |
| MEDIUM | tests/benchmarks/test_knowledge_graph_bench.py | 58 | # Create a hub entity connected to many others | COMMENT |
| MEDIUM⚡ | hooks/cursor/lib/common.sh | 26 | # This file is sourced, not executed, so it intentionally has no | COMMENT |
| MEDIUM⚡ | hooks/antigravity/lib/common.sh | 32 | # This file is sourced, not executed, so it intentionally has no | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_closet_llm.py | 0 | import sys from mempalace.palace import mine_palace_lock with mine_palace_lock(sys.argv[1]): print("ready", flush=true) | STRING |
| HIGH | tests/test_sqlite_exact_backend.py | 0 | import sys from mempalace.palace import mine_palace_lock with mine_palace_lock(sys.argv[1]): print("ready", flush=true) | STRING |
| HIGH | tests/mcp/test_read_tools.py | 0 | import sys from mempalace.palace import mine_palace_lock with mine_palace_lock(sys.argv[1]): print("ready", flush=true) | STRING |
| 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 | STRING |
| 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 | STRING |
| HIGH | mempalace/mcp_server/tools_read.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 | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_closets.py | 211 | content = "lorem ipsum dolor sit amet consectetur adipiscing elit" | CODE |
| LOW⚡ | tests/test_closets.py | 211 | content = "lorem ipsum dolor sit amet consectetur adipiscing elit" | CODE |
| LOW⚡ | tests/test_miner_fts5_validation.py | 182 | (src / "a.md").write_text("placeholder") | CODE |
| LOW⚡ | tests/test_miner_fts5_validation.py | 232 | big = "lorem ipsum " * 500 | CODE |
| LOW | tests/test_miner_fts5_validation.py | 284 | (src / "big.md").write_text("lorem ipsum " * 200) | CODE |
| LOW | tests/test_miner_fts5_validation.py | 297 | (src / "big.md").write_text("lorem ipsum dolor " * 200) | CODE |
| LOW | tests/test_miner_fts5_validation.py | 337 | (src / "big.md").write_text("lorem ipsum " * 200) | CODE |
| LOW | tests/test_miner_fts5_validation.py | 353 | (src / "big.md").write_text("lorem ipsum dolor " * 200) | CODE |
| LOW | tests/test_miner_fts5_validation.py | 546 | (src / "big.md").write_text("lorem ipsum " * 200) | CODE |
| LOW | tests/test_miner_fts5_validation.py | 556 | (src / "big.md").write_text("lorem ipsum dolor " * 200) | CODE |
| LOW | tests/test_miner_fts5_validation.py | 915 | (src / "big.md").write_text("lorem ipsum " * 200) | CODE |
| LOW | tests/test_miner_fts5_validation.py | 928 | (src / "big.md").write_text("lorem ipsum dolor " * 200) | CODE |
| LOW | tests/conftest.py | 443 | kg.add_triple("Alice", "works_at", "Acme Corp", valid_from="2020-01-01", valid_to="2024-12-31") | CODE |
| LOW⚡ | tests/test_format_miner.py | 224 | f.write_bytes(b"placeholder") | CODE |
| LOW⚡ | tests/test_format_miner.py | 232 | f.write_bytes(b"placeholder") | CODE |
| LOW⚡ | tests/test_project_scanner.py | 186 | assert _looks_like_real_name("Jane Doe") | CODE |
| LOW⚡ | tests/test_project_scanner.py | 227 | ("Jane Doe", "jane@work.com", "r"), | CODE |
| LOW⚡ | tests/test_project_scanner.py | 228 | ("Jane Doe", "jane@personal.com", "r"), | CODE |
| LOW⚡ | tests/test_project_scanner.py | 231 | assert people["Jane Doe"].total_commits == 2 | CODE |
| LOW⚡ | tests/test_project_scanner.py | 232 | assert len(people["Jane Doe"].emails) == 2 | CODE |
| LOW⚡ | tests/test_project_scanner.py | 335 | def _init_git_repo(path: Path, name: str = "Jane Doe", email: str = "jane@example.com"): | CODE |
| LOW⚡ | tests/test_project_scanner.py | 504 | assert [person.name for person in people] == ["Jane Doe"] | CODE |
| LOW⚡ | tests/test_project_scanner.py | 525 | people = [PersonInfo(name="Jane Doe", total_commits=5, repos={"r"})] | CODE |
| LOW⚡ | tests/test_project_scanner.py | 532 | assert d["people"][0]["name"] == "Jane Doe" | CODE |
| LOW | tests/test_project_scanner.py | 492 | _init_git_repo(tmp_path, name="Jane Doe", email="jane@example.com") | CODE |
| LOW⚡ | tests/test_knowledge_graph.py | 105 | assert "Acme Corp" in employers | CODE |
| LOW⚡ | tests/test_knowledge_graph.py | 112 | assert "Acme Corp" not in employers | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_readme_claims.py | 789 | # Check if either miner references 'hall' in the metadata it writes | COMMENT |
| LOW | tests/test_save_hook_mines.py | 53 | # Check if MEMPAL_DIR defaults to empty | COMMENT |
| LOW | tests/test_antigravity_hooks_shell.py | 646 | # Set interval to 1 so the modulo gate would normally fire on the | COMMENT |
| LOW⚡ | tests/test_miner.py | 2840 | # Set mtime to a known value (2023-07-15 12:00 UTC) | COMMENT |
| LOW | tests/benchmarks/test_search_bench.py | 86 | # Check if needle content appears in top 5 | COMMENT |
| LOW | tests/benchmarks/data_generator.py | 365 | # Write files distributed across room directories | COMMENT |
| LOW | tests/benchmarks/test_palace_boost.py | 173 | # Check if boost increases with scale (the hypothesis) | COMMENT |
| LOW | mempalace/query_parser.py | 336 | # Check if there is an embedded command/dsl string in query, command, or input | COMMENT |
| LOW | mempalace/query_parser.py | 728 | # Check if there is an embedded command/dsl string in command, input, dsl, pql | COMMENT |
| LOW | mempalace/normalize.py | 329 | # Check if this message is tool_results only (no user text) | COMMENT |
| LOW | mempalace/entity_registry.py | 324 | # Check if this is an ambiguous word | COMMENT |
| LOW | benchmarks/convomem_bench.py | 201 | # Check if any retrieved message matches evidence | COMMENT |
| LOW | benchmarks/membench_bench.py | 376 | # Check if any target turn is retrieved. | COMMENT |
| LOW | benchmarks/longmemeval_bench.py | 3216 | # Print results | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | mempalace/miner.py | 2253 | CODE | |
| LOW | mempalace/miner.py | 2310 | CODE | |
| LOW | mempalace/logstream.py | 206 | CODE | |
| LOW | mempalace/logstream.py | 674 | CODE | |
| LOW | mempalace/logstream.py | 903 | CODE | |
| LOW | mempalace/logstream.py | 972 | CODE | |
| LOW | mempalace/daemon.py | 1623 | CODE | |
| LOW | mempalace/searcher/query.py | 170 | CODE | |
| LOW | mempalace/searcher/media_search.py | 14 | CODE | |
| LOW | mempalace/searcher/sqlite_bm25.py | 109 | CODE | |
| LOW | mempalace/searcher/cli_search.py | 168 | CODE | |
| LOW | mempalace/mcp_server/tools_read.py | 580 | CODE | |
| LOW | mempalace/mcp_server/tools_coord.py | 14 | CODE | |
| LOW | mempalace/mcp_server/tools_coord.py | 117 | CODE | |
| LOW | mempalace/mcp_server/tools_coord.py | 184 | CODE | |
| LOW | mempalace/mcp_server/tools_coord.py | 275 | CODE | |
| LOW | benchmarks/locomo_bench.py | 566 | CODE | |
| LOW | benchmarks/longmemeval_bench.py | 2936 | CODE | |
| LOW | benchmarks/model_eval/runner.py | 234 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | mempalace/onboarding.py | 84 | # Step 1: Mode selection | COMMENT |
| LOW⚡ | mempalace/onboarding.py | 268 | # Step 6: Ambiguity warnings | COMMENT |
| LOW⚡ | mempalace/onboarding.py | 399 | # Step 1: Mode | COMMENT |
| LOW⚡ | mempalace/onboarding.py | 409 | # Step 2: People | COMMENT |
| LOW⚡ | mempalace/onboarding.py | 412 | # Step 3: Projects | COMMENT |
| LOW⚡ | mempalace/onboarding.py | 415 | # Step 4: Wings (stored in config, not registry — just show user) | COMMENT |
| LOW⚡ | mempalace/onboarding.py | 418 | # Step 5: Auto-detect additional people from files | COMMENT |
| LOW | mempalace/onboarding.py | 451 | # Step 6: Warn about ambiguous names | COMMENT |
| LOW⚡ | mempalace/onboarding.py | 141 | # Step 2: People | STRING |
| LOW⚡ | mempalace/onboarding.py | 196 | # Step 3: Projects | STRING |
| LOW⚡ | mempalace/onboarding.py | 222 | # Step 4: Wings | STRING |
| LOW⚡ | mempalace/onboarding.py | 244 | # Step 5: Auto-detect from files | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | mempalace/palace_graph.py | 760 | Create an explicit (symmetric) tunnel between two locations in the palace. Tunnels are undirected: ``create_tunnel( | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_mcp_proxy.py | 111 | def handle_request(self, request): | CODE |
| LOW | tests/mcp/test_protocol.py | 2137 | def helper(req): | CODE |
| LOW | mempalace/mcp_server/protocol.py | 709 | def handle_request(request): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_cli_hallways.py | 148 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| 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 | CODE |