An official website of the Disclosure Foundation
Datasets

v1 · Previous stable standard

Classification

OriginClaim, hypothesis weights, and confidence distributions

Classification is how an evaluator's judgment about origin attaches to a record. The types model the two axes of disagreement separately: alternatives within one evaluator's claim, and competing claims between evaluators.

OriginClaim

One evaluator's verdict — the shared Claim envelope plus the hypothesis fields:

interface OriginClaim {
  primaryHypothesis: string;                  // OCS node id, e.g. '1.1.3'
  confidence: number;                         // [0, 1] — confidence in the primary
  alternativeHypotheses?: HypothesisWeight[]; // also-entertained, weighted
  rationale?: string;
  evaluatedBy?: string;
  evaluatedAt?: string;
  evidenceRefs?: string[];
}

interface HypothesisWeight {
  nodeId: string;       // OCS node id
  confidence: number;   // [0, 1]
  label?: string;       // display convenience
}

Build with the factory — it asserts every node id exists in the taxonomy and parses confidence ranges:

import { createOriginClaim } from '@disclosureos/origins';

const claim = createOriginClaim('1.1.3', 0.4, {
  rationale: 'Performance exceeds known aerospace capability; cannot exclude advanced terrestrial program.',
  alternativeHypotheses: [
    { nodeId: '1.1.1.2.1', confidence: 0.25, label: 'Classified U.S. program' },
    { nodeId: '2.2.1', confidence: 0.1, label: 'Misinterpretation' },
  ],
  evidenceRefs: ['sensor:princeton-spy1-radar'],
  evaluatedBy: 'example-institution',
});

createOriginClaim('9.9.9', 0.5); // throws: Unknown OCS node ID

Confidences within a claim need not sum to 1 — the gap is honest unresolved uncertainty.

The origin slot

A flat array of claims. Push, never replace:

observation.origin = [claimFromInstitutionA, claimFromInstitutionB];

Institution A says 1.1.3 at 0.4; Institution B says 2.1.5 (hoax) at 0.7. Both stand, attributed and evidence-linked. Compellingness scoring reads the spread and flags the case contested — which is exactly what a reader should know.

ConfidenceDistribution

For analyses that assign confidence across many hypotheses explicitly, with the remainder tracked:

import { createConfidenceDistribution } from '@disclosureos/origins';

const dist = createConfidenceDistribution([
  { nodeId: '1.1.1.1.2', confidence: 0.5, label: 'Celestial' },
  { nodeId: '1.1.1.2.4', confidence: 0.3, label: 'Private/commercial craft' },
]);
// dist.unresolved === 0.2 — computed, the distribution always accounts for 1.0

CategoryConfidence

A simplified eight-bucket distribution for quick, coarse classification — useful for triage UIs and bulk imports before detailed analysis:

interface CategoryConfidence {
  conventional: number;       // OCS 1.1.1
  cryptoterrestrial: number;  // OCS 1.1.2
  extraterrestrial: number;   // OCS 1.1.3
  extradimensional: number;   // OCS 1.2
  interdimensional: number;   // OCS 1.3
  psychosocial: number;       // OCS 2
  metaphysical: number;       // OCS 3
  insufficientData: number;   // cannot classify
}

insufficientData is a first-class answer. Most honest triage of historical records lands there.

Validation

import { validateOriginClassification, isOriginClaim } from '@disclosureos/origins';

const issues = validateOriginClassification(observation.origin); // ValidationIssue[]

For the whole enriched record, use parseEnrichedObservation.

On this page

OriginClaim
The origin slot
ConfidenceDistribution
CategoryConfidence
Validation