fix(ontology): gpu.codec declared Measured for rows that resolve Specification
`resolve_codecs` picks provenance per row -- a capability the reader queried from the driver resolves Measured, one concluded from the GPU model resolves Specification. The five entities those rows populate all declared Measured, so the schema promised a live observation for values that may never have been observed. `Entity` carries one provenance and cannot express "varies per row", and adding a Varies variant to `Provenance` would poison `is_observation()` -- the guard an agent applies before treating a value as fact -- for every consumer of every entity. So the declaration takes the weakest provenance a row can carry, which is the rule `Derived` already follows: it "inherits the weakest provenance of its inputs". That direction is the safe one. A queried row resolving Measured against a Specification declaration over-delivers, and costs a consumer nothing. The reverse hands an agent a spec-sheet inference wearing a measurement's authority. Note for whoever adds the next cluster: nothing in the suite compares a reading's provenance against its entity's declared provenance, so this class of drift is uncaught by construction. This was found by reading the declarations, not by a test. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A
Adam Erickson committed
b2dd07bcafe903ec2ed1c353b0a289be3c439506
Parent: 2e6f9e9