Skip to content

Commit 29ff465

Browse files
authored
chore: (docs) v3.0.4 Release Candidate (plastic-labs#480)
1 parent d803c54 commit 29ff465

8 files changed

Lines changed: 106 additions & 43 deletions

File tree

CHANGELOG.md

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,29 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](http://keepachangelog.com/)
66
and this project adheres to [Semantic Versioning](http://semver.org/).
77

8-
## [Unreleased]
8+
## [3.0.4] - 2026-04-02
99

10-
### Fixed
10+
### Added
1111

12-
- Memory leak in deriver: `_observation_locks` dict grew unboundedly with every unique (workspace, observer, observed) combination; replaced with `WeakValueDictionary` so locks are automatically evicted when no longer in use (DEV-1412)
13-
- SQL injection vector in `dependencies.py`: parameterized `SET application_name` queries using `set_config()` instead of f-string interpolation (DEV-1400)
14-
- NUL byte (`\x00`) crashes: all user-facing text inputs (message content, metadata, peer cards, queries) are now sanitized at the Pydantic schema level before reaching PostgreSQL (DEV-1400)
12+
- JSONB metadata validation enforces 100 key limit and max depth of 5 (#419)
1513

16-
### Added
14+
### Changed
15+
16+
- Schemas refactored from single `schemas.py` into `schemas/api.py`, `schemas/configuration.py`, and `schemas/internal.py` with backwards-compatible re-exports (#419)
17+
18+
### Fixed
1719

18-
- JSONB metadata validation: max 100 top-level keys and max nesting depth of 5 on all metadata input fields (DEV-1400)
19-
- Filter recursion depth limit: `_build_filter_conditions()` now enforces a max depth of 5 to prevent stack overflow from deeply nested filter dicts (DEV-1400)
20+
- Missing `deleted_at` filter on `RepresentationManager._query_documents_recent()` and `._query_documents_most_derived()` allowed soft-deleted documents to leak into the deriver's working representation (#456)
21+
- `CleanupStaleItemsCompletedEvent` emitted spuriously when no queue item was actually deleted (#454)
22+
- Empty JSON file uploads caused unhandled errors; now returns normalized error responses (#434)
23+
- Memory leak: `_observation_locks` switched to `WeakValueDictionary` to prevent unbounded growth (#419)
24+
- SQL injection in `dependencies.py`: parameterized `set_config` calls to prevent injection via request context (#419)
25+
- NUL byte crashes: string inputs (message content, queries, peer cards) now stripped at schema level (#419)
26+
- Filter recursion depth capped at 5 to prevent stack overflow (#419)
27+
- Dedup-skipped observations now correctly reflected in created counts (#477)
28+
- External vector store support for message search — routes queries through configured external vector store with oversampling and
29+
deduplication to handle chunked embeddings (#479)
30+
- Dialectic agent no longer holds a DB connection during LLM calls — embeddings are pre-computed before tool execution, DB sessions isolated in `extract_preferences`, `query_documents` no longer accepts a DB session parameter (#477)
2031

2132
## [3.0.3] - 2026-02-25
2233

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
---
1010

11-
![Static Badge](https://img.shields.io/badge/Version-3.0.3-blue)
11+
![Static Badge](https://img.shields.io/badge/Version-3.0.4-blue)
1212
[![PyPI version](https://img.shields.io/pypi/v/honcho-ai.svg)](https://pypi.org/project/honcho-ai/)
1313
[![NPM version](https://img.shields.io/npm/v/@honcho-ai/sdk.svg)](https://npmjs.org/package/@honcho-ai/sdk)
1414
[![Discord](https://img.shields.io/discord/1016845111637839922?style=flat&logo=discord&logoColor=23ffffff&label=Plastic%20Labs&labelColor=235865F2)](https://discord.gg/plasticlabs)

docs/changelog/compatibility-guide.mdx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ This guide helps you match the right SDK version to your Honcho API version. New
3030

3131
| Honcho API Version | TypeScript SDK | Python SDK |
3232
|-------------------|---------------|------------|
33-
| v3.0.3 (Current) | v2.1.0 | v2.1.0 |
33+
| v3.0.4 (Current) | v2.1.0 | v2.1.0 |
34+
| v3.0.3 | v2.1.0 | v2.1.0 |
3435
| v3.0.2 | v2.0.0+ | v2.0.0+ |
3536
| v3.0.1 | v2.0.0+ | v2.0.0+ |
3637
| v3.0.0 | v2.0.0+ | v2.0.0+ |

docs/changelog/introduction.mdx

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,30 @@ Welcome to the Honcho changelog! This section documents all notable changes to t
2727
### Honcho API and SDK Changelogs
2828
<Tabs>
2929
<Tab title="Honcho API">
30-
<Update label="v3.0.4 (Unreleased)">
31-
### Fixed
30+
<Update label="v3.0.4 (Current)">
31+
### Added
3232

33-
- Memory leak in deriver: `_observation_locks` dict grew unboundedly with every unique (workspace, observer, observed) combination; replaced with `WeakValueDictionary` so locks are automatically evicted when no longer in use (DEV-1412)
34-
- SQL injection vector in `dependencies.py`: parameterized `SET application_name` queries using `set_config()` instead of f-string interpolation (DEV-1400)
35-
- NUL byte (`\x00`) crashes: all user-facing text inputs (message content, metadata, peer cards, queries) are now sanitized at the Pydantic schema level before reaching PostgreSQL (DEV-1400)
33+
- JSONB metadata validation enforces 100 key limit and max depth of 5 (#419)
3634

37-
### Added
35+
### Changed
3836

39-
- JSONB metadata validation: max 100 top-level keys and max nesting depth of 5 on all metadata input fields (DEV-1400)
40-
- Filter recursion depth limit: `_build_filter_conditions()` now enforces a max depth of 5 to prevent stack overflow from deeply nested filter dicts (DEV-1400)
41-
</Update>
37+
- Schemas refactored from single `schemas.py` into `schemas/api.py`, `schemas/configuration.py`, and `schemas/internal.py` with backwards-compatible re-exports (#419)
4238

43-
<Update label="v3.0.3 (Current)">
39+
### Fixed
40+
41+
- Missing `deleted_at` filter on `RepresentationManager._query_documents_recent()` and `._query_documents_most_derived()` allowed soft-deleted documents to leak into the deriver's working representation (#456)
42+
- `CleanupStaleItemsCompletedEvent` emitted spuriously when no queue item was actually deleted (#454)
43+
- Empty JSON file uploads caused unhandled errors; now returns normalized error responses (#434)
44+
- Memory leak: `_observation_locks` switched to `WeakValueDictionary` to prevent unbounded growth (#419)
45+
- SQL injection in `dependencies.py`: parameterized `set_config` calls to prevent injection via request context (#419)
46+
- NUL byte crashes: string inputs (message content, queries, peer cards) now stripped at schema level (#419)
47+
- Filter recursion depth capped at 5 to prevent stack overflow (#419)
48+
- Dedup-skipped observations now correctly reflected in created counts (#477)
49+
- External vector store support for message search — routes queries through configured external vector store with oversampling and
50+
deduplication to handle chunked embeddings (#479)
51+
- Dialectic agent no longer holds a DB connection during LLM calls — embeddings are pre-computed before tool execution, DB sessions isolated in `extract_preferences`, `query_documents` no longer accepts a DB session parameter (#477)
52+
</Update>
53+
<Update label="v3.0.3">
4454
### Added
4555

4656
- Consolidated session context into a single DB session with 40/60 token budget allocation between summary and messages
@@ -524,7 +534,7 @@ Welcome to the Honcho changelog! This section documents all notable changes to t
524534

525535
<Tab title="Python SDK">
526536
[Python SDK](https://pypi.org/project/honcho-ai/)
527-
<Update label="v2.1.0 (Current)">
537+
<Update label="v2.1.0">
528538
### Added
529539

530540
- `created_at` property on `Peer` and `Session` objects
@@ -661,7 +671,7 @@ Welcome to the Honcho changelog! This section documents all notable changes to t
661671

662672
<Tab title="TypeScript SDK">
663673
[TypeScript SDK](https://www.npmjs.com/package/@honcho-ai/sdk)
664-
<Update label="v2.1.0 (Current)">
674+
<Update label="v2.1.0">
665675
### Added
666676

667677
- `createdAt` property on `Peer` and `Session` wrapper objects

docs/docs.json

Lines changed: 59 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,21 @@
1919
},
2020
"favicon": "/favicon.svg",
2121
"contextual": {
22-
"options": ["copy", "view", "chatgpt", "claude"]
22+
"options": [
23+
"copy",
24+
"view",
25+
"chatgpt",
26+
"claude"
27+
]
2328
},
2429
"navigation": {
2530
"versions": [
2631
{
27-
"version": "v3.0.3",
32+
"version": "v3.0.4",
2833
"api": {
29-
"openapi": ["v3/openapi.json"]
34+
"openapi": [
35+
"v3/openapi.json"
36+
]
3037
},
3138
"tabs": [
3239
{
@@ -87,7 +94,9 @@
8794
"groups": [
8895
{
8996
"group": "Overview",
90-
"pages": ["v3/guides/overview"]
97+
"pages": [
98+
"v3/guides/overview"
99+
]
91100
},
92101
{
93102
"group": "Integrations",
@@ -120,7 +129,9 @@
120129
},
121130
{
122131
"group": "Migrations",
123-
"pages": ["v3/guides/migrations/mem0"]
132+
"pages": [
133+
"v3/guides/migrations/mem0"
134+
]
124135
}
125136
]
126137
},
@@ -148,7 +159,9 @@
148159
"groups": [
149160
{
150161
"group": "API Documentation",
151-
"pages": ["v3/api-reference/introduction"]
162+
"pages": [
163+
"v3/api-reference/introduction"
164+
]
152165
},
153166
{
154167
"group": "workspaces",
@@ -226,7 +239,9 @@
226239
},
227240
{
228241
"group": "miscellaneous",
229-
"pages": ["v3/api-reference/endpoint/keys/create-key"]
242+
"pages": [
243+
"v3/api-reference/endpoint/keys/create-key"
244+
]
230245
}
231246
]
232247
},
@@ -247,7 +262,9 @@
247262
{
248263
"version": "v2.5.1",
249264
"api": {
250-
"openapi": ["v2/openapi.json"]
265+
"openapi": [
266+
"v2/openapi.json"
267+
]
251268
},
252269
"tabs": [
253270
{
@@ -294,11 +311,15 @@
294311
"groups": [
295312
{
296313
"group": "Getting Started",
297-
"pages": ["v2/guides/overview"]
314+
"pages": [
315+
"v2/guides/overview"
316+
]
298317
},
299318
{
300319
"group": "Migrations",
301-
"pages": ["v2/migrations/from-mem0"]
320+
"pages": [
321+
"v2/migrations/from-mem0"
322+
]
302323
},
303324
{
304325
"group": "Integrations",
@@ -310,7 +331,11 @@
310331
},
311332
{
312333
"group": "Application Interfaces",
313-
"pages": ["v2/guides/discord", "v2/guides/n8n", "v2/guides/telegram"]
334+
"pages": [
335+
"v2/guides/discord",
336+
"v2/guides/n8n",
337+
"v2/guides/telegram"
338+
]
314339
}
315340
]
316341
},
@@ -319,7 +344,9 @@
319344
"groups": [
320345
{
321346
"group": "API Documentation",
322-
"pages": ["v2/api-reference/introduction"]
347+
"pages": [
348+
"v2/api-reference/introduction"
349+
]
323350
},
324351
{
325352
"group": "workspaces",
@@ -423,7 +450,9 @@
423450
{
424451
"version": "v1.1.0",
425452
"api": {
426-
"openapi": ["openapi.json"]
453+
"openapi": [
454+
"openapi.json"
455+
]
427456
},
428457
"tabs": [
429458
{
@@ -453,15 +482,23 @@
453482
"groups": [
454483
{
455484
"group": "Getting Started",
456-
"pages": ["v1/guides/overview", "v1/guides/streaming-response"]
485+
"pages": [
486+
"v1/guides/overview",
487+
"v1/guides/streaming-response"
488+
]
457489
},
458490
{
459491
"group": "Application Interfaces",
460-
"pages": ["v1/guides/discord", "v1/guides/honcho-mcp"]
492+
"pages": [
493+
"v1/guides/discord",
494+
"v1/guides/honcho-mcp"
495+
]
461496
},
462497
{
463498
"group": "Personal Memory",
464-
"pages": ["v1/guides/dialectic-endpoint"]
499+
"pages": [
500+
"v1/guides/dialectic-endpoint"
501+
]
465502
}
466503
]
467504
},
@@ -470,7 +507,9 @@
470507
"groups": [
471508
{
472509
"group": "API Documentation",
473-
"pages": ["v1/api-reference/introduction"]
510+
"pages": [
511+
"v1/api-reference/introduction"
512+
]
474513
},
475514
{
476515
"group": "apps",
@@ -518,7 +557,9 @@
518557
},
519558
{
520559
"group": "keys",
521-
"pages": ["v1/api-reference/endpoint/keys/create-key"]
560+
"pages": [
561+
"v1/api-reference/endpoint/keys/create-key"
562+
]
522563
},
523564
{
524565
"group": "metamessages",

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "honcho"
3-
version = "3.0.3"
3+
version = "3.0.4"
44
description = "Honcho Server"
55
authors = [
66
{name = "Plastic Labs", email = "hello@plasticlabs.ai"},

src/main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ async def lifespan(_: FastAPI):
154154
title="Honcho API",
155155
summary="The Identity Layer for the Agentic World",
156156
description="""Honcho is a platform for giving agents user-centric memory and social cognition.""",
157-
version="3.0.3",
157+
version="3.0.4",
158158
contact={
159159
"name": "Plastic Labs",
160160
"url": "https://honcho.dev",

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)