eoc-cascade: a hit reads no meter and is charged a calibrated estimate; the span opens at the neural stage #233
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/eoc-cascade-meter-at-its-resolution"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Why
The eoc cascade metered every resolve with two reads of this process's energy counter. Since #229, each read first verifies that the reading thread has left its core. A resolve answered by the cache, the KV tier or the graph is about a microsecond and a microjoule of work, but the span around it read the meter's own closing wake-up instead.
Measuredat 13–28 µJ, which is the meter's own cost, not the hit's.The measurement cost more than the work it measured, and the figure it sealed was the meter's.
What
The rule stands: nothing that was not read from a counter is
Measured.Estimated, since nothing was read for this resolve.detect_in_processdocs.eocCLI prints a hit's estimate and the calibration it came from.Evidence (M3 Ultra)
After the change:
Measured?Tests:
Measured.Measured: 11 tests fail;Two findings, now in the docs:
🤖 Generated with Claude Code
With 0d78becb a prompt the cache, the KV store or the graph answers is no longer bracketed by two reads of the meter: it is charged the stage's own figure plus what a hit on that tier costs on this host, calibrated over a batch the first time the tier answers. The CLI resolves one prompt a process, so its hit is always the one that calibrates. `eoc query` therefore prints, for a hit, an estimate (it printed `measured(the meter's own cost)` for a cache hit on a live counter, and the stage's estimate plus that cost for a KV or graph hit), and a `hit` line that says where the figure came from: the per-hit nanojoules, the batch, what the meter read over it and over no work; or why the tier has no calibration and the cost is the stage's own figure. On the build host (M3 Ultra, release): $ eoc query ping stage : kv payload: pong cost : 53 µJ (estimated) hit : a kv hit is charged 3357 nJ on this host, on top of the stage's own figure: process-energy read 6876 µJ over 2048 lookups in one span (24 µJ over none) A prompt that falls through to the neural stage prints as before: the echo backend's 50 J estimate plus what the counter read around the stage, an estimate; measured only where the stage estimated nothing, which the existing in-process test pins. `eoc meter`'s `query` line says how the meter is used. Tests: the CLI's own path for `ping`, a KV hit and then a cache hit, is an estimate on every host; where the tier was calibrated the cost is the stage's figure plus the whole microjoules of the calibrated one, and where it was not, the stage's figure and a reason this host's meter can give (the stub holds, the powermetrics stand-in fails its reads). It takes the lock the burning tests take, since the meter's domain is the whole process. The `hit` line is pinned on its own. Co-Authored-By: Claude Opus 5.5 <[email protected]>