Foundation
INV-014 already established that filtering and ranking are separate responsibilities, and INV-019 already established that processor and memory are finite, explicitly owned resources.
“A placement can be correct and still make the next correct placement impossible.”
A workload needs both processor capacity and memory. Three machines can satisfy it. Machine A has plenty of processor capacity remaining but little memory. Machine B has plenty of memory but little processor capacity. Machine C has moderate amounts of both. The workload can run on all three.
INV-014 already established that filtering and ranking are separate responsibilities, and INV-019 already established that processor and memory are finite, explicitly owned resources.
If a destination is feasible, choosing any one of them should be just as good as choosing another.
Placing the workload on Machine A leaves one shape of remaining capacity. Placing it on Machine B leaves another. The workload is satisfied either way, but the cluster is not left in the same condition.
Mystery: how can the platform compare economically different, individually correct placements when capacity has shape, observations arrive late, decisions happen concurrently, and future demand is unknown?
The placement system has already rejected every destination that cannot satisfy the workload. What remains is a set of destinations that are all correct. Multiple resources alone do not create an architectural problem — the problem appears only when the consequences of choosing one feasible destination differ materially from choosing another.
Answers whether a destination can run the workload at all.
Answers which correct destination the platform would rather use, according to some objective.
The same choice can be economically irrelevant in one cluster and materially important in another — abundance hides the difference; scarcity reveals it.
First, determine which destinations are feasible. Then choose one. There is no scoring stage, no economic model, no attempt to understand the future — simply a selection from the set of correct answers.
No additional information, no future-demand model, no scoring function — it does not pretend to know more than it actually knows.
Similar machines, similar workloads, abundant spare capacity, low placement volume — the choice among feasible destinations may have very little economic consequence.
Consequences differ only when residual capacity shapes diverge enough to matter — this design has not yet been tested against that condition.
Give processor and memory equal influence: average the remaining share of each. Machine A retains 4 of 8 processor and 4 of 16 memory — a score of 0.375. Machine B retains 2 of 8 processor and 4 of 16 memory — a score of 0.250. Machine A is preferred.
The correctness boundary. A less-preferred destination remains feasible; the objective is explicit and replaceable rather than hidden inside selection.
One ordering is enough. Averaging processor and memory shares into a single number is assumed to preserve everything a later decision might need to know.
The score treats every resource dimension as interchangeable. What does that arithmetic quietly throw away?
Episode 01 begins from the almost-worked score. Each later experiment unlocks only when the preceding discovery creates its reason to exist. Every experiment remains independently resettable.
Can one scalar preserve the combinations that future workloads require?
Apply the averaging formula to both residual shapes.
What can a preference claim before the demand it hopes to serve exists?
Choose an explicit objective before testing alternate futures.
Which meaning of capacity supports the comparison?
Observe physical use and accounted commitments separately.
What must hold when separate records consume one shared capacity account?
Let both workers read the same capacity account.
The four failures did not describe four unrelated bugs. They exposed the conditions an economic comparison must preserve: resource dimensions that survive comparison, a bounded claim about the future, a capacity value that keeps the meaning of its accounting model, and commitments that stay compatible across independent records.
Filtering still says which choices are allowed. Comparison says which allowed choice the current policy prefers. Neither responsibility may silently borrow the other's authority. Ten obligations hold that boundary together.
A comparison must not present an undefined notion of “better” as though it were a correctness property.
Comparison must preserve the resource dimensions relevant to the capacity model rather than collapsing them into one scalar.
A preference may claim only what the available capacity information and accounting state support — never a guaranteed future outcome.
No economic ranking may honestly guarantee an outcome for demand that has not yet occurred.
Physical consumption, reported state, accounted commitments, schedulable capacity, and preference remain distinguishable concepts.
A commitment must remain compatible with the capacity semantics the platform declared for that account, not an assumed universal no-overcommitment rule.
Observing capacity does not reserve it — the world may change before that observation is used.
Commitments from different workload records must not silently become authoritative when their combined assumptions are incompatible under the declared capacity model.
Tighter packing, spreading, balance, and fragmentation reduction remain explicit, replaceable policy choices rather than architectural truth.
The contract requires compatibility across shared commitments without selecting the mechanism that realizes it.
Correctness, preference, and shared capacity remain three separate things. The architecture must never let one silently stand in for another.
The kube-scheduler filters nodes for feasibility, then scores the
surviving nodes through replaceable scoring plugins — the Scheduler
Framework's Filter and Score extension points.
NodeResourcesFit can be configured with a
MostAllocated or LeastAllocated strategy,
making the objective this investigation calls policy an explicit,
swappable configuration rather than a hidden constant.
Pod resource requests are compared against node
allocatable capacity — a modeled account, not live
physical utilization.
Scheduler Framework scoring plugins express ranking policy after filtering rather than redefining feasibility.
The shared-capacity compatibility invariant does not select a reservation, transaction, cache, lock, or serialization mechanism.
A richer economic comparison is not automatically the better design. It requires more information, more computation, more policy to maintain, and sometimes more coordination when independent decisions rely on shared capacity. In a small cluster with abundant spare capacity, a simple stable rule may leave enough room for almost everything that arrives — 100 machines with 8 processor and 32 memory units each holding 2 and 8 units free per machine still total 200 processor and 800 memory units free, yet a workload needing 4 processor and 16 memory may fit nowhere if that residual capacity is scattered rather than concentrated.
Better comparison requires more frequent, more detailed capacity reports — 10,000 machines reporting every second instead of every 10 seconds is a 10x increase in observation traffic.
Every additional preference invites the question “why this preference,” and must remain explicit and replaceable rather than hidden inside a score.
Protecting compatibility across independent records is not free, but neither is allowing incompatible assumptions to become authoritative.
These costs are accepted only when the arrangement of capacity — not merely its aggregate total — materially affects what the platform can accept next.
Machine A holds 10 processor / 2 memory. Machine B holds 5 processor /
7 memory. Machine C holds 2 processor / 10 memory. Predict which
machine a scalar processor + memory score prefers, then
test that preference against three different future workloads.
Which machine does a scalar score prefer, and does that ranking hold for every possible future workload?
Check three future workloads — processor-heavy, balanced, memory-heavy — against the same three machines without changing the score.
Equal or similar aggregate capacity does not imply equal usefulness — capacity has shape.
Was the original decision wrong, or was it a preference bounded by the objective and information available at the time?
Correctness was established before preference.
The objective was explicit, and capacity kept the meaning of its accounting model.
Independent commitments still had to preserve the declared compatibility semantics of their shared capacity account.
New demand evidence can still make that recorded assumption look wrong.
What, if anything, should happen when new demand evidence no longer appears consistent with an existing capacity commitment?
The placement decision already happened. What changes after it?
This investigation inherits the placement contract from INV-014, finite-resource ownership from INV-019, and the authoritative admission transition from INV-033. Separating correctness from economic preference under uncertainty is a long-standing pattern in distributed scheduling: cluster schedulers such as Omega reason over shared, optimistically-concurrent cluster state rather than a single global arbiter. Kubernetes’ filter-then-score scheduler is one realization of the broader Economic Comparison Contract derived here; this investigation does not claim that any particular scoring strategy is universally correct.