ECCA // E2E

End-to-End Integration Test Report — Autonomous Agent Lifecycle
2026-05-08T18:24:18Z
53
Passed
0
Failed
53
Total
01

Health Checks

Verify all infrastructure services are alive. The API gateway, memory DAG, and proof-of-work chain must all respond before any agent operations can begin.

siyana-apiport 7070 — REST/WebSocket API gateway

Siyana is the single entry point for all agent operations.

An agent's first action on startup is to verify its API gateway is reachable.

GET http://localhost:7070/healthz
Response
{
  "ok": true,
  "name": "siyana-api",
  "ts": 1778264658566
}
siyana-api healthz
siyana-api name
medulla-powport 8332 — custom PoW blockchain (global clock)

Medulla mines blocks every ~4s, advancing the epoch counter.

Agents need a decentralized clock. Medulla provides this without trusting any single server.

GET http://localhost:8332/health
medulla-pow health (HTTP 200)
hippocampus-dagport 15001 — content-addressed DAG storage

Hippocampus stores all agent memories as encrypted Merkle-DAG nodes.

This is the agent's long-term memory. Without it, the agent has amnesia.

GET http://localhost:15001/health
hippocampus-dag health (HTTP 200)
02

Stack Identity

Create a persistent identity container (Stack) for the AI agent. Mints an NFT on the Cortex EVM chain, generates ed25519 keys, and initializes token balances. The Stack is the agent's soul.

siyana-api → cortex-evmStack creation triggers StackIdentity.sol NFT mint

POST /v1/stacks generates ed25519 keypair, CPV profile, and mints StackIdentity NFT.

Step 1 of deploying any AI agent: give it a cryptographically-verifiable identity.

POST http://localhost:7070/v1/stacks
{"name":"ci-test-agent"}
Response
{
  "id": "stack:human:6:bd9b82cf6acf",
  "tokenId": 6,
  "name": "ci-test-agent",
  "kind": "human",
  "pubKey": "f8d1c17bee9edb5309efb250595e88b6e864126f6726e1a05b2824baf688a42e",
  "epoch": 0,
  "cpv": {
    "syncCoeff": 1,
    "memoryCoeff": 1,
    "computeCoeff": 1,
    "residueCoeff": 1,
    "routingCoeff": 1
  },
  "binding": {
    "floor": 0.25,
    "decayRate": 0.05
  },
  "createdAt": "2026-05-08T18:24:18.663Z",
  "episodicHead": null,
  "identityPriv": "8028592db74c0e041e963b6571523bbeff1f5296fe917febd415c4c296894647"
}
stack created
stack kind
stack pubKey
stack identityPriv

Retrieving stack by ID to verify persistence.

GET http://localhost:7070/v1/stacks/stack:human:6:bd9b82cf6acf
Response
{
  "id": "stack:human:6:bd9b82cf6acf",
  "tokenId": 6,
  "name": "ci-test-agent",
  "kind": "human",
  "pubKey": "f8d1c17bee9edb5309efb250595e88b6e864126f6726e1a05b2824baf688a42e",
  "epoch": 0,
  "cpv": {
    "syncCoeff": 1,
    "memoryCoeff": 1,
    "computeCoeff": 1,
    "residueCoeff": 1,
    "routingCoeff": 1
  },
  "binding": {
    "floor": 0.25,
    "decayRate": 0.05
  },
  "createdAt": "2026-05-08T18:24:18.663Z",
  "episodicHead": null,
  "sleeves": [],
  "anchors": []
}
stack GET matches
03

Sleeve Spawning

Spawn active embodiments (Sleeves) for the Stack. One identity can inhabit multiple bodies — a human interface and an AI inference engine — each with its own drift counter and token balance.

siyana-apiSleeve records created in PostgreSQL, linked to Stack

Spawning a human sleeve — the operator's interface.

A typical agent spawns a human sleeve for its operator and an AI sleeve for itself.

POST http://localhost:7070/v1/sleeves
{"stackId":"stack:human:6:bd9b82cf6acf","embodimentType":"human"}
Response
{
  "id": "sleeve:human:1:a5281682",
  "stackId": "stack:human:6:bd9b82cf6acf",
  "embodimentType": "human",
  "alive": true,
  "drift": 0,
  "syncEpoch": 0,
  "lastSync": "2026-05-08T18:24:18.787Z",
  "tokens": {
    "sync": 250,
    "memory": 250,
    "compute": 250,
    "residue": 0,
    "routing": 250
  },
  "hostname": null,
  "createdAt": "2026-05-08T18:24:18.787Z"
}
human sleeve created
human sleeve type
human sleeve alive

Spawning an AI sleeve — the autonomous worker.

POST http://localhost:7070/v1/sleeves
{"stackId":"stack:human:6:bd9b82cf6acf","embodimentType":"ai"}
Response
{
  "id": "sleeve:ai:2:4bddb75c",
  "stackId": "stack:human:6:bd9b82cf6acf",
  "embodimentType": "ai",
  "alive": true,
  "drift": 0,
  "syncEpoch": 0,
  "lastSync": "2026-05-08T18:24:18.853Z",
  "tokens": {
    "sync": 250,
    "memory": 250,
    "compute": 250,
    "residue": 0,
    "routing": 250
  },
  "hostname": null,
  "createdAt": "2026-05-08T18:24:18.853Z"
}
ai sleeve created
ai sleeve type
GET http://localhost:7070/v1/sleeves
sleeves list count >= 2 (7)
04

Token Balances

Verify the bandwidth token economy. Four token types (compute, memory, sync, routing) gate all operations. 2 sleeves × 250 each = 500 total per type.

siyana-apiAggregated token balances from PostgreSQL

With 2 sleeves at 250 each, we expect 500 of every token type.

Agents check their budget before starting operations to plan what they can afford.

GET http://localhost:7070/v1/tokens/balances/stack:human:6:bd9b82cf6acf
Response
{
  "stackId": "stack:human:6:bd9b82cf6acf",
  "sleeveTotals": {
    "compute": 500,
    "memory": 500,
    "sync": 500,
    "routing": 500,
    "residue": 0
  }
}
balances stackId
compute tokens
memory tokens
sync tokens
routing tokens
05

Perceive (Memory Storage)

Store observations into the agent's encrypted memory graph. Each perceive encrypts input with epoch-scoped AES-GCM, stores it on Hippocampus as a DAG node, and links it into the episodic chain. Costs 0.5 compute tokens.

siyana-api → hippocampus-dagAPI encrypts, DAG stores, CID returned

Perceive #1: Human sleeve stores an observation.

After reading a document, the agent stores its observation for future recall.

POST http://localhost:7070/v1/sleeves/sleeve:human:1:a5281682/perceive
{"input":"The quick brown fox jumped over the lazy dog"}
Response
{
  "cid": "ecca://cd2c5f94f99b1f0b4176dea717c7f8f35a1389a9f08be2aea7d4df81c797e4c5@0",
  "thought": "[human@281682] The quick brown fox jumped over the lazy dog"
}
perceive 1 returns cid
perceive 1 returns thought

Perceive #2: AI sleeve stores its own observation into the SAME memory graph.

POST http://localhost:7070/v1/sleeves/sleeve:ai:2:4bddb75c/perceive
{"input":"Artificial intelligence is transforming every industry"}
Response
{
  "cid": "ecca://4aa1ef8be2eee02039739b6a73575c1810a107b0bd956ea2834004bbf1c63a22@0",
  "thought": "[ai@ddb75c] Artificial intelligence is transforming every industry"
}
perceive 2 returns cid

Perceive #3: Another human observation. DAG now has 3 linked encrypted nodes.

POST http://localhost:7070/v1/sleeves/sleeve:human:1:a5281682/perceive
{"input":"Memory is the treasury of the mind"}
Response
{
  "cid": "ecca://ec4f6398763cbc2c14e137767539b3c43b1ab438718e484c09acd9828b653fa6@0",
  "thought": "[human@281682] Memory is the treasury of the mind"
}
perceive 3 returns cid
all CIDs are unique
CID has ecca:// prefix
5b

Stack Remember

Pin a core memory directly to the Stack. Pinned memories survive fidelity decay — they are the agent's fundamental knowledge that must never be forgotten.

siyana-api → hippocampus-dagEncrypted, stored, and pinned in the DAG

Pinning a core memory that survives across epochs.

An agent pins its core directives, safety rules, and user preferences.

POST http://localhost:7070/v1/stacks/stack:human:6:bd9b82cf6acf/remember
{"text":"Pinned memory via remember endpoint","pin":true}
Response
{
  "cid": "ecca://003388251ec83482b5b1d25b255868c6606aaa491b23dbcb7fde1d75b2cb8cfe@0"
}
remember returns cid
06

Recall (Memory Retrieval)

Traverse the DAG, decrypting each node with epoch keys. Returns fragments, broken links, and fidelity score. Fidelity < 0.6 triggers a coordination residue. This is RAG with cryptographic integrity.

siyana-api → dhf-compositor → hippocampus-dagCompositor walks DAG, decrypts each node

Recalling all memories. With 4 recent memories and no key rotation, fidelity should be 1.0.

Before responding to a user, an agent recalls memories for context.

GET http://localhost:7070/v1/stacks/stack:human:6:bd9b82cf6acf/recall
Response
{
  "fragments": [
    {
      "cid": "ecca://003388251ec83482b5b1d25b255868c6606aaa491b23dbcb7fde1d75b2cb8cfe@0",
      "ciphertext": {
        "iv": "cc3a69c4454ac817d0b88d98",
        "ct": "31369811e439a112aa5e91cfc54c6703e89208e04fdfe0f46d92fe133642326912eedaa803e770735cc1ae8026acbcf4b98e89",
        "v": 1
      },
      "links": [
        "ecca://ec4f6398763cbc2c14e137767539b3c43b1ab438718e484c09acd9828b653fa6@0"
      ],
      "epoch": 0,
      "kind": "episodic",
      "pinned": true,
      "stackId": "stack:human:6:bd9b82cf6acf"
    },
    {
      "cid": "ecca://ec4f6398763cbc2c14e137767539b3c43b1ab438718e484c09acd9828b653fa6@0",
      "ciphertext": {
        "iv": "f3e530c0b148d50f858cea6d",
        "ct": "67cd299897ce7bfca23ac384a9d9bff1a1101c7e56de1577d5d99297d560372ddfd04946d24f16d9294d707fdb9cb2a74b0441202b3a2f0bd8724cc42beb6327e0",
        "v": 1
      },
      "links": [
        "ecca://4aa1ef8be2eee02039739b6a73575c1810a107b0bd956ea2834004bbf1c63a22@0"
      ],
      "epoch": 0,
      "kind": "episodic",
      "pinned": false,
      "stackId": "stack:human:6:bd9b82cf6acf"
    },
    {
      "cid": "ecca://4aa1ef8be2eee02039739b6a73575c1810a107b0bd956ea2834004bbf1c63a22@0",
      "ciphertext": {
        "iv": "a942b2348ef26c28e8e78c36",
        "ct": "24d04fdde30cbe166f08ee082dedf5737dc2bf8756d3a833f1dd214218e9c8549a5852cebd7c545b122f6f192e625fc76749afba9f31292ec4f8ac53f675d232c80c3132cba016052c7d19953e37bacc2a9f",
        "v": 1
      },
      "links": [
        "ecca://cd2c5f94f99b1f0b4176dea717c7f8f35a1389a9f08be2aea7d4df81c797e4c5@0"
      ],
      "epoch": 0,
      "kind": "episodic",
      "pinned": false,
      "stackId": "stack:human:6:bd9b82cf6acf"
    },
    {
      "cid": "ecca://cd2c5f94f99b1f0b4176dea717c7f8f35a1389a9f08be2aea7d4df81c797e4c5@0",
      "ciphertext": {
        "iv": "0113e3723829ed8ab174f33f",
        "ct": "92b04c2e35ef6c605845bdffd9c281e7d052a61480a9ee2dc713550f1777ef95ca62c219cabd1e295ae725ef7a0c0f86d0ffae954e2bb8502aee762c6997b6ce955b5944a9ac61727132e5",
        "v": 1
      },
      "links": [],
      "epoch": 0,
      "kind": "episodic",
      "pinned": false,
      "stackId": "stack:human:6:bd9b82cf6acf"
    }
  ],
  "broken": [],
  "fidelity": 1
}
recall returns fragments (4)
recall fidelity = 1 (perfect)
no broken links
07

Sleeve Sync

Reset drift counter by syncing to the current epoch. Operations increment drift; drift > 15 = desynced. Costs 1 sync token.

siyana-apiResets drift counter, deducts sync token

Syncing human sleeve — drift was 3, reset to 0.

Agents schedule syncs between task batches to stay coherent.

POST http://localhost:7070/v1/sleeves/sleeve:human:1:a5281682/sync
Response
{
  "ok": true,
  "epoch": 0
}
sync ok
08

Epoch & Mining

Advance the global clock. Thalamus computes coherence root (cross-chain Merkle root), embeds it in the Medulla block header, updates EpochAnchor on Cortex, and triggers Treasury emissions.

siyana-api → thalamus-router → medulla-powCoherence root computed, block mined
GET http://localhost:7070/v1/epochs/current
Response
{
  "epoch": 1990,
  "height": 1990,
  "tip": "0000c1fa0fecda0abb95893c08f50ec8b7cd6a84626fd42e8bc99f9ad1841c0c"
}
epoch number
chain height
chain tip

Triggering PoW block mine. synapticFieldRoot = cross-chain Merkle root.

Mining anchors all agent activity into an immutable record.

POST http://localhost:7070/v1/mining/block
Response
{
  "blockHash": "000095e83818658e48050c1ed3081aed5ee2cbfbccbd3d48825b45c2ea0b3e84",
  "crossRoot": "0000000000000000000000000000000000000000000000000000000000000000",
  "difficulty": 4,
  "epoch": 1991,
  "evmRoot": "0000000000000000000000000000000000000000000000000000000000000000",
  "height": 0,
  "ipfsRoot": "0000000000000000000000000000000000000000000000000000000000000000",
  "sleevesRoot": "0000000000000000000000000000000000000000000000000000000000000000",
  "synapticFieldRoot": "453dc629d6f16fb35cacf976d5b05d739c831ef2846290dda9ae8303479126f3",
  "ts": 1778264659
}
mined block hash
mined synapticFieldRoot
GET http://localhost:7070/v1/epochs/current
Response
{
  "epoch": 1991,
  "height": 1991,
  "tip": "000095e83818658e48050c1ed3081aed5ee2cbfbccbd3d48825b45c2ea0b3e84"
}
height increased after mining (1990 → 1991)
09

Needlecast

Transfer consciousness between sleeves via 6-step atomic saga: FREEZE → SNAPSHOT → SHARD → TRANSMIT → REASSEMBLE → ACTIVATE. Compensates on failure. Costs 5 routing tokens.

siyana-api → needlecast-router-svc → hippocampus-dag → cortex-evmFull cross-service saga

Transferring consciousness from human sleeve → AI sleeve.

When an agent migrates hosts (edge→cloud), it needlecasts. Identity travels; only embodiment changes.

POST http://localhost:7070/v1/needlecast
{"from":"sleeve:human:1:a5281682","to":"sleeve:ai:2:4bddb75c"}
Response
{
  "ok": true,
  "sagaId": "needle:1ff1eeb82c6d712f",
  "route": "4395e0bab1bf60b21ad2852d0120c201c78fbc69886bb40265c6e56e99291a8b",
  "shards": 1
}
needlecast ok
needlecast sagaId
needlecast route
needlecast shards transferred (1)
10

Coordination State

Check for errors (coordination residues). ECCA treats errors as economic objects — other agents earn tokens by proving resolution. Debugging becomes a paid incentive.

siyana-apiQueries desync and residue state

Checking for desynced sleeves (drift > 15).

Monitoring agents poll this to detect problems and compete to resolve them.

GET http://localhost:7070/v1/coordination/desync
Response
[
  {
    "id": "sleeve:ai:5:177a55a5",
    "stackId": "stack:human:1:326ab50ad219",
    "drift": 499
  },
  {
    "id": "sleeve:human:1:04a8cbab",
    "stackId": "stack:human:1:326ab50ad219",
    "drift": 499
  },
  {
    "id": "sleeve:ai:2:8dae6c09",
    "stackId": "stack:human:1:326ab50ad219",
    "drift": 499
  }
]
desync endpoint (HTTP 200)
GET http://localhost:7070/v1/coordination/residues
Response
[]
residues endpoint (HTTP 200)
11

Final Stack State

Verify the Stack after the full lifecycle. episodicHead points to latest memory, tokens partially consumed, both sleeves present.

siyana-apiFull stack state with sleeves and balances

Reading complete stack state — what an agent loads on restart.

GET http://localhost:7070/v1/stacks/stack:human:6:bd9b82cf6acf
Response
{
  "id": "stack:human:6:bd9b82cf6acf",
  "tokenId": 6,
  "name": "ci-test-agent",
  "kind": "human",
  "pubKey": "f8d1c17bee9edb5309efb250595e88b6e864126f6726e1a05b2824baf688a42e",
  "epoch": 1992,
  "cpv": {
    "syncCoeff": 1,
    "memoryCoeff": 1,
    "computeCoeff": 1,
    "residueCoeff": 1,
    "routingCoeff": 1
  },
  "binding": {
    "floor": 0.25,
    "decayRate": 0.05
  },
  "createdAt": "2026-05-08T18:24:18.663Z",
  "episodicHead": "ecca://003388251ec83482b5b1d25b255868c6606aaa491b23dbcb7fde1d75b2cb8cfe@0",
  "sleeves": [
    {
      "id": "sleeve:ai:2:4bddb75c",
      "stackId": "stack:human:6:bd9b82cf6acf",
      "embodimentType": "ai",
      "alive": true,
      "drift": 0,
      "syncEpoch": 1992,
      "lastSync": "2026-05-08T18:24:18.853Z",
      "tokens": {
        "sync": 250,
        "memory": 250,
        "compute": 249.5,
        "residue": 0,
        "routing": 250
      },
      "hostname": null,
      "createdAt": "2026-05-08T18:24:18.853Z"
    },
    {
      "id": "sleeve:human:1:a5281682",
      "stackId": "stack:human:6:bd9b82cf6acf",
      "embodimentType": "human",
      "alive": true,
      "drift": 0,
      "syncEpoch": 0,
      "lastSync": "2026-05-08T18:24:19.356Z",
      "tokens": {
        "sync": 249,
        "memory": 250,
        "compute": 249,
        "residue": 0,
        "routing": 245
      },
      "hostname": null,
      "createdAt": "2026-05-08T18:24:18.787Z"
    }
  ],
  "anchors": []
}
episodicHead set
stack has sleeves
compute tokens consumed (498.5 < 500)
routing tokens consumed by needlecast (495 < 500)
12

Cleanup (Decommission)

Decommission sleeves. Tokens return to the Stack pool. The Stack identity persists on-chain and can spawn new sleeves at any time.

siyana-apiSets alive=false, returns tokens to pool
DELETE http://localhost:7070/v1/sleeves/sleeve:human:1:a5281682
Response
{
  "ok": true
}
decommission human sleeve
DELETE http://localhost:7070/v1/sleeves/sleeve:ai:2:4bddb75c
Response
{
  "ok": true
}
decommission ai sleeve
GET http://localhost:7070/v1/sleeves
no alive sleeves for stack after cleanup
13

Blockchain Verification

Verify all three chains recorded cryptographic evidence. Cortex EVM (contracts), Medulla PoW (coherence roots), Hippocampus (encrypted memory nodes).

cortex-evmport 8545 — Clique PoA, chain ID 1337

Querying Cortex block height. Stores StackIdentity NFTs, BandwidthToken, all registries.

POST http://localhost:8545
{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}
Response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": "0x7b5"
}
cortex-evm block height: 0x7b5
medulla-powport 8332 — Go PoW, ~4s blocks

Height = epochs passed. Block headers contain the coherence root.

POST http://localhost:8332/rpc
{"jsonrpc":"2.0","id":1,"method":"getinfo","params":{}}
Response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "difficulty": 4,
    "epoch": 1992,
    "height": 1992,
    "tip": "0000f6e9896468f14532a5c81413b52e699efd67b252b3e536b2dd3fcf2b89a6"
  }
}
medulla-pow height: 1992
hippocampus-dagport 15001 — Merkle-DAG

We created 4 memories, expect at least 4 nodes stored.

GET http://localhost:15001/stat
Response
{
  "nodes": 1517,
  "peers": 0,
  "pinned": 16
}
hippocampus-dag stored 1517 nodes

ALL SYSTEMS NOMINAL

Full autonomous agent lifecycle verified — coherence maintained across all chains

⚡ IdentityStack + NFT + ed25519 keypair
🧬 EmbodimentHuman + AI sleeves spawned
💰 EconomyBandwidth tokens verified
🧠 Memory4 encrypted DAG nodes stored
🔍 Recall100% fidelity reconstruction
⛓ CoherenceEpoch mined, root anchored
🚀 TransferConsciousness needlecast
🔗 BlockchainEVM + PoW + DAG verified
🧹 CleanupSleeves decommissioned