diff --git a/.gitignore b/.gitignore
index 055bee45..2233b9d9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,12 @@ target/
**/*.rs.bk
*.pdb
+# Stray build artifacts. Two 3.6 MB Linux ELF executables with debug info were
+# committed at the repository root before this entry existed; both were produced
+# by an ad-hoc build, referenced by nothing, and carried in every clone.
+/rust_out
+/tmp
+
# Coverage output
/coverage/
*.profraw
diff --git a/README.md b/README.md
index 6f911dc5..941c18bd 100644
--- a/README.md
+++ b/README.md
@@ -21,14 +21,30 @@ src/
│ binds as, and the fail-closed external-driver gate
└── mandatory/ the three mandatory capability families, composed once
over the `Memory` storage trait
+core/ tinymemory-core — the substance: ingestion, the summary
+ tree, chunk storage, entities, the graph, the diff
+ ledger, goals, tool-memory, and the Composio sync layer.
+ The largest crate here by a wide margin, and the one a
+ real host actually depends on. Unlike `api/` it is not
+ dependency-light: today it links the TinyCortex engine,
+ a bundled SQLite, and an HTTP stack unconditionally.
adapters/
├── tinycortex/ the TinyCortex engine seen through the contract
└── remote/ native HTTP dialects for Supermemory, Mem0, and Cognee
+crates/
+└── tinymemory-module/ the TinyBus loadable-module driver. Excluded from the
+ workspace on purpose — see the note in `Cargo.toml`.
vendor/
├── tinycortex/ the engine, pinned as a submodule
+├── tinyagents/ pinned TinyAgents submodule
└── tinybus/ pinned TinyBus submodule
```
+Run `git submodule update --init --recursive` after cloning. Nothing in the
+workspace builds without it — `core` names `tinyagents` and `tinycortex` by
+path through `vendor/`, so an uninitialized checkout fails at manifest
+resolution rather than at compile time, which reads as a confusing error.
+
## The contract
`MemoryProvider` is an object-safe trait with **three mandatory** capability
diff --git a/adapters/remote/Cargo.toml b/adapters/remote/Cargo.toml
index 870bd706..d78ff7eb 100644
--- a/adapters/remote/Cargo.toml
+++ b/adapters/remote/Cargo.toml
@@ -3,7 +3,7 @@ name = "tinymemory-remote"
publish = false
version = "0.1.0"
edition = "2021"
-rust-version = "1.85"
+rust-version = "1.96"
license = "MIT"
description = "HTTP adapters for self-hosted Supermemory, Mem0, and Cognee"
repository = "https://github.com/tinyhumansai/tinymemory"
diff --git a/adapters/tinycortex/Cargo.toml b/adapters/tinycortex/Cargo.toml
index dc04faf9..01bf0420 100644
--- a/adapters/tinycortex/Cargo.toml
+++ b/adapters/tinycortex/Cargo.toml
@@ -6,7 +6,7 @@ name = "tinymemory-tinycortex"
publish = false
version = "0.1.0"
edition = "2021"
-rust-version = "1.85"
+rust-version = "1.96"
license = "MIT"
description = "TinyCortex engine adapter for the TinyMemory contract"
repository = "https://github.com/tinyhumansai/tinymemory"
diff --git a/api/Cargo.toml b/api/Cargo.toml
index 673c26eb..3d5f32d1 100644
--- a/api/Cargo.toml
+++ b/api/Cargo.toml
@@ -6,6 +6,7 @@ name = "tinymemory-api"
publish = false
version = "0.1.1"
edition = "2021"
+rust-version = "1.96"
license = "MIT"
repository = "https://github.com/tinyhumansai/tinymemory"
description = "Stable public contracts for the TinyMemory memory system"
diff --git a/core/Cargo.toml b/core/Cargo.toml
index 18fd2f7b..628cafda 100644
--- a/core/Cargo.toml
+++ b/core/Cargo.toml
@@ -6,7 +6,7 @@ name = "tinymemory-core"
publish = false
version = "0.1.0"
edition = "2021"
-rust-version = "1.85"
+rust-version = "1.96"
license = "MIT"
description = "The engine-neutral memory subsystem: store, summary tree, sync pipelines, ingestion and recall"
repository = "https://github.com/tinyhumansai/tinymemory"
diff --git a/core/src/store/namespace_store/events.rs b/core/src/store/namespace_store/events.rs
index bb3aca44..c03bf076 100644
--- a/core/src/store/namespace_store/events.rs
+++ b/core/src/store/namespace_store/events.rs
@@ -475,7 +475,7 @@ fn decode_embedding_row(bytes: &[u8], dim: i64) -> anyhow::Result