All notable changes to pymemex are documented here.
The format is based on Keep a Changelog.
RecoveryConfig(pydantic v2) — declarative config for legacy → rmcp-memex mapping. Fields: text/id/vector column overrides, namespace (static) or namespace_from_column (per-row), metadata_include, min_importance, permanent_only, include_embeddings.auto_detect_columns()— heuristic column discovery: picks id from ("id", "uuid", "_id"), text from ("text", "summary", "content", "body"), vector as first fixed_size_list<float*>.recover()generator — iterates source dataset, applies filters + namespace injection, yields rmcp-memex-compatible row dicts with fields:id, namespace, text, vector, content_hash, metadata.pymemex recoverCLI command — 11 options; writes JSONL or stdout; supports--dry-runstats mode.- Tests —
tests/test_recover.py(unit + integration + round-trip) +TestRecoverCommandintests/test_cli.py(CliRunner).
- Package positioning: introspection → recovery + simplify + namespace-injection engine.
pyproject.tomldescription and__init__.pydocstring updated.
Flat legacy datasets (e.g. Python-lance ad-hoc tables without namespace) can now be turned into rmcp-memex-importable JSONL in one command. Target schema includes namespace field required by rmcp-memex mcp_documents.lance.
- Initial package scaffold (uv + hatchling + pyproject PEP 621).
core.detect_layout()— auto-detectslegacy-rootvsv2-subtableLance layout.core.open_dataset()— unified open path for both layouts; returnsDatasetInfo.core.list_subtables()— enumerates.lancesubtables under v2 db path.schema.inspect_columns()— column-wise schema with vector detection.schema.row_count(),schema.version_summary(),schema.has_vector_column().cli inspect— shows layout, subtables, schema, row count, last 5 versions.cli sample— row sampling with--hide-vectors(default) /--show-vectors.cli tables— subtable listing for v2 layout.- BUSL-1.1 license (Change Date: 2030-04-15).
- 32 tests, 95% line coverage (pytest + pytest-cov).
test_roundtrip.py— end-to-end write-read contract: build known dataset withpyarrow.Table+lance.write_dataset, then verify every pymemex read path (detect_layout, open_dataset, inspect_columns, row_count, full row content equality) returns the exact known input.test_core.py— layout detection (legacy + v2 + multi-table + empty + file).test_schema.py— column types, vector detection (dim inference), row count.test_cli.py— clickCliRunnersmoke tests for inspect/sample/tables.conftest.py— sharedlegacy_lance,v2_lance,v2_multi_table_lancefixtures.
All operations are read-only. pymemex never mutates the source Lance dataset.
Future export and map commands will write to separate output files/paths.