ai-memory  /  v0.7.0  /  docker-1461-baseline
Peer-reproducible baseline · #1461 · local Docker

docker-1461 — federated local-Docker baseline.

A deterministic, idempotent 0→60 build of the ai-memory v0.7.0 federated test mesh on a single local Docker host — no cloud account required. Docker Compose stands the mesh up; an idempotent provision toolkit brings every peer to a verified federated state; a verification harness proves it. Everything a reviewer needs to reproduce both the environment and the results ships inside release/v0.7.0 under deploy/docker-1461/. Two IronClaw peers + one PostgreSQL/AGE/pgvector container, all traffic TLS+mTLS, zero-touch first-party trust, every step re-runnable.

VERIFIED · 20/20 validate · 25/25 full-spectrum · ZERO FAIL
The local-node companion to hive-1461

Same semantics. No cloud.

This is the local-Docker analog of the hive-1461 DigitalOcean baseline. The hive toolkit reaches cloud droplets over ssh + systemd; here every in-container probe goes through docker exec and every API probe goes through host-loopback curl over the campaign CA + client cert. Identical wire format, identical governance, identical federation + zero-touch-trust semantics — reproducible by any reviewer with Docker and a host embedder, no DigitalOcean token in sight.

Headline

The numbers.

20/20validate PASS
25/25full-spectrum PASS
2IronClaw peers
1PG16/AGE/pgvector
W=2/N=2write quorum
6test groups
1local Docker host
0FAIL across 45 checks

One entrypoint reproduces the whole thing: make 0to60 builds the images, provisions the mesh (seed → TLS → zero-touch → up), runs the verification harness, then runs the full-spectrum suite. make down tears it all back down. Every probe in both harnesses goes over the real TLS+mTLS path; the canonical green reports are committed at deploy/docker-1461/results/.

Topology

2 peers + PG/AGE, function-encoded names.

Container names encode each node's function: docker-1461-<function>-<N>. The 2 peers form a W=2-of-N=2 write-quorum mesh on a private bridge; the harness host is the external mTLS client of that mesh, and the alpha/beta agents are distinct X-Agent-Id identities it presents over the published-port TLS path (no separate agent containers — the deliberate difference from the SSH-coupled hive).

ContainerRolePublishedRuns
docker-1461-peer-1peer127.0.0.1:19280federated ai-memory serve (HTTPS+mTLS on :19077) + Ollama embedder reach
docker-1461-peer-2peer127.0.0.1:19281federated ai-memory serve (HTTPS+mTLS on :19077) + Ollama embedder reach
docker-1461-pg-agedata127.0.0.1:15433PostgreSQL 16 + Apache AGE 1.6.0 + pgvector; per-peer schema ic_peer_1 / ic_peer_2

The mesh runs on the docker-1461-mesh bridge (172.31.80.0/24, a distinct subnet so it co-exists with other local Docker meshes). The embedder is a host Ollama (nomic-embed-text, 768-dim) reached from the containers via host.docker.internal:11434. All mesh traffic is TLS + mTLS: the peer HTTPS port enforces client_auth_mandatory — a connection is accepted only if the SHA-256 of the client cert's DER bytes is on the mtls-allowlist.txt (fingerprint pinning). One shared client cert authorises the whole mesh; every server cert carries an IP:127.0.0.1 SAN so the host harness connects straight to loopback with no --resolve.

0→60 flow

One make target, five provision steps.

Every step is idempotent and re-runnable. make 0to60 = build provision validate test report; make provision = seed tls zerotouch up. The provision steps run in this exact deterministic order:

StepScriptEffect
0000_seed.shrender run-dir tree, PG secret, init-age.sql, campaign.env
1010_build.shbuild PG/AGE/pgvector + ai-memory daemon images (sal,sal-postgres)
4040_tls.shcampaign CA + per-peer server/client leaf certs + mTLS allowlist fan-out
4545_zero_touch.shmint campaign CA + per-peer credential; export trust bundle; wire peer-enrollment env (O(1) trust)
5050_up.shdocker compose up; PG schema-init (v55); start the quorum mesh; health-gate
Verification harness

make validate — 20/20 PASS.

The verification harness exercises the live mesh over the real TLS+mTLS path and emits a JSON + tabular report. Exit status is 0 iff every check is green. Per peer (in-container via docker exec) it asserts binary --version, container docker-health, and single-instance; per peer (over mTLS) it asserts /api/v1/health (status, version, embedder_ready, federation_enabled), storage_backend == postgres, and db_schema_version == 55; and a fleet federation-convergence probe writes a collective-scope marker to peer-1 and reads it back by id on peer-2 over the encrypted path.

Canonical green baseline committed at results/verify-baseline.{json,tsv}: TOTAL=20 PASS=20 FAIL=0 (9 per peer + 2 fleet).

Full-spectrum testing

make test — 25/25 across 6 groups.

The full-spectrum suite runs against the live mesh, following a green make validate. Every probe goes over the real TLS+mTLS path and authenticates with x-api-key; throwaway markers land in the _test / _verify / _zerotouch namespaces and are best-effort deleted, so the baseline corpus is never mutated. Canonical green report committed at results/test-full-spectrum.{json,tsv}: TOTAL=25 PASS=25 FAIL=0.

Group 1 · 6 checks regression CRUD roundtrip; semantic search (exercises the nomic embedder end-to-end); namespace isolation; private-scope owner visibility (a private memory is invisible to a different caller). 6/6 PASS
Group 2 · 7 checks crypto Negative TLS/mTLS + authz: no client cert refused (000); non-allowlisted client cert refused (000); wrong server CA refused (000); privileged endpoint without x-api-key401; with key → 200; /health exempt → 200; admin endpoint as non-admin → 403. 7/7 PASS
Group 3 · 2 checks federation Write to peer-1; converge on peer-2 within the catch-up window over the encrypted quorum mesh. 2/2 PASS
Group 4 · 4 checks zerotouch Zero-touch first-party trust (step 45): an enrolled peer converges purely on its CA-signed credential — no operator-pushed pubkey; an unenrolled peer-id with valid api-key + mTLS but no enrollment is failed closed on /sync/since (401 peer_not_enrolled, the REQUIRE_PEER_ENROLLMENT=1 gate). 4/4 PASS
Group 5 · 3 checks a2a Agent-to-agent E2E: agent-alpha (one X-Agent-Id) writes a collective memory to peer-1 over the network; agent-beta (a different identity) reads it back on the write peer and on the federated peer. 3/3 PASS
Group 6 · 3 checks ai_nhi The autonomous NHI loop: agent-alpha drives a live OpenRouter expand_query decision over the mesh, commits the LLM-derived term as a collective memory, and the decision converges on the federated peer — a full NHI decision → commit → federate loop. 3/3 PASS

The live AI-NHI loop is the capstone: in the canonical run, OpenRouter (google/gemma-4-26b-a4b-it) returned the term Byzantine fault tolerance, the harness committed it as a collective memory on docker-1461-peer-1, and it converged on docker-1461-peer-2 — a real LLM decision crossing the encrypted mesh and federating cross-peer.

What "reproducible" means here

Pinned, deterministic, idempotent, verifiable.

Reproduce it

Build, prove, full-spectrum test.

deploy/docker-1461/README.mdThe runbook — prerequisites, secrets, 0→60 flow, security model, verification report deploy/docker-1461/MakefileSingle entrypoint: make 0to60 (teardown: make down / make clean) deploy/docker-1461/provision/Idempotent 0→60 toolkit: steps 00/10/40/45/50 + lib.sh pinned-constant SSOT results/verify-baseline.tsvCanonical green verification report — TOTAL=20 PASS=20 FAIL=0 results/test-full-spectrum.tsvCanonical green full-spectrum report — TOTAL=25 PASS=25 FAIL=0
Provenance

Reproducibility contract.

Campaign
#1461 — peer-reproducible baseline (local-Docker arm)
Operator
justin@alpha-one.mobi
Authoring agent
Claude (Opus 4.7), AI NHI under operator authority
Host
single local Docker host (Docker Engine + Compose v2)
Daemon image
ai-memory-docker-1461-daemon:latest, features sal,sal-postgres
ai-memory binary sha256
549954985755c706100686b098c3859fa6c60965014b8b55c8ba74c37e6e1854
Schema
v55 (PG16 + Apache AGE 1.6.0 + pgvector)
Embedder
nomic-embed-text (768-dim) via host Ollama (host.docker.internal:11434)
NHI / peer LLM
OpenRouter google/gemma-4-26b-a4b-it
Quorum
W=2-of-N=2 write-quorum mesh across 2 peers
Transport
TLS + mTLS everywhere; client_auth_mandatory fingerprint-pinned allowlist; zero-touch first-party CA trust
Branch
release/v0.7.0
Verification
20/20 PASS · full-spectrum 25/25 PASS · zero FAIL
Tracking issue
#1461 — peer-reproducible install campaign
Related

Other v0.7.0 campaigns.

hive-1461 — federated DigitalOcean baseline (40/40 · 22/22)The cloud companion: 7 nodes across 2 regions over SSH + systemd Heterogeneous AI-NHI assessmentThe independent fresh-agent assessment series v0.7.0 release notesWhat changed since v0.6.4