Honest accounting of work that's been mentioned but NOT yet shipped as
of 2026-05-20. Each item is grouped with effort estimate, the user
problem it solves, and the trigger that should pull it forward.
The goal here is to make sure nothing falls through the cracks between
sessions; this file is the single landing page for "what's left."
Closes the lean profile vector hole. Narrow API surface.
lancedb
✅ SHIPPED 2026-05-20
--
Embedded MIT vector store; laptop / offline.
chroma
✅ SHIPPED 2026-05-20
--
Apache-2.0; persistent + network modes.
weaviate
✅ SHIPPED 2026-05-20
--
BSD-3; v4 client.
milvus
✅ SHIPPED 2026-05-20
--
Apache-2.0; pymilvus v2 client.
Status as of 2026-05-20: all five non-Qdrant vector adapters
shipped. Each follows the same duck-typed _CollectionDescription /
_SearchHit / _CountResult shape so call sites don't have to
special-case the provider. All five expose the narrow QdrantClient
surface RNR Enhanced Cognee actually uses; the long tail of Qdrant
features (rich filters, named vectors, sparse vectors, payload
indexes, quantization, hybrid search) raises NotImplementedError
with a clear pointer to the per-adapter sub-section in PROFILES.md.
Graph tier alternates with different query languages¶
Provider
Query language
Status
Notes
arangodb
AQL
✅ SHIPPED 2026-05-20
Cypher-to-AQL translator for the narrow subset our codebase uses. Multi-hop / WHERE clauses raise NotImplementedError.
nebulagraph
nGQL
✅ SHIPPED 2026-05-20
Routes through NebulaGraph 3+ openCypher mode; only the literal-RETURN form gets a YIELD rewrite.
ladybug
Cognee-native
✅ SHIPPED 2026-05-20
In-process adapter mirroring the networkx_inmemory shape; uses ladybug's native graph API for COUNT / DETACH DELETE / RETURN-all.
MIT-licensed embedded columnar OLAP database. asyncpg-shaped facade via asyncio.to_thread over the sync duckdb driver. Great for analytics workloads + Superset BI dashboards. See docs/PROFILES.md for caveats.
mysql / mariadb
✅ SHIPPED 2026-05-20 (PR 10)
MySQL 8+ / MariaDB 10+ via the asyncmy (Apache-2.0) driver. Targets managed offerings: Aurora MySQL, Cloud SQL for MySQL, Azure DB for MySQL, PlanetScale, Vitess.
mssql / sqlserver
✅ SHIPPED 2026-05-20 (PR 11)
SQL Server 2019+ / Azure SQL via aioodbc (Apache-2.0) + Microsoft ODBC Driver 18. Targets enterprise SQL Server shops + Azure SQL PaaS.
oracle
✅ SHIPPED 2026-05-20 (PR 11)
Oracle 19c/21c/23ai / Autonomous Database via the official oracledb driver (UPL). Native async; thin mode by default + opt-in thick mode for Instant Client features.
db2
✅ SHIPPED 2026-05-20 (PR 11)
IBM Db2 LUW 11.5+ / Db2 on Cloud via ibm_db (Apache-2.0 binding). Sync wrapped with asyncio.to_thread. Targets IBM Z / Power Systems / IBM Cloud.
snowflake
✅ SHIPPED 2026-05-20 (PR 12)
Snowflake cloud data warehouse via snowflake-connector-python (Apache-2.0). Account-locator-based connection; sync wrapped with asyncio.to_thread. Pair with qdrant/chroma for vectors.
Speaks Postgres wire protocol; existing postgres adapter targets it with no code changes. Set POSTGRES_HOST=cockroach.internal POSTGRES_PORT=26257. See PROFILES.md for caveats (no pgvector, no AGE).
redis_compat -- wire-compatible alternative Redis fork (e.g. KeyDB
/ Garnet / Dragonfly). ✅ SHIPPED 2026-05-20 as a labelled alias
of the valkey adapter. Operational intent in env vars: "this isn't
real Redis OR Valkey, it's a third-party fork." See
src/db_adapters/cache_redis_compat.py.
The ArcadeDB adapter now ships dual transports (PR #9): ARCADEDB_TRANSPORT=bolt (default, requires the optional Bolt plugin) or ARCADEDB_TRANSPORT=http (uses ArcadeDB's stock /api/v1/command/{db} REST endpoint -- no extra plugin). CI will run the integration tests against the public arcadedata/arcadedb:26.x image with ARCADEDB_TRANSPORT=http. Tests in tests/integration/test_arcadedb_integration.py.
Live integration tests against Apache AGE
✅ SHIPPED 2026-05-20
tests/integration/test_apache_age_integration.py -- 4 tests including native _AGENode / _AGERelationship round-trips. CI swaps the Postgres image to apache/age:PG16_latest and bootstraps CREATE EXTENSION age + create_graph('cognee_test_graph') via an idempotent psql step.
Live verification of SigNoz + Superset stack
✅ SHIPPED 2026-05-20 (PR #38)
tests/integration/test_signoz_smoke.py -- gated by ENHANCED_RUN_SIGNOZ_SMOKE=1; emits an OTel span via src/tracing.py, polls the SigNoz Query Service until the span surfaces in signoz_traces.signoz_index_v2, then asserts the trace ID round-trips. Boot the monitoring stack via monitoring/docker-compose-monitoring.yml before running.
Exported Superset dashboards
✅ SHIPPED 2026-05-20
All 5 dashboards (memory_growth / agent_activity / llm_cost_trends / dedup_effectiveness / perf_regression) ship as importable Superset 4.x JSON in monitoring/superset-dashboards/ with a shared _dataset_definitions.yaml. The queries hit the real schemas (shared_memory.documents, shared_memory.llm_usage, shared_memory.embeddings, signoz_traces.signoz_index_v2); the dashboards light up as soon as data flows.
tests/load/locustfile.py now ships 8 HttpUser classes -- the original 3 memory-CRUD profiles plus 4 Phase 5 additions (SemanticSearchUser, KnowledgeGraphUser, GDPRWorkflowUser, BackupVerifyUser) + the opt-in HealthCheckUser. See tests/load/README.md for run instructions + recommended SLAs.
Perf-regression dashboard in SigNoz
✅ SHIPPED 2026-05-20
--
Ships as monitoring/superset-dashboards/perf_regression.json -- p50/p95/p99 latency, error %, RPS, slowest-endpoints, all sourced from SigNoz's ClickHouse trace store. Use to compare Locust runs against a baseline.
tests/benchmarks/run_provider_comparison.py drives Locust against 5 provider permutations (default / lean / neo4j_stack / embedded / memgraph_kuzu) and emits a comparison report. Caller boots the underlying services; runner shells out to locust --headless --csv and parses the CSV output into JSON + markdown comparison tables.
The apache_age adapter ships in a deliberately narrow state. Tracked
gaps:
Gap
Effort
Trigger
Parameterised Cypher ($param syntax)
✅ SHIPPED 2026-05-20
Now passes through AGE's three-arg cypher(graph, $$ ... $$, agtype_map) form via psycopg2 parameter binding. Rejects payloads containing $$ to prevent dollar-quote breakout.
Async session API
✅ SHIPPED 2026-05-20
get_async_graph_driver() returns an asyncpg-backed _AsyncAGEDriver. Use async with driver.session() as s: await s.run(cypher).
Returning native graph elements as neo4j Node / Relationship objects
✅ SHIPPED 2026-05-20
_unwrap_agtype now converts ::vertex payloads to _AGENode and ::edge payloads to _AGERelationship, both shaped like neo4j.graph.Node / Relationship (.id / .labels / .type / .start_node / .end_node / dict protocol). ::path decodes to List[_AGENode \| _AGERelationship].
Multi-tenant data partitioning (PR 15 + 15b + 15c)¶
add_memory, search_memories, delete_memory, list_agents in mcp_memory_tools; full storage layer across agent_memory_integration, cross_agent_sharing, encryption_manager, etc.
Cross-tenant isolation end-to-end tests
✅ SHIPPED 2026-05-21 (PR #42)
15 tests verifying tenant A's writes hit documents_t_a only; nested context unwind; per-task ContextVar isolation; ID sanitisation; un-scoped backwards-compat
FastAPI middleware in EnhancedCogneeMCPServer.__init__; every storage call from an HTTP handler sees the per-request tenant automatically. 5 propagation tests
When considering whether to pull something from this file forward:
Customer ask -> ship it. Phase 5 is explicitly demand-driven.
Adjacent work -> ship it. If you're already touching the
graph layer, fold in the missing graph adapter someone's asked
for; if you're already wiring CI, fold in the integration tests.
Speculative -> leave on this list. "Maybe we'll need pgvector
someday" is not a reason to spend 3-5 days shipping it now.