SIGN IN SIGN UP

feat(ontology): RAPL package energy, completing plan item F's readable clusters

The plan named NUMA, RAPL, sensors, virtualization and EDAC as the clusters
with readers and no schema. NUMA, virtualization and EDAC landed in 3.7.0;
this is RAPL.

`power.rapl.{n}.{name,energy,max_energy_range,power_limit,enabled}`. Energy is
reported as the raw microjoule counter rather than converted to watts, because
a single sample cannot be a rate — power is the difference between two
readings over an interval, and publishing one sample as watts would invent the
number. `max_energy_range` is declared alongside it because a consumer without
it reads a counter wrap as a negative delta.

The reader returned `Ok(vec![])` on Windows and macOS, with a comment
explaining why there was nothing. An empty list is exactly what a Linux box
with every zone disabled returns, so the reason sat in a comment no caller
could reach. Both now return an error carrying it, and the resolver turns that
into `power.rapl.<none>` with the text — verified on this machine, which says
Windows exposes no RAPL to unprivileged code and why.

The `<none>` diagnostics are declared per domain and RAPL is a cluster inside
`power`. Reusing `power.<none>` would have claimed the whole domain enumerated
nothing on a machine whose battery reads 100%, so the sub-cluster has its own
declared diagnostic. `every_reading_traces_back_to_the_schema` caught that,
which is the ontology suite doing the job it was written for.

Sensors is the one cluster left and it stays unwritten: the Windows board
sensors need a signed kernel driver and the reader returns zero of them here.
Declaring entities that resolve to nothing on the only available machine would
breach the standing instruction, so it waits for a host where the reader
answers.

821 lib tests, 21 ontology, 13 capability, 16 agentic contract.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A
Adam Erickson committed
660637ef3e60cd70959b3d5f023497b9fc770a25
Parent: eded817