Writing opinions
After installing Veritas, you write three kinds of opinions and read one. This page walks through each.
The examples below use placeholder things and assertions. You’ll create your own with wh thing create and wh assertion create — see Things and Assertions for those primitives. Veritas operates on assertions you already have.
The examples assume Article/example-claim exists as the underlying thing, Proposition/article-is-accurate is the binary-proposition assertion being evaluated, and Source/research-team is the source whose reputation is wagered. Shape names are illustrative — substitute your own domain shapes (Belief, Thesis, Finding, etc.).
Examples below use the CLI. SDK callers submit the same operations via client.commit.apply; MCP callers use the warmhub_commit_submit tool. The CLI exposes --shape, --about, and --data as flags on wh assertion create; the SDK and MCP equivalents nest the same values inside a commit operation ({ operation: 'add', kind: 'assertion', name, about, data }). See Write operations for the operation contract.
Writing a Certainty
Section titled “Writing a Certainty”A Certainty is the primitive bet — a source expressing how strongly it believes the target assertion is true:
wh assertion create --shape Certainty \ --about Proposition/article-is-accurate \ --data '{ "belief": 0.8, "disbelief": 0.1, "uncertainty": 0.1, "source": "Source/research-team", "rationale": "Two independent reviewers agreed." }' \ --repo [your-org]/[your-repo]Required fields:
belief,disbelief,uncertainty— must each be in[0, 1]and must sum to1.source— a wref (the WarmHub reference to a thing) whose reputation is wagered by this Certainty.
Optional fields:
alpha— base rate in[0, 1]. Treated as0.5when omitted.rationale— freeform text. Veritas ignores it; it is for human readers.
Writing a Support or Opposition
Section titled “Writing a Support or Opposition”Support and Opposition express how one assertion bears on another. Both are written about a directional Pair of assertions:
wh assertion create --shape Support \ --about pair:Proposition/study-A-confirms,Proposition/study-A-conclusion \ --data '{ "belief": 0.7, "disbelief": 0.05, "uncertainty": 0.25, "source": "Source/methodology-reviewer", "rationale": "Replication followed the same protocol." }' \ --repo [your-org]/[your-repo]Pair direction matters. The first member of the pair is the antecedent; the second is the consequent.
Supportsays: belief in the antecedent is evidence for the consequent.Oppositionsays: belief in the antecedent is evidence against the consequent.
Field requirements match Certainty: belief + disbelief + uncertainty = 1, plus source and optional alpha / rationale.
The pair:a,b shorthand is CLI-only sugar that creates the underlying Pair thing automatically. SDK and MCP callers express the same target as a collection object — "about": { "pair": ["A", "B"] } — inside the commit operation. See Collections for the full collection model.
Reading the Consensus
Section titled “Reading the Consensus”Veritas writes Consensus assertions in two places:
- About a target assertion, consolidating that target’s native
Certaintyopinions. - About a
Pair, whenSupportand/orOppositionopinions exist for that pair. Pair-levelConsensusis currently diagnostic-only — Veritas writes two rows per pair (one per pathway, with the inactive pathway as a vacuous opinion), but the repo-visible payload does not include a pathway label, so the two rows cannot be reliably distinguished from data alone today.
Query Consensus on a target assertion the same way as any other assertion:
wh thing about Proposition/article-is-accurate --shape ConsensusQuerying pair-level Consensus requires the concrete Pair wref, not the pair:a,b shorthand. List the pairs in your repo to find the generated name:
wh thing list --shape Pair --repo [your-org]/[your-repo]wh thing about Pair/<generated-name> --shape ConsensusA Consensus row returns belief, disbelief, uncertainty, and optional alpha. There is no source or rationale field — Consensus is Veritas’s own consolidated readout, not a wager.
A brand-new target with no inputs has no Consensus row yet — Veritas writes Consensus only after a solve runs. Retracting all inputs from a target that previously had Consensus triggers a vacuous (0, 0, 1) write.
When Veritas re-solves
Section titled “When Veritas re-solves”Re-solving means recomputing Consensus for an affected target or pair after one of its inputs changes. Veritas reacts to changes on the three input shapes:
- A new, revised, or retracted
Certaintytriggers a local re-solve of the target assertion and updates that target’sConsensus. - A new, revised, or retracted
SupportorOppositiontriggers a local re-solve of the relation and updates thePair’sConsensus.
For a fixed set of inputs and reputations, the readout is deterministic and order-independent — the same inputs always produce the same Consensus.
Behavior worth knowing
Section titled “Behavior worth knowing”- One Certainty does not move reputation. A single source’s opinion has nothing to disagree with locally, so reputation only adjusts when multiple Certainties on the same target disagree. Cross-pathway conflict between
SupportandOppositionon the samePaircan similarly adjust the source’s relation-scoped reputation. - Agreeing Certainties do not move reputation either. Disagreement is the signal Veritas uses to update trust.
- Vacuous opinions are valid input.
(0, 0, 1)is a well-formed “no evidence” opinion and contributes nothing to consensus — useful when you want to register a source’s existence without committing to a view. - Retracting an input re-solves locally. When you retract a
Certainty,Support, orOpposition, Veritas re-solves the affected target or pair as if that input never existed. - Pairs with no
SupportorOppositionassertions are dormant. APairthing alone does not produce aConsensusuntil at least one pathway opinion is written about it. - Update an existing opinion with
wh assertion revise, not a secondwh assertion create. When the Veritas worker sees two activeCertaintyassertions from the samesourceabout the same target, it blocks the duplicate at consensus time with a message of the formSource X has multiple active Certainty assertions about Y; Certainty/Z should have been a revision of Certainty/W.The same guard applies acrossSupportandOppositionfor the samePair. Revising the existing assertion preserves history and updates Consensus; retract + add is the path when thesourceitself needs to change.
Related
Section titled “Related”- Overview — the conceptual model.
- Installing Veritas — the install flow and what gets created.
- Assertions — the underlying assertion primitive.
- Collections —
Pairsyntax and structure.
Hit a problem or have a question? Get in touch.