v0.26.0
Anomaly-detection expansion (three new Valkey-issue-backed detectors), a P99 latency regression guard, client-side bulk delete-by-pattern, and faster webhook retries.
✨ Added
Anomaly detection
- Split-brain - duplicate primaries in a shard (#305, valkey#2261 (valkey-io/valkey#2261)) - flags a hash-slot range claimed by more than one master-flagged node and names the phantom primary (lower configEpoch). Emits a CRITICAL CLUSTER_TOPOLOGY anomaly, deduped per conflict signature and re-armed once resolved.
- Stalled BGSAVE / AOF persistence forks (#294, valkey#2322 (valkey-io/valkey#2322)) - tracks RDB/AOF fork children from INFO persistence. CRITICAL when progress freezes (MONITOR_PERSISTENCE_STALL_SEC, 60s), elapsed exceeds the ceiling (MONITOR_PERSISTENCE_CRIT_SEC, 600s), or last-save status flips ok → err; WARNING past MONITOR_PERSISTENCE_WARN_SEC (120s) while still advancing.
- Data-loss guard for empty-primary full resync (#302, valkey#579 (valkey-io/valkey#579), Pro) - Rule A alerts when a persistence-less primary restarts empty with restart evidence (replid change / uptime reset / offset regression); Rule B confirms a replica whose keyspace collapsed ≥90% after a replid change. Same-replid FLUSHALL is not flagged. Adds the data.loss.detected webhook + dashboard banner.
Latency
- P99 regression guard for version upgrades (#304, valkey#3527 (valkey-io/valkey#3527), Pro) - a version change opens a 24h window; when a command's P99 stays ≥1.5× its pre-upgrade baseline (and ≥1ms above) for 5 consecutive samples, fires one aggregated command_p99 anomaly + the latency.regression.detected webhook. Adds a latencystats poller (60s/7d), the latency_stats_samples store across all adapters, and GET /metrics/latencystats/summary + /history (Community).
Data management
- Bulk delete-by-pattern (client-side SCANDEL) (#308, valkey#2623 (valkey-io/valkey#2623), Pro) - client-driven SCAN + per-key UNLINK with dry-run preview, maxKeys cap + truncation reporting, pacing, cooperative cancel, and cluster fan-out (per-key UNLINK avoids CROSSSLOT). Catch-all * requires explicit confirmation. Gated behind the bulkDelete feature.
🔧 Changed
- Adaptive webhook retry polling (#157) - self-scheduling loop: 2s while retries pend, 10s when idle (same DB load), with a shutdown guard. Backoff retries (1s/2s/4s) now picked up in ~2s instead of up to 10s.
- Centralized ENV_DEFAULT_ID (#156) - replaces 28+ hardcoded 'env-default' literals with one constant.
🐛 Fixed
- MCP info endpoint (#280) - passes the section parameter through to the underlying INFO call.
Full changelog: v0.25.0...v0.26.0
What's Changed
- fix(telemetry-py): reliable event delivery and per-install identity by @KIvanow in #292
- fix(telemetry): reliable delivery + per-install identity in TS packages by @KIvanow in #293
- fix(telemetry): serverless-aware event delivery for TS SDKs by @KIvanow in #301
- feat(retrieval): LongMemEval lever ablation foundation by @jamby77 in #284
- feat(retrieval): structured context assembly (Issue 1) by @jamby77 in #285
- feat(retrieval): query-time temporal resolver (Issue 2, slim) by @jamby77 in #287
- fix(mcp): pass section param through to info endpoint by @AruneshDwivedi in #280
- fix(mcp): report package version from metadata by @RitwijParmar in #222
- feat(agent-cache/ai): cache streaming LLM responses via wrapStream by @amitkojha05 in #262
- chore(agent-cache): release v0.11.0 (streaming cache) + fix TS build by @KIvanow in #306
- feat(anomaly): detect duplicate primaries in a shard (split-brain) by @KIvanow in #305
- feat(anomaly): detect stalled BGSAVE/AOF persistence forks by @KIvanow in #294
- feat(retrieval): LongMemEval question-type filter + stratified slice by @KIvanow in #300
- refactor: replace hardcoded 'env-default' strings with ENV_DEFAULT_ID by @Vswaroop04 in #156
- feat(webhooks): implement adaptive polling in WebhookProcessorService by @Vswaroop04 in #157
- feat(agent-memory): opt-in write-time fact consolidation by @KIvanow in #299
- feat(anomaly): data-loss guard for empty-primary full resync (valkey#579) by @KIvanow in #302
- feat(bulk-delete): incremental delete-by-pattern (client-side SCANDEL) by @KIvanow in #308
- feat(latency): P99 latency regression guard for version upgrades (valkey#3527) by @KIvanow in #304
New Contributors
- @AruneshDwivedi made their first contribution in #280
- @RitwijParmar made their first contribution in #222
Full Changelog: v0.25.0...v0.26.0