SIGN IN SIGN UP

feat(vault): read an IronVault model vault; correct the MSRV

`simon ai models` lists what a vault holds — name, format, version count,
stored and compressed size, checksum and metadata — as a table or JSON,
behind an optional `vault` feature that is off by default.

Read-only, and verified as such rather than asserted. simon never stores,
fetches, decrypts or deletes; it reads the metadata index, which IronVault
exposes without a passphrase. Checked against a real vault holding two
models across three versions with `"unlocked": false`, and the vault
directory is byte-identical across two consecutive reads.

`VaultStatus` keeps `not_installed`, `absent`, `present` and `failed`
distinct once serialised. The first version collapsed the first two and
printed an empty path, which is the shape of answer this crate exists to
avoid.

Two defects found while testing this, neither caused by it:

The declared MSRV was 1.70 and had been false since 5.0.0. Restoring the
egui GUI pulled in `image` and `home`, which declare 1.88 themselves, and
`image` reaches an edition-2024 crate that pre-1.85 cargo cannot parse.
Two releases shipped a floor nothing had ever built against. It is now
1.88, established by building against every installed toolchain. Raising
it also un-gated ten clippy lints that `incompatible_msrv` had been
suppressing at 1.70; those are fixed. `virtualization::detect::cpuid`
needed its `unsafe` block back — removed once as a no-op, true only on
compilers newer than any this project claims to support.

The Peripherals tab waited 24s for data it does not display. One thread
ran seven WMI queries and sent nothing until all seven finished, and two
of them dominate: `get_driver_versions` 20.3s and
`get_system_temperatures` 2.9s, against 0.7s for `get_peripherals`.
Headless reads gave up at 30s and returned a bare title in three runs out
of five. The collector now sends two instalments split by cost, and the
tab returns in 8.8s with 192 lines instead of two. The test that should
have caught this did catch it — just not reliably enough for anyone to
believe it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A
Adam Erickson committed
8fbde97dc65c05636a8e63e05c0b348667dba82c
Parent: 0d7057a