# Banding scales Published threshold sets for [`BandingScale`](../jouleclaw-rs/crates/jouleclaw-compliance/src/banding.rs). ## Why scales live here and not in the crate `BandingScale::rate` turns a measurement into an A–G band. The crate ships the **shape** of a scale and no scale at all, deliberately: which thresholds are correct for a given metric is a policy question a library has no standing to settle. Baking one in would repeat the mistake the type was written to retire — `EedReport::is_compliant`'s `pue < 1.5 && renewable_pct >= 50.0`, two magic floats with no provenance, no version, and no way to say which instrument they encoded — only with more ceremony. So a scale is **data**, published here with its sources beside it. `BandingScale` derives `Deserialize`, so a pack loads with `serde_json::from_str` and needs no crate code: ```rust let scale: BandingScale = serde_json::from_str(include_str!("…/eu.eed.dr2026.pue.json"))?; let rating = scale.rate(report.pue_milli())?; ``` ## What a pack must carry Each `.json` is exactly a `BandingScale`. Each is accompanied by `.provenance.json` recording where the numbers came from, the status of that source, what the pack deliberately omits, and the reuse terms. A pack with no provenance file is not publishable here. A threshold whose origin is unstated is the thing this directory exists to replace. ## The scale id is a version, and never edited in place Ratings cite their `scale_id`, and `Rating::comparable_with` refuses to rank two ratings from different scales. That only works if an id means one fixed set of boundaries forever. When a source instrument changes, the result is a **new id** — never an edit to an existing file, which would silently re-band every grade already issued under it. ## Current packs | scale | metric | source status | |---|---|---| | `eu.eed.dr2026.pue/1` | PUE, milli-units | **Draft** delegated regulation (revised 2026-07-02, not adopted) | A grade produced from a draft instrument is not a regulatory determination, and the provenance file says so in those words. These packs exist so that a figure can be banded *against a stated source*; they do not make the source binding, and they do not make a self-declared input measured.