How the numbers are made
Every number on this site is computed by code from stored inputs, and those inputs are kept so any number can explain itself. This page describes the current methods plainly. When a method changes, the change is versioned — history is never recomputed.
Sources (RSS, GDELT, official feeds, scraped outlets) are ingested continuously and routed to dynamics by topic. An extraction model proposes atomic claim candidates with quotes. A clustering pass folds near-duplicate reports into one lead and counts the fold as corroboration. An adversarial verification model recommends approve/review/reject with rationale — carrying each source's measured reliability and any state-affiliation label into that judgment. Then a human editor decides. The only exception: claims from tier-1 sources with a clean AI verify and confidence ≥ 0.8 may auto-publish under a policy the pipeline cannot widen — and sources that are state-controlled or below a reliability bar are excluded from even that.
Each dynamic scores 0–100 on four components, daily. In brief: Volatility — anomaly of event/claim arrival rates vs a 28-day baseline, plus live telemetry anomalies (e.g. AIS vessel counts). Uncertainty — verification reject rate, extractor confidence spread, forecaster dispersion, hedged language. Complexity — actor count, relationship variety, domain breadth. Ambiguity — contested-claim share, unresolved candidates, and measured worldview divergence between published factions. The headline is the component mean. Young dynamics blend against an analyst-seeded baseline; the real-signal weight rises automatically with history and is disclosed on each dossier's score breakdown. Confidence reflects source coverage, freshness, provenance, and agreement. Every daily snapshot stores its full input vector — the “why this score” module on each dossier renders those stored inputs directly.
Questions are binary, dated, and resolvable by a stranger from public sources — criteria are written before opening. Submissions are scored with Brier and log scores at resolution; the crowd aggregate excludes our AI baseline (@vuca_ai), which is scored as a benchmark and published win-or-lose. The full board is on /accuracy.
Sources are scored from their measured record in this pipeline only: P = approvals + 0.5·corroborations given + 0.5·corroborations received; N = rejections + 2·later contests + verifier flags; score = 100·(P + K/2)/(P + N + K) with K = 6 shrinking new sources toward a neutral 50. Duplicate folds are neutral. Identity and state-affiliation labels are machine-drafted with cited evidence and publish only after editor review. Full ledger: /sources.
A weighted blend — ambiguity 40%, worldview divergence 35%, contested-claim share 15%, forecaster disagreement 10% — renormalized over whichever inputs exist for a dynamic, so the index is honest from day one and sharpens as coverage deepens: /divergence.
Dossier dashboards (dollar security, PLA activity, the Ukraine Initiative Index) are built from named public series — FRED, IMF COFER, Taiwan MND bulletins, Oryx confirmed losses, DeepState map layers — each cited on the widget, with method notes where our computation adds a step (e.g. geodesic area used for momentum only). Structural series never feed the live VUCA score; they are context, and the engine excludes their namespaces explicitly.
Coverage is uneven across theaters; visually-confirmed loss data undercounts; assessed-control maps carry their makers' judgment; young dynamics lean on seeded baselines; and models make mistakes — which is why machine output is human-gated by default (the sole exception, the labeled tier-1 auto-publish lane, is policy-bounded and auditable), and why the record of our misses stays public.