open-standards/eoc/eoc-rs/crates
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
..
eoc eoc: a hit prints its estimate and the calibration it came from 2026-10-13 02:22:58 -04:00
eoc-agent eoc-agent: a local model's measured step is a measured span 2026-10-01 01:27:42 -04:00
eoc-cache eoc docs: what a resolve is charged, with the measured figures; the example prints the unmetered baseline 2026-10-13 02:22:58 -04:00
eoc-carbon eoc-carbon: an account and an SCI score are measured only where every part was, and a run with no correct answer has no score 2026-09-30 21:07:25 -04:00
eoc-cascade eoc docs: what a resolve is charged, with the measured figures; the example prints the unmetered baseline 2026-10-13 02:22:58 -04:00
eoc-core eoc docs: what a resolve is charged, with the measured figures; the example prints the unmetered baseline 2026-10-13 02:22:58 -04:00
eoc-distributed ingest wave A4: 3 crates · smart-byte-atproto + op-openbanking + eoc-distributed 2026-05-24 12:22:09 -04:00
eoc-embeddings Repo-wide toolchain refresh + jouleclaw policy/sandbox updates 2026-06-07 17:04:45 -04:00
eoc-eval eoc-carbon: an SCI score is only as measured as the joules it was computed from 2026-09-30 20:17:24 -04:00
eoc-graph Parallel ingest: 9 issues' worth of work across openpay / smart-byte / eoc 2026-05-23 13:24:05 -04:00
eoc-kv Parallel ingest: 9 issues' worth of work across openpay / smart-byte / eoc 2026-05-23 13:24:05 -04:00
eoc-local eoc: the CLI's cascade is metered by this process's own counter, because all of its stages run in-process 2026-09-30 22:39:01 -04:00
eoc-memory ingest wave F: 3 crates · op-crypto-extra + smart-byte-acdc + eoc-memory 2026-05-24 17:28:24 -04:00
eoc-meter 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
eoc-multimodal Repo-wide toolchain refresh + jouleclaw policy/sandbox updates 2026-06-07 17:04:45 -04:00
eoc-neural Parallel ingest: 9 issues' worth of work across openpay / smart-byte / eoc 2026-05-23 13:24:05 -04:00
eoc-observability ingest wave C: 3 crates · op-statements + smart-byte-activitypub + eoc-observability 2026-05-24 13:51:09 -04:00
eoc-quantize ingest wave D: 3 crates · op-fraud-graph + smart-byte-ilp + eoc-quantize 2026-05-24 16:10:10 -04:00
eoc-rag ingest wave A3: 3 crates · op-ewallets-asia + smart-byte-zk + eoc-rag 2026-05-24 12:08:49 -04:00
eoc-rerank Repo-wide toolchain refresh + jouleclaw policy/sandbox updates 2026-06-07 17:04:45 -04:00
eoc-route-learned eoc-route-learned: unbreak the build — rand_distr 0.4 pulled rand 0.8 2026-07-20 12:46:50 -04:00
eoc-safety ingest wave E: 3 crates · op-bin + smart-byte-tendermint + eoc-safety 2026-05-24 16:52:07 -04:00
eoc-spec-decode Repo-wide toolchain refresh + jouleclaw policy/sandbox updates 2026-06-07 17:04:45 -04:00
eoc-streaming eoc-streaming: a stream nothing metered has no energy figure, never 0 µJ 2026-09-30 20:17:36 -04:00
eoc-tools eoc: pin rand off 0.10.2, which does not compile 2026-08-27 13:32:56 -04:00
eoc-vendor-api Repo-wide toolchain refresh + jouleclaw policy/sandbox updates 2026-06-07 17:04:45 -04:00
eoc-wasm Parallel ingest: 9 issues' worth of work across openpay / smart-byte / eoc 2026-05-23 13:24:05 -04:00