eoc-meter: a GPU rise the oracle saw is not one the probe must have seen #250

Merged
dcharlot merged 1 commit from fix/eoc-meter-gpu-freshness into main 2026-10-14 08:55:50 -04:00
Owner

the_production_probe_hands_the_rule_what_the_oracle_reads failed once on an otherwise green tree — the only failure of that job across 309 commits:

("GPU Energy", 0) moved 1508467856154491 -> 1508467860032551 across the oracle's
reads, but every one of the 20 samples the production probe took read
[1508467856154491]

The assertion behind it does not hold. The oracle's two reads bracket the probe's samples, so a rise it saw can fall entirely outside the probe's own window. GPU energy is activity-driven, not a clock — it rises only while the GPU works — so on a shared host another process's short burst lands between the oracle's first read and the probe's first sample as readily as inside it. The observed delta is about one tick's worth. One value is therefore no evidence of a sampler that is not sampling.

The same block already reasons this way one branch over: a rail that held across the bracket is reported with freshness is NOT asserted on it. And sandbox-meter's equivalent prints its GPU-hold case rather than asserting it. This applies that reasoning to the case where the rail moved — the count of distinct values is reported either way, and nothing is asserted from it.

Every other assertion is untouched, including the one that each handed sample lies within the oracle's bracket.

What this gives up

A sampler that cached one reading and handed it back repeatedly would no longer be caught here. What covers a rail that does not advance is the liveness machinery — the_liveness_probe_never_reports_a_frozen_rail_as_live, the_ioreport_meter_is_never_available_on_a_frozen_cpu_rail. Restoring a sound version of this particular check means driving GPU work inside the probe's own window so a rise is guaranteed to be there to see; that is a larger change than this one.

Verified on the IOReport host

17 of 17 macos_ioreport tests and all 80 eoc-meter lib tests pass. That run took the held branch, so it exercises the paths around this change rather than the rare case itself — which by construction cannot be forced, since under deliberate GPU load the probe sees the movement too.

🤖 Generated with Claude Code

`the_production_probe_hands_the_rule_what_the_oracle_reads` failed once on an otherwise green tree — **the only failure of that job across 309 commits**: ``` ("GPU Energy", 0) moved 1508467856154491 -> 1508467860032551 across the oracle's reads, but every one of the 20 samples the production probe took read [1508467856154491] ``` **The assertion behind it does not hold.** The oracle's two reads *bracket* the probe's samples, so a rise it saw can fall entirely outside the probe's own window. GPU energy is **activity-driven, not a clock** — it rises only while the GPU works — so on a shared host another process's short burst lands between the oracle's first read and the probe's first sample as readily as inside it. The observed delta is about one tick's worth. One value is therefore no evidence of a sampler that is not sampling. The same block already reasons this way one branch over: a rail that *held* across the bracket is reported with `freshness is NOT asserted on it`. And `sandbox-meter`'s equivalent prints its GPU-hold case rather than asserting it. This applies that reasoning to the case where the rail moved — the count of distinct values is reported either way, and nothing is asserted from it. Every other assertion is untouched, including the one that each handed sample lies within the oracle's bracket. ### What this gives up A sampler that cached one reading and handed it back repeatedly would no longer be caught *here*. What covers a rail that does not advance is the liveness machinery — `the_liveness_probe_never_reports_a_frozen_rail_as_live`, `the_ioreport_meter_is_never_available_on_a_frozen_cpu_rail`. Restoring a sound version of this particular check means driving GPU work inside the probe's own window so a rise is guaranteed to be there to see; that is a larger change than this one. ### Verified on the IOReport host 17 of 17 `macos_ioreport` tests and all **80** eoc-meter lib tests pass. That run took the *held* branch, so it exercises the paths around this change rather than the rare case itself — which by construction cannot be forced, since under deliberate GPU load the probe sees the movement too. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
eoc-meter: a GPU rise the oracle saw is not one the probe must have seen
All checks were successful
energy meters on real hardware / RAPL and NVML on jetson-hub (pull_request) Successful in 40s
standards workspaces build + test / jouleclaw-rs (pull_request) Successful in 2m24s
standards workspaces build + test / aac-rs (pull_request) Successful in 2m52s
standards workspaces build + test / joule-code-rs (pull_request) Successful in 1m26s
standards workspaces build + test / joulecontract-rs (pull_request) Successful in 59s
standards workspaces build + test / map-rs (pull_request) Successful in 1m0s
standards workspaces build + test / mesh-rs (pull_request) Successful in 56s
standards workspaces build + test / openpay (pull_request) Successful in 2m38s
standards workspaces build + test / jouledesk-rs (pull_request) Successful in 54s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 4m41s
lockfiles / every Cargo.lock is current (pull_request) Successful in 42s
spec citations resolve / Code cites no section its SPEC lacks (pull_request) Successful in 3s
standards workspaces build + test / arl-rs (pull_request) Successful in 1m10s
standards workspaces build + test / jcp-rs (pull_request) Successful in 1m51s
standards workspaces build + test / eoc-rs (pull_request) Successful in 2m13s
standards workspaces build + test / joule-ui-rs (pull_request) Successful in 1m13s
standards workspaces build + test / joulehook-rs (pull_request) Successful in 1m14s
standards workspaces build + test / proof-rs (pull_request) Successful in 1m28s
standards workspaces build + test / sandbox-rs (pull_request) Successful in 2m23s
standards workspaces build + test / sense-rs (pull_request) Successful in 1m9s
tests in CI / every test file is run by a job or listed with its reason (pull_request) Successful in 4s
standards workspaces build + test / smart-byte-rs (pull_request) Successful in 4m0s
ae673eb899
`the_production_probe_hands_the_rule_what_the_oracle_reads` failed once on an
otherwise green tree -- the only failure of that job across 309 commits:

  ("GPU Energy", 0) moved 1508467856154491 -> 1508467860032551 across the
  oracle's reads, but every one of the 20 samples the production probe took
  read [1508467856154491]

The assertion behind it does not hold. The oracle's two reads *bracket* the
probe's samples, so a rise it saw can fall entirely outside the probe's own
window. GPU energy is activity-driven, not a clock: it rises only while the GPU
works, so on a shared host another process's short burst lands between the
oracle's first read and the probe's first sample as readily as inside it. The
observed delta is about one tick's worth. One value is therefore no evidence of
a sampler that is not sampling.

The same block already reasons this way one branch over -- a rail that held
across the bracket is reported with "freshness is NOT asserted on it" -- and
sandbox-meter's equivalent prints its GPU-hold case rather than asserting it.
This applies that reasoning to the case where the rail moved: the count of
distinct values is reported either way, and nothing is asserted from it.

Every other assertion is untouched, including the one that each handed sample
lies within the oracle's bracket.

What this gives up: a sampler that cached one reading and handed it back would
no longer be caught here. The liveness tests are what cover a rail that does
not advance (`the_liveness_probe_never_reports_a_frozen_rail_as_live`,
`the_ioreport_meter_is_never_available_on_a_frozen_cpu_rail`). Restoring a
sound version of this check means driving GPU work inside the probe's own
window, so a rise is guaranteed to be there to see; that is a larger change
than this one.

Verified on the IOReport host: 17 of 17 `macos_ioreport` tests and all 80
eoc-meter lib tests pass. That run took the held branch, so it exercises the
paths around this change rather than the rare case itself, which by
construction cannot be forced.

Co-Authored-By: Claude Opus 5 <[email protected]>
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Transaction-Science/open-standards!250
No description provided.