Skip to main content

Process Layout

The miner and validator deployments are independent process groups. Each one runs on Docker Compose.
GroupProcesses
Minerphylax-miner container + sandbox container per task
Validatorphylax-validator container + sandbox rerun container per job
The validator additionally needs access to the host Docker socket so it can dispatch sandbox reruns.

Data Stores

StoreOwnerWhat it holds
~/.phylax/rerun_queue.sqlite3ValidatorPending and completed sandbox rerun jobs
~/.phylax/collusion.sqlite3Validator30 round window of agreement data per miner per skill type
Docker image cacheValidator and minerPulled sandbox images
Miner host filesystemMinerSandbox image, local pipeline source, optional model artifacts

Inter-Component Traffic

                      Subtensor (Substrate)

                            │ WebSocket
                            │ set_weights, metagraph

              ┌─────────────┴───────────────┐
              │                             │
   ┌──────────┴─────────┐           ┌──────┴───────┐
   │     Validator      │  Dendrite │    Miner     │
   │   forward loop     │◄────────► │  axon + box  │
   │                    │  Synapse  │              │
   └────────────────────┘           └──────────────┘
ChannelProtocolFrequency
Validator ↔ SubtensorWebSocketOne metagraph poll per round, one set_weights per WEIGHT_UPDATE_INTERVAL
Validator ↔ MinerDendrite (HTTPS over axon)Up to twelve dispatches per round, one async rerun per primary later
All synapses are signed by the sender’s hotkey and verified on the receiver against the on-chain UID list.

Validator Process Tree

The validator container starts as PID 1 running neurons/validator.py, which forks four logical threads.
ThreadResponsibility
Forward loopDrives the per round flow. Most CPU work.
Rerun workerPolls rerun_queue.sqlite3, pulls images, runs reruns. Independent rate.
Axon healthExposes a tiny axon for chain side health checks.
WatchdogRestarts the forward loop on hang.
The rerun worker is its own thread so a slow Docker pull cannot block the forward loop. If the rerun thread crashes the forward loop continues without it. The queue persists so reruns resume on restart.

Miner Process Tree

ThreadResponsibility
Axon serveReceives dispatches, calls into the pipeline, returns SSSAs.
Docker managerManages per task sandbox container lifecycle.
Optional MCP clientUsed only when the miner supports the mcp_server skill type.
The miner runs its pipeline in process. The pipeline manages a sandbox container per task. The sandbox does the actual untrusted execution. The pipeline reads the resulting trace bundle, signs an SSSA, and returns it through the axon.

What Happens on Restart

ComponentWhat survives restart
ValidatorRerun queue, collusion DB, last on-chain weight vector. Forward loop state is recomputed from chain on first round.
MinerSandbox image cache. Pipeline state is stateless across requests.
SubtensorPublic chain state survives by definition.
A clean restart of validator and miner without losing in flight work is possible.

Network Egress Requirements

ComponentOutbound dependencies
MinerSandbox image registry of choice, package registries inside the sandbox (pip, npm), optional LLM provider for llm_evidence
ValidatorEvery sandbox image registry that any miner uses, optional LLM provider, subtensor endpoint
The validator is the heaviest egress consumer because it pulls every registered miner’s image at rerun time.

Failure Domains

FailureEffect
Single miner offlineTheir slot in the verification group is left empty. If fewer than three miners support the type the consensus for that task degrades.
Single validator offlineThat validator stops contributing weight. Other validators are unaffected.
Subtensor offlineChain wide failure outside the system’s control. Validators retry.

What’s Next

Round Flow

Complete per round timing and failure modes.

Configuration Reference

Every environment variable in one place.

Protocol Reference

The PhylaxSynapse wire format.

Sandbox Reruns

Async miner image rerun verification.