@@ -15,13 +15,85 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1515> - [ aimdb-knx-connector/CHANGELOG.md] ( aimdb-knx-connector/CHANGELOG.md )
1616> - [ aimdb-sync/CHANGELOG.md] ( aimdb-sync/CHANGELOG.md )
1717> - [ aimdb-client/CHANGELOG.md] ( aimdb-client/CHANGELOG.md )
18+ > - [ aimdb-persistence/CHANGELOG.md] ( aimdb-persistence/CHANGELOG.md )
19+ > - [ aimdb-persistence-sqlite/CHANGELOG.md] ( aimdb-persistence-sqlite/CHANGELOG.md )
1820> - [ tools/aimdb-cli/CHANGELOG.md] ( tools/aimdb-cli/CHANGELOG.md )
1921> - [ tools/aimdb-mcp/CHANGELOG.md] ( tools/aimdb-mcp/CHANGELOG.md )
2022
2123## [ Unreleased]
2224
2325No changes yet.
2426
27+ ## [ 0.5.0] - 2026-02-21
28+
29+ ### Added
30+
31+ - ** aimdb-persistence** : New crate providing a pluggable persistence layer for long-term record history
32+ - ` PersistenceBackend ` trait with ` store ` , ` query ` , ` cleanup ` , and ` initialize ` hooks
33+ - ` AimDbBuilderPersistExt ` trait adding ` .with_persistence(backend, retention) ` to ` AimDbBuilder<R> `
34+ - ` RecordRegistrarPersistExt ` trait adding ` .persist(record_name) ` to ` RecordRegistrar<T, R> `
35+ - ` AimDbQueryExt ` trait with ` query_latest ` , ` query_range ` , and ` query_raw ` methods
36+ - Automatic 24-hour retention cleanup task registration
37+ - ** aimdb-persistence-sqlite** : New crate providing a SQLite backend for ` aimdb-persistence `
38+ - ` SqliteBackend ` with WAL journal mode, actor-model command dispatch, and window-function queries
39+ - Pattern-based queries with ` * ` wildcard support and optional time/row-count limits
40+ - Dedicated OS writer thread; ` Clone ` = ` O(1) ` handle copy
41+ - ** aimdb-data-contracts** : New crate for portable, versioned AimDB data schemas
42+ - Optional features: ` observable ` , ` simulatable ` , ` migratable ` , ` ts ` (TypeScript bindings via ` ts-rs ` )
43+ - Schema versioning and migration support
44+ - ** Transform API (Design 020)** in ` aimdb-core ` : Reactive data transformations between records
45+ - ` transform_raw() ` for single-input derivations and ` transform_join_raw() ` for multi-input joins
46+ - ` TransformBuilder ` and ` JoinBuilder ` fluent APIs with optional stateful handlers
47+ - Transforms spawned as tasks during ` AimDb::build() ` ; mutual exclusion with ` .source() ` enforced
48+ - ** Graph Introspection API (Design 021)** in ` aimdb-core ` and ` aimdb-client ` :
49+ - ` RecordOrigin ` enum classifying record sources (` Source ` , ` Link ` , ` Transform ` , ` TransformJoin ` , ` Passive ` )
50+ - ` GraphNode ` , ` GraphEdge ` , ` DependencyGraph ` types for full graph representation
51+ - ` graph_nodes() ` , ` graph_edges() ` , ` graph_topo_order() ` methods on ` AimDb ` and ` AimDbClient `
52+ - ** Record Drain API (Design 019)** in ` aimdb-core ` , ` aimdb-tokio-adapter ` , and ` aimdb-client ` :
53+ - ` try_recv() ` on ` BufferReader ` for non-blocking batch pulls
54+ - ` record.drain ` AimX protocol method with cold-start semantics and optional limit
55+ - ` DrainResponse ` type in ` aimdb-client `
56+ - ** Dynamic Topic/Address Routing (Design 018)** in ` aimdb-core ` , ` aimdb-mqtt-connector ` , ` aimdb-knx-connector ` :
57+ - ` TopicProvider<T> ` trait for per-message outbound topic/address determination
58+ - ` TopicResolverFn ` for late-binding inbound topic resolution at connector startup
59+ - ` with_topic_provider() ` and ` with_topic_resolver() ` builder methods on connector links
60+ - ** Graph Tools** in ` tools/aimdb-mcp ` :
61+ - ` graph_nodes ` , ` graph_edges ` , ` graph_topo_order ` MCP tools for LLM-powered graph exploration
62+ - ` drain_record ` MCP tool for batch history access with persistent cold-start reader
63+ - ** Graph Commands** in ` tools/aimdb-cli ` :
64+ - ` aimdb graph nodes ` , ` graph edges ` , ` graph order ` , ` graph dot ` subcommands
65+ - Color-coded output and DOT format export for Graphviz visualization
66+ - ** Extension Macro** in ` aimdb-core ` : ` impl_record_registrar_ext! ` for generating runtime adapter extension traits
67+
68+ ### Changed
69+
70+ - ** aimdb-core** : Renamed ` .with_serialization() ` to ` .with_remote_access() ` for clearer semantics (breaking)
71+ - ** aimdb-core** : ` RecordId::new() ` now requires a ` RecordOrigin ` parameter for dependency graph support (breaking)
72+ - ** aimdb-core** : ` set_from_json ` now also rejects writes on records with active transforms
73+ - ** aimdb-core** : ` collect_outbound_routes() ` returns ` OutboundRoute ` tuples with optional ` TopicProviderFn `
74+ - ** aimdb-core** : ` collect_inbound_routes() ` calls ` link.resolve_topic() ` for dynamic topic resolution
75+ - ** tools/aimdb-mcp** : Replaced real-time subscription system with simpler drain-based polling
76+ - Removed ` subscribe_record ` , ` unsubscribe_record ` , ` list_subscriptions ` , ` get_notification_directory ` tools
77+ - Simplified architecture reduces infrastructure complexity for LLM clients
78+
79+ ### Published Crates
80+
81+ | Crate | Previous | New |
82+ | -------| ----------| -----|
83+ | ` aimdb-core ` | 0.4.0 | ** 0.5.0** |
84+ | ` aimdb-tokio-adapter ` | 0.4.0 | ** 0.5.0** |
85+ | ` aimdb-embassy-adapter ` | 0.4.0 | ** 0.5.0** |
86+ | ` aimdb-client ` | 0.4.0 | ** 0.5.0** |
87+ | ` aimdb-sync ` | 0.4.0 | ** 0.5.0** |
88+ | ` aimdb-mqtt-connector ` | 0.4.0 | ** 0.5.0** |
89+ | ` aimdb-knx-connector ` | 0.2.0 | ** 0.3.0** |
90+ | ` aimdb-cli ` | 0.4.0 | ** 0.5.0** |
91+ | ` aimdb-mcp ` | 0.4.0 | ** 0.5.0** |
92+ | ` aimdb-persistence ` | — | ** 0.1.0** (new) |
93+ | ` aimdb-persistence-sqlite ` | — | ** 0.1.0** (new) |
94+ | ` aimdb-derive ` | 0.1.0 | unchanged |
95+ | ` aimdb-executor ` | 0.1.0 | unchanged |
96+
2597## [ 0.4.0] - 2025-12-25
2698
2799### Added
@@ -469,7 +541,8 @@ https://github.com/aimdb-dev/aimdb
469541
470542---
471543
472- [ Unreleased ] : https://github.com/aimdb-dev/aimdb/compare/v0.4.0...HEAD
544+ [ Unreleased ] : https://github.com/aimdb-dev/aimdb/compare/v0.5.0...HEAD
545+ [ 0.5.0 ] : https://github.com/aimdb-dev/aimdb/compare/v0.4.0...v0.5.0
473546[ 0.4.0 ] : https://github.com/aimdb-dev/aimdb/compare/v0.3.0...v0.4.0
474547[ 0.3.0 ] : https://github.com/aimdb-dev/aimdb/compare/v0.2.0...v0.3.0
475548[ 0.2.0 ] : https://github.com/aimdb-dev/aimdb/compare/v0.1.0...v0.2.0
0 commit comments