SIGN IN SIGN UP

fix(ontology): gate absences-as-text where every reading passes, not per helper

Fourth instance of the same class: pci.*.link.speed resolved to "unknown"
with measured provenance on Linux, where PCIe link training is readable and
some devices report exactly that word.

The previous commit guarded push_text and push_id and said they were "the
one place every text reading passes through". They were not. push_opt is a
third route and carried this one straight past. Guarding helpers means
guessing at the complete set of helpers, and that guess has now been wrong
once per attempt.

So it is a final pass over the assembled snapshot, modelled on the range
gate directly above it, which exists for the same reason: a reader that
produces something the schema rejects should degrade to "unknown, and here
is why" rather than to a confident lie. push_opt is guarded too, because a
specific reason beats a generic one when both are available.

Verified as a control pair rather than by a single passing run: injecting a
measured "unknown" with the gate active passes, and the same injection with
the gate disabled fails. A test that passes after a change proves nothing on
its own about which change made it pass.

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