Skip to content

Reputation and the CLI

Veritas weights every opinion by how trustworthy its source has proven to be. That trustworthiness is itself a subjective-logic opinion — a source’s reputation — and this page covers what reputation is, what moves it, and how to read or seed it with the wh component exec veritas commands.

A reputation is a subjective-logic opinion (belief, disbelief, uncertainty, alpha) describing how much a source’s opinions should count. Veritas holds one reputation per source per scope (covered below), and uses it to discount each incoming Certainty before consolidating:

  • A source’s belief reputation scales its opinion. A weighted certainty is what the source believes multiplied by the source’s reputation belief, so a high-reputation source counts for close to full weight and an unknown source counts for less.
  • Discounting is one-directional. A source you disbelieve does not get its opinion inverted — its belief and disbelief both collapse toward uncertainty, so a distrusted source contributes close to nothing rather than the opposite of what it said.

A source Veritas has not weighed before starts at (0.5, 0, 0.5) — half belief, half uncertainty, no disbelief. This is moderate provisional trust, not a blank slate: a brand-new source’s opinions already carry meaningful weight, and that weight shifts as the source agrees or disagrees with others.

Reputation changes under exactly one condition: disagreement that later resolves.

  • A lone opinion moves nothing. A source whose Certainty is the only one on a target has nothing to disagree with, so its reputation is unchanged.
  • Agreement moves nothing. When sources agree, no reputation shifts.
  • Only when sources disagree on the same target does Veritas adjust the disagreeing sources’ reputations as the consolidated readout settles — a source repeatedly on the wrong side of resolved disagreements loses standing, and one repeatedly on the right side gains it.

Volume is not evidence: writing the same opinion many times changes nothing. Disagreement is the only signal.

Reputation is held per source and per scope, so a source’s track record on one kind of assertion does not automatically carry to another. Scope is derived, never set by hand:

  • For a Certainty, the scope is the shape name of the target assertion. Opinions about a WeatherClaim assertion build reputation under scope WeatherClaim; opinions about a PriceClaim build a separate reputation under scope PriceClaim.
  • For Support and Opposition, the scope is the ordered shape pair of the two assertions in the Pair, written support-opposition:<FirstShape>-><SecondShape>.

To partition reputation by domain, model each domain as its own assertion shape — the shape name is what scopes the reputation. When you read or seed a reputation from the CLI, you pass this derived string as --scope.

Veritas exposes its reputation store through the component CLI. Each command runs against the repo where Veritas is installed:

Terminal window
# List every source reputation in the repo (cursor-paginated)
wh component exec veritas list-reputations --repo [your-org]/[your-repo]
# Filter to one scope
wh component exec veritas list-reputations --scope WeatherClaim --repo [your-org]/[your-repo]
# Read one source's reputation in a given scope
wh component exec veritas get-reputation \
--wref Source/research-team \
--scope WeatherClaim \
--repo [your-org]/[your-repo]

get-reputation requires both --wref (the source thing) and --scope. A source with no recorded reputation in that scope returns the (0.5, 0, 0.5) default rather than an error.

list-reputations is the calibration view: it returns the sources that have a recorded reputation — the ones you have seeded or whose reputation has moved under disagreement — and where each one sits. Sources still at the default and oracle sources have no stored row, so they do not appear in the list. It accepts --scope to filter, --limit (1–500, default 50), and --cursor to page. Add --help after any method to see its arguments.

When you already know how much to trust a source, seed its reputation instead of waiting for disagreement to calibrate it:

Terminal window
wh component exec veritas upsert-reputation \
--wref Source/research-team \
--scope WeatherClaim \
--belief 0.7 --disbelief 0 --uncertainty 0.3 \
--repo [your-org]/[your-repo]

belief, disbelief, and uncertainty must each be in [0, 1] and sum to 1. upsert-reputation requires repo:write; the read commands require only repo:read.

A few rules keep a seed honest:

  • Seed uncertainty, not certainty. Put real mass on uncertainty unless you have strong evidence. A seed of (0.9, 0, 0.1) tells Veritas you are nearly sure of this source — only use it when you are.
  • A seed still moves. Seeding is a starting point, not a lock: a seeded reputation keeps adjusting under disagreement exactly like any other. If you need a source whose trust never changes, that is an oracle, not a seed.
  • Values are capped. Reputation belief is evidence-capped, so an extreme seed is clamped: upsert (1, 0, 0) and get-reputation reads it back capped just short of total certainty. There is no fully certain reputation.
  • Scope to where you have evidence. A seed applies to one scope. Trusting a source on WeatherClaim says nothing about its PriceClaim opinions — seed each scope you have grounds for.
  • Writing opinions — author Certainty, Support, Opposition; read Consensus.
  • Oracles — fixed max-trust sources that never recalibrate.
  • Overview — the conceptual model behind the shapes.