open-standards/eoc/eoc-rs/crates/eoc-meter
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science f18337dc81
All checks were successful
energy meters on real hardware / RAPL and NVML on jetson-hub (pull_request) Successful in 47s
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 6s
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 1m11s
standards workspaces build + test / joulecontract-rs (joulecontract/joulecontract-rs, joulecontract-rs, linux-arm64, true) (pull_request) Successful in 1m49s
standards workspaces build + test / jouleclaw-rs (-nodebug, jouleclaw/jouleclaw-rs, -p jouleclaw-energy --features rapl,nvml, jouleclaw-rs, linux-arm64, -C target-feature=+fp16) (pull_request) Successful in 3m49s
standards workspaces build + test / mesh-rs (mesh/mesh-rs, -p mesh-engine-gguf -p mesh-openai --features mesh-engine-gguf/gguf,mesh-openai/server, mesh-rs, linux-arm64) (pull_request) Successful in 1m8s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 4m2s
standards workspaces build + test / jcp-rs (jcp-conformance, jcp/jcp-rs, -p jcp-energy --features nvml, jcp-rs, linux) (pull_request) Successful in 1m53s
standards workspaces build + test / eoc-rs (eoc/eoc-rs, -p eoc-meter --features cuda, eoc-rs, linux) (pull_request) Successful in 2m8s
standards workspaces build + test / joule-ui-rs (joule-ui/joule-ui-rs, joule-ui-rs, linux) (pull_request) Successful in 1m9s
standards workspaces build + test / joulehook-rs (joulehook/joulehook-rs, joulehook-rs, linux) (pull_request) Successful in 1m12s
standards workspaces build + test / proof-rs (proof-conformance, proof/proof-rs, proof-rs, linux, true) (pull_request) Successful in 1m31s
standards workspaces build + test / sandbox-rs (sandbox-conformance, sandbox/sandbox-rs, sandbox-rs, linux) (pull_request) Successful in 2m24s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 7m14s
standards workspaces build + test / jouledesk-rs (jouledesk/jouledesk-rs, jouledesk-rs, macos) (pull_request) Successful in 2m37s
energy meters: a GPU counter reading low is refuted in sandbox-meter, eoc-meter and jcp-energy too
#341 bounded an NVML cumulative-energy counter from below in
jouleclaw-energy. The same plausibility check exists in three more meter
crates, and each still judged the counter in one direction only. A counter
that accrued a fraction of what its board drew still advanced, so the
liveness rule called it live. It was then graded `HwShunt` and spent an
energy ceiling it was not measuring. Under-reporting is the unsafe direction
at a ceiling (jcp SPEC §5): it admits work the budget cannot cover. A counter
running fast fails safe.

sandbox-meter, eoc-meter and jcp-energy now carry `CounterUnderRate`, judged
against the same board telemetry and with the same constants as #341:

    floor = (mean_usable_draw - 5 W) / 4

So a counter one meter declines, another does not admit. The slack comes
off the draw before the division, so an idle board makes no finding. The
verdict carries the floor and the draw it was taken from. In sandbox-meter,
which judges several GPUs per run, an under-report outranks an over-report,
and the larger shortfall speaks.

sandbox-meter's NVML probe only builds on Linux, so its verdict-to-status
mapping was tested only by CI's Linux legs. The mapping now lives in the
shared `liveness` module (`gpu_counter_status`), which builds and is tested on
every platform.

SPEC changes:
- jcp §5.1: the plausibility rule is now two-sided, with the floor allowing
  for the draw's imprecision and never firing near idle.
- jouleclaw §1.3: no longer claims the reference implementation already falls
  back to the power integral on an unvalidated GPU. It falls back only where
  it can refute the counter, and the bound is wide: a counter 13.3 % low
  passes it and is graded `HwShunt` until something it shares no error with
  validates it.

Tests: 7 new across the three crates. All 12 mutations of the new logic are
killed.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 04:15:36 -04:00
..
src energy meters: a GPU counter reading low is refuted in sandbox-meter, eoc-meter and jcp-energy too 2026-10-20 04:15:36 -04:00
tests eoc-meter: the process counter reads its own count only once the reading thread has left its core 2026-10-12 20:50:53 -04:00
Cargo.toml