ScaleDecision
The scaler's answer, and everything the dashboard needs to explain it.
Nebula · Packages/com.1by3.nebula/Runtime/Orchestrator/WorkerScaler.cspublic struct ScaleDecisionThe scaler's answer, and everything the dashboard needs to explain it.
Fields
Action
public ScaleAction Action;Peak
public float Peak;The busiest worker's measured p90 utilization.
Mean
public float Mean;Mean measured p90 utilization across the eligible workers.
HeldSeconds, HoldSeconds
public float HeldSeconds, HoldSeconds;How long the current condition has held, and for how long it must, in seconds. Both 0 when nothing is held.
BlockedBy
public string BlockedBy;The container that makes growing pointless (all the load and no way to split it), or "".
BlockedComponent
public CostComponent BlockedComponent;What BlockedBy is mostly expensive in, from its cost row (ContainerCost): simulation is a case for splitting the container or cheapening its entities, replication a case for interest management, the gateway relay a case for more gateways. CostComponent.Simulation when nothing is blocked or no row has arrived; read it with BlockedBy non-empty.
BlockedSaturation
public float BlockedSaturation;How much of its component's budget BlockedBy is using (1 = all of it), or 0.
BlockedCause
public SaturationCause BlockedCause;Why the planner may not split BlockedBy away from its worker, when it said (SaturationReport, docs/cohesion-rebalancing.md): a cohesion or affinity group spans it, a hold has not expired, it asked for a worker of its own, or the game authored no boundary inside it. SaturationCause.None when nothing is blocked or the policy does not explain itself.
BlockedReason
public string BlockedReason;That cause as a sentence, or "". It is already part of Reason.
RetireWorkerId
public string RetireWorkerId;The worker that should retire when Action is ScaleAction.Shrink.
Reason
public string Reason;One line for the dashboard and the event log.