Repository Analysis

MemPalace/mempalace

The best-benchmarked open-source AI memory system. And it's free.

27.8 Moderate AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of MemPalace/mempalace, a Python project with 57,305 GitHub stars. SynthScan v2.0 examined 233,200 lines of code across 419 source files, recording 4763 pattern matches distributed across 20 syntactic categories. The overall adjusted score of 27.8 places this repository in the Moderate AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

27.8
Adjusted Score
27.8
Raw Score
100%
Time Factor
2026-07-10
Last Push
57.3K
Stars
Python
Language
233.2K
Lines of Code
419
Files
4.8K
Pattern Hits
2026-07-14
Scan Date
0.03
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 0HIGH 11MEDIUM 984LOW 3768

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 4763 distinct pattern matches across 20 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Decorative Section Separators917 hits · 3051 pts
SeverityFileLineSnippetContext
MEDIUMtools/find_orphan_claude_jsonls.sh3# -----------------------------------------------------------------------------COMMENT
MEDIUMtools/find_orphan_claude_jsonls.sh14# -----------------------------------------------------------------------------COMMENT
MEDIUMtests/test_closets.py222 # ── Tier 6a — date + line-range pointer segment ────────────────────────COMMENT
MEDIUMtests/test_closets.py506# ── _extract_drawer_ids_from_closet ───────────────────────────────────COMMENT
MEDIUMtests/test_closets.py526# ── search_memories closet-first path ────────────────────────────────COMMENT
MEDIUMtests/test_closets.py586# ── entity metadata ──────────────────────────────────────────────────COMMENT
MEDIUMtests/test_closets.py699# ── BM25 hybrid search (real IDF over candidate corpus) ──────────────COMMENT
MEDIUMtests/test_closets.py66# ── mine_lock ────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_closets.py149# ── build_closet_lines ─────────────────────────────────────────────────COMMENT
MEDIUMtests/test_closets.py350# ── upsert_closet_lines ───────────────────────────────────────────────COMMENT
MEDIUMtests/test_closets.py389# ── purge_file_closets ────────────────────────────────────────────────COMMENT
MEDIUMtests/test_closets.py409# ── project miner: closet rebuild end-to-end ──────────────────────────COMMENT
MEDIUMtests/test_closets.py761# ── diary ingest ─────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_closets.py939 # ── #1539: per-entry drawers, oversized-entry chunking ─────────COMMENT
MEDIUMtests/test_closets.py1218# ── cross-wing tunnels ───────────────────────────────────────────────COMMENT
MEDIUMtests/test_closets.py1292 # ── regression: symmetry, durability, validation, concurrency ─────COMMENT
MEDIUMtests/test_closets.py1392# ── drawer-grep neighbor expansion ────────────────────────────────────COMMENT
MEDIUMtests/test_hallways_palace_scoped.py24# =============================================================================COMMENT
MEDIUMtests/test_hallways_palace_scoped.py26# =============================================================================COMMENT
MEDIUMtests/test_hallways_palace_scoped.py53# =============================================================================COMMENT
MEDIUMtests/test_hallways_palace_scoped.py55# =============================================================================COMMENT
MEDIUMtests/test_hallways_palace_scoped.py101# =============================================================================COMMENT
MEDIUMtests/test_hallways_palace_scoped.py103# =============================================================================COMMENT
MEDIUMtests/test_searcher.py59# ── search_memories (API) ──────────────────────────────────────────────COMMENT
MEDIUMtests/test_searcher.py17# ── build_where_filter (unit) ──────────────────────────────────────────COMMENT
MEDIUMtests/test_searcher.py306# ── BM25 internals: None / empty document safety ─────────────────────COMMENT
MEDIUMtests/test_searcher.py344# ── search() (CLI print function) ─────────────────────────────────────COMMENT
MEDIUMtests/test_miner_fts5_validation.py124# ── 1. Helper returns silently on a clean palace ────────────────────COMMENT
MEDIUMtests/test_miner_fts5_validation.py135# ── 2. Helper raises MineValidationError on corrupt sqlite ──────────COMMENT
MEDIUMtests/test_miner_fts5_validation.py166# ── 3. cmd_mine surfaces MineValidationError as exit-1 + banner ─────COMMENT
MEDIUMtests/test_miner_fts5_validation.py214# ── 4. Dry-run skips validation ─────────────────────────────────────COMMENT
MEDIUMtests/test_miner_fts5_validation.py24# ── Helpers ─────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_split_mega_files.py6# ── Config loading ─────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_split_mega_files.py54# ── Config: force_reload and invalid JSON ──────────────────────────────COMMENT
MEDIUMtests/test_split_mega_files.py94# ── is_true_session_start ──────────────────────────────────────────────COMMENT
MEDIUMtests/test_split_mega_files.py175# ── extract_timestamp ──────────────────────────────────────────────────COMMENT
MEDIUMtests/test_split_mega_files.py198# ── extract_subject ────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_split_mega_files.py231# ── split_file ─────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_split_mega_files.py126# ── find_session_boundaries ────────────────────────────────────────────COMMENT
MEDIUMtests/test_palace_graph_tunnels.py502# =============================================================================COMMENT
MEDIUMtests/test_palace_graph_tunnels.py504# =============================================================================COMMENT
MEDIUMtests/test_palace_graph_tunnels.py575# =============================================================================COMMENT
MEDIUMtests/test_palace_graph_tunnels.py577# =============================================================================COMMENT
MEDIUMtests/test_corpus_origin_integration.py1049# ─────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_corpus_origin_integration.py1056# ─────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_corpus_origin_integration.py1721# ─────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_corpus_origin_integration.py1730# ─────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_corpus_origin_integration.py114# ── Baseline test: pin v3.3.3 behavior ────────────────────────────────────COMMENT
MEDIUMtests/test_corpus_origin_integration.py152# ── corpus-origin test: with corpus_origin, personas reclassify ───────────COMMENT
MEDIUMtests/test_corpus_origin_integration.py192# ── discover_entities (project_scanner) threads corpus_origin ─────────────COMMENT
MEDIUMtests/test_corpus_origin_integration.py243# ── Pass 0 — cmd_init runs corpus_origin and writes origin.json ──────────COMMENT
MEDIUMtests/test_corpus_origin_integration.py416# ── llm_refine consumer wiring ────────────────────────────────────────────COMMENT
MEDIUMtests/test_corpus_origin_integration.py508# ── mempalace mine --redetect-origin flag ───────────────────────────────COMMENT
MEDIUMtests/test_corpus_origin_integration.py645# ── --llm default flip + graceful fallback ───────────────────────────────COMMENT
MEDIUMtests/test_corpus_origin_integration.py803# ── End-to-end pipeline + edge cases ──────────────────────────────────────COMMENT
MEDIUMtests/test_corpus_origin_integration.py1315# ─────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_corpus_origin_integration.py1331# ─────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_corpus_origin_integration.py1392# ─────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_corpus_origin_integration.py1410# ─────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_corpus_origin_integration.py1833# ─────────────────────────────────────────────────────────────────────────COMMENT
857 more matches not shown…
Hyper-Verbose Identifiers2936 hits · 2472 pts
SeverityFileLineSnippetContext
LOWCONTRIBUTING.md46def test_function_never_fabricates_output_on_random_input(s):CODE
LOWtests/test_closets.py210 def test_emits_fallback_line_when_nothing_extractable(self):CODE
LOWtests/test_closets.py217 def test_pointer_references_first_three_drawers(self):CODE
LOWtests/test_closets.py224 def test_includes_date_line_segment_when_metas_provided(self):CODE
LOWtests/test_closets.py510 def test_parses_single_pointer(self):CODE
LOWtests/test_closets.py513 def test_parses_multiple_pointers_per_line(self):CODE
LOWtests/test_closets.py517 def test_dedupes_across_lines(self):CODE
LOWtests/test_closets.py521 def test_empty_doc_returns_empty(self):CODE
LOWtests/test_closets.py530 def test_pure_drawer_when_no_closets(self, palace_path, seeded_collection):CODE
LOWtests/test_closets.py540 def test_closet_boost_marks_hit_as_drawer_plus_closet(self, palace_path, seeded_collection):CODE
LOWtests/test_closets.py590 def test_extracts_capitalized_names(self):CODE
LOWtests/test_closets.py596 def test_empty_for_no_entities(self):CODE
LOWtests/test_closets.py605 def test_stoplist_filters_sentence_starters(self):CODE
LOWtests/test_closets.py703 def test_scores_positive_for_matching_doc(self):CODE
LOWtests/test_closets.py711 def test_scores_zero_when_no_overlap(self):CODE
LOWtests/test_closets.py715 def test_idf_downweights_terms_present_in_every_doc(self):CODE
LOWtests/test_closets.py88 def test_lock_acquires_and_releases(self, tmp_path):CODE
LOWtests/test_closets.py99 def test_lock_blocks_concurrent_access(self, tmp_path):CODE
LOWtests/test_closets.py153 def test_emits_pointer_line_shape(self):CODE
LOWtests/test_closets.py174 def test_extracts_section_headers_as_topics(self):CODE
LOWtests/test_closets.py181 def test_entity_stoplist_filters_sentence_starters(self):CODE
LOWtests/test_closets.py199 def test_real_proper_nouns_survive_stoplist(self):CODE
LOWtests/test_closets.py299 def test_date_segment_uses_filed_at_date_portion_only(self):CODE
LOWtests/test_closets.py320 def test_content_date_preferred_over_filed_at(self):CODE
LOWtests/test_closets.py354 def test_overwrites_existing_closet_does_not_append(self, palace_path):CODE
LOWtests/test_closets.py372 def test_packs_into_multiple_closets_without_splitting_lines(self, palace_path):CODE
LOWtests/test_closets.py393 def test_deletes_only_the_targeted_source(self, palace_path):CODE
LOWtests/test_closets.py413 def test_remine_replaces_closets_completely(self, tmp_path):CODE
LOWtests/test_closets.py570 def test_max_distance_filters_hybrid_hits(self, palace_path, seeded_collection):CODE
LOWtests/test_closets.py620 def test_capped_list_never_truncates_a_name(self):CODE
LOWtests/test_closets.py664 def test_known_registry_is_cached_by_mtime(self, monkeypatch, tmp_path):CODE
LOWtests/test_closets.py728 def test_empty_inputs_return_zeros(self):CODE
LOWtests/test_closets.py733 def test_hybrid_rank_promotes_keyword_match(self):CODE
LOWtests/test_closets.py746 def test_hybrid_rank_absolute_normalization(self):CODE
LOWtests/test_closets.py765 def test_ingest_creates_drawers_and_closets(self, tmp_path):CODE
LOWtests/test_closets.py779 def test_ingest_skips_unchanged_on_second_run(self, tmp_path):CODE
LOWtests/test_closets.py793 def test_ingest_detects_same_size_content_edit(self, tmp_path):CODE
LOWtests/test_closets.py830 def test_legacy_state_backfills_content_hash(self, tmp_path):CODE
LOWtests/test_closets.py871 def test_state_file_lives_outside_diary_dir(self, tmp_path):CODE
LOWtests/test_closets.py901 def test_wing_prefixed_drawer_id_prevents_cross_diary_collision(self, tmp_path):CODE
LOWtests/test_closets.py941 def test_diary_multiple_entries_one_drawer_each(self, tmp_path):CODE
LOWtests/test_closets.py962 def test_large_diary_with_oversized_entry_chunks_within_entry(self, tmp_path):CODE
LOWtests/test_closets.py997 def test_incremental_appends_new_entry_only(self, tmp_path):CODE
LOWtests/test_closets.py1024 def test_entry_count_watermark_matches_drawer_count(self, tmp_path):CODE
LOWtests/test_closets.py1051 def test_diary_chunk_index_is_global_across_entries(self, tmp_path):CODE
LOWtests/test_closets.py1088 def test_diary_entry_deletion_purges_orphan_drawers(self, tmp_path):CODE
LOWtests/test_closets.py1123 def test_diary_header_only_entry_produces_drawer(self, tmp_path):CODE
LOWtests/test_closets.py1149 def test_diary_atomic_batched_upsert_on_failure(self, tmp_path, monkeypatch):CODE
LOWtests/test_closets.py1260 def test_list_tunnels_with_and_without_filter(self):CODE
LOWtests/test_closets.py1274 def test_dedup_same_endpoints_updates_label(self):CODE
LOWtests/test_closets.py1281 def test_follow_tunnels_returns_connected_endpoints(self):CODE
LOWtests/test_closets.py1304 def test_follow_tunnels_works_from_either_endpoint(self):CODE
LOWtests/test_closets.py1317 def test_empty_endpoint_fields_rejected(self):CODE
LOWtests/test_closets.py1332 def test_corrupt_tunnel_file_does_not_lose_new_writes(self):CODE
LOWtests/test_closets.py1350 def test_atomic_write_leaves_no_stray_tmp_file(self):CODE
LOWtests/test_closets.py1359 def test_concurrent_creates_preserve_all_tunnels(self):CODE
LOWtests/test_closets.py1385 def test_created_at_is_timezone_aware(self):CODE
LOWtests/test_closets.py1421 def test_expand_returns_matched_plus_neighbors(self, palace_path):CODE
LOWtests/test_closets.py1440 def test_expand_at_start_of_file_only_has_next_neighbor(self, palace_path):CODE
LOWtests/test_closets.py1454 def test_expand_at_end_of_file_only_has_prev_neighbor(self, palace_path):CODE
2876 more matches not shown…
Excessive Try-Catch Wrapping337 hits · 296 pts
SeverityFileLineSnippetContext
LOWtools/find_orphan_claude_jsonls.sh55 except Exception:CODE
LOWtools/find_orphan_claude_jsonls.sh89except Exception:CODE
MEDIUMtests/test_closets.py1366def worker(i):CODE
LOWtests/test_closets.py1370 except Exception as e:CODE
LOWtests/conftest.py74 except Exception:CODE
LOWtests/conftest.py89 except Exception:CODE
LOWtests/conftest.py129 except Exception:CODE
LOWtests/test_milvus_backend.py368 except Exception:CODE
LOWtests/test_mine_lock_lifecycle.py217 except Exception:CODE
LOWtests/test_mine_lock_lifecycle.py223 except Exception:CODE
MEDIUMtests/test_sqlite_exact_backend.py585def racing_connect(*args, **kwargs):CODE
LOWtests/test_sqlite_exact_backend.py606 except Exception as exc:CODE
LOWtests/test_live_pgvector_conformance.py61 except Exception:CODE
LOWtests/test_live_pgvector_conformance.py278 except Exception as exc: # noqa: BLE001 - collected for the reportCODE
LOWtests/test_live_pgvector_conformance.py315 except Exception as exc: # noqa: BLE001 - collected for the reportCODE
LOWtests/test_hooks_cli.py856 except Exception:CODE
LOWtests/test_daemon.py220 except Exception: # noqa: BLE001 - best-effort; we force-shutdown belowCODE
LOWtests/test_daemon.py227 except Exception: # noqa: BLE001CODE
LOWtests/test_daemon.py231 except Exception: # noqa: BLE001CODE
LOWtests/test_repair.py1975 except Exception:CODE
MEDIUMtests/test_pgvector_backend.py766def racing_connect(dsn):CODE
LOWtests/test_pgvector_backend.py713 except Exception:CODE
LOWtests/test_pgvector_backend.py784 except Exception as exc:CODE
LOWtests/test_migrate.py286 except Exception:CODE
LOWtests/test_migrate.py332 except Exception:CODE
LOWtests/test_qdrant_backend.py557 except Exception:CODE
LOWtests/benchmarks/conftest.py107 except Exception:CODE
LOWtests/benchmarks/conftest.py114 except Exception:CODE
LOWtests/benchmarks/conftest.py138 except Exception:CODE
LOWtests/benchmarks/test_knowledge_graph_bench.py191 except Exception:CODE
LOWtests/benchmarks/test_knowledge_graph_bench.py233 except Exception:CODE
LOWtests/benchmarks/test_knowledge_graph_bench.py244 except Exception:CODE
LOWmempalace/repair.py74 except Exception:CODE
LOWmempalace/repair.py310 except Exception:CODE
LOWmempalace/repair.py313 except Exception as exc:CODE
LOWmempalace/repair.py316 except Exception:CODE
LOWmempalace/repair.py95 except Exception:CODE
LOWmempalace/repair.py107 except Exception:CODE
LOWmempalace/repair.py117 except Exception:CODE
LOWmempalace/repair.py146 except Exception:CODE
LOWmempalace/repair.py173 except Exception:CODE
LOWmempalace/repair.py186 except Exception:CODE
LOWmempalace/repair.py195 except Exception:CODE
LOWmempalace/repair.py366 except Exception:CODE
LOWmempalace/repair.py374 except Exception:CODE
LOWmempalace/repair.py431 except Exception:CODE
LOWmempalace/repair.py436 except Exception:CODE
LOWmempalace/repair.py569 except Exception:CODE
LOWmempalace/repair.py705 except Exception as exc:CODE
LOWmempalace/repair.py776 except Exception:CODE
LOWmempalace/repair.py899 except Exception as exc:CODE
LOWmempalace/repair.py979 except Exception as e:CODE
LOWmempalace/repair.py1042 except Exception as restore_error:CODE
LOWmempalace/repair.py1143 except Exception as exc: # noqa: BLE001 — chromadb raises many shapesCODE
LOWmempalace/repair.py1445 except Exception as exc: # noqa: BLE001CODE
LOWmempalace/repair.py1586 except Exception:CODE
LOWmempalace/repair.py1592 except Exception:CODE
LOWmempalace/repair.py1827 except Exception:CODE
LOWmempalace/sync.py298 except Exception as exc:CODE
LOWmempalace/service.py228 except Exception as exc:CODE
277 more matches not shown…
Unused Imports145 hits · 124 pts
SeverityFileLineSnippetContext
LOWtests/test_miner_fts5_validation.py10CODE
LOWtests/test_corpus_origin_integration.py25CODE
LOWtests/test_mine_lock_lifecycle.py1CODE
LOWtests/test_sync.py1423CODE
LOWtests/test_hooks_shell.py20CODE
LOWtests/test_cursor_plugin_manifest.py29CODE
LOWtests/test_format_miner.py12CODE
LOWtests/test_format_miner.py610CODE
LOWtests/test_hnsw_capacity.py9CODE
LOWtests/test_cursor_hooks_install.py16CODE
LOWtests/test_collision_scan.py16CODE
LOWtests/test_ids.py11CODE
LOWtests/test_antigravity_hooks_install.py15CODE
LOWtests/test_chroma_collection_lock.py26CODE
LOWtests/test_antigravity_hooks_shell.py20CODE
LOWtests/test_cursor_hooks_shell.py28CODE
LOWtests/test_hooks_bash_compat.py17CODE
LOWtests/test_dynamics.py10CODE
LOWtests/test_fact_checker.py19CODE
LOWtests/test_palace_locks.py10CODE
LOWtests/test_qdrant_bulk_metadata_scroll.py72CODE
LOWtests/benchmarks/benchmark_dialect.py1CODE
LOWtests/benchmarks/benchmark_dialect.py3CODE
LOWmempalace/sync.py20CODE
LOWmempalace/service.py9CODE
LOWmempalace/convo_scanner.py22CODE
LOWmempalace/project_scanner.py18CODE
LOWmempalace/hallways.py33CODE
LOWmempalace/palace_graph.py21CODE
LOWmempalace/embedding.py32CODE
LOWmempalace/hook_shell.py9CODE
LOWmempalace/collision_scan.py24CODE
LOWmempalace/__init__.py38CODE
LOWmempalace/fact_checker.py28CODE
LOWmempalace/wal.py13CODE
LOWmempalace/llm_refine.py21CODE
LOWmempalace/llm_client.py24CODE
LOWmempalace/corpus_origin.py35CODE
LOWmempalace/_stdio.py25CODE
LOWmempalace/format_miner.py59CODE
LOWmempalace/sweeper.py39CODE
LOWmempalace/ids.py16CODE
LOWmempalace/daemon.py8CODE
LOWmempalace/entity_detector.py33CODE
LOWmempalace/dynamics.py29CODE
LOWmempalace/backends/milvus.py11CODE
LOWmempalace/backends/qdrant.py9CODE
LOWmempalace/backends/registry.py15CODE
LOWmempalace/backends/embedding_wrapper.py3CODE
LOWmempalace/backends/__init__.py17CODE
LOWmempalace/backends/__init__.py17CODE
LOWmempalace/backends/__init__.py17CODE
LOWmempalace/backends/__init__.py17CODE
LOWmempalace/backends/__init__.py17CODE
LOWmempalace/backends/__init__.py17CODE
LOWmempalace/backends/__init__.py17CODE
LOWmempalace/backends/__init__.py17CODE
LOWmempalace/backends/__init__.py17CODE
LOWmempalace/backends/__init__.py17CODE
LOWmempalace/backends/__init__.py17CODE
85 more matches not shown…
Deep Nesting149 hits · 108 pts
SeverityFileLineSnippetContext
LOWtools/render_jsonl.py20CODE
LOWtests/test_corpus_origin_integration.py1334CODE
LOWtests/conftest.py55CODE
LOWtests/conftest.py63CODE
LOWtests/test_hooks_cli.py476CODE
LOWtests/test_hooks_cli.py898CODE
LOWtests/test_hooks_cli.py914CODE
LOWtests/test_hooks_cli.py941CODE
LOWtests/test_hooks_cli.py976CODE
LOWtests/test_hooks_cli.py1025CODE
LOWtests/test_hooks_cli.py1063CODE
LOWtests/test_hooks_cli.py1074CODE
LOWtests/test_hooks_cli.py1229CODE
LOWtests/test_hooks_cli.py1279CODE
LOWtests/test_hooks_cli.py1304CODE
LOWtests/test_hnsw_capacity.py359CODE
LOWtests/test_chroma_collection_lock.py80CODE
LOWtests/test_palace_locks.py47CODE
LOWtests/test_palace_locks.py262CODE
LOWtests/benchmarks/report.py34CODE
LOWmempalace/repair.py178CODE
LOWmempalace/repair.py321CODE
LOWmempalace/repair.py400CODE
LOWmempalace/repair.py1171CODE
LOWmempalace/repair.py1692CODE
LOWmempalace/sync.py203CODE
LOWmempalace/service.py143CODE
LOWmempalace/convo_scanner.py57CODE
LOWmempalace/project_scanner.py509CODE
LOWmempalace/miner.py599CODE
LOWmempalace/miner.py707CODE
LOWmempalace/miner.py811CODE
LOWmempalace/miner.py1583CODE
LOWmempalace/miner.py1756CODE
LOWmempalace/palace_graph.py90CODE
LOWmempalace/palace_graph.py189CODE
LOWmempalace/palace_graph.py640CODE
LOWmempalace/room_detector_local.py100CODE
LOWmempalace/room_detector_local.py195CODE
LOWmempalace/dialect.py806CODE
LOWmempalace/dialect.py928CODE
LOWmempalace/knowledge_graph.py338CODE
LOWmempalace/knowledge_graph.py370CODE
LOWmempalace/knowledge_graph.py658CODE
LOWmempalace/onboarding.py113CODE
LOWmempalace/onboarding.py145CODE
LOWmempalace/onboarding.py390CODE
LOWmempalace/searcher.py494CODE
LOWmempalace/exporter.py68CODE
LOWmempalace/normalize.py203CODE
LOWmempalace/normalize.py428CODE
LOWmempalace/normalize.py559CODE
LOWmempalace/normalize.py600CODE
LOWmempalace/normalize.py642CODE
LOWmempalace/normalize.py697CODE
LOWmempalace/normalize.py780CODE
LOWmempalace/llm_refine.py109CODE
LOWmempalace/cli.py275CODE
LOWmempalace/cli.py835CODE
LOWmempalace/cli.py1083CODE
89 more matches not shown…
Over-Commented Block102 hits · 86 pts
SeverityFileLineSnippetContext
LOWpyproject.toml81 "pytest-rerunfailures>=12.0",COMMENT
LOWpyproject.toml101]COMMENT
LOWpyproject.toml121dml = ["onnxruntime-directml>=1.16"]COMMENT
LOWdocker-entrypoint.sh1#!/usr/bin/env shCOMMENT
LOWdocker-compose.yml1# MemPalace via Docker Compose.COMMENT
LOWtools/backup_claude_jsonls.sh1#!/usr/bin/env bashCOMMENT
LOWtools/find_orphan_claude_jsonls.sh1#!/usr/bin/env bashCOMMENT
LOWdeploy/docker-compose.server.yml1# MemPalace remote team server — MCP over HTTP, backed by a central Qdrant.COMMENT
LOWtests/test_closets.py1721 # Group B's content must not leak in through the shared source_fileCOMMENT
LOWtests/test_corpus_origin_integration.py1321# must use feature names ("corpus_origin", "corpus-origin detection")COMMENT
LOWtests/conftest.py101COMMENT
LOWtests/test_format_miner.py561COMMENT
LOWtests/test_convo_miner.py301COMMENT
LOWtests/test_qdrant_bulk_metadata_scroll.py321 assert call_log[0]["limit"] == qdrant_mod._SCROLL_PAGE_SIZECOMMENT
LOWtests/test_qdrant_bulk_metadata_scroll.py341# automatic link between the two. (Diagnosed during review on #1832 afterCOMMENT
LOWtests/test_normalize.py461# JSONL. The schema (per google-gemini/gemini-cli#15292):COMMENT
LOWtests/test_normalize.py1841 assert "line one" in outCOMMENT
LOWmempalace/repair.py1121 # ``create_collection`` lives inside the try so a Chroma-sideCOMMENT
LOWmempalace/repair.py1401 return {}COMMENT
LOWmempalace/config.py21COMMENT
LOWmempalace/config.py121# safe when datetime values use one canonical shape. Accept full dates forCOMMENT
LOWmempalace/miner.py161# lives in ``config.DEFAULT_CHUNK_*``.COMMENT
LOWmempalace/miner.py1021COMMENT
LOWmempalace/miner.py1041# "April 6th 2011", "8 Nov 2024", etc.)COMMENT
LOWmempalace/miner.py1061# never set — dateutil only runs in strict mode on a substring we'veCOMMENT
LOWmempalace/palace_graph.py581 # Preserve original creation timestamp on label updates.COMMENT
LOWmempalace/palace_graph.py701COMMENT
LOWmempalace/embedding.py201COMMENT
LOWmempalace/__init__.py1"""MemPalace — Give your AI a memory. No API key required."""COMMENT
LOWmempalace/__init__.py41# warnings ("capture() takes 1 positional argument but 3 were given"). In 1.x theCOMMENT
LOWmempalace/cli.py181 # is the whole reason to run it, but a weak local model (e.g. OllamaCOMMENT
LOWmempalace/corpus_origin.py41COMMENT
LOWmempalace/palace.py61COMMENT
LOWmempalace/palace.py941 # `_clients` dict and leave _DEFAULT_BACKEND's live handle in place,COMMENT
LOWmempalace/palace.py961# different worker thread. A thread-local guard makes those handlers fail to seeCOMMENT
LOWmempalace/palace.py1121 # Ensure the file exists, then open r+ so we can both read the priorCOMMENT
LOWmempalace/ids.py21# Audits compare like-for-like: drawers without ``id_recipe`` are treatedCOMMENT
LOWmempalace/diary_ingest.py221 # Per-entry drawers, with character chunking inside any entryCOMMENT
LOWmempalace/migrate.py381# ---------------------------------------------------------------------------COMMENT
LOWmempalace/hooks_cli.py261 resolved = Path(mempal_dir).expanduser().resolve()COMMENT
LOWmempalace/hooks_cli.py281# a directory of per-target slots, claimed via ``O_CREAT | O_EXCL`` so theCOMMENT
LOWmempalace/mcp_server.py1121 # the identity check passes), but the *provider list* is chromadb'sCOMMENT
LOWmempalace/mcp_server.py3541 # Oversized entry: split into bounded per-chunk drawers so theCOMMENT
LOWmempalace/entity_detector.py41COMMENT
LOWmempalace/entity_detector.py81# ==================== KNOWN-SYSTEMS COMPOUND LEXICON (Tier 3 linguistics cleanup) ====================COMMENT
LOWmempalace/backends/embedding_wrapper.py161 # ``BaseCollection.facet_counts`` is a concrete method that raisesCOMMENT
LOWmempalace/backends/pgvector.py621 # Strip both unstorable byte classes Postgres rejects beforeCOMMENT
LOWmempalace/backends/chroma.py161COMMENT
LOWmempalace/backends/chroma.py621COMMENT
LOWmempalace/backends/chroma.py2061 # chroma.sqlite3 lazily, so the stat captured before the callCOMMENT
LOWhooks/mempal_save_hook.sh1#!/bin/bashCOMMENT
LOWhooks/mempal_save_hook.sh21# "type": "command",COMMENT
LOWhooks/mempal_save_hook.sh41# transcript_path — path to the JSONL transcript fileCOMMENT
LOWhooks/mempal_save_hook.sh61# is always mined regardless — this is purely additive.COMMENT
LOWhooks/mempal_save_hook.sh101 if [ "$AUTO_SAVE" = "false" ]; thenCOMMENT
LOWhooks/mempal_save_hook.sh121# default, and the hook silently produced zero saves (#1440).COMMENT
LOWhooks/mempal_save_hook.sh141# where another local user on a shared box could read the traceback,COMMENT
LOWhooks/mempal_save_hook.sh181if [ -n "$INPUT" ] && [ "$_MEMPAL_PARSE_MARKER" != "__MEMPAL_PARSE_OK__" ]; thenCOMMENT
LOWhooks/mempal_precompact_hook.sh1#!/bin/bashCOMMENT
LOWhooks/mempal_precompact_hook.sh21# "hooks": {COMMENT
42 more matches not shown…
AI Slop Vocabulary20 hits · 63 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_palace_graph_tunnels.py93 # instead of raising — keeps read-path filters robust to bad records.COMMENT
MEDIUMtests/test_hooks_cli.py423 # here: _count_human_messages counts both harness shapes, and we assert onlyCOMMENT
MEDIUMtests/test_hooks_cli.py424 # the harness -> agent_name routing, not transcript parsing.COMMENT
MEDIUMtests/test_hooks_bash_compat.py152 # leaks debug output here would silently break the harness contract.COMMENT
MEDIUMtests/test_hooks_bash_compat.py349 # and the bottom call supplies the ``--hook session-end --harness`` argsCOMMENT
MEDIUMmempalace/repair.py1410 # harness), renaming the directory fails atomically UP FRONT onCOMMENT
LOWmempalace/room_detector_local.py329 # If still nothing, just use generalCOMMENT
MEDIUMmempalace/format_miner.py319 """Convert ``path`` to plain text via MarkItDown, with comprehensive fringe-case handling.STRING
MEDIUMmempalace/hooks_cli.py1283 # Validate the harness-provided transcript path before touching itCOMMENT
MEDIUMmempalace/backends/base.py624 #: no-op, so a benchmark harness can trust the set. Backends MAY add theirCOMMENT
MEDIUMhooks/mempal_save_hook.sh67# Why this is nontrivial: GUI-launched Claude Code on macOS (or any harnessCOMMENT
MEDIUMhooks/mempal_save_hook.sh128# every Stop hook for users on i18n harnesses or unusual harness configs.COMMENT
MEDIUMhooks/mempal_session_end_hook.sh9# exited. All logic lives in mempalace.hooks_cli for cross-harness extensibility.COMMENT
MEDIUMhooks/mempal_session_end_hook.sh40# Return immediately so the harness never blocks on session exit.COMMENT
MEDIUMhooks/antigravity/lib/common.sh216# a hostile / malformed harness payload cannot inject command tokens.COMMENT
MEDIUMbenchmarks/model_eval/metrics.py25# the harness can land on develop independently of the model-router PR.COMMENT
MEDIUM.claude-plugin/hooks/mempal-stop-hook.sh3# All logic lives in mempalace.hooks_cli for cross-harness extensibilityCOMMENT
MEDIUM.claude-plugin/hooks/mempal-session-end-hook.sh11# mempalace.hooks_cli for cross-harness extensibility.COMMENT
MEDIUM.claude-plugin/hooks/mempal-session-end-hook.sh42# Return immediately so the harness never blocks on session exit.COMMENT
MEDIUM.claude-plugin/hooks/mempal-precompact-hook.sh3# All logic lives in mempalace.hooks_cli for cross-harness extensibilityCOMMENT
Modern AI Meta-Vocabulary20 hits · 60 pts
SeverityFileLineSnippetContext
MEDIUMCHANGELOG.md203- **`mempalace repair` can now recover palaces whose HNSW segment writer is stuck on `apply_logs`.** Both the existing `CODE
MEDIUMpyproject.toml33 # Multilingual embedding model deps. Onboarding now offers theCOMMENT
MEDIUMpyproject.toml115# Hardware acceleration for the ONNX embedding model. Install exactly one:COMMENT
MEDIUMdocker-compose.yml11# config, and the cached embedding model across runs.COMMENT
MEDIUMtests/test_closets.py970 # the embedding model's hard token limit. This trips the size-capCOMMENT
MEDIUMtests/test_mcp_server.py357 # palace scaffold on disk before the user runs ``mempalace init``.COMMENT
MEDIUMtests/test_miner.py2235 # hallucinates dates on benign inputs. These tests pin the fix: junkCOMMENT
MEDIUMtests/test_migrate_wings.py68 # Explicit embeddings keep the test hermetic (no embedding model needed) —COMMENT
MEDIUMmempalace/miner.py1058# would hallucinate dates from any digit-bearing text (Igor's reproductionsCOMMENT
MEDIUMmempalace/miner.py1072# padding from today's date, which is hallucination, not extraction.COMMENT
MEDIUMmempalace/miner.py1261 # (no fuzzy=True) — without it, dateutil hallucinates dates from anyCOMMENT
MEDIUMmempalace/miner.py1486 # Batch chunks into bounded upserts so the embedding model sees manyCOMMENT
MEDIUMmempalace/mcp_server.py2613 # embedding model never sees a document above ``chunk_size``.COMMENT
MEDIUMmempalace/mcp_server.py3542 # embedding model never sees a document above ``chunk_size``.COMMENT
MEDIUMmempalace/mcp_server.py3553 # if the embedding model fails mid-loop. ``col.add`` (notCOMMENT
MEDIUMhooks/mempal_precompact_hook.sh5# gets compressed to free up context window space.COMMENT
MEDIUMbenchmarks/BENCHMARKS.md749Same purpose as #2: isolate the contribution of a better embedding model from the contribution of heuristics.CODE
MEDIUMbenchmarks/model_eval/runner.py73# Tasks that score via semantic similarity and require an embedding model.COMMENT
MEDIUMbenchmarks/model_eval/README.md34# This script reads candidates.yaml and pulls every tier-1 model + the embedding modelCOMMENT
MEDIUMbenchmarks/model_eval/reports/2026-05-10-analysis.md200### The 0.36 "hallucination rate" on qwen3:4b memory extraction is a scoring artifactCOMMENT
Structural Annotation Overuse24 hits · 39 pts
SeverityFileLineSnippetContext
LOWmempalace/onboarding.py84# Step 1: Mode selectionCOMMENT
LOWmempalace/onboarding.py268# Step 6: Ambiguity warningsCOMMENT
LOWmempalace/onboarding.py399 # Step 1: ModeCOMMENT
LOWmempalace/onboarding.py409 # Step 2: PeopleCOMMENT
LOWmempalace/onboarding.py412 # Step 3: ProjectsCOMMENT
LOWmempalace/onboarding.py415 # Step 4: Wings (stored in config, not registry — just show user)COMMENT
LOWmempalace/onboarding.py418 # Step 5: Auto-detect additional people from filesCOMMENT
LOWmempalace/onboarding.py451 # Step 6: Warn about ambiguous namesCOMMENT
LOWmempalace/onboarding.py141# Step 2: PeopleSTRING
LOWmempalace/onboarding.py196# Step 3: ProjectsSTRING
LOWmempalace/onboarding.py222# Step 4: WingsSTRING
LOWmempalace/onboarding.py244# Step 5: Auto-detect from filesSTRING
LOWmempalace/instructions/status.md5## Step 1: Gather Palace StatusCOMMENT
LOWmempalace/instructions/status.md12## Step 2: Display Wing/Room/Drawer CountsCOMMENT
LOWmempalace/instructions/status.md22## Step 3: Knowledge Graph Stats (MCP only)COMMENT
LOWmempalace/instructions/status.md32## Step 4: Suggest Next ActionsCOMMENT
LOWmempalace/instructions/init.md6## Step 1: Check Python versionCOMMENT
LOWmempalace/instructions/init.md12## Step 2: Check if mempalace is already installedCOMMENT
LOWmempalace/instructions/init.md24## Step 3: Install mempalaceCOMMENT
LOWmempalace/instructions/init.md48## Step 4: Ask for project directoryCOMMENT
LOWmempalace/instructions/init.md54## Step 5: Initialize the palaceCOMMENT
LOWmempalace/instructions/init.md60## Step 6: Configure MCP serverCOMMENT
LOWmempalace/instructions/init.md73## Step 7: Verify installationCOMMENT
LOWmempalace/instructions/init.md80## Step 8: Show next stepsCOMMENT
Self-Referential Comments10 hits · 39 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_hall_detection.py109 # Create a conversation file with technical contentCOMMENT
MEDIUMtests/test_mcp_server.py795 # Create a collection so status worksCOMMENT
MEDIUMtests/test_mcp_server.py825 # Create the DB file (init does this) but NOT the collectionCOMMENT
MEDIUMtests/test_mcp_server.py3462 # Create a real collection so _get_collection succeedsCOMMENT
MEDIUMtests/test_repair.py346 # Create a valid sqlite file so the repair preflight can run quick_check.COMMENT
MEDIUMtests/test_miner.py2368 # Create a real file with known mtime.COMMENT
MEDIUMtests/test_backends.py1862 # Create the collection using the default (minilm-based) EF.COMMENT
MEDIUMtests/benchmarks/test_knowledge_graph_bench.py58 # Create a hub entity connected to many othersCOMMENT
MEDIUMhooks/cursor/lib/common.sh26# This file is sourced, not executed, so it intentionally has noCOMMENT
MEDIUMhooks/antigravity/lib/common.sh32# This file is sourced, not executed, so it intentionally has noCOMMENT
Modern Structural Boilerplate38 hits · 37 pts
SeverityFileLineSnippetContext
LOWtests/test_mine_lock_lifecycle.py20def _set_home(monkeypatch, tmp_path: Path) -> None:CODE
LOWtests/test_hnsw_capacity.py402def _set_drawer_created_at(palace: str, timestamps: dict[int, str]) -> None:CODE
LOWmempalace/sync.py28logger = logging.getLogger(__name__)CODE
LOWmempalace/sync.py317__all__ = [CODE
LOWmempalace/config.py776 def set_embedding_model(self, model: str) -> None:CODE
LOWmempalace/config.py796 def set_backend(self, backend: str) -> None:CODE
LOWmempalace/hallways.py58__all__ = [CODE
LOWmempalace/miner.py779def _set_wing_topics(existing: dict, wing_key: str, topics_for_wing: list, coerce) -> None:CODE
LOWmempalace/room_detector_local.py19logger = logging.getLogger(__name__)CODE
LOWmempalace/embedding.py39logger = logging.getLogger(__name__)CODE
LOWmempalace/__init__.py60__all__ = ["__version__"]CODE
LOWmempalace/wal.py21logger = logging.getLogger(__name__)CODE
LOWmempalace/format_miner.py94__all__ = [CODE
LOWmempalace/sweeper.py50logger = logging.getLogger(__name__)CODE
LOWmempalace/diary_ingest.py38logger = logging.getLogger(__name__)CODE
LOWmempalace/dynamics.py245__all__ = [CODE
LOWmempalace/backends/milvus.py350 def set_embedder_identity(self, identity) -> None:CODE
LOWmempalace/backends/milvus.py50logger = logging.getLogger(__name__)CODE
LOWmempalace/backends/milvus.py1052 def _set_embedder_identity(self, palace: PalaceRef, collection_name: str, identity) -> None:CODE
LOWmempalace/backends/milvus.py1322__all__ = [CODE
LOWmempalace/backends/qdrant.py48logger = logging.getLogger(__name__)CODE
LOWmempalace/backends/qdrant.py715 def set_embedder_identity(self, identity) -> None:CODE
LOWmempalace/backends/qdrant.py1298 def _set_embedder_identity(self, palace: PalaceRef, collection_name: str, identity) -> None:CODE
LOWmempalace/backends/qdrant.py1483__all__ = ["QdrantBackend", "QdrantCollection"]CODE
LOWmempalace/backends/registry.py24logger = logging.getLogger(__name__)CODE
LOWmempalace/backends/embedding_wrapper.py66 def set_embedder_identity(self, identity) -> None:CODE
LOWmempalace/backends/__init__.py55__all__ = [CODE
LOWmempalace/backends/pgvector.py61logger = logging.getLogger(__name__)CODE
LOWmempalace/backends/pgvector.py835 def set_embedder_identity(self, identity) -> None:CODE
LOWmempalace/backends/pgvector.py1435 def _set_embedder_identity(self, palace: PalaceRef, collection_name: str, identity) -> None:CODE
LOWmempalace/backends/chroma.py39logger = logging.getLogger(__name__)CODE
LOWmempalace/backends/chroma.py1895 def set_embedder_identity(self, identity) -> None:STRING
LOWmempalace/backends/base.py451 def set_embedder_identity(self, identity: EmbedderIdentity) -> None:CODE
LOWmempalace/backends/sqlite_exact.py39logger = logging.getLogger(__name__)CODE
LOWmempalace/backends/sqlite_exact.py345 def set_embedder_identity(self, identity) -> None:CODE
LOWmempalace/backends/sqlite_exact.py1094__all__ = ["SQLiteExactBackend", "SQLiteExactCollection"]STRING
LOWmempalace/sources/registry.py29logger = logging.getLogger(__name__)CODE
LOWmempalace/sources/__init__.py48__all__ = [CODE
Cross-Language Confusion7 hits · 34 pts
SeverityFileLineSnippetContext
HIGHtests/test_mcp_server.py4571 the alias only fills in when 'entry' is absent or null, not merely falsy.STRING
HIGHtests/test_hooks_cli.py721 '{"type":"x","cwd":null}\n'CODE
HIGHtests/test_hooks_cli.py716 """A cwd field that isn't a string (e.g. null, number) must be skipped."""STRING
HIGHtests/test_save_hook_mines.py115 script.write_text(f'{func_src}\nis_valid_transcript_path "$1" && echo OK || echo NO\n')CODE
HIGHtests/test_corpus_origin.py283 "primary_platform": null,CODE
HIGHmempalace/mcp_server.py4805 # all (or passed it as null). An explicit entry — even "" — wins.COMMENT
HIGHbenchmarks/mine_bench.py17 uv venv /tmp/gpu && source /tmp/gpu/bin/activateSTRING
Fake / Example Data21 hits · 20 pts
SeverityFileLineSnippetContext
LOWtests/test_closets.py211 content = "lorem ipsum dolor sit amet consectetur adipiscing elit"CODE
LOWtests/test_closets.py211 content = "lorem ipsum dolor sit amet consectetur adipiscing elit"CODE
LOWtests/test_miner_fts5_validation.py173 (src / "a.md").write_text("placeholder")CODE
LOWtests/test_miner_fts5_validation.py223 big = "lorem ipsum " * 500CODE
LOWtests/test_miner_fts5_validation.py261 (src / "big.md").write_text("lorem ipsum " * 200)CODE
LOWtests/test_miner_fts5_validation.py311 (src / "big.md").write_text("lorem ipsum " * 200)CODE
LOWtests/conftest.py276 kg.add_triple("Alice", "works_at", "Acme Corp", valid_from="2020-01-01", valid_to="2024-12-31")CODE
LOWtests/test_format_miner.py224 f.write_bytes(b"placeholder")CODE
LOWtests/test_format_miner.py232 f.write_bytes(b"placeholder")CODE
LOWtests/test_project_scanner.py186 assert _looks_like_real_name("Jane Doe")CODE
LOWtests/test_project_scanner.py227 ("Jane Doe", "jane@work.com", "r"),CODE
LOWtests/test_project_scanner.py228 ("Jane Doe", "jane@personal.com", "r"),CODE
LOWtests/test_project_scanner.py231 assert people["Jane Doe"].total_commits == 2CODE
LOWtests/test_project_scanner.py232 assert len(people["Jane Doe"].emails) == 2CODE
LOWtests/test_project_scanner.py335def _init_git_repo(path: Path, name: str = "Jane Doe", email: str = "jane@example.com"):CODE
LOWtests/test_project_scanner.py504 assert [person.name for person in people] == ["Jane Doe"]CODE
LOWtests/test_project_scanner.py525 people = [PersonInfo(name="Jane Doe", total_commits=5, repos={"r"})]CODE
LOWtests/test_project_scanner.py532 assert d["people"][0]["name"] == "Jane Doe"CODE
LOWtests/test_project_scanner.py492 _init_git_repo(tmp_path, name="Jane Doe", email="jane@example.com")CODE
LOWtests/test_knowledge_graph.py105 assert "Acme Corp" in employersCODE
LOWtests/test_knowledge_graph.py112 assert "Acme Corp" not in employersCODE
Redundant / Tautological Comments12 hits · 18 pts
SeverityFileLineSnippetContext
LOWtests/test_readme_claims.py556 # Check if either miner references 'hall' in the metadata it writesCOMMENT
LOWtests/test_save_hook_mines.py53 # Check if MEMPAL_DIR defaults to emptyCOMMENT
LOWtests/test_antigravity_hooks_shell.py646 # Set interval to 1 so the modulo gate would normally fire on theCOMMENT
LOWtests/test_miner.py2211 # Set mtime to a known value (2023-07-15 12:00 UTC)COMMENT
LOWtests/benchmarks/test_search_bench.py86 # Check if needle content appears in top 5COMMENT
LOWtests/benchmarks/data_generator.py365 # Write files distributed across room directoriesCOMMENT
LOWtests/benchmarks/test_palace_boost.py173 # Check if boost increases with scale (the hypothesis)COMMENT
LOWmempalace/normalize.py231 # Check if this message is tool_results only (no user text)COMMENT
LOWmempalace/entity_registry.py466 # Check if this is an ambiguous wordCOMMENT
LOWbenchmarks/convomem_bench.py201 # Check if any retrieved message matches evidenceCOMMENT
LOWbenchmarks/membench_bench.py376 # Check if any target turn is retrieved.COMMENT
LOWbenchmarks/longmemeval_bench.py3217 # Print resultsCOMMENT
Verbosity Indicators12 hits · 16 pts
SeverityFileLineSnippetContext
LOWmempalace/onboarding.py84# Step 1: Mode selectionCOMMENT
LOWmempalace/onboarding.py268# Step 6: Ambiguity warningsCOMMENT
LOWmempalace/onboarding.py399 # Step 1: ModeCOMMENT
LOWmempalace/onboarding.py409 # Step 2: PeopleCOMMENT
LOWmempalace/onboarding.py412 # Step 3: ProjectsCOMMENT
LOWmempalace/onboarding.py415 # Step 4: Wings (stored in config, not registry — just show user)COMMENT
LOWmempalace/onboarding.py418 # Step 5: Auto-detect additional people from filesCOMMENT
LOWmempalace/onboarding.py451 # Step 6: Warn about ambiguous namesCOMMENT
LOWmempalace/onboarding.py141# Step 2: PeopleSTRING
LOWmempalace/onboarding.py196# Step 3: ProjectsSTRING
LOWmempalace/onboarding.py222# Step 4: WingsSTRING
LOWmempalace/onboarding.py244# Step 5: Auto-detect from filesSTRING
Cross-File Repetition3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHmempalace/repair.py0select count(*) from embeddings e join segments s on e.segment_id = s.id join collections c on s.collection = c.id whereSTRING
HIGHmempalace/mcp_server.py0select count(*) from embeddings e join segments s on e.segment_id = s.id join collections c on s.collection = c.id whereSTRING
HIGHmempalace/backends/chroma.py0select count(*) from embeddings e join segments s on e.segment_id = s.id join collections c on s.collection = c.id whereSTRING
Docstring Block Structure1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHmempalace/palace_graph.py498Create an explicit (symmetric) tunnel between two locations in the palace. Tunnels are undirected: ``create_tunnel(STRING
AI Structural Patterns6 hits · 4 pts
SeverityFileLineSnippetContext
LOWmempalace/miner.py1699CODE
LOWmempalace/miner.py1756CODE
LOWmempalace/searcher.py1049CODE
LOWbenchmarks/locomo_bench.py621CODE
LOWbenchmarks/longmemeval_bench.py2936CODE
LOWbenchmarks/model_eval/runner.py234CODE
Overly Generic Function Names2 hits · 1 pts
SeverityFileLineSnippetContext
LOWtests/test_mcp_server.py4605 def helper(req):CODE
LOWmempalace/mcp_server.py4672def handle_request(request):CODE
Slop Phrases1 hit · 1 pts
SeverityFileLineSnippetContext
LOW…nchmarks/results_convomem_raw_top10_20260414_1649.json1873 "question": "I just got a Slack message from a colleague that I need to handle later. What's a good way to keep tracCODE