Scoring history
Every version of the scoring rules, what each one changed, and which scores still compare across versions.
A score compares across two versions when its component, and everything it depends on, received no breaking change between them. The comparison of two reports, run statistics, the regression alert, the leaderboard, the community figures and your dashboard all apply this rule: a version that only changed entities leaves memory, disk and single-core comparable.
Each change was measured: both versions of the scoring code were executed on the same corpus of payloads and their results compared, component by component. A change marked declared was read from the code change, because the older code did not expose that value.
Standard scoring
Current version: 8.1.0
- Total score — depends on Single-core, Hardware, Gameplay, Synergy multiplier, Duration multiplier, Stability multiplier, Cross-validation factor, Failed-test penalty, GC multiplier
- Single-core
- Hardware — depends on Memory, Disk, Multi-core
- Memory
- Disk
- Multi-core
- Gameplay — depends on Exploration, Entities, Mechanics
- Exploration
- Entities
- Mechanics
- Synergy multiplier — depends on Single-core, Hardware, Gameplay
- Duration multiplier
- Stability multiplier
- Cross-validation factor
- Failed-test penalty
- GC multiplier (removed in 8.1.0)
| Version | Total score | Single-core | Hardware | Memory | Disk | Multi-core | Gameplay | Exploration | Entities | Mechanics | Synergy multiplier | Duration multiplier | Stability multiplier | Cross-validation factor | Failed-test penalty |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 8.0.0 | — | yes | yes | yes | yes | yes | — | yes | — | yes | — | yes | yes | yes | yes |
| 7.7.0 | — | — | — | — | — | — | — | — | — | — | — | yes | yes | — | yes |
| 7.6.0 | — | — | — | — | — | — | — | — | — | — | — | yes | yes | — | — |
| 7.5.0 | — | — | — | — | — | — | — | — | — | — | — | yes | yes | — | — |
| 7.4.0 | — | — | — | — | — | — | — | — | — | — | — | yes | yes | — | — |
- Entitiesscores changemeasured
Entities is a capacity: entities held at 20 TPS = entity load x 50 ms / effective MSPT (0.6 average + 0.25 p95 + 0.15 p99, floor 50 ms), the load capped at what was presented (3,600), scored 25,000 x (capacity / 36)^(1/3). The stress and phase-consistency factors are gone.
- Gameplayscores changemeasured
Follows entities; and its own balance factor compares the weakest gameplay sub-score with a fixed reference (78,000) instead of the strongest one, so improving a sub-score can no longer lower it.
- Synergy multiplierscores changemeasured
Follows gameplay.
- Total scorescores changemeasured
Follows gameplay and synergy.
- GC multiplierno effect on scoresmeasured
The GC multiplier is removed: it only applied to a gc test the plugin never sends, so it was 1 on every report. The column now holds null.
- Total scoreno effect on scoresdeclared
Ingestion and recalculation refuse an implausible total (not finite, negative, or above 10,000,000) instead of storing it.
- Memoryscores changemeasured
Memory latency is read from the new dependency-chain measure (memoryAccessLatencyNs, reference 120 ns), the old reading being the cost of the timer; the memory references are re-anchored on a corrected reference machine; a missing metric takes an unfavourable value instead of an invented one.
- Diskscores changemeasured
The random 4K phases are read from the new direct-I/O measures (reference 150 MB/s): the old ones measured the page cache.
- Hardwarescores changemeasured
Follows memory and disk.
- Synergy multiplierscores changemeasured
Follows hardware.
- Total scorescores changemeasured
Follows hardware and synergy.
Revisions without a version bump
Changes made while the version number stayed the same, found by executing the history. A report keeps the formula that was deployed when it was scored: recalculation stamps the current version and never applies an older version's state. Comparisons with other versions use the version's last state, which is exact for a version production only knew in that state.
- 2026-09-17 · #240 · measured
Six adjustments: the synergy bonus reads only the weakest of the three categories (so the score follows the hardware); the memory imbalance factor is removed; -1 sentinels are guarded for finiteness; World Save no longer reads diskWriteSpeedMBps; the MSPT p95 is used when the average exceeds the p99. 8.0.0 reached production after this revision. (Total score, Single-core, Hardware, Memory, Multi-core, Gameplay, Exploration, Entities, Mechanics, Synergy multiplier)
- 2026-09-17 · #240 · declared
The cross-validation factor, which only measured the spread of TPS between tests, is folded into the constant 0.98 it held on every measured report. (Cross-validation factor)
- Mechanicsscores changemeasured
Mechanics becomes a confidence-weighted mean: a test whose validity witnesses are degraded weighs less. The TNT difficulty factor follows the charges actually presented.
- Gameplayscores changemeasured
Follows mechanics.
- Synergy multiplierscores changemeasured
Follows gameplay.
- Total scorescores changemeasured
Follows gameplay and synergy.
Revisions without a version bump
Changes made while the version number stayed the same, found by executing the history. A report keeps the formula that was deployed when it was scored: recalculation stamps the current version and never applies an older version's state. Comparisons with other versions use the version's last state, which is exact for a version production only knew in that state.
- 2026-08-12 · #127 · measured
A doubtful mechanics test scores at most the mean of the reliable ones (a failed measurement could score above a real one); a load never presented with no work done counts as a failed test; the TNT bonus is bounded by the charges actually primed. (Total score, Gameplay, Mechanics, Synergy multiplier, Failed-test penalty)
This version was also meant to cover the changes made under 7.5.0 on 2026-08-08: they appear there as revisions.
- Failed-test penaltyscores changemeasured
A test whose samples were all filtered out is no longer counted as failed when the plugin recomputed it on the unfiltered window (usedUnfilteredFallback).
- Total scorescores changemeasured
Follows the failed-test penalty.
- Multi-corescores changemeasured
The multi-core score divides by the CPUs the server can use (systemInfo.availableProcessors), falling back to the test's own cpuCores, then 1.
- Hardwarescores changemeasured
Follows multi-core.
- Synergy multiplierscores changemeasured
Follows hardware.
- Total scorescores changemeasured
Follows hardware and synergy.
Revisions without a version bump
Changes made while the version number stayed the same, found by executing the history. A report keeps the formula that was deployed when it was scored: recalculation stamps the current version and never applies an older version's state. Comparisons with other versions use the version's last state, which is exact for a version production only knew in that state.
- 2026-08-08 · 654a79a7 · measured
The sample count is read from the test result first (the plugin publishes it even when it is zero), so a test with no sample is recognised as unmeasured. (Total score, Gameplay, Exploration, Entities, Mechanics, Synergy multiplier)
- 2026-08-08 · 95aff5b0 · measured
Protocol 1.2: the plugin's flags are merged into the metrics (villager and hostile counts, phase TPS, growth rate reach the score), and a test is counted as failed on positive proof that it measured nothing (entities never ticked, load absorbed under 5%, zero work done, every sample filtered out, chunk ticking capped). (Total score, Gameplay, Entities, Mechanics, Synergy multiplier, Failed-test penalty)
First version recorded: the reference for the ones that follow.
Revisions without a version bump
Changes made while the version number stayed the same, found by executing the history. A report keeps the formula that was deployed when it was scored: recalculation stamps the current version and never applies an older version's state. Comparisons with other versions use the version's last state, which is exact for a version production only knew in that state.
- 2026-05-17 · 40f92c05 · measured
Protocol 1.2 reports only: the metrics, sent as rich objects, are unwrapped to numbers before scoring. Before this, a 1.2 report scored NaN almost everywhere. (Total score, Hardware, Memory, Disk, Multi-core, Gameplay, Exploration, Mechanics, Synergy multiplier, Failed-test penalty)
Stress-limit scoring
Current version: 1.5.0
- Stress-limit total — depends on Mobs limit, Chunks limit, Hoppers limit, TNT limit, Redstone limit, Entities limit, Villagers limit, Degraded-test exclusion
- Mobs limit
- Chunks limit
- Hoppers limit
- TNT limit
- Redstone limit
- Entities limit
- Villagers limit
- Degraded-test exclusion
| Version | Stress-limit total | Mobs limit | Chunks limit | Hoppers limit | TNT limit | Redstone limit | Entities limit | Villagers limit | Degraded-test exclusion |
|---|---|---|---|---|---|---|---|---|---|
| 1.4.0 | — | yes | yes | yes | — | yes | yes | yes | yes |
| 1.3.0 | — | yes | yes | yes | — | yes | yes | yes | yes |
| 1.2.0 | — | — | — | — | — | — | — | — | yes |
| 1.1.0 | — | — | — | — | — | — | — | — | — |
| 1.0.0 | — | — | — | — | — | — | — | — | — |
- TNT limitscores changemeasured
TNT re-anchored on a limit the server actually reached once forced chunks tick and the host's TNT cap is raised: reference 400 -> 2,000. Reports scored before cannot be repaired by recalculation.
- Stress-limit totalscores changemeasured
Follows TNT.
No change of its own: this version was cut for the limit-bonus change committed under 1.3.0 (see its revisions).
No change of its own: this version was cut for the two changes committed under 1.2.0 the same day (see its revisions).
Revisions without a version bump
Changes made while the version number stayed the same, found by executing the history. A report keeps the formula that was deployed when it was scored: recalculation stamps the current version and never applies an older version's state. Comparisons with other versions use the version's last state, which is exact for a version production only knew in that state.
- 2026-08-06 · fdc5a241 · measured
A run whose every test left the geometric mean has no total (null) instead of 0, and no longer ranks F. (Stress-limit total)
- 2026-08-08 · 95aff5b0 · measured
The +50% limit bonus is granted only when the plugin says the ceiling was reached: a timeout or an operator stop no longer earns it. (Stress-limit total, Mobs limit, Chunks limit, Hoppers limit, TNT limit, Redstone limit, Entities limit, Villagers limit)
- Chunks limitscores changemeasured
Re-anchored on chunks per second: reference 800 -> 120.
- TNT limitscores changemeasured
Re-anchored: reference 200 -> 100.
- Stress-limit totalscores changemeasured
Follows chunks and TNT.
Revisions without a version bump
Changes made while the version number stayed the same, found by executing the history. A report keeps the formula that was deployed when it was scored: recalculation stamps the current version and never applies an older version's state. Comparisons with other versions use the version's last state, which is exact for a version production only knew in that state.
- 2026-08-02 · ad27ca39 · measured
TNT re-anchored on charges that actually detonated: reference 100 -> 400. (Stress-limit total, TNT limit)
- 2026-08-02 · 818af649 · measured
A test whose stable tiers all report a degraded measurement, or whose last stable tier absorbed under 50% of its load, leaves the geometric mean (it is still scored and shown). (Stress-limit total, Degraded-test exclusion)
- Mobs limitscores changemeasured
The tier TPS is read under its protocol 1.2 name (avg): before, every test that held a tier scored NaN and fell out of the geometric mean.
- Chunks limitscores changemeasured
The tier TPS is read under its protocol 1.2 name (avg): before, every test that held a tier scored NaN and fell out of the geometric mean.
- Hoppers limitscores changemeasured
The tier TPS is read under its protocol 1.2 name (avg): before, every test that held a tier scored NaN and fell out of the geometric mean.
- TNT limitscores changemeasured
The tier TPS is read under its protocol 1.2 name (avg): before, every test that held a tier scored NaN and fell out of the geometric mean.
- Redstone limitscores changemeasured
The tier TPS is read under its protocol 1.2 name (avg): before, every test that held a tier scored NaN and fell out of the geometric mean.
- Entities limitscores changemeasured
The tier TPS is read under its protocol 1.2 name (avg): before, every test that held a tier scored NaN and fell out of the geometric mean.
- Villagers limitscores changemeasured
The villagers test is scored (reference 1,000).
- Stress-limit totalscores changemeasured
Follows every test.
First version recorded: the reference for the ones that follow.