PLAYFAIR

Tripartite Game · 3-Region Asynchronous Agent Test
2026-06-21T07:44:35.590Z · 183s runtime
153
Perceptions
47
Stored
30
Routes
30
Migrations
50
Epochs
FAIR
Verdict
What is this? Runtime config Regions Timeline Tokens Agents Scenarios Needlecasts Residues How to read

WHAT IS THIS? why we run it

Playfair is a 50-epoch, 3-region, 6-agent tripartite-game test. Each region has a different cost profile (storage cheap, compute cheap, bandwidth cheap respectively), and agents are assigned a home region whose profile matches their workload.

The orchestrator drives realistic activity (perceives, stores, routes, syncs) and scripts dramatic events (spot preemption, drift spike, residue injection) to force cross-region needlecasts. After each epoch the TripartiteGame contract is audited via verifyAllocationFair(). The test passes only if every epoch stays within its per-region budgets.

This is the closest thing in the repo to a system-level integration test: it exercises the full stack — the EVM (cortex), the DAG (hippocampus), PoW (medulla), the API (siyana), the router (thalamus), the bus (NATS), the registry (Postgres), and the cross-region latency profile injected with tc netem.

RUNTIME CONFIG reproducibility

Clusterplayfair
Epochs50
Epoch interval4000 ms
Agents6
Regions3
Latency profilestorage↔compute 33±5ms · compute↔bandwidth 42±8ms · storage↔bandwidth 75±12ms
Started2026-06-21T07:44:35.590Z
Ended2026-06-21T07:47:39.085Z
Duration183.5 s
Commit258683d922ad0b288b181aba9ad4bdf299f8bef1
Runnergithub-actions/Linux

REGIONS cost profiles & budgets

region-storage
compute cost: high storage cost: low bandwidth cost: medium
budget — C=200 S=1000 B=400
1 agents currently here
region-compute
compute cost: low storage cost: high bandwidth cost: medium
budget — C=1000 S=200 B=400
4 agents currently here
region-bandwidth
compute cost: high storage cost: high bandwidth cost: low
budget — C=200 S=200 B=1000
1 agents currently here

EPOCH TIMELINE activity per epoch · red dots = unfair

0 7 14 E1E11E21E31E41E50 perceivestoreroutesync

TOKEN USAGE BY REGION where each region's budget went

tokens storagecomputebandwidth compute storage bandwidth

AGENTS cumulative perceived/stored/routed/synced

Archivist-Alpha memory
Memory keeper — pins shards, reconciles, keeps fidelity high. Exploits cheap storage in this region.
18perceived
15stored
0routed
2synced
⚡ 72 💾 45 📡 0
📍 storage drift: 8
CPV: [0.4, 1.8, 1.0, 0.6, 1.2]
Archivist-Beta human
Slow narrative agent — writes detailed memories, rarely moves. Natural fit for cheap storage.
34perceived
16stored
1routed
4synced
⚡ 77 💾 48 📡 5
⚡ storage → compute drift: 12
CPV: [0.5, 1.6, 0.8, 0.5, 1.6]
Inference-Prime ai
Fast AI agent — burns through compute budget quickly. Storage is expensive so stores selectively.
40perceived
7stored
3routed
7synced
⚡ 320 💾 21 📡 17
📍 compute drift: 10
CPV: [1.9, 0.3, 0.8, 0.5, 0.5]
Inference-Echo ai
AI agent that frequently needlecasts to storage region when memory budget runs low.
35perceived
8stored
5routed
5synced
⚡ 280 💾 24 📡 27
📍 compute drift: 10
CPV: [1.7, 0.4, 0.9, 0.8, 0.2]
Router-Nexus mining
Routing specialist — exploits cheap bandwidth. Needlecasts frequently, syncs aggressively.
10perceived
1stored
14routed
0synced
⚡ 40 💾 3 📡 71
📍 bandwidth drift: 10
CPV: [0.3, 0.3, 1.5, 1.8, 0.1]
Router-Sentinel memory
Bandwidth-region sentinel — watches for residues, routes corrections, earns ResidueToken.
16perceived
0stored
7routed
2synced
⚡ 64 💾 0 📡 36
⚡ bandwidth → compute drift: 6
CPV: [0.4, 0.5, 1.2, 1.6, 0.3]

SCENARIO EVENTS scripted at fixed epochs

E5 spot-preemption Spot instance preempted in compute region — agent must needlecast to storage region
E8 respawn Inference-Prime re-sleeves in storage region (expensive compute, cheap storage)
E15 needlecast Spot instance available again in compute region — needlecast back
E20 drift-spike Human agent goes idle for 5 epochs — drift accumulates
E25 sync-recovery Human agent returns, syncs, burns SyncToken to recover
E30 residue-inject Simulated shard loss in bandwidth region — first responder earns bounty
E35 needlecast Inference-Echo migrates to bandwidth for cheaper routing during high-needlecast phase
E40 epoch-surge All agents perceive at max rate for 5 epochs — stress test
E45 needlecast Inference-Echo returns to compute region as surge subsides

NEEDLECASTS cross-region migrations

E14 Router-Nexus bandwidthstorage 5.1 RTE · 1 shards
E14 Router-Sentinel bandwidthcompute 5.1 RTE · 1 shards
E15 Inference-Prime storagecompute 7.1 RTE · 1 shards
E17 Inference-Echo computebandwidth 5.1 RTE · 1 shards
E17 Router-Sentinel computestorage 5.1 RTE · 1 shards
E19 Router-Nexus storagebandwidth 5.1 RTE · 1 shards
E23 Router-Nexus bandwidthcompute 5.1 RTE · 1 shards
E23 Router-Sentinel storagecompute 5.1 RTE · 1 shards
E24 Inference-Prime computebandwidth 5.1 RTE · 1 shards
E27 Router-Sentinel computebandwidth 5.1 RTE · 1 shards
E28 Router-Nexus computebandwidth 5.1 RTE · 1 shards
E32 Inference-Echo bandwidthstorage 5.1 RTE · 1 shards
E32 Router-Nexus bandwidthstorage 5.1 RTE · 1 shards
E33 Router-Nexus storagebandwidth 5.1 RTE · 1 shards
E34 Router-Nexus bandwidthstorage 5.1 RTE · 1 shards
E35 Inference-Echo storagebandwidth 5.7 RTE · 2 shards
E37 Router-Nexus storagebandwidth 5.1 RTE · 1 shards
E37 Router-Sentinel bandwidthcompute 5.1 RTE · 1 shards
E38 Router-Nexus bandwidthcompute 5.1 RTE · 1 shards
E39 Inference-Prime bandwidthcompute 5.2 RTE · 2 shards
E41 Router-Nexus computestorage 5.1 RTE · 1 shards
E41 Router-Sentinel computebandwidth 5.1 RTE · 1 shards
E44 Inference-Echo bandwidthcompute 5.2 RTE · 2 shards
E45 Inference-Echo computecompute 5.8 RTE · 3 shards
E46 Router-Nexus storagecompute 5.1 RTE · 1 shards
E47 Router-Nexus computebandwidth 5.1 RTE · 1 shards
E48 Router-Sentinel bandwidthcompute 5.1 RTE · 1 shards
E49 Router-Nexus bandwidthstorage 5.1 RTE · 1 shards
E50 Archivist-Beta storagecompute 5.4 RTE · 4 shards
E50 Router-Nexus storagebandwidth 5.1 RTE · 1 shards

RESIDUES drift / shard-loss / reorg events

E30 shard-loss bandwidth resolved by Inference-Echo (+15 RES)

HOW TO READ what the numbers mean

Verdict — FAIR / UNFAIR. If any single epoch's activity violates a region's per-epoch token budget the verdict flips to UNFAIR. A fair run means the protocol's allocation accounting matches reality.

Migrations. Each entry in the needlecast log is a real cross-region move: the agent's sleeve is decommissioned in the source region, shards are paid for, and a new sleeve is spawned in the destination. Higher migration counts mean the cost arbitrage between regions is large enough to be worth paying for.

Drift. Drift accumulates when an agent perceives faster than it syncs. High final drift in the agent cards is fine in isolation but should be roughly correlated with sync activity — an agent with high drift and zero syncs would be a bug in the sync loop.

Sparklines. Each agent card has a 4-line sparkline showing its cumulative perceives/stores/routes/syncs over the run. Steeper lines = higher activity. A line that flatlines mid-run usually means the agent's sleeve was decommissioned (e.g. spot preemption).

Conditions vary. The same scenario script under a different latency profile (set via terraform apply -var latency_storage_compute_ms=80) will shift the timing of needlecasts and the shape of the timeline; under different per-region budgets it can flip the verdict. The structure of the test is deterministic; the content is randomised within agent perceive/store/route rates.

ALL EPOCHS VERIFIED FAIR

6 agents across 3 regions over 50 epochs — 153 perceptions, 30 cross-region migrations, 1 residues (1 resolved).