fn check_keys(node: &Yaml, prefix: &str) -> Result<(), String>Expand description
Refuse a key Mira does not read, or a shape it cannot read.
The gets above are silent about everything they do not name, so
storage.retension and a retention nested one level too deep both boot
happily on the 7-day default and surface a week later as a full disk. A flag
Mira does not know is already unknown flag --nope; there is no reason a file
should be the lenient half of the same interface.
lookup is just as silent about a value of the wrong shape — a list where
a string belongs, a string where a section belongs — and the outcome is
identical: the default, in silence. So the structure is checked here too,
where the full path is in hand to name.
The closed set is also what makes deleting a setting safe: a key that no longer exists becomes a startup error naming it, rather than a value the operator still believes is in effect.