> ## Documentation Index
> Fetch the complete documentation index at: https://docs.beliefsystems.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Belief Volatility Methodology

> Complete specification of how Belief Systems computes Forward Belief Volatility – how much prediction-market probabilities are expected to move over a stated horizon.

**Measure:** Forward Belief Volatility (FBV)
**Methodology Version:** `fbv-v1.2` · **Clock Version:** `clock-v1.0` · **De-vig:** `devig-proportional-v1`
**Last Updated:** August 2026

<Info>
  This page is the methodology of record for the Belief Volatility family. Every quantity below is
  computed from publicly observable prediction-market prices and a versioned release-curve artifact.
  Each published record carries the release share it was computed with, so any published value can
  be re-derived from that record alone. Start with the [Glossary](/reference/glossary) if a term is
  unfamiliar.
</Info>

## 1. What it measures

A prediction market prices an event. It does not price the **movement** of that event's probability.
Equity markets solve this with options: implied volatility is read off an option chain. Prediction
markets have no option chain, so a volatility measure has to be built from the contract prices
themselves.

Belief Volatility answers one question: **how much is this probability expected to move over the
next N days?**

It is quoted in **probability points**. A 30-day reading of 37.6 means the outcome probabilities are
expected to travel about 37.6 points, root-mean-square, over the next thirty days.

It is **not directional**. It says nothing about which outcome is likelier or which way prices will
move – only about the magnitude of the movement.

## 2. The variance budget

The foundation is an identity, not a model.

For a binary contract that settles at 0 or 1, the price is a martingale under the pricing measure.
A martingale that starts at `p` and must end at 0 or 1 has a total expected quadratic variation
fixed by where it starts:

```
E[remaining QV] = p(1 − p)
```

This is the **variance budget**. It is the entire amount of movement the contract has left between
now and settlement. It is not estimated – it is read directly off the current price.

Two consequences worth internalising:

* A contract at 50c has the largest possible budget (0.25). A contract at 2c has almost none
  (0.0196). Certainty is quiet by construction.
* The budget **shrinks as the market makes up its mind**, regardless of how much time is left.

## 3. The information clock

The budget says *how much* movement remains. It does not say *when*. Splitting the budget across
calendar time is the one place this methodology estimates rather than derives.

We call that allocation the **information clock**. For a tenor `τ`, the clock reports the share of
the remaining budget expected to be released within the next `τ` days:

```
Â(τ) ∈ [0, 1],   Â(τ) → 1 as τ → time-to-settlement
```

The published clock, `clock-v1.0`, is fitted on a panel of **4,152 resolved prediction markets
(2023–2026)**. Shares are estimated in buckets of time-to-settlement, then published as a monotone
log-linear interpolation in `ln(days-to-settlement)`, anchored at `Â(τ|τ) = 1`.

The interpolation is not cosmetic. A raw step function jumps at bucket edges, and a predictable jump
is predictable drift – exactly what a forward measure must not contain. The loader **rejects** a
clock artifact that is discontinuous, non-monotone, or otherwise incoherent.

The clock is a versioned artifact. Every published record names the `clock_version` it was computed
under and carries the release share it used, so a value stays re-derivable under the curve that
produced it. A refit is a methodology change and is governed accordingly (§9).

## 4. From budget to a quoted number

Combining the two:

```
FBV-τ = 100 · √( W · Â(τ) )        the τ-day forward reading
FBV-R = 100 · √( W )               remaining uncertainty, to resolution
```

where `W` is the variance budget.

**The bare ticker always means the 30-day tenor.** `MIDVOL` is `MIDVOL-30` everywhere – in the API,
the data dictionary, chart exports and any published copy.

`FBV-R` is published as a **secondary** field labelled "remaining uncertainty (to resolution)". It is
never the headline: it carries no information beyond the prices themselves, and it declines
mechanically into the event.

Readings are **not annualised**. A 30-day reading is a 30-day reading. Annualising a measure whose
budget is fixed and depleting would imply a stationarity that does not exist here.

## 5. Composite series over a partition

Some questions are not binary. Control of Congress has five mutually exclusive outcomes, and a
measure of "how uncertain is control of Congress" has to cover the whole outcome map.

For a partition of `n ≥ 3` mutually exclusive, jointly exhaustive outcomes with de-vigged prices
`p_1..p_n` summing to 1:

```
W^P = Σ_k p_k(1 − p_k) = 1 − Σ_k p_k²
```

Expectations are additive, so this needs no correlation estimate.

**One property is disclosed rather than hidden:** because the probabilities must sum to 1, movement
between two legs is counted in both. A pure shuffle of mass between two outcomes registers as
movement twice. That is intended – the composite measures total movement of the *outcome
distribution*, not of any single scalar. The hostile reading of this ("you double-count
substitution") is correct, and we state it rather than wait to be asked.

The composite clock is the budget-weighted mixture of the per-leg clocks:

```
Â^P(τ) = Σ_k W_k Â_k(τ) / W^P
```

**What ships today: a common clock, disclosed on every value.** The mixture above is implemented, but
the clock is currently fitted per *category* rather than per leg. Every leg of the congressional
partition carries the `elections` curve and differs only through its own days-to-settlement, so with
a common settlement date the per-leg shares coincide and the mixture reduces to a single `Â(τ)`.
That is why the worked example in §6 can use one number and still be exact.

This is not left to be discovered. Every published value carries this disclosure verbatim:

> This value assumes \[the listed legs] release variance on a common election-night schedule. A Senate
> runoff, recount, or certification dispute would concentrate mass in a later window not modelled
> here; per-leg clocks are not yet separately estimated.

The assumption is material and we would rather state it than defend it later. Legs are genuinely not
clock-homogeneous – the House is typically called on election night, while Senate control turned on
post-election runoffs in two of the last three cycles. Differentiated per-leg clocks, carrying
explicit runoff and certification mass, are specified and belong to the event-window measure
(`MIDVOL-E`), which is deferred until that estimation lands. Until then the label above travels with
every reading rather than a differentiation claim we have not earned.

### Secondary diagnostics

Two quantities are published beside the headline, deliberately **not** folded into it:

| Field                 | Definition        | Why it is secondary                                            |
| --------------------- | ----------------- | -------------------------------------------------------------- |
| Normalised share `W̃` | `W^P / (1 − 1/n)` | Depends on `n`. Disclosed rather than baked into the flagship. |
| Effective outcomes    | `1 / Σ p_k²`      | Reads as "the equivalent number of equally likely outcomes".   |

### Auditability

The headline satisfies a Pythagorean identity against its own legs, published and checked at
runtime:

```
MIDVOL-R² = Σ_k (FBV-R_k)²
```

Every published record carries the per-leg values, so the headline can be re-derived from the same
page it appears on.

## 6. Worked example

A 2026-07-31 snapshot of the congressional balance-of-power partition, de-vigged:

| Outcome            | De-vigged price |
| ------------------ | --------------- |
| Senate D · House D | 0.4346          |
| Senate D · House R | 0.0132          |
| Senate R · House D | 0.4150          |
| Senate R · House R | 0.1318          |
| Other              | 0.0054          |

```
Σ p²  = 0.37868
W^P   = 1 − 0.37868 = 0.62132
FBV-R = 100 · √0.62132 = 78.8 points
```

Per-leg `FBV-R`: 49.6 · 11.4 · 49.3 · 33.8 · 7.3 points.
Pythagorean check: `√(49.57² + 11.41² + 49.27² + 33.83² + 7.33²) = 78.82` ✓

At 95 days to settlement under `clock-v1.0`, `Â(30) = 0.2293`, giving:

```
MIDVOL-30 = 100 · √(0.62132 × 0.2293) = 37.7 points
```

Secondary diagnostics: `W̃ = 0.777`, effective outcomes `= 2.64`.

## 7. Price inputs and de-vigging

Inputs are depth-weighted mid prices from the venue's order book, subject to the freshness and depth
gates in §8.

Raw prices across a partition do not sum to 1 – the difference is the venue's spread. We normalise
proportionally (`devig-proportional-v1`) so the vector sums to exactly 1.

Sensitivity to that choice is published rather than assumed away: against additive and power
alternatives, the observed spread at a 1.024 overround is about 0.6 points.

De-vigging is a **versioned methodology parameter, not a gate**. Changing it is a methodology change.

## 8. Publication gates – reject, never clamp

A value that fails a quality check is **withheld, not adjusted**. There is no clamping, no
smoothing, no carrying-forward of a stale number under a current timestamp. A withheld reading is
labelled as withheld, and the last published reading is labelled as last published.

Gates fall into six groups:

1. **Input freshness** – maximum snapshot age, and maximum skew across the legs of one record. Stale
   or mixed-snapshot legs never enter a single reading.
2. **Per-leg informativeness** – spread relative to the leg's own mid, absolute depth at touch, an
   impact test budgeted in headline points, and a check that the mid is not within one tick of 0 or 1
   (a leg that has effectively resolved carries no forward movement).
3. **Arbitrage bound** – across `n` separate binary markets the only no-arbitrage constraints are
   `Σ eff_bid ≤ 1 ≤ Σ eff_ask`. A breach of the buy-all bound rejects **when it is established
   at size** — a breach resting only on quotes below a published size floor is disclosed
   instead, because a dust order at the touch is not an executable edge. The sell-all side
   flags.
   Tolerance is `arb_tolerance_ticks` multiplied by the coarser of the coarsest leg's tick and a
   floor, `arb_tolerance_min` – a breach smaller than one tick is not expressible on the venue's own
   price grid, and the floor stops a venue reporting an implausibly fine tick from driving the gate
   to a resolution we have no reason to trust.
4. **Book-sum disclosure** – the pre-de-vig mid sum is compared against an overround band. Since
   `fbv-v1.2` this **discloses in both directions and never rejects**: across `n` separate markets a
   mid sum below 1 carries no arbitrage content, and gating on it withheld arbitrage-free books.
5. **Cross-book consistency** – the partition-implied marginal for a chamber is compared against the
   separately traded contract for that chamber. Divergence beyond tolerance flags; further
   divergence suspends. The implied correlation between chambers carries its own stability band.
6. **Numerical identity** – the de-vigged vector must sum to 1 within tolerance, and the Pythagorean
   identity must close. These catch our own arithmetic, not the venue's.

<Info>
  **Every gate parameter is published.** `GET /volatility/series` carries a `gates` block with each
  threshold – the family-level scalars, the per-check flag and suspend tolerances, and the
  points-squared tolerance the Pythagorean check actually applies. Any published gate status can
  therefore be re-derived from published numbers: if a reading is flagged, you can check the
  tolerance that flagged it.
</Info>

Two structural thresholds are fixed by the methodology rather than configured, and so are stated here
instead: a composite requires `n ≥ 3` outcomes, and it requires at least three legs passing the depth
test. Falling below either **withholds** the composite for that reading while the per-outcome records
continue.

Withholding is not retirement. A reading can be withheld and recover on the next one. Retirement is
permanent, requires the condition to persist across a sustained run of readings rather than a single
one, and is disclosed as its own publication state — see §9.

A flagged reading still publishes. Flagging discloses a condition; it does not suppress the value.
The distinction travels with the record.

## 9. Versioning, corrections and governance

**Versioning is prospective only.** A methodology or clock change applies from the moment it takes
effect. Published history is never restated, never back-filled, and never recomputed under a new
convention. Where a version boundary falls inside a chart, the line breaks and the new version is
named at the break.

**Corrections are appended, never rewritten.** If a published value was wrong, the correction is
published at the same instant with an incremented `revision`. The erroneous record stays exactly as
it was published. Consumers take the highest revision for a given instant.

**Methodology changes carry notice.** A change to a gate parameter, the tenor set, the de-vig
convention, the clock, or the estimator is a noticed change under the
[benchmark governance policy](/trust/benchmark-governance), recorded in the
[governance log](/trust/governance-log).

## 10. What this is not

Stating the boundaries plainly, because a number quoted without them will be misread:

* **Not a VIX-equivalent.** It is not annualised, and the scale is probability points, not percent.
  A reading of 37.6 and a VIX of 37.6 have nothing to do with each other.
* **Not directional.** It does not forecast which outcome wins, or which way prices move.
* **Not a confidence interval** for any single contract.
* **Not a forecast of realised movement under the real-world measure.** The budget is a
  pricing-measure quantity; the clock is fitted on realised release patterns. Treating the two as
  interchangeable is a working assumption, not a result.
* **Not investable.** Belief Volatility series are benchmark data products. There is no fund, no
  share class, and no money path behind them.

## 11. Reproducing a published value

Every published record is self-contained – it carries both inputs, so no external lookup is needed:

1. Take the de-vigged price vector from the record's per-leg fields.
2. Compute `W = Σ p_k(1 − p_k)`.
3. Take `Â(τ)` from the record's own `share` field for that tenor. The record carries the release
   share it was actually computed with, so a historical value re-derives under the curve that
   produced it rather than today's.
4. `FBV-τ = 100 · √(W · Â(τ))`.

The release-curve artifact itself – the full `Â` surface across every time-to-settlement, rather than
the single point a given record used – is not currently served at a public URL. That means published
values are reproducible, but a *forward* value for a date or tenor we have not published is not
independently computable. Making the artifact publicly downloadable per `clock_version` is tracked
work, not a claim we are making today.

Each record carries the `methodology_version`, `clock_version` and `devig_version` it was computed
under, so a historical value reproduces under the convention that produced it rather than today's.

## Further reading

* **Research paper** – the full derivation, prior art and empirical validation. Submitted; it will
  be linked here once it is live.
* [Benchmark governance](/trust/benchmark-governance) – how methodology changes are noticed.
* [Governance log](/trust/governance-log) – the dated record of every change.
* [MCP server](/data-access/mcp-server) – programmatic access.
