Compare commits

...
Author SHA1 Message Date
Nicolò Boschi d03b00e28b doc: add 0.4.16 release blog post and changelog 2026-03-05 18:07:37 +01:00
3 changed files with 112 additions and 0 deletions
@@ -0,0 +1,90 @@
---
title: "What's new in Hindsight 0.4.16"
description: New features and improvements in Hindsight 0.4.16
authors: [hindsight]
date: 2026-03-05
hide_table_of_contents: true
image: /img/blog/release0416.png
---
Hindsight 0.4.16 introduces a webhook system for event-driven memory pipelines, improved search quality, and several reliability fixes.
<!-- truncate -->
- [**Webhooks**](#webhooks): React to memory events in real time with a new webhook system.
- [**Search Quality**](#search-quality): Improved recall ranking with multiplicative scoring boosts.
## Webhooks
Hindsight now supports webhooks, letting you react to memory events in real time without polling the API.
Webhooks are registered per memory bank and fire automatically when matching events occur. Two event types are supported:
**`retain.completed`** — fired once per document after a retain operation finishes (both synchronous and async). When retaining a batch of N documents, N separate events fire.
```json
{
"event": "retain.completed",
"bank_id": "my-bank",
"operation_id": "a1b2c3d4e5f6",
"status": "completed",
"timestamp": "2026-03-05T12:00:01Z",
"data": {
"document_id": "doc-abc123",
"tags": ["meeting", "q1-2026"]
}
}
```
**`consolidation.completed`** — fired after Hindsight finishes consolidating new memories into observations.
```json
{
"event": "consolidation.completed",
"bank_id": "my-bank",
"operation_id": "a1b2c3d4e5f6",
"status": "completed",
"timestamp": "2026-03-05T12:00:00Z",
"data": {
"observations_created": 3,
"observations_updated": 1,
"observations_deleted": null,
"error_message": null
}
}
```
**Delivery and retries**: failed deliveries (non-2xx response or timeout after 30 seconds) are retried with exponential backoff—at 5 seconds, 5 minutes, 30 minutes, 2 hours, and 5 hours—before being marked as permanently failed. Delivery tasks are queued in the same database transaction as the triggering operation, so events survive server crashes and will be retried on restart. Use the `operation_id` field to deduplicate if your endpoint receives the same event more than once.
The control plane UI includes a new webhook management section where you can register endpoints, view delivery history, inspect payloads, and replay failed deliveries.
See the [webhooks documentation](/developer/api/webhooks) for the full reference.
## Search Quality
Different reranker models output scores in very different ranges and distributions—a cross-encoder might return values tightly clustered near zero, while another model spreads scores across a wide range. The previous normalization treated all models the same, which caused reranker scores to either dominate or be drowned out when combined with semantic and BM25 signals depending on which model was configured.
Recall ranking now applies temporal proximity and recency as multiplicative boosts on top of the reranker score, rather than adding them as separate score components. This sidesteps the normalization problem: instead of summing values that may be on incompatible scales, the boosts scale the reranker score proportionally. The final ranking is much less sensitive to the absolute score range of the configured reranker model.
No configuration is required. The change applies automatically to all recall requests regardless of which reranker is configured.
## Other Updates
**Bug Fixes**
- Fixed an async deadlock risk during startup by running database schema migrations in a background thread instead of the event loop.
- Fixed webhook delivery so transactions no longer silently roll back due to an incorrect database schema name in the outbox processor.
- Fixed observation recall to correctly resolve and return related chunks using `source_memory_ids`.
- Fixed MCP bank-level tool filtering to be compatible with FastMCP 3.x.
- Fixed a crash when an LLM returns invalid JSON across all retries—the error is now handled cleanly instead of raising a `TypeError`.
- Fixed observations without source dates to preserve `None` temporal fields instead of incorrectly populating them.
## Feedback and Community
Hindsight 0.4.16 is a drop-in replacement for 0.4.x with no breaking changes.
Share your feedback:
- [GitHub Discussions](https://github.com/vectorize-io/hindsight/discussions)
- [GitHub Issues](https://github.com/vectorize-io/hindsight/issues)
For detailed changes, see the [full changelog](/changelog).
+22
View File
@@ -8,6 +8,28 @@ This changelog highlights user-facing changes only. Internal maintenance, CI/CD,
For full release details, see [GitHub Releases](https://github.com/vectorize-io/hindsight/releases).
## [0.4.16](https://github.com/vectorize-io/hindsight/releases/tag/v0.4.16)
**Features**
- Added Webhooks with `consolidation.completed` and `retain.completed` events. ([`abbf874d`](https://github.com/vectorize-io/hindsight/commit/abbf874d))
**Improvements**
- Improved OpenClaw recall/retention controls. ([`d425e93c`](https://github.com/vectorize-io/hindsight/commit/d425e93c))
- Improved search/reranking quality by switching combined scoring to multiplicative boosts. ([`aa8e5475`](https://github.com/vectorize-io/hindsight/commit/aa8e5475))
- Improved performance of observation recall by 40x on large banks. ([`ad2cf72a`](https://github.com/vectorize-io/hindsight/commit/ad2cf72a))
- Improved server shutdown behavior by capping graceful shutdown time and allowing a forced kill on a second Ctrl+C. ([`4c058b4b`](https://github.com/vectorize-io/hindsight/commit/4c058b4b))
**Bug Fixes**
- Fixed an async deadlock risk by running database schema migrations in a background thread during startup. ([`e0a2ac63`](https://github.com/vectorize-io/hindsight/commit/e0a2ac63))
- Fixed webhook delivery/outbox processing so transactions dont silently roll back due to using the wrong database schema name. ([`75b95106`](https://github.com/vectorize-io/hindsight/commit/75b95106))
- Fixed observation results to correctly resolve and return related chunks using source_memory_ids. ([`cb6d1c46`](https://github.com/vectorize-io/hindsight/commit/cb6d1c46))
- Fixed MCP bank-level tool filtering compatibility with FastMCP 3.x. ([`f17406fd`](https://github.com/vectorize-io/hindsight/commit/f17406fd))
- Fixed crashes when an LLM returns invalid JSON across all retries (now handled cleanly instead of raising a TypeError). ([`66423b85`](https://github.com/vectorize-io/hindsight/commit/66423b85))
- Fixed observations without source dates to preserve missing (None) temporal fields instead of incorrectly populating them. ([`891c33b1`](https://github.com/vectorize-io/hindsight/commit/891c33b1))
## [0.4.15](https://github.com/vectorize-io/hindsight/releases/tag/v0.4.15)
**Features**
Binary file not shown.

After

Width:  |  Height:  |  Size: 895 KiB