Files
clawhdf5/research/01-architecture-overview.md
T
ClawHDF5 PlannerandClaude Sonnet 4.6 14db35aa74 research: ClawHDF5 deep-dive — architecture, performance, robustness, security
Seven research briefs covering the full mission scope:
01 — Architecture overview (crate map, format coverage, agent modules)
02 — Roadmap status and strategic gaps (distribution, MPI-IO, encryption)
03 — HDF5 ecosystem and cutting-edge developments (HDF5 2.0, Blosc2, ANN trends)
04 — Performance optimizations (10 opportunities, prioritized)
05 — Robustness enhancements (fuzzing gaps, bounds audit, WAL, KG cycle guard)
06 — Security hardening (encryption, signing, embedding poisoning, JNI safety)
07 — Synthesis and 15 actionable next steps with INT-NN task markers

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
2026-08-12 11:25:53 +00:00

9.1 KiB
Raw Blame History

ClawHDF5 Architecture Overview

Research brief — generated 2026-08-12


1. Project Identity

ClawHDF5 (package prefix clawhdf5-*) is a pure-Rust HDF5 implementation combined with a research-grade agent memory engine. It ships zero C dependencies, targets no_std environments (embedded / WASM), and stores all agent state in a single portable .h5 file.

Current version: 2.1.0 (released 2026-06-03; unreleased work-in-progress is the effective HEAD).

Repository: Cargo workspace with 16 crates (plus libaec-sys, an internal FFI-bindings crate for the optional SZIP feature). Total size ~92K lines of Rust.


2. Crate Map

clawhdf5 workspace
│
├── Core HDF5
│   ├── clawhdf5-format     — Binary parser/writer (no_std), shared type defs
│   ├── clawhdf5-io         — I/O abstraction: buffered, mmap, async, MPI-IO stub
│   ├── clawhdf5-filters    — Fast deflate path (zlib-ng); lz4/zstd/pcodec/szip live in format
│   ├── clawhdf5-derive     — Proc-macro #[derive(HDF5)]
│   ├── clawhdf5            — High-level facade (File, Dataset, FileBuilder)
│   ├── clawhdf5-netcdf4    — NetCDF-4 compatibility shim
│   ├── clawhdf5-accel      — CPU SIMD (AVX2, AVX-512, NEON) acceleration
│   └── clawhdf5-gpu        — GPU compute via wgpu + hand-written WGSL shaders
│
├── Agent Memory
│   ├── clawhdf5-agent      — Memory engine (20.9K lines, 32 modules)
│   ├── clawhdf5-ann        — HNSW ANN index (default vector backend)
│   ├── clawhdf5-migrate    — SQLite → HDF5 migration tool
│   ├── clawhdf5-android    — Android JNI bridge
│   └── clawhdf5-cli        — CLI (create / save / search / recall / stats / …)
│
├── Bindings
│   ├── clawhdf5-py         — Python via PyO3 (pyo3/numpy 0.29)
│   └── clawhdf5-napi       — Node.js via napi-rs (@redclaw/clawhdf5 npm package)
│
└── Tooling
    └── clawhdf5-bench      — Criterion benchmark suite

3. HDF5 Format Layer (clawhdf5-format)

3.1 Parser Coverage

The format crate implements a ground-up HDF5 binary parser. Notable capabilities shipped as of HEAD:

Feature Status
Superblock v0v4 (incl. page-buffer mode) Full
B-tree v1 (symbol, chunk) Full
B-tree v2 (link-name index type 5) Full
Fractal heap (single-direct-block) Full
Fractal heap (multi-direct-block / root indirect) Full
Fractal heap (multi-level indirect) Not yet
Dense group link storage (fractal heap + v2 B-tree) Full
Dense attribute storage Full
Compact / contiguous / chunked data layouts Full
Fixed Array chunk index Full (incl. paged)
Extensible Array chunk index ⚠️ Partial (fixed rows only)
Virtual Datasets (same-file) Full
Virtual Datasets (external-file) Via VdsSourceResolver callback
Filter: deflate (zlib-ng fast path)
Filter: shuffle
Filter: fletcher32
Filter: LZ4 (id 32004) (feature-gated)
Filter: Zstandard (id 32015) (feature-gated)
Filter: Pcodec (id 32023) (feature-gated)
Filter: N-Bit (id 5) Full (atomic, compound, array)
Filter: Scale-offset D-scale / integer (id 6) Full
Filter: Scale-offset E-scale (id 6, type 1) Full
Filter: SZIP (id 4) Feature-gated (szip via libaec-sys FFI)
Datatype: fixed-point (int) Full incl. reduced-precision + sign extension
Datatype: floating-point (f32/f64/f16) Full
Datatype: string (fixed/variable) Full
Datatype: compound (class 6, v1v5) Full
Datatype: array (class 10, v1v5) Full
Datatype: reference ⚠️ Partial

3.2 Write Path

  • FileBuilder API for high-level file construction.
  • Dense attribute/link writes via single-direct-block fractal heap + v2 B-tree (validated against h5py 3.16 / HDF5 2.0).
  • Multi-direct-block write path shipped (root indirect block).
  • Objects spanning blocks (huge-object path) not yet supported.
  • Chunked write with parallel compression (rayon, parallel feature).
  • Auto-shuffle (AoS→SoA byte transpose): +157204% throughput on float data.

3.3 Chunk Cache

O(1) lookup via slot_index: HashMap. Cache hits return a shared Arc (no clone). Cache is scoped per-dataset to prevent cross-dataset index collisions.


4. Agent Memory Layer (clawhdf5-agent)

4.1 Module Map (32 modules)

Module Responsibility
knowledge Entity/relation graph; BFS; spreading activation; fuzzy entity resolution (Levenshtein)
consolidation Three-tier memory (Working → Episodic → Semantic) with importance scoring and time-decay
hybrid RRF (k=60) fusion of vector + BM25; exposes merge_vector_keyword
reranker Multi-factor re-ranking: temporal recency, source authority, activation weight
confidence Low-confidence rejection — suppresses spurious recalls
temporal Sorted timestamp index, session DAG, entity timeline, temporal query hints
multimodal Cross-modal search (text / image / audio / video)
provenance FNV-1a content hash, SHA-256 attributes, source attribution
anomaly 15 injection-pattern detectors, write rate limiter, source distribution analysis
openclaw MemoryBackend trait; Markdown ↔ HDF5 import/export
vector_search Flat cosine, pre-normed, SIMD, BLAS, GPU paths
ivf / pq IVF-PQ ANN for billion-scale search
bm25 BM25 keyword index with TF-IDF
entity_extract Rule-based entity extraction from text chunks
wal CRC32-per-entry WAL; WAL_VERSION 2; length-prefix caps (MAX_WAL_FIELD_LEN = 64 MiB)
memory_strategy Pluggable strategies: save-every, semantic-shift, user-correction detection
decision_gate Sub-microsecond trivial/substantive classification
async_memory Tokio async wrapper (async feature)

4.2 HDF5 Schema

agent_memory.h5
├── /meta               — schema_version, agent_id, embedder, embedding_dim, created_at
├── /memory
│   ├── chunks:         string[N]
│   ├── embeddings:     f32[N × D]  (f16 with float16 flag — 2× space savings)
│   ├── tombstones:     u8[N]
│   └── norms:          f32[N]  (pre-computed L2)
├── /sessions
│   ├── ids:            string[S]
│   └── summaries:      string[S]
└── /knowledge_graph
    ├── entity_names:   string[E]
    ├── relation_srcs:  i64[R]
    ├── relation_tgts:  i64[R]
    └── relation_types: string[R]

4.3 HNSW Vector Index (clawhdf5-ann)

  • Default vector backend for hybrid_search (on by default via hnsw feature).
  • Mutable live index: insert, mark_deleted (soft-delete bitset), compact, serialization (format version 2).
  • Self-healing: rebuilds on drift from memory cache length.
  • Optional parallel feature (rayon) for prune_connections.
  • Outer build/insert loop is deliberately sequential (cross-iteration data dependencies).
  • Fallback: exact linear cosine scan via --no-default-features --features float16.

4.4 Retrieval Pipeline

Agent query
    │
    ▼
Hybrid search (HNSW vector + BM25)
    │
    ▼
RRF fusion (k=60)
    │
    ▼
Multi-factor re-ranking
  · temporal recency
  · source authority
  · spreading activation weight
    │
    ▼
Confidence rejection (min_score threshold + gap filter)
    │
    ▼
Results

LongMemEval results (full longmemeval_s haystack, 500 questions):

  • BM25 only: 75.0% turn-level Hit@5
  • Vector only (MiniLM): 71.8%
  • Hybrid (weights 0.4/0.6 — tuned): 81.4%

5. Cross-Language Bindings

Binding Crate Status
Python clawhdf5-py (PyO3 0.29 / numpy 0.29) Build works locally; wheels not published
Node.js clawhdf5-napi + packages/clawhdf5-node Complete package; not published to npm
Android clawhdf5-android (JNI) Shipped; bounds/null checks added for JNI unsafe

6. CI/CD

.gitea/workflows/ci.yml runs scripts/ci-test.sh on every push/PR to main:

  • rustfmt check
  • clippy (zero warnings)
  • Full test suite (cargo test --workspace, 1,650+ tests)
  • no_std check (scripts/check-nostd.sh)

7. Key Design Decisions

  1. Zero C dependencies — enables no_std, static linking, cross-compilation, and eliminates the HDF5 C library as an attack surface. Tradeoff: manual implementation of every HDF5 format detail.
  2. Single-file storage — all agent state (vectors, BM25 index, knowledge graph, WAL) lives in one .h5 file. Portability > convenience for multi-component setups.
  3. CRC32 per WAL entry — crash safety without journaling overhead; corrupted entry stops replay cleanly.
  4. float16 storage — 2× space savings on embeddings; defaults on.
  5. HNSW on by default — sub-millisecond ANN at 10K100K vectors; exact scan always available as fallback.
  6. parallel feature off by default — correctness-safe default; enables Rayon where safe (chunk compression, HNSW prune_connections).