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