SIGN IN SIGN UP

feat(ontology): platform sensors, completing plan item F

Sensors was left out of the previous pass on the grounds that the reader
returns nothing on this machine. That was inconsistent: RAPL returns nothing
here too and was declared anyway. A cluster resolving to `unavailable` with a
true reason does satisfy the standing instruction — what it must not do is
resolve to silence.

`board.sensor.{n}.{name,type,active}` with a `board.sensor.<none>` diagnostic.
These are the OS-level sensor devices — ambient light, accelerometer,
orientation — not the board temperature sensors, which resolve under
`thermal`.

Two defects in that reader, both the shapes this crate keeps finding:

Every failure path collapsed to the same empty list. A missing powershell,
output that is not UTF-8, output that is not JSON, and a machine with
genuinely no sensors were indistinguishable, and the reasons lived in control
flow that discarded them. `note()` records which, and the resolver puts it in
the diagnostic.

An unnamed sensor was called `"Unknown"` — a literal that reads as the
sensor's actual name, one layer above where
`unknown_is_never_dressed_as_a_measurement` would catch it. Unnamed sensors
are skipped.

Also documents this release properly: `status`, `snapshot --format json-ld`,
`ids`, the RAPL and sensor clusters, the four system entities, and the
capability and vocabulary ontologies were all implemented and none were in the
changelog.

That changelog entry then failed `documentation_links`, because a sentence
beginning "simon can do per surface…" parses as a command. Third time my prose
has tripped that test; the test is right each time.

Plan item F is complete for every cluster with a reader behind it. A–D remain
hardware-blocked and E landed in 3.6.0.

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