SIGN IN SIGN UP

fix(ontology): bind boot duration, and stop printing collapsed indentation

Two things, found by pulling the same thread.

`system.boot.duration` was declared and unresolved, so it read "no resolver
bound on this build" — the wrong absence, because the entity is supported
on Windows and what stops it is privilege. Those are different facts and a
caller acts on them differently.

The Windows reader that would have supplied it was wrong. It subtracted
`Win32_OperatingSystem.LastBootUpTime` from the timestamp of System event
12 ("the operating system started at"), which are two records of the *same*
instant, so the difference is clock skew in how they are written down. On
this machine it returned 0.61 seconds and the `secs > 0.0` guard waved it
through as a measurement. That is worse than the 45-second constant it
replaced, because an invented number looks invented and a derived one does
not. It now reads Diagnostics-Performance event 100 `BootTime`, the only
place Windows records an actual boot, and leaves `Duration::ZERO` — which
the surrounding code already reads as "not measured" — when it cannot. That
log genuinely needs Administrator, verified two ways: `Get-WinEvent` and
`wevtutil` were both denied unelevated. Unlike Secure Boot an hour ago,
this one really is a privilege boundary, and the absence says so.

Then, while checking that the new absence text read correctly, it did not:
`simon describe` was printing "a freshly imaged              host". Thirty-
two descriptions and absence reasons carried runs of a dozen-plus spaces
mid-sentence, source indentation from `\`-continued literals whose
continuation had stopped taking effect. Every entity in the display, sensor
and RAPL clusters was affected, plus `system.hostname`, `system.os.*`, the
codec resolution entities, four capability descriptions and five absence
reasons. The ASCII art in `fetch.rs` and the deliberate column alignment in
`main.rs` are left alone.

Nothing caught this because every existing test asks what a description
*says*. `descriptions_and_reasons_contain_no_stray_whitespace` asks what it
looks like, and found a thirty-second case the sweep missed: an embedded
`\n` escape in `board.display.{n}.width`. A run of spaces is never
meaningful in a sentence; alignment belongs in the code that lays out the
table, not in the text handed to it.

Verified: fmt, clippy --all-features --all-targets, both cross-target
checks, and six conformance suites (60 tests) pass. `simon describe --id
system.hostname` now prints one sentence.

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