Skip to content

Provenance ​

Every observed value records where it came from, and that source constrains what the value is allowed to do to the score.

The trust order ​

ProvenanceSource
registryWathq, ZATCA — the registry itself
government_idYakeen, Nafath
providerFocal, Neotek, domain intelligence
internalVerity's own portfolio graph
self_declaredThe onboarding form, or an operator typing a value in
absentNothing to read

The rule ​

A weak source may raise risk freely. It may never lower risk below neutral.

Neutral is 3. self_declared and absent are capped: if either would produce a score below 3, the score becomes 3 and the item is marked capped. Every other source applies at full strength in both directions.

The asymmetry is the point. A merchant saying "we are low risk" should not lower their score. A merchant saying something alarming about themselves is worth listening to.

Capped against what produced the score ​

The cap keys on what produced the score, not on where the observation came from. Those differ more often than they sound:

  • The country was read from the registry — provenance registry
  • But no configured row matched it, so the score came from the no_input fallback

Scoring that at full strength because the observation was registry-sourced was a real bug: it let a below-neutral fallback through in exactly the case the cap exists to cover. The cap now reads matched_no_input.

Two separate facts ​

Each assessment item records both:

FieldRecords
provenanceWhere the observation came from
matched_no_inputWhether the score came from the fallback

Collapsing them into one field lost "we observed this". A row can honestly say Saudi Arabia · Registry and still be marked no rule configured — we did read the country from the registry, and there is no configured score for it.

In the interface ​

  • Each factor row shows its source
  • A capped row says Capped at neutral: a self-declared source cannot lower risk
  • A fallback row says Fallback score — no evidence stood behind this and renders in slate rather than a risk colour

Declared values elsewhere ​

The same idea appears outside the risk engine. A date of birth an operator types in is recorded as self_declared and labelled declared, not verified wherever it appears — it is the claim an identity check tests against the government record, not evidence in itself. A later authoritative answer overwrites it.