An official website of the Disclosure Foundation

Introduction

Overview

Modules

CompletenessCompellingness

Overview

@disclosureos/scoring — completeness and compellingness, two measures that refuse to be one

@disclosureos/scoring answers the fifth question the standard asks: how complete and compelling is the case?

It is the consumer layer — it reads the enriched record produced by the other three and computes reference measures. It augments nothing and stores nothing on the record.

Explore it visually

The Scoring page in the Standard Explorer shows completeness, compellingness, contestedness, and evaluator weighting without collapsing them into one number.

npm install @disclosureos/scoring

Two orthogonal measures

Completeness

Is the record well-documented? Field coverage of the records schema — what's filled in, what's missing.

Compellingness

Is the case anomalous? Signal strength from observable and origin claims, with a contestedness range.

The separation is deliberate. A thoroughly documented mundane sighting scores high on completeness and near zero on compellingness. A thin but extraordinary radar case scores the reverse. Collapsing those into one number would hide exactly what a reader needs to know — so the framework doesn't.

import { getCompleteness, score } from '@disclosureos/scoring';

const completeness = getCompleteness(observation);
completeness.percentage;          // 0–100: coverage of all schema fields
completeness.requiredPercentage;  // 0–100: coverage of required fields
completeness.missing;             // exactly which paths are absent

const result = score(observation);
result.score;       // 0–1 consensus point estimate
result.range;       // { low, high } — spread across competing claims
result.contested;   // do evaluators disagree on direction?
result.components;  // per-signal breakdown: technology, biologics, origin

Design commitments

  • No single headline score. Multiple measures, each answering one question.
  • Transparent methodology. The weights are exported data (DEFAULT_WEIGHTS), the formula is open source, and every result is stamped with scoringVersion.
  • Disagreement is surfaced, not averaged away. Competing claims produce a range and a contested flag alongside the point estimate.
  • Prosaic means explained. A confident prosaic origin classification contributes zero anomaly signal — the scorer can't be gamed by enthusiastically classifying a case as a balloon.
  • Overridable, not configurable. Weights, prosaic prefixes, and evaluator trust are plain function options. Institutions can publish alternative methodologies as data, not forks.

Ranking

import { rankByCompellingness } from '@disclosureos/scoring';

const ranked = rankByCompellingness(observations);
// most compelling first — the "one case that matters" surfaces

Subpaths

import { getCompleteness } from '@disclosureos/scoring/completeness';
import { score, rankByCompellingness } from '@disclosureos/scoring/compellingness';

Completeness

Field coverage of the records schema — what's documented, what's missing

On this page

Two orthogonal measures
Design commitments
Ranking
Subpaths