SIGN IN SIGN UP

feat(ontology): a capability schema over every surface, with tests derived from it

The reading ontology says what a value means. It says nothing about whether
simon can produce it on this machine, so an agent that knows
`gpu.0.temperature` is degrees Celsius still cannot tell that asking is
futile on macOS. The README said so in prose, which is the wrong medium for
a reader that is not a person.

`ontology::capability` declares every surface — readings, settings, tuning,
detection, interfaces — per platform, with the evidence for each claim.

`Support::Unverified` is what makes it honest rather than promotional: code
that compiles and has never run on real hardware is not "implemented". This
project ships several such paths and the Linux profile writers are still
among them. Calling that implemented would be the same error as reporting a
nominal clock as a measured one.

The tests are derived from the catalogue rather than written beside it,
because a hand-kept list is a second copy that drifts — which this project
has now watched happen with a rust-version, a README, and a metric registry.
`tests/capability_conformance.rs` checks both directions:

- registered apply handlers and declared settings are the same set
- every detection rule the source emits is in `ids::RULES`, and every
  declared rule is emitted
- every ontology domain declares its reading support
- readings claimed usable here must actually resolve in a live snapshot
- readings claimed unimplemented here must produce nothing — the test that
  catches a stale pessimistic claim, which is worse than a stale optimistic
  one because an agent plans around an absence that is not there
- the README and the catalogue must agree about macOS GPU

Verified both controls fail: undeclaring `file.modified` fails the rule
check, and claiming macOS has a GPU reader fails the agreement check.

866 tests green across every suite, on default features and with `vault`.

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