Scoring model & profiles
The base score (out of 100)
The base readiness score is the sum of four dimensions:
| Dimension | Weight | How it's computed |
|---|---|---|
| Health | 25 | Proportional to the fraction of pods ready. |
| Capacity | 30 | 30 − (cpuPressure × 15) − (memPressure × 15), where pressure = requests / allocatable. |
| Stability | 20 | Partitioned: crash-loops (10) + restart trend (6) + pod drop (4). |
| Compatibility | 25 | Diminishing penalty per incompatible add-on. |
With AI on, the final gauge is base × 0.7 + AI × 0.3. The score is a gauge — it never blocks. See decisions.
Profiles
spec.scoringProfile sets how strict the SAFE bar and the block thresholds are:
| Profile | Not-ready → WARNING | Not-ready → block | SAFE threshold |
|---|---|---|---|
production (default) | 5% | 30% | 90 |
non-production | 15% | 60% | 85 |
- Warning threshold — above this fraction of not-ready pods, the score dips below SAFE (a
WARNING, not a block). - Block threshold — above this fraction, the cluster is severely unstable — a deterministic blocker (
CRITICAL). - SAFE threshold — the score a clean cluster must meet to be
SAFE.
An unknown or empty profile defaults to production.
Choosing a profile
Use production for clusters that serve real traffic — it's strict, so a small amount of instability already warns. Use non-production for dev/test where transient churn is normal and you don't want noise.