An official website of the Disclosure Foundation
Claims

Claims

Attribution — every assessment of a case is an attributed, evidence-backed claim, and disagreement is preserved

Records, Observables, and Origins describe and classify an observation. Claims are how the standard records who said so. Every evaluative statement — "this showed instantaneous acceleration," "this is best explained by an unknown craft" — is a claim: an attributed assertion with a rationale and pointers to the specific evidence that backs it.

Claims aren't a separate package

The claim model ships inside @disclosureos/records (the @disclosureos/records/shared module) and is reused by Observables and Origins. It is the attribution layer that threads through the others — Part 4 of the standard, not a separate package.

Explore it visually

The Claims page in the Standard Explorer shows how attributed claims, evidence types, and evaluator disagreement fit together.

What every claim carries

Every claim, whatever it's about, shares the same structure from @disclosureos/records/shared: an attribution (who evaluated it, when, why) plus the in-record evidence references that justify it.

import { evidenceRef, type Claim } from '@disclosureos/records/shared';

// who / when / why + the evidence that backs the call
{
  evaluatedBy: 'Scientific Coalition for UAP Studies',
  evaluatedAt: '2026-03-01T00:00:00Z',
  rationale: 'Radar tracked descent from ~80,000 ft to sea level in seconds.',
  evidenceRefs: [evidenceRef('sensor', 'princeton-spy1-radar')],
}

The point of this structure is auditability: a claim without evidenceRefs is an opinion; a claim with them can be traced back to the exact sensor reading, testimony, or document in the record that supports it.

Evidence references

An evidence reference is a typed string — <kind>:<id> — pointing at something that already lives in the record. There are four kinds:

KindPoints to
mediaA media attachment (photo, video, audio, document)
sensorA sensor reading in the record's sensor evidence
physicalA physical evidence item (forensic extension)
testimonyA testimony statement (forensic extension)
evidenceRef('sensor', 'princeton-spy1-radar'); // → 'sensor:princeton-spy1-radar'

The evidence must exist in the record first, with a stable id. The CLI and parseEnrichedObservation warn when a claim cites an evidence reference that doesn't resolve.

The two claim shapes

Two first-party shapes extend that shared structure, one per evaluative layer:

ShapePackageAdds on top of the shared structure
Observable Claim@disclosureos/observablesan assessment level (how strong the evidence is) for one observable
Origin Claim@disclosureos/originsa primaryHypothesis from the OCS taxonomy, with alternativeHypotheses
import { createObservableClaim } from '@disclosureos/observables';
import { createOriginClaim } from '@disclosureos/origins';

const observableClaim = createObservableClaim('measured', {
  confidence: 0.7,
  rationale: 'Doppler velocity profile shows acceleration inconsistent with known aircraft.',
  evidenceRefs: [evidenceRef('sensor', 'princeton-spy1-radar')],
  evaluatedBy: 'example-institution',
});

const originClaim = createOriginClaim('1.1.3', 0.4, {
  rationale: 'Performance exceeds known aerospace capability.',
  alternativeHypotheses: [{ nodeId: '1.1.1.2.1', confidence: 0.25, label: 'Classified program' }],
  evidenceRefs: [evidenceRef('sensor', 'princeton-spy1-radar')],
});

Where claims live: the two slots

The evaluative slots that Observables and Origins add to an Observation each hold a list of claims, never a single value:

SlotHoldsOwner
observableAssessmentsObservableClaim[] per observable id@disclosureos/observables
originOriginClaim[]@disclosureos/origins

Holding lists is deliberate. It lets the record keep two distinct kinds of uncertainty straight.

Two axes of uncertainty

Inter-claim: evaluators disagree

When two institutions assess the same case differently, both claims sit in the slot side by side. Neither overwrites the other.

// instantaneous_acceleration, as assessed by two parties
[
  createObservableClaim('measured', {
    confidence: 0.85,
    rationale: 'Radar tracked descent from ~80,000 ft to sea level in seconds.',
    evaluatedBy: 'Navy aviator (firsthand)',
  }),
  createObservableClaim('not_indicated', {
    confidence: 0.6,
    rationale: 'Available sensor data judged insufficient to establish the maneuver.',
    evaluatedBy: 'AARO (later review)',
  }),
]

The disagreement is the data. Scoring reads it and sets a contested flag when claims disagree in direction — it never averages the dispute away.

Intra-claim: one evaluator hedges

A single origin claim can carry a primary hypothesis alongside weighted alternatives — one evaluator expressing their own internal uncertainty:

createOriginClaim('1.1.3', 0.4, {
  rationale: 'Best fit given the kinematics, but data is incomplete.',
  alternativeHypotheses: [{ nodeId: '1.1.1.2.1', confidence: 0.25, label: 'Classified program' }],
});

These two axes are kept distinct on purpose: a list of claims is disagreement between evaluators; primaryHypothesis + alternativeHypotheses is one evaluator's own hedging.

Opinion lives in claims and scoring — never in the bare record

The record holds facts. Every interpretation is a claim, attributed to whoever made it. Endorsement, weighting, and the contested flag belong to Scoring, not to the record itself.

Working with claims

  • Claiming Observables — the discipline for picking the observable, level, and confidence, and citing evidence.
  • Claiming Origins — choosing OCS nodes and expressing alternatives honestly.
  • Compellingness — how claims and their evidence become a score, and how contested is derived.

On this page

What every claim carries
Evidence references
The two claim shapes
Where claims live: the two slots
Two axes of uncertainty
Inter-claim: evaluators disagree
Intra-claim: one evaluator hedges
Working with claims