Repository navigation
Claude Handoff EHDB NoETL Integration
Status date: 2026-07-04 UTC
This page is the handoff brief for continuing EHDB as the NoETL-specialized Event Horizon Database and integrating it into the NoETL ecosystem. It is written for Claude or another coding agent that does not have the full chat history.
EHDB is not a generic database first. It is the NoETL-domain storage substrate intended to collapse the platform roles currently served by PostgreSQL, NATS JetStream, external object stores, Qdrant, and ClickHouse into one NoETL-centric durable fabric.
EHDB must stay aligned with the NoETL execution model:
gateway = gatekeeper
worker = atomic compute
playbook = ephemeral blueprint
shared cache = state vehicle
event log = source of truth
Gateway/API/server roles may embed EHDB for control-plane planning and validation. They must not execute local-reference data-plane helpers or directly touch EHDB storage. Worker, playbook, and system roles may receive explicit data-plane capabilities for bounded work.
- EHDB code: https://github.com/noetl/ehdb
- EHDB wiki: https://github.com/noetl/ehdb/wiki
- EHDB project board: https://github.com/orgs/noetl/projects/4/views/1
- NoETL integration code: https://github.com/noetl/noetl
- Cross-repo memory/orchestration: https://github.com/noetl/ai-meta
Current merged code anchors:
-
noetl/ehdb:0dc2016f4b692d3d868ccbc3918900962a880ca1(ehdb-local-reference summary --log <path>) -
noetl/noetl:f82ccb7f8fb2c2b8ccbc9881ca230d0ca60a8edd(typed EHDB local-reference readiness summary) -
ai-meta: should track the merged submodule SHAs and memory notes after every upstream merge.
The local reference implementation already includes:
- Rust workspace crates:
ehdb-core,ehdb-catalog,ehdb-storage,ehdb-stream,ehdb-retrieval,ehdb-system,ehdb-transaction,ehdb-reference, andehdb-service. - Catalog-as-database metadata with table schemas, immutable snapshots, scan grants, strict JSON decode, identifier validation, and duplicate column rejection.
- Content-checked immutable object references with byte length, SHA-256 digest, geo placement, and data-gravity shard pointers.
- Placement policy, replication planning, durable replica inventory, and bounded local replication executor metadata.
- Local Arrow IPC table write/read fixtures, latest snapshot scanner, projection, equality filters, and Arrow Flight ticket/result/info codecs.
- Local Arrow Flight service/server trait adapter, loopback listener, auth header policy, tenant/namespace scope guard, scan grant enforcement, bounded request concurrency, and redacted access-log policy.
- Local JSONL transaction log, stream journal, and system-library journal with replay validation.
- Stream model with subjects, subject filters, durable consumers, retention, ack cursors, and strict replay decode.
- RAG/retrieval model with documents, chunks, embeddings, exact vector search, text search, hybrid search, bounded retrieval-context assembly, versioned payload codecs, receipt payloads/events, and caller-controlled receipt stream helpers.
- System WASM library manifests and environment/channel bindings for hot-replaceable system playbook functionality.
- Embedded NoETL role/capability policy that keeps gateway/API roles control-plane-only while allowing bounded worker/playbook/system data-plane capabilities.
-
ehdb-local-reference summary --log <path>, a bounded diagnostic helper that replays a local JSONL transaction log and emits deterministic counts across transaction, catalog, stream, retrieval, system-library, and storage domains.
NoETL currently has the side-effect-free integration envelope:
-
noetl.core.ehdb_contract: feature-gated EHDB env contract, disabled by default. -
noetl.core.ehdb_control_plane: gateway/API/server control-plane-only descriptor. -
noetl.core.ehdb_adapter: worker/playbook local-reference adapter, helper discovery, bounded subprocess execution, and typedLocalReferenceEhdbSummary. -
noetl.core.ehdb_surface: selects control-plane or local-reference surface from env without opening logs or touching storage. -
scripts/smoke_ehdb_local_reference_summary.py: end-to-end smoke againstehdb-local-reference summary. - NoETL dev and pip Dockerfiles build
ehdb-local-referencefrom pinned EHDB ref0dc2016f4b692d3d868ccbc3918900962a880ca1, copy only the binary into the final runtime image, and fail the build ifehdb-local-reference --helpcannot run.
Important NoETL PRs:
- https://github.com/noetl/noetl/pull/673 Initial EHDB integration contract.
- https://github.com/noetl/noetl/pull/675 Local-reference adapter.
- https://github.com/noetl/noetl/pull/677 Control-plane descriptor.
- https://github.com/noetl/noetl/pull/679 Unified EHDB surface selector.
- https://github.com/noetl/noetl/pull/681 Bounded helper execution.
- https://github.com/noetl/noetl/pull/683 Helper discovery and smoke script.
- https://github.com/noetl/noetl/pull/685 Package EHDB helper into NoETL images.
- https://github.com/noetl/noetl/pull/687 Typed EHDB local-reference readiness summary.
Core open umbrellas:
- Phase 0: Bootstrap workspace/CI: https://github.com/noetl/ehdb/issues/1
- Phase 1: Catalog-as-database metadata: https://github.com/noetl/ehdb/issues/2
- Phase 2: Immutable object storage: https://github.com/noetl/ehdb/issues/3
- Phase 3: Transaction log and MVCC boundary: https://github.com/noetl/ehdb/issues/4
- Phase 4: NoETL system-store integration: https://github.com/noetl/ehdb/issues/5
- Domain scope and dependency collapse: https://github.com/noetl/ehdb/issues/6
Recent closed implementation anchors:
- Runtime surface replay fixture: https://github.com/noetl/ehdb/issues/228
- Embedded NoETL role capability policy: https://github.com/noetl/ehdb/issues/230
- Local-reference summary helper: https://github.com/noetl/ehdb/issues/232
Use the Roadmap page for older phase details: https://github.com/noetl/ehdb/wiki/Roadmap
Goal: make the packaged helper available through NoETL deploy/runtime configuration without changing the default disabled behavior.
Implementation notes:
- Work primarily in
noetl/opsand, if needed,noetl/noetl. - Add disabled-by-default Helm/local deploy values for EHDB.
- Render role-specific env:
- server/gateway/API:
NOETL_EHDB_ENABLED=true,NOETL_EHDB_MODE=control_plane,NOETL_EHDB_CLIENT_ROLE=server|api|gateway,NOETL_EHDB_CAPABILITIES=control_plane - worker/playbook/system:
NOETL_EHDB_ENABLED=true,NOETL_EHDB_MODE=local_reference,NOETL_EHDB_CLIENT_ROLE=worker|playbook|system,NOETL_EHDB_LOCAL_REFERENCE_LOG=/opt/noetl/data/ehdb/local-reference.jsonl
- server/gateway/API:
- Keep the feature off by default. Enabling should be explicit in a values overlay or playbook input.
- Validate local kind before any GKE rollout.
Tests:
-
helm templatechecks that disabled defaults render no EHDB env. -
helm templatechecks that enabled worker env includes local reference settings and server env remains control-plane-only. - Kind Job or pod smoke runs
python scripts/smoke_ehdb_local_reference_summary.pyinside the NoETL image withimagePullPolicy: Never.
Goal: expose a bounded worker/playbook preflight that confirms EHDB local-reference readiness without gateway data access.
Implementation notes:
- Reuse
read_ehdb_local_reference_summary_from_env. - Prefer a worker/playbook-local command or smoke step, not a server endpoint.
- If a server/admin surface is needed later, it must be control-plane-only and must not execute the helper.
Tests:
- Disabled env returns no summary and no side effects.
- Worker/playbook env executes helper and validates typed summary.
- Gateway/API/server local-reference env is rejected.
- Missing helper produces a clear validation error.
Goal: define the migration path from NATS JetStream-backed NoETL command and event streams toward EHDB-native streams.
Implementation notes:
- Start with local reference adapters and bridge tests.
- Preserve NATS as a migration adapter, not the target product boundary.
- Do not put stream append/consume logic in gateway.
- Keep durable consumers and ack-after-materialize semantics explicit.
Tests:
- Publish/replay/ack/consumer cursor restart tests in EHDB.
- NoETL worker/playbook smoke showing an EHDB stream fixture can represent command/event semantics.
- Duplicate, malformed subject, wildcard, retention, and replay validation.
Goal: move NoETL system playbook library resolution toward EHDB-owned system library manifests and environment/channel bindings.
Implementation notes:
- Keep WASM execution in worker/system-pool roles.
- EHDB stores manifests, object refs, digests, host capability requirements, and active channel bindings.
- Support hot replacement by rebinding channel/environment to a new digest/revision.
Tests:
- Publish/bind/resolve across tenant, namespace, environment, channel, and logical path.
- Rebinding preserves older immutable manifests.
- Worker/system role can resolve and execute a fixture module reference.
- Gateway/API cannot execute or data-touch the system library store.
Goal: replace external vector-store dependency paths with EHDB-native RAG document/chunk/embedding metadata and bounded retrieval context assembly.
Implementation notes:
- Keep retrieval execution in worker/playbook roles.
- Use EHDB retrieval payload codecs and receipt/event shapes.
- Avoid raw embeddings or prompt content in logs/receipts.
Tests:
- Register document/chunk/embedding metadata.
- Vector, text, and hybrid search fixtures.
- Bounded context assembly with byte/text limits.
- Receipt payload and stream event validation.
- Scope guard rejects cross-tenant/namespace requests.
Goal: move beyond local JSONL references toward replicated metadata and distributed storage placement.
Implementation notes:
- Keep consensus behind transaction-log traits.
- Use existing geo placement and data-gravity shard metadata for planning.
- Replication execution should be bounded worker/playbook/system work, not gateway work.
Tests:
- Consensus/log trait contract tests.
- Replay and crash/restart compatibility.
- Placement policy and replica inventory tests.
- Copy-needed plan execution with digest/length verification.
Goal: evolve the Arrow scan/Flight fixtures toward a NoETL analytical read path.
Implementation notes:
- Keep current Arrow Flight loopback and service trait contracts.
- Add SQL/planner/predicate-pushdown only after metadata and scan contracts are stable.
- Gateway remains an admission/control-plane surface, not a direct reader.
Tests:
- Arrow schema, FlightInfo, Ticket, and FlightData validation.
- Projection/predicate validation and decoded row checks.
- Auth header, tenant/namespace scope, scan grant, access-log, and concurrency tests.
- EHDB is NoETL-specialized, not generic database-first.
- The catalog lives inside EHDB.
- Transaction log/event log is the source of truth; caches are derived.
- Gateway/API/server roles are control-plane-only for EHDB.
- Data touch belongs in bounded worker/playbook/system steps.
- No persistent per-tenant AI-agent/MCP-server processes are required.
- System WASM libraries are hot-replaceable by digest/revision binding, not crate version churn.
- Geo placement and data-gravity shard pointers are storage metadata for future routing, replication, compaction locality, and read scheduling.
- Local JSONL logs and loopback services are reference fixtures, not production distributed durability.
- Container/image changes must be validated in local kind before GKE.
EHDB code:
cargo fmt --all --check
cargo test --workspace
cargo clippy --workspace --all-targets -- -D warnings
cargo bench --workspace --no-run
cargo test -p ehdb-stream -p ehdb-retrieval -p ehdb-referenceNoETL EHDB integration:
.venv/bin/python -m pytest \
tests/core/test_ehdb_contract.py \
tests/core/test_ehdb_adapter.py \
tests/core/test_ehdb_control_plane.py \
tests/core/test_ehdb_surface.py \
tests/scripts/test_smoke_ehdb_local_reference_summary.py
.venv/bin/python -m pytest \
tests/core/test_ehdb_contract.py \
tests/core/test_ehdb_adapter.py \
tests/core/test_ehdb_control_plane.py \
tests/core/test_ehdb_surface.py \
tests/core/test_runtime_topology.py \
tests/core/runtime/test_pool_routing.py \
tests/scripts/test_smoke_ehdb_local_reference_summary.py
.venv/bin/python -m compileall -q \
noetl/core/ehdb_contract.py \
noetl/core/ehdb_adapter.py \
noetl/core/ehdb_control_plane.py \
noetl/core/ehdb_surface.py \
scripts/smoke_ehdb_local_reference_summary.py
.venv/bin/python scripts/smoke_ehdb_local_reference_summary.py \
--helper-bin ../ehdb/target/release/ehdb-local-reference \
--log /tmp/noetl-ehdb-smoke.jsonlNoETL image/kind gate:
env -u XDG_DATA_HOME podman build --platform linux/arm64 \
-t local/noetl:ehdb-helper-image-test \
-f docker/noetl/dev/Dockerfile .
env -u XDG_DATA_HOME podman run --rm \
local/noetl:ehdb-helper-image-test \
python scripts/smoke_ehdb_local_reference_summary.py \
--log /tmp/noetl-ehdb-image-smoke.jsonlFor kind, load the exact image into kind-noetl and run a one-off Job
with imagePullPolicy: Never before any GKE deployment.
Use this prompt in Claude chat:
You are continuing EHDB development for the NoETL ecosystem.
Read first:
- https://github.com/noetl/ehdb/wiki/Claude-Handoff-EHDB-NoETL-Integration
- https://github.com/noetl/ehdb/wiki/Architecture
- https://github.com/noetl/ehdb/wiki/Roadmap
- https://github.com/noetl/ehdb/issues/1
- https://github.com/noetl/ehdb/issues/2
- https://github.com/noetl/ehdb/issues/3
- https://github.com/noetl/ehdb/issues/4
- https://github.com/noetl/ehdb/issues/5
- https://github.com/noetl/ehdb/issues/6
Working model:
- ai-meta is the orchestration repo; product code belongs in submodules.
- EHDB is NoETL-specialized storage, not a generic database first.
- Preserve the NoETL execution model:
gateway = gatekeeper, worker = atomic compute, playbook = ephemeral blueprint,
shared cache = state vehicle, event log = source of truth.
- Gateway/API/server EHDB embedding is control-plane-only. Do not add direct
gateway/API/server data-plane storage access.
- Worker/playbook/system roles may use bounded EHDB data-plane capabilities.
- No persistent per-tenant agent/MCP service should hold state between requests.
- Validate container/image changes in local kind before GKE.
Start with Phase A from the handoff page: ops/runtime enablement.
Create or reuse a GitHub issue, branch from the appropriate repo main,
add disabled-by-default Helm/local deploy EHDB configuration, render
role-specific env safely, test disabled defaults and enabled worker
local-reference mode, run the NoETL EHDB smoke in a local kind Job, then
open and merge a PR. After merging, update ai-meta memory and submodule
pointers.
Report back with:
- issue/PR/wiki links,
- exact commits,
- validation commands and results,
- any architectural decision that needs to be added to the wiki.
- Sync submodules from
ai-meta. - Confirm
repos/ehdb,repos/noetl, andrepos/ehdb-wikiare clean. - Pick one phase from this page, preferably Phase A.
- Open or update a GitHub issue before coding.
- Update the EHDB wiki with any design change in the same slice.
- Implement in the product submodule, not in
ai-meta. - Run focused tests, then nearby/regression tests.
- For image/deploy changes, validate in local
kind-noetlusing Podman, not Docker/Colima fallback. - Merge upstream PR.
- Update
ai-metasubmodule pointer and memory.
- Home
- Architecture
- Architecture — the four engines
- Architecture — resilient KV core
- Consistency Invariants (per tier)
- Roadmap
- Sessions Log
- Claude Handoff
- RFC: Completion Program
- RFC: External EHDB Driver
- L1 Command-Bus Cutover (T4/T5 — prepared, human-gated)
- Prod Cutover — Event-Log Tier (Phase 9, Tier 1)
- Runbook: Async Event-Log Mirror
- Durable Event-Log — Prod Durability Sign-off (§C, slice 6)