feat: JSON-LD hardware reports, a neofetch-style summary, and four missing system entities
`simon snapshot --format json-ld` emits linked data. The existing JSON says what the readings are; it does not say what any of the words mean, so an agent has to be told out of band that `percent` is a unit and that `unavailable` is not a value. The `@context` resolves simon's terms to IRIs and its units to QUDT, and a consumer that has never seen simon can follow it. Units map to QUDT where a mapping exists and not where it does not: `identifier` and `text` are not quantities and carry simon's own term. A wrong `@type` is worse than an absent one — it is a machine-readable claim that a GUID is a measurable amount of something, and something downstream will do arithmetic on it. Absence survives the encoding: an unavailable reading is a node with no value and a `simon:unavailableReason`, never a zero, a null, or an omitted node. `simon fetch` is the neofetch-style summary. It reads through the same resolver as `snapshot`, so the two cannot disagree about one machine, and it prints the reason for anything unreadable rather than a dash. "No GPU detected" and "GPU enumeration failed" call for different responses, and this is the surface people paste into issues. Writing it exposed that `system.hostname`, `system.os.version`, `system.kernel.version` and `system.architecture` were read by `os_info` and named by nothing. A reader holding data the schema does not expose is invisible to every agent — the same silence this crate exists to prevent, one level up. All four are declared and resolved. Also fixes a real defect in my own JSON-LD: the `@context` defined `unit` twice, once as the QUDT prefix and once as the property, so the prefix was silently lost and every `unit:PERCENT` in the graph was an unresolvable name. The document looked correct and said nothing. The property is now `hasUnit` with `@type: @id`, and a new test walks the graph checking that every prefixed name has a defined prefix — the original test checked that terms were present, not that the names they produce can be followed. 817 lib tests, and the conformance suites green. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A
Adam Erickson committed
ec40ea299e40475963c1da7c8d1e3c4e0b4860f4
Parent: e687bcf