mempalace/tests
Igor Lins e Silva ed77125ae3 feat(backends): shared embedder-identity sidecar + qdrant identity (RFC 001, #1730)
Completes the embedder-identity contract for the last backend (qdrant) and
unifies identity persistence across all local-path backends.

Identity is stored in a small per-palace sidecar (mempalace_embedder.json),
NOT in a backend's mismatch marker. The marker's presence signals "palace
initialized" (reads raise CollectionNotInitializedError when the marker exists
but the store doesn't), so recording identity at first empty open must not
create it — a sidecar is unguarded, so a brand-new palace records identity
immediately. This fixes a latent gap (caught in review) where pgvector/qdrant
palaces stayed permanently "unknown" because the marker isn't written until the
first real write.

- New mempalace/backends/_sidecar.py: shared read/write_embedder_sidecar with
  the isinstance robustness the review bots taught us; chroma, pgvector, and
  qdrant all use it (chroma's inline copy is removed, pgvector switches off the
  marker, qdrant adds it).
- QdrantCollection.get/set_embedder_identity delegate to the sidecar, so
  palace.get_collection enforces a model swap on a qdrant palace exactly like
  the other backends — no live server needed for the check.

Tests: sidecar roundtrip + brand-new-palace recording (creates sidecar without
a marker) + enforcement model-swap raise, for qdrant and pgvector, all
server-free; chroma identity tests unchanged. Full suite: 2495 passed, 82.52%.

Closes #1730. Refs #743, #1724.
2026-06-08 10:20:45 -03:00
..
benchmarks test(mcp): migrate _kg monkeypatches to _get_kg (#1136) 2026-05-03 17:43:00 +05:00
_backend_conformance.py feat: add pgvector backend + namespace-isolation conformance contract 2026-06-05 21:41:21 -03:00
conftest.py feat: add pluggable vector backends 2026-06-02 21:38:53 -03:00
test_backend_conformance.py feat: add pgvector backend + namespace-isolation conformance contract 2026-06-05 21:41:21 -03:00
test_backends.py Merge pull request #1602 from mvalentsev/fix/1573-quarantine-rearm-mtime 2026-06-06 00:16:12 -03:00
test_chroma_collection_lock.py style: reformat tree with ruff 0.15.9 2026-05-17 23:20:01 -03:00
test_claude_plugin_hook_config.py style: reformat tree with ruff 0.15.9 2026-05-17 23:20:01 -03:00
test_claude_plugin_hook_wrappers.py test: normalize wrapper script path for bash on Windows 2026-04-19 10:34:11 +02:00
test_clean_lone_surrogates.py fix(backends): keep single-string documents whole in surrogate sanitiser 2026-06-01 17:19:10 -05:00
test_cli.py feat: add pluggable vector backends 2026-06-02 21:38:53 -03:00
test_closet_llm.py style: ruff format tests/test_hooks_cli.py with CI-pinned ruff 0.4.x 2026-05-23 12:05:34 -04:00
test_closets.py Merge origin/develop into feat/benchmark-multilingual 2026-05-24 13:18:08 -03:00
test_collection_metric_invariant.py fix(test): use tmp_path for full-stack invariant test (Windows CI) 2026-04-25 00:39:37 -03:00
test_collision_scan.py fix(ids): delimit hash inputs to prevent drawer_id collisions (#80) 2026-05-30 12:44:47 -07:00
test_config.py Merge remote-tracking branch 'origin/develop' into fix/wing-normalize-strip-sep 2026-06-06 03:24:08 -03:00
test_config_extra.py test(config): make palace_path tests portable across POSIX and Windows 2026-04-24 11:13:51 +02:00
test_convo_miner.py Merge origin/develop into feat/benchmark-multilingual 2026-05-24 13:18:08 -03:00
test_convo_miner_size_cap.py Raise convo_miner MAX_FILE_SIZE cap 10 MB → 500 MB 2026-04-18 12:52:01 -03:00
test_convo_miner_unit.py Merge pull request #1137 from arnoldwender/fix/convo-miner-preserve-response-structure 2026-06-06 00:16:33 -03:00
test_convo_scanner.py fix(llm): tighter refinement — word boundaries, JSON extraction, authoritative sources 2026-04-24 01:30:40 -03:00
test_corpus_origin.py style: reformat tree with ruff 0.15.9 2026-05-17 23:20:01 -03:00
test_corpus_origin_integration.py style: reformat tree with ruff 0.15.9 2026-05-17 23:20:01 -03:00
test_dedup.py feat: add pluggable vector backends 2026-06-02 21:38:53 -03:00
test_dialect.py fix: align cmd_compress dict keys with compression_stats() return values (#569) 2026-04-11 16:16:31 -07:00
test_distance_metric.py feat(searcher): metric-aware distance→similarity conversion (RFC 001 §10, #1726) 2026-06-08 02:48:26 -03:00
test_dynamics.py Merge origin/develop into feat/benchmark-multilingual 2026-05-24 13:18:08 -03:00
test_embedder_identity.py feat(backends): shared embedder-identity sidecar + qdrant identity (RFC 001, #1730) 2026-06-08 10:20:45 -03:00
test_embedding.py test: isolate embedding module state with monkeypatch 2026-04-24 23:11:29 +00:00
test_embedding_wrapper.py fix(backends): normalize all OneOrMany inputs in EmbeddingCollection 2026-06-06 04:56:19 -03:00
test_embeddinggemma.py test(embedding): expect 3 hf_hub_download calls (model + .onnx_data weights + tokenizer) 2026-05-30 02:57:09 -03:00
test_empty_chromadb_results.py fix(searcher): guard against empty ChromaDB query results (#195) (#865) 2026-04-15 00:26:38 -07:00
test_entity_detector.py feat(entity): known-systems lexicon keeps multi-word product names atomic 2026-05-24 13:50:53 -07:00
test_entity_registry.py fix(entity_registry): clean up .tmp sidecar on write or rename failure (#1373) 2026-05-10 12:56:50 +02:00
test_exporter.py fix(exporter): refuse symlinks at file targets and skip tests on Windows 2026-05-07 12:51:47 -03:00
test_fact_checker.py fix(cli, fact-checker): per-stream stdio errors policy on Windows 2026-05-03 21:37:12 +05:00
test_format_miner.py Merge origin/develop into feat/benchmark-multilingual 2026-05-24 13:18:08 -03:00
test_general_extractor.py Merge origin/develop into feat/benchmark-multilingual 2026-05-24 13:18:08 -03:00
test_hall_detection.py fix: README audit — 42 TDD tests + hall detection + 7 claim fixes (#835) 2026-04-13 17:11:11 -07:00
test_hallways.py fix(hallways): paginate drawer fetch to avoid SQLite variable overflow on large wings (#1619) 2026-06-02 19:15:10 -07:00
test_hallways_pagination.py style(tests): format test_hallways_pagination.py with ruff (#1680) 2026-06-02 21:45:14 -07:00
test_hnsw_capacity.py fix: use configured collection in recovery paths 2026-05-07 09:10:00 -03:00
test_hnsw_payload_health.py style: ruff format test_hnsw_payload_health.py (#1461 follow-up) 2026-05-14 19:17:26 -03:00
test_hooks_bash_compat.py style: reformat tree with ruff 0.15.9 2026-05-17 23:20:01 -03:00
test_hooks_cli.py fix(hooks): file stop-hook diary checkpoints under the harness agent identity (#1693) 2026-06-05 12:26:27 +05:00
test_hooks_shell.py style: reformat tree with ruff 0.15.9 2026-05-17 23:20:01 -03:00
test_hybrid_candidate_union.py style: reformat tree with ruff 0.15.9 2026-05-17 23:20:01 -03:00
test_hybrid_search.py merge: pr/closet-llm-generic + harden LLM regen path for production 2026-04-13 18:40:36 -03:00
test_i18n.py style: reformat tree with ruff 0.15.9 2026-05-17 23:20:01 -03:00
test_i18n_lang_case.py style: reformat tree with ruff 0.15.9 2026-05-17 23:20:01 -03:00
test_ids.py fix(ids): delimit hash inputs to prevent drawer_id collisions (#80) 2026-05-30 12:44:47 -07:00
test_init.py style: reformat tree with ruff 0.15.9 2026-05-17 23:20:01 -03:00
test_init_gitignore_protection.py fix(init): auto-add per-project files to .gitignore in git repos (#185) (#866) 2026-04-15 00:26:41 -07:00
test_instructions_cli.py fix: add explicit UTF-8 encoding to read_text() calls (#776) 2026-04-16 16:00:29 +05:00
test_kg_thread_safety.py fix: add missing self._lock to KnowledgeGraph.close() 2026-04-14 13:09:10 -07:00
test_knowledge_graph.py fix(kg): close sqlite connections during cleanup 2026-05-08 14:44:04 +00:00
test_knowledge_graph_extra.py test: bring coverage to 85%, set threshold to 85, reset version to 3.0.11 2026-04-08 21:38:12 +03:00
test_known_entities_registry.py feat(graph): cross-wing tunnels by shared topics (#1180) 2026-04-24 23:06:26 -03:00
test_layers.py fix: guard None metadata/doc in tool_check_duplicate and Layer1/Layer2 2026-04-19 11:13:50 +03:00
test_line_numbers.py Merge origin/develop into feat/benchmark-multilingual 2026-05-24 13:18:08 -03:00
test_llm_client.py style: reformat tree with ruff 0.15.9 2026-05-17 23:20:01 -03:00
test_llm_refine.py feat(graph): cross-wing tunnels by shared topics (#1180) 2026-04-24 23:06:26 -03:00
test_maintenance_hooks.py feat(backends): observable maintenance hooks + pgvector indexed-build path (RFC 001, #1725) 2026-06-08 08:44:20 -03:00
test_mcp_server.py fix(mcp): address bot review on #1700 2026-06-06 01:11:54 -03:00
test_mcp_stdio_protection.py style: reformat tree with ruff 0.15.9 2026-05-17 23:20:01 -03:00
test_migrate.py fix(migrate): close SQLite connection and clean temp palace on exception 2026-05-10 13:06:40 +02:00
test_migrate_wings.py feat(migrate): mempalace migrate-wings — normalize legacy wing names 2026-06-06 03:11:46 -03:00
test_miner.py Merge remote-tracking branch 'origin/develop' into fix/wing-normalize-strip-sep 2026-06-06 03:24:08 -03:00
test_miner_fts5_validation.py Merge origin/develop into feat/benchmark-multilingual 2026-05-24 13:18:08 -03:00
test_miner_jsonl_visibility.py Harden sweeper for production: verbatim tool blocks, full session_id, logged failures 2026-04-18 13:14:32 -03:00
test_normalize.py style: reformat tree with ruff 0.15.9 2026-05-17 23:20:01 -03:00
test_onboarding.py feat(onboarding): multilingual embedder by default for new installs 2026-05-14 06:40:27 -03:00
test_palace.py feat: add pgvector backend + namespace-isolation conformance contract 2026-06-05 21:41:21 -03:00
test_palace_graph.py fix(palace_graph): skip None metadata in build_graph 2026-04-25 11:06:32 -07:00
test_palace_graph_tunnels.py Merge origin/develop into feat/benchmark-multilingual 2026-05-24 13:18:08 -03:00
test_palace_locks.py style: reformat tree with ruff 0.15.9 2026-05-17 23:20:01 -03:00
test_pgvector_backend.py fix: address Copilot second-pass review on the pluggable-backend PR 2026-06-05 23:14:35 -03:00
test_project_scanner.py feat(graph): cross-wing tunnels by shared topics (#1180) 2026-04-24 23:06:26 -03:00
test_qdrant_backend.py feat: add pgvector backend + namespace-isolation conformance contract 2026-06-05 21:41:21 -03:00
test_query_sanitizer.py fix: make quote trimming explicit 2026-04-12 22:19:58 -03:00
test_readme_claims.py style: ruff format tests/test_hooks_cli.py with CI-pinned ruff 0.4.x 2026-05-23 12:05:34 -04:00
test_repair.py fix: VACUUM + FTS5 rebuild after repair to reclaim SQLite space 2026-05-18 16:10:16 -03:00
test_room_detector_local.py fix: skip unreachable reparse points in detect_rooms_from_folders (#558) 2026-04-11 16:16:06 -07:00
test_save_hook_mines.py style: reformat tree with ruff 0.15.9 2026-05-17 23:20:01 -03:00
test_save_hook_verbose.py feat: add MEMPAL_VERBOSE toggle — developers see diaries in chat (#871) 2026-04-14 10:55:56 -07:00
test_searcher.py feat(searcher): metric-aware distance→similarity conversion (RFC 001 §10, #1726) 2026-06-08 02:48:26 -03:00
test_sources.py chore(tests): wrap sqlite3 connections in contextlib.closing 2026-05-09 20:25:47 -03:00
test_spellcheck.py style: format test files with ruff 2026-04-08 21:08:49 +03:00
test_spellcheck_extra.py test: bring coverage to 85%, set threshold to 85, reset version to 3.0.11 2026-04-08 21:38:12 +03:00
test_split_mega_files.py test: expand coverage to 70%, fix mcp_server CI crash (threshold 60%) 2026-04-08 21:07:03 +03:00
test_sqlite_exact_backend.py fix: address Copilot second-pass review on the pluggable-backend PR 2026-06-05 23:14:35 -03:00
test_sweeper.py style: reformat tree with ruff 0.15.9 2026-05-17 23:20:01 -03:00
test_sync.py style: reformat tree with ruff 0.15.9 2026-05-17 23:20:01 -03:00
test_version_consistency.py fix: unify package and MCP version reporting 2026-04-07 08:53:25 +01:00