v1.6.6 — Conflict resolution & stability
Release Date: 2026-10-29
Changes: v1.6.6rc1 → v1.6.6
Pull Requests: #6266, #6337, #6339, #6340
Summary
This release focuses on making conflict handling more reliable and easier to manage, plus a handful of stability, vector, and data-layout fixes. You’ll find a new durable conflict-resolution API, safer retirement of conflicting choices, faster and safer cache/deletion paths, and improvements to vector handling that save re-embedding work.
Highlights
- New durable API for fact conflict resolution so you can resolve data disagreements reliably from the API.
- Conflict review is enabled by default and many fixes ensure 'choices' (user decisions about conflicting facts) are retired correctly on edits, deletes, and rebuilds.
- Copy stored vectors between vector stores without re-embedding to save time and cost when moving/replicating embeddings.
- Safer deletion and caching: Redis list/context deletions are now atomic or in-place, and permission/KMS errors are surfaced so failures won’t be silently ignored.
New Features
- Durable fact conflict resolution API — A new API endpoint that lets you resolve disagreements between conflicting facts in a durable (persistent) way. What it does: records and applies chosen resolutions so the system consistently uses the resolved fact. Why it matters: resolves data inconsistencies reliably across sessions and components, reducing incorrect answers or surprising behavior from stale/conflicting data.
- Default conflict review workflow — The system now reviews conflicts by default (previously optional). What it does: when the system detects conflicting facts (different sources or versions of the same information), it surfaces them for review automatically. Why it matters: makes conflict detection actionable out of the box, so fewer conflicts slip through and searches/agents return cleaner results.
- Copy stored vectors between stores without re-embedding — You can now move or copy vector embeddings from one vector store to another without re-running the embedding model. What it does: performs a direct copy of stored embeddings. Why it matters: speeds up migration and replication, and reduces compute and cost because models aren’t re-called.
- DLT column and dated-cell representation improvements — Every DLT column (a column used in change-tracking tables) is now treated as a value node by default, and dated cells are represented once as a Timestamp value. What it does: makes the platform treat change-tracking columns as concrete values and avoids duplicating date cells. Why it matters: fixes subtle correctness and duplication issues when reading dataset rows and keys, improving accuracy of reads and downstream processing.
Improvements
- Safer retirement of choices (user decisions about conflicting facts) — Choices are retired at the correct times: on chunk edits, connector deletes, dataset forget operations, and when rebuilds would otherwise lose them. This reduces stale decisions lingering after data changes.
- Fail-fast on invalidation and malformed keys — Editing will fail if invalidation of related state fails; malformed hints for DLT keys now raise an error instead of silently skipping them. This prevents silent data inconsistencies.
- Preserve retrieval context when resolving conflicts — The retrieval context used to fetch supporting evidence is now preserved while resolving conflicts so answers remain grounded in the same context.
- Merge and validate tags before writing vectors — Tags are now merged and validated before vector upserts, avoiding broken or incomplete metadata on vector records.
- Finish multi-session stamp rollout — Session stamps (used to track actions across sessions) are now rolled out consistently across components for improved session handling and correctness.
- Make classify() accept plaintext view of sealed objects — Useful when you need to classify contents of encrypted/sealed objects after they are opened for processing.
Performance
- Reduced retrieval contention when retiring deleted conflict facts — lowers race conditions and improves responsiveness when many decisions are being retired at once.
- Redis list deletions in-place and atomic context deletes — cache deletions are now more efficient and consistent, reducing latency and partial-deletion states.
- Direct reading of a row's key columns — looking up key columns directly reduces overhead when reading rows, improving read performance for table-backed datasets.
Security
- KMS error transparency — Key Management System (KMS) errors are now surfaced unwrapped so calling code can see and correctly handle encryption/key issues instead of having them hidden.
- Deletion permission checks in cleanup — cleanup operations now verify delete permissions, reducing risk of unauthorized data removal.
Bug Fixes
- Fail the edit when invalidation fails — Edits now stop and report errors if related invalidation cannot be performed, avoiding inconsistent state.
- Retire choices only on chunk edits and in update (not cognify) — Ensures choices are retired at the right lifecycle stage to avoid premature or missed retirements.
- Retire choices lost by rebuilds or when their fact is gone — Prevents stale choices from sticking around after the underlying fact was removed or replaced.
- Retire user choices on forget and on connector deletes — Ensures user decisions are cleaned up when you forget a dataset or remove a connector.
- Skip stated choices in the prelude — Avoids accidentally considering stated (static) choices during conflict pre-processing.
- Cite live chunks only when resolving conflicts — Uses only currently live (non-deleted) chunks as supporting evidence, preventing use of deleted data during resolution.
- Fix memory-only deletion paths — Addresses paths that previously behaved differently when operating purely in memory vs persistent storage.
- Make Redis context deletes atomic and delete list entries in-place — Fixes race conditions and partial deletions in the cache.
- Fail on malformed DLT key hints and raise on unreadable DLT table keys in BROAD mode — Prevents silent skips and surfaces bad table/key inputs.
- Merge tags and validate before raw vector upserts — Avoids writing invalid vector metadata that could break downstream tooling.
- Let classify() take plaintext view of sealed objects — Fixed classification behavior for sealed objects that are opened for analysis.
- Several test, CI, and docs updates to keep examples runnable and ensure stability across Python versions and environments.
Technical Changes
- Refactor: bind sessions to an operation as a single list everywhere — internal session handling simplified to reduce bugs and make session-operations consistent.
- Refactor (deps): simplify onnxruntime pins and related dependency housekeeping.
- Refactor (telemetry): simplify telemetry limits for clearer instrumentation behavior.
- CI and tooling updates: expanded workflow coverage and adjustments to keyless model fetch scripts, S3 cache handling in CI, and test-suite improvements.
Dependency Updates
Updated:
- fastembed: <=0.8.0 → >=0.9.1,<0.10
- filelock: >=3.12.0,<4.0.0 → >=3.12.0
- onnxruntime: >=1.24.1 → >=1.17
- pydantic: >=2.10.5 → >=2.13
Removed:
- diskcache >=5.6.3
Compatibility
| Component | Supported / Required |
|---|---|
| Python | >=3.10,<3.15
|
| pydantic | >=2.13
|
| litellm | >=1.102.2,<2.0.0
|
| fastapi | >=0.116.2,<1.0.0
|
| sqlalchemy | >=2.0.39,<3.0.0
|
| lancedb | >=0.39.0,<0.40.0
|
| ladybug | ==0.19.0
|
— The Cognee Team · 2026-10-29