Allocators consume the index.
for endpoint in registry:
gradient = fetch(endpoint + "/egs/v1/gradient")
if gradient is None: continue
if gradient.marginal_capacity_kw <= 0: continue
candidates.append(gradient)
selected = min(candidates, key=lambda g: g.instantaneous_cost_index)
allocate(selected)