EcoCompute · Schema

The report contract, and the v1.3 environment draft

This page is part of the spec layer: the machine-checkable half of the protocol. The live schema is ecocompute-energy/1.3, maintained in the container repository at schema/energy.schema.json — the container validates every report it writes against it before emitting it. What follows is (a) what a valid report must contain today, (b) the draft environment block proposed for the v1.0 bar, and (c) the version-migration and compliance rules. A separate, much smaller schema describes the estimator's output — it is a tool response, not a measurement.

Why a schema at all. An energy number without its context (GPU, driver, stack, window, thermal state, replication) is unfalsifiable — there is nothing to check it against. The schema makes the context a required part of the number, so "a measurement" is a typed object, not a headline.

1 · Required today — ecocompute-energy/1.3

A report is schema-valid if and only if it passes validation against the live schema. The top-level required keys are:

schema_version          "ecocompute-energy/1.3"
benchmark               "ecocompute-energy-methodology"
scenario                "SingleStream" | "Offline"   (nominal, from batch size; not LoadGen-enforced —
                        scenario_note says so)
system_under_test       gpu, gpu_arch, accelerator_count, host
workload                model_name, params_b, precision, batch_size, context_length
measurement             method ("NVML on-device power sampling"), sample_rate_hz,
                        tokens_per_run, iterations, warmup
results                 total_energy_joules, tokens_generated, energy_per_token_mj,
                        avg_power_watts, throughput_tokens_per_s, basis
                        (+ fp16_energy_per_token_mj, vs_fp16_energy_pct when a
                        same-session FP16 baseline exists)

Conditional requirements the validator enforces: basis must be measured whenever measurement_source is direct-nvml; a report that fell back to dataset-derived values must name the fallback and must not claim measured. The software block records the full version set actually used and diffs it against the published pins — a run on a different stack is real, but is flagged as not directly comparable with pinned-image runs. Since 1.3, a power_trace block may carry whole-run 10 Hz sidecar CSVs with phase markers (load → quantization → warm-up → measure → quality), so the measurement window can be re-cut post hoc without re-running.

2 · Draft — the environment block for the v1.0 bar

Status: draft, open for comment (issue tracker). Not yet emitted by the container. Motivated by three gaps the 2026-09 sessions exposed:

"environment": {
  "gpu_uuid":            "GPU-ccb89dd1-33ae-1b76-f767-8fe2bd818af6",
  "power_limit_w":       450.0,
  "power_limit_source":  "nvml enforced power limit",
  "clocks_mhz": {
    "sm_start": 210,  "mem_start": 210,
    "sm_end":   2790, "mem_end":   10501
  },
  "temperature_c": {
    "idle_before": 28,        // after cooldown, before load — the cold-start claim
    "start":       28,
    "end":         41,
    "peak":        58
  },
  "clock_lock_applied":  false,
  "power_lock_applied":  false,
  "capture_method":      "nvidia-smi -q -d POWER,CLOCK,PERFORMANCE,TEMPERATURE"
}

Design rules: fields record the as-found operating point — the protocol says do not lock clocks or power to match historical data; record what the card was actually doing. idle_before is the cooldown gate (protocol: wait until the card returns to idle temperature before each arm). power_limit_source distinguishes the enforced NVML limit from a user override. Unavailable telemetry is null with a reason — never omitted silently, never invented.

3 · Compliance levels

"Valid" is not one binary. A report is graded at the highest level it satisfies — and each level is checked by a different mechanism, because the JSON schema can only see structure, not semantics:

LevelNameCriteriaChecked byWhat it may be used for
A Schema-valid Passes ecocompute-energy/1.3 validation; all §1 required keys present and consistent (version-conditional: at 1.3, tokens_per_run/iterations/warmup/ context_length/software are required; sample_rate_hz ≥ 10) the JSON schema Overlay on the charts; browser-side comparison; archived as-is
B Protocol-conformant (submittable) Level A plus: every Protocol v1.1 MUST holds — same-session FP16 baseline (vs_fp16_energy_pct present), stated basis: measured, measurement_source: direct-nvml, batch 1 / 256 tokens / warm-up recorded, full software version set, thermal block present and honest (cooldown respected, or the violation disclosed in a note) the semantic validator (--profile v1.1-core) Publication in /replications/, credited; enters the next dataset release after review
C Dataset-eligible (Standard-candidate, draft) Level B plus: whole-run power-trace sidecar, achieved sample rate recorded, the §2 environment block complete (power limit, clocks, idle temperature, GPU UUID), and the configuration has n ≥ 3 independent sessions or ≥ 2 physical cards — cross-session/cross-card spread reported, not implied validator (--profile dataset-eligible) plus dataset-level review — replication counts and cross-card spread live in the build CSV, not in one report Counted toward the v1.0 micro-standard bar (per-configuration ≥3 sessions, ≥2–3 cards per architecture)
Schema-valid ≠ protocol-conformant. A report can pass the JSON schema and still violate the protocol — no thermal block, no FP16 baseline, fabricated-looking pin consistency. The schema cannot see cross-field semantics; that is what the validator is for. Run it on any report:
ecocompute validate --profile v1.1-core energy.json
# or: python3 tools/validate.py energy.json   (container repo)

# verdicts: schema-valid | protocol-conformant | dataset-eligible
# exit codes: 0 conformant · 1 schema-valid but violating (clause-numbered) · 2 schema-invalid
Honest failure states pass: steady_state_reached: false and thermal.basis: "unavailable" are valid reports of reality, not violations — only fabrication fails.

4 · Version migration and invalidation rules

5 · Machine-readable copies