No permanent starvation01
Weighted fair queuing
Balance influences priority, but wait time compounds continuously — so a long-queued job from a low-balance user eventually outranks a wealthy one. Agents sort independently by remaining capacity, descending: a best-fit placement.
weight = wait_seconds × (1 + balance × 0.05)
Unplug a node mid-build02
Failure-tolerant placement
Miss the heartbeat and the agent is marked offline; anything running on it is detected as orphaned and requeued with its binding cleared. A node can be unplugged mid-build without losing work.
- heartbeat lost→
- offline→
- orphaned→
- requeued
system_error and abandoned stay separate terminal states, so an agent crash never looks like an unclaimed job.
Fully auditable03
An immutable ledger
Every movement writes a transactions row instead of mutating a counter, so any balance reconstructs from history.
Base fee, on dispatch−2.0
Per core-second−0.03
Per GB-second−0.007
Node, clean completion+1.0
Node, on failure−0.5
Parametric sweeps04
Pipelines and job arrays
Each step carries its own status, timestamps and captured output, so a failure names the stage rather than dumping one undifferentiated log.
- install→
- test→
- deploy
array_size > 1 fans out into N child jobs sharing a single payload.