SIGN IN SIGN UP

feat(ontology): kernel parameters, split from this crate's opinions about them

`name`, `value` and `category` are what the platform reported and are published.
`is_recommended`, `recommended`, `security_score`, `network_score` and the
free-text recommendations are this crate's judgement about what the values ought
to be, and are deliberately absent: `simon tune`'s standing rule is that a
proposed value comes from what the system declared, never from this crate. A
score sitting beside a measured value borrows its authority.

Two defects came out of doing it, both in the tooling meant to prevent exactly
this class of thing.

**The probe table contained a hardcoded count.** `kernel_params` was `|_| 1` --
a literal that measured nothing -- so the table reported "answers here, 1 item"
for a reader that answers nothing on this machine. That table exists precisely
because "guessing which readers answer was slow and got one of them wrong", and
the guess had been sitting inside it. It propagated into HANDOFF.md's table and
into the plan for this change. `memory_bandwidth` and `crypto_accel` had the
same shape; all three now count something real, and the memory one reports 0
unless the generation was identified, since everything it produces rests on that.

**The Windows reader fabricated a row.** `Get-NetTCPSetting … -ExpandProperty
AutoTuningLevelLocal` fails outright here -- a null-conversion error, nothing on
stdout -- and the code pushed a `KernelParam` anyway with `value: ""`. A named
setting that appears to exist and be blank is worse than an absent one. It now
skips an empty value, and the snapshot correctly carries
`system.kernel_param.<none>` with a reason.

Verified: fmt, clippy --all-targets -D warnings, 826 lib tests, conformance 21,
honesty 7, agentic_contract 16, and the snapshot rows read by eye.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A
Adam Erickson committed
014e4dd64ea3040442854f7cffaa40449764f6a3
Parent: 1947426