This release includes 3 breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+12 more
Affected surfaces
Summary
AI summaryUpdates Write-path hardening, Python error surface, and Durable idempotency across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Medium |
`record()`, `record_text()`, and `record_batch()` accept idempotency keys. `record()`, `record_text()`, and `record_batch()` accept idempotency keys. Source: llm_adapter@2026-07-17 Confidence: high |
— |
| Feature | Medium |
`recall()` now excludes superseded results by default; set `include_superseded=True` to restore history access. `recall()` now excludes superseded results by default; set `include_superseded=True` to restore history access. Source: llm_adapter@2026-07-17 Confidence: high |
— |
| Feature | Medium |
`record_text` and `record_batch` normalize blank namespaces to `default`. `record_text` and `record_batch` normalize blank namespaces to `default`. Source: llm_adapter@2026-07-17 Confidence: high |
— |
| Feature | Medium |
Typed exceptions added: Backpressure, IdempotencyConflict, InvalidIdempotencyKey, ProvenanceInconsistent, RecallContended, CorrectionDeferredDuringReembed, BatchDeferredDuringReembed (all subclass RuntimeError). Typed exceptions added: Backpressure, IdempotencyConflict, InvalidIdempotencyKey, ProvenanceInconsistent, RecallContended, CorrectionDeferredDuringReembed, BatchDeferredDuringReembed (all subclass RuntimeError). Source: llm_adapter@2026-07-17 Confidence: high |
— |
| Feature | Medium |
Replicated batch writes carry idempotency identity to followers. Replicated batch writes carry idempotency identity to followers. Source: llm_adapter@2026-07-17 Confidence: high |
— |
| Feature | Medium |
Oplog wire format v2 carries embedding bytes for byte‑deterministic sync across peers. Oplog wire format v2 carries embedding bytes for byte‑deterministic sync across peers. Source: llm_adapter@2026-07-17 Confidence: high |
— |
| Feature | Medium |
Anti‑laundering chokepoint enforces confidence basis for `source=inference` claims of `kind=fact/observation`. Anti‑laundering chokepoint enforces confidence basis for `source=inference` claims of `kind=fact/observation`. Source: llm_adapter@2026-07-17 Confidence: low |
— |
| Feature | Low |
Idempotent writes with same key + identical payload return original RID without additional writes or metric changes; different payloads raise `IdempotencyConflict` containing the existing RID. Idempotent writes with same key + identical payload return original RID without additional writes or metric changes; different payloads raise `IdempotencyConflict` containing the existing RID. Source: granite4.1:30b@2026-07-17-audit Confidence: low |
— |
| Feature | Low |
Cross-surface digests treat identical payloads under one idempotency key as the same write across `record()`, batch items, and `record_text`. Digest for `record_text` excludes engine‑generated embeddings to prevent conflict spoofing. Cross-surface digests treat identical payloads under one idempotency key as the same write across `record()`, batch items, and `record_text`. Digest for `record_text` excludes engine‑generated embeddings to prevent conflict spoofing. Source: granite4.1:30b@2026-07-17-audit Confidence: low |
— |
| Feature | Low |
Anti-laundering chokepoint blocks `source=inference` claims of `kind=fact/observation` unless a confidence basis is provided, enforced on all write surfaces (record, batch, record_with_rid, metadata_merge, links-after-record). Anti-laundering chokepoint blocks `source=inference` claims of `kind=fact/observation` unless a confidence basis is provided, enforced on all write surfaces (record, batch, record_with_rid, metadata_merge, links-after-record). Source: granite4.1:30b@2026-07-17-audit Confidence: low |
— |
| Feature | Low |
Host‑capability failures (e.g., fallback ONNX embedder) raise plain `ValueError` rather than engine‑generated exceptions. Host‑capability failures (e.g., fallback ONNX embedder) raise plain `ValueError` rather than engine‑generated exceptions. Source: granite4.1:30b@2026-07-17-audit Confidence: low |
— |
| Bugfix | Medium |
RAII savepoints close #91-class leaks; oplog entries atomic with their rows (closes #94). RAII savepoints close #91-class leaks; oplog entries atomic with their rows (closes #94). Source: llm_adapter@2026-07-17 Confidence: high |
— |
| Bugfix | Medium |
`__version__` now reads distribution metadata instead of a hardcoded string. `__version__` now reads distribution metadata instead of a hardcoded string. Source: llm_adapter@2026-07-17 Confidence: high |
— |
| Bugfix | Medium |
Write-path hardening implements reserve → commit → publish flow; eliminates orphan writes and crash windows. Write-path hardening implements reserve → commit → publish flow; eliminates orphan writes and crash windows. Source: llm_adapter@2026-07-17 Confidence: low |
— |
| Bugfix | Low |
`record_with_rid`'s previously unrecoverable orphan write is now prevented; both row and operation are committed atomically or neither occurs. `record_with_rid`'s previously unrecoverable orphan write is now prevented; both row and operation are committed atomically or neither occurs. Source: granite4.1:30b@2026-07-17-audit Confidence: low |
— |
Full changelog
Item 4 (Reliability) is complete: all 13 trace contracts implemented and release-blocking. This release was validated as a coordinated train — yantrikdb-server (2,118 tests) and yantrikdb-mcp (consumer-simulation gate + full suite) each built and tested the exact release rev before this tag existed. The mutual review is the product.
Durable idempotency (trace T07: repetition is not corroboration)
record(),record_text(), andrecord_batch()accept idempotency keys. Same key + identical payload = the ORIGINAL rid, zero writes — no stats advance, no certainty change. Same key + different payload = typedIdempotencyConflictcarrying the existing rid. Claims are durable, immutable, and commit atomically with the write they guard.- Cross-surface digests: an identical payload under one key is the same write via
record()or a batch item;record_text's digest excludes the engine-generated embedding, so embedder drift can never fake a conflict.
Anti-laundering chokepoint (trace T06)
source=inferencecannot claimkind=fact/observationwithout raised confidence basis — enforced at every write surface: record, batch (atomic whole-batch refusal), record_with_rid at Origin admission, correct(metadata_merge), links-after-record. Admitted (replicated) applies are deliberately not re-gated: one chokepoint, at origin ingress.
Write-path hardening
- Every writer now runs reserve → commit → publish: capacity failures surface before a single durable byte, and the crash windows between rows, ops, and vectors are gone — including
record_with_rid's previously UNREPAIRABLE orphan (a kill between row and op lost the op forever; now kill-proven both-or-neither). - RAII savepoints (#91-class leaks closed), oplog entries atomic with their rows (#94 closed), replicated batch writes carry their idempotency identity to followers.
Behavioral changes — read this if you consume recall
recall()now excludes superseded results by default (include_superseded=Truerestores history access). Current-by-default is the correct default for agent context; as yantrikdb-mcp put it during validation: the outcome that matters is correct, current context after restart and correction, not raw recall volume.record_text/record_batchnow normalize blank namespaces todefault— asrecord()has since v0.7.23.
Python error surface
- Typed exceptions:
yantrikdb.{Backpressure, IdempotencyConflict, InvalidIdempotencyKey, ProvenanceInconsistent, RecallContended, CorrectionDeferredDuringReembed, BatchDeferredDuringReembed}— all subclassRuntimeError(existing handlers unaffected); branch retryable-vs-conflict-vs-fatal on type, never on message text. - Note the split: a key with a python-side fallback embedder (e.g. ONNX backend) raises plain
ValueError— a host-capability refusal from the wrapper, not an engine verdict. __version__now reads distribution metadata (a hardcoded string had drifted).
The lesson this release keeps
Three workspaces independently converged on it during validation: version pins fail (the version doesn't move), signature checks fail (behavior moves without them), and expert attention fails (a version lie sat in validation stdout and was walked past). Mechanical behavioral contract tests are the only gate that gates. Pin immutable refs, probe features not versions, and declare unsupported capabilities at runtime instead of silently degrading.
Wire-protocol precondition: yantrikdb-server's oplog wire format v2 (their #52) carries embedding bytes so followers apply identical vectors — required for Item 3's byte-determinism to hold across peer sync.
Breaking Changes
- `recall()` now excludes superseded results by default (set `include_superseded=True` to restore previous behavior).
- `record_text` and `record_batch` normalize blank namespaces to `default`.
- Enforced anti‑laundering rule: writes with `source=inference` cannot claim `kind=fact/observation` without a raised confidence basis, causing atomic batch refusal.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About YantrikDB
All releases →Related context
Related tools
Earlier breaking changes
Beta — feedback welcome: [email protected]