experimental index · compiled document · methodology-compiler/v1
Inverse Conflict Escalation Risk — compiled methodology
Over politics + elections, questions naming war, strike, invade…, read through the severity-weighted risk lens, taking the against side of the thesis "Armed conflict risk is resolving rather than escalating.", at horizon 1–365 days, priced across kalshi, gemini, forecastex, combined by two-sided-depth weights capped at 15%.
experimental class · conflict-deescalation-relief · spec v1 · schema worldview-spec/v1
| Spec digest | d25b59d11bc95577 |
| Methodology hash | b27346f80fad28de |
| Compiler | methodology-compiler/v1 |
| Compiled against | no settled history |
This document is generated from the spec object. Every parameter it prints is read from that object or from the engine constants the close ran under; nothing in it is hand-written, and it recompiles byte-for-byte from the same inputs forever.
1. The worldview
Over politics + elections, questions naming war, strike, invade…, read through the severity-weighted risk lens, taking the against side of the thesis "Armed conflict risk is resolving rather than escalating.", at horizon 1–365 days, priced across kalshi, gemini, forecastex, combined by two-sided-depth weights capped at 15%.
Thesis. Armed conflict risk is resolving rather than escalating.
Formal definition. The severity-weighted mean, over the conflict board, of the market-priced probability that each escalation event occurs — G = 100 * Sigma_j w_j s_j x_j / Sigma_j w_j s_j, with s_j drawn from the registered gpr-adapted/v1 rubric and x_j the ORIENTED value: a de-escalation market (ceasefire, peace deal, withdrawal, truce) is held NO, so a ceasefire priced at 78% enters as 22% of unresolved risk and carries the severity of the conflict it would end.
Stance. This reading takes the against side of the thesis. Stance is a whole-index flip and it composes with each member's own declared side by XOR, so a member declared on the same side as the stance is read from its plain venue YES mark and the double flip is arithmetic rather than a special case.
Evaluation rule: none, declared. There is no single resolution event for armed conflict risk is escalating, so the LEVEL is tracked for movement and is never scored as a resolved forecast (wet-logic §11.1). The constituents are scored individually against their own resolutions and roll up through the calibration cohort; the index itself does not pretend to be one falsifiable claim. A reading with no resolution event of its own may be tracked for movement and may never be scored as a resolved forecast (wet-logic §11.1); the constituents are scored individually.
Inverse thesis (wet-logic §6.1, mandatory). Armed conflict risk is escalating rather than resolving.
Invalidation conditions.
- The severity rubric changes — a rubric revision is a methodology change under consultation, and a level computed on one revision may not be compared with a level computed on another.
- The de-escalation half of the board stops listing, at which point the index reads only escalation questions and systematically overstates the risk it claims to measure.
- Weight coverage falls below the declared floor, at which point the index prints nothing rather than a number carried by whichever heavy names still quote.
What the published number is NOT.
- It is not the probability that the thesis holds. It is a weighted reading of what a board of separate markets is pricing (wet-logic §6.5). Several events do not combine into one probability by averaging them, and this number never claims they do.
- It is not a financial return, and not a performance claim. No position is taken, no order is routed and no custody is held.
- It is not advice. Where accuracy is reported anywhere on this desk it is reported as calibration — how well priced probabilities matched outcomes — never as profit.
2. Inverse twin
Twin: conflict-escalation-risk — minted at the same moment, over an identical universe with identical base weights, caps, collapses and rebalance schedule, with every side flipped and the thesis replaced by the declared inverse thesis. The transform is an involution: the twin of the twin is this index.
Gauge space — an exact complement. Under one canonical consolidated qⱼ per market and shared normalized weights,
Ḡ_t = 100 · Σⱼ wⱼ (1 − x_jt) = 100 − G_t
exactly, at every print, on the mid basis. Both documents print the measured daily residual
ρ_t = G_t + Ḡ_t − 100, |ρ_t| ≤ 0.000001
in their worked-example sections (§14). It is printed so that the identity is verified on the page rather than asserted there: a residual beyond the rounding bound exposes a basis or roster error between the two series — different weights, a member in one and not the other, a side that did not flip.
Level space — no complement, by construction. Chained twins chain independently: each incepts at 100 with its own divisor struck at its own first governed close, and rebalances rechain each divisor separately. A chained level is a path object — a product of period returns — and returns of x and 1 − x are not complementary, so
L_t + L̄_t ≠ constant
and Ḻ is never derived as 200 − L. Twins are complementary in gauge space, not in level space, and no statement in this document may imply otherwise.
The Friction Gauge. Under side-executable pricing a YES entry strikes at aᵞ and the twin's NO entry at 1 − bᵞ, so per leg the pair sums to 1 + σⱼ where σⱼ = aᵞⱼ − bᵞⱼ is the spread. Hence, exactly:
G^exec_t + Ḡ^exec_t = 100 + Φ_t, Φ_t = 100 · Σⱼ wⱼ σ_jt
Φ — the capacity-weighted spread — is published as a data product in its own right. The gap between the twins is the market's friction, and it is disclosed rather than hidden as an embarrassment.
3. Universe and canonical events
The selector, verbatim as data. This is the canonical admission object — sorted, defaults
resolved, entity ids folded through literal/v1 — and it is the same bytes the admission
engine reads and the same bytes the spec digest is taken over. It is printed as data rather than described
in prose so that a reader can re-run the admission rather than reconstruct it.
{
"categories": [
"elections",
"politics"
],
"entities": [],
"excludeKeywords": [],
"keywords": [
"airstrike",
"annex",
"attack",
"blockade",
"ceasefire",
"china",
"conflict",
"coup",
"de-escalat",
"drone",
"escalat",
"gaza",
"hamas",
"hezbollah",
"hostage",
"hostage release",
"houthi",
"invade",
"invasion",
"iran",
"israel",
"military",
"missile",
"nato",
"north korea",
"nuclear",
"occupy",
"peace deal",
"peace talks",
"russia",
"sanction",
"strike",
"taiwan",
"troops",
"truce",
"ukraine",
"war",
"withdraw",
"world war",
"wwiii"
],
"minConstituents": 8,
"series": [],
"tags": [],
"venueWhitelist": []
}
Admission only. Nothing in the object above decides a side. Admission tests universe membership; side rules assign each member's dⱼ ∈ {−1, +1} afterwards (§6), and no side rule may ever eject a member. Narrowing a side rule re-orients; it cannot shrink the roster. A universe object carrying a side-bearing key is refused by name at load time, which makes the August 2026 incident — a side-rule narrowing that dropped "Will US withdraw from NATO by August 31?" out of a live index instead of re-orienting it, and had to be reverted — unrepresentable rather than merely fixed.
Canonical events, not venue listings. Members are canonical events: two venues quoting the same question
are one member, marked once and projected to every index that holds it. A duplicate canonical event in one
roster is refused outright (duplicate-event) — one question voting twice is the duplicate-exposure
defect wet-logic §19 forbids.
Mapping confidence. A cross-venue merge is formed either by an exact structural match on the parsed subject, relation, strike and settlement day, or by title similarity above the published confidence bar. A fuzzy merge below that bar is flagged low-confidence and carries its provenance onto the row; the rules-based approval leg (wet-logic §4.3) admits a structurally matched pair without a human review, and the human confirm gate applies to merges only.
No confirm-gate counts are published for this index yet, and none are invented here. They arrive on the first close row and this paragraph reads them from it.
No venue is admitted beyond the default set forecastex, gemini, kalshi. A whitelist entry is a
methodology decision that has to be written down; the absence of one is also a decision and is stated here
rather than left to be inferred.
4. Input data and pricing
The per-venue mark ladder. A member's venue mark is the consolidated mid when both sides of the book exist; failing that the recent last trade; failing that it is unmarkable and the member carries no price. It is never marked to zero. Marks are clamped to [0.01, 0.99] and taken from the venue of record — never mark-shopped across venues for a better number.
Consolidation as executed, stamped consolidation/prob-v1. Each member's price is a weighted mean
of the surviving venue mids, taken in probability space. The close rows stamp the policy version the close
ran under (consolidation/v1); the two describe the same executed pipeline from two angles and
both are printed so neither has to be inferred.
q_j = Σ_v (w_v · m_v) / Σ_v w_v, m_v = (bid_v + ask_v) / 2
w_v = (1 + 2·ln(1 + depth_v) + ln(1 + volume_v)) · tightness_v · e^(−Δt_v / λ)
tightness_v = max(0.05, 1 − spread_v / 0.1)
λ = 1,500 s
The depth term is inert, and has been on every published value. The close path supplies no
resting-depth figure to the consolidation — depth is passed as null for every venue quote on every
basis — so ln(1 + depth_v) evaluates to ln 1 = 0 and the doubled term contributes nothing.
The weight actually executed is therefore:
w_v = (1 + ln(1 + volume_v)) · tightness_v · e^(−Δt_v / λ)
The general form is printed above it because it is the expression the engine evaluates and the one a future close would run under if depth were ever supplied — but a third party reproducing a published number must use the reduced form, and a check against the general form with real depths will disagree. The disagreement is not small, and these figures are produced by running the consolidation twice rather than by being typed here. Two venues quoting 0.40/0.42 and 0.50/0.52 on equal lifetime volume and equal staleness consolidate to q = 0.4600 on the executed weight (shares 0.5000 / 0.5000); hand the same two books resting depths of 5,000 and 100 and the general form returns q = 0.4507 (shares 0.5927 / 0.4073) — 0.93 probability points, entirely from a term the engine has never had an input for.
Why the field is empty is a weighting decision rather than an oversight. One mapped venue publishes resting size at the touch and the others publish none, so populating it today would hand a doubled depth term to that venue and zero to the others, tilting every cross-venue consolidation toward it for a reason that is an artefact of which venue documents a size field. Wiring it in is a change to the weighting scheme: it needs the other venues measured first, and it arrives as a versioned change with its own notice and backtested impact, never as a quiet population of an already-printed term.
This says nothing about the weight basis in §8. That is a different depth: b_j = Σ_v min(depth^bid, depth^ask),
two-sided resting size near touch, served by the mark recorder's real ladders and reported per close as
observed / one-sided / unobserved counts. It is live. Flattening the two would tell a reader the weighting is
fabricated, which is false.
Cross-venue dispersion is preserved beside q_j, never folded inside it. The consolidated price answers "what is this worth"; the dispersion answers "how far apart are the venues about it", and one number cannot carry both questions.
The exclusion cascade, in the order it is evaluated. The venue-local guards run per quote, first match wins; the consensus trim runs afterwards, on what survived them.
| Refused as | Tier | Threshold in force | What it means |
|---|---|---|---|
no-two-sided-book |
A — no price exists | a bid and an ask are both required | there is no mid, so there is no price to include |
crossed-book |
A — no price exists | ask < bid | the book is inconsistent with itself; a mid taken across it is arithmetic, not a price |
spread-too-wide |
B — venue-local quality | ask − bid > 0.1 | a mid inside a book this wide is not a price anyone is defending. Excluded, never down-weighted — a bad price scaled down is still a bad price |
degenerate-price |
A — no price exists | mid not strictly inside (0, 1) | a mid at or beyond the bounds of probability is not a probability |
stale-beyond-horizon |
B — venue-local quality | age > 21,600 s (6 h) | past this age the quote is dropped outright rather than decayed toward zero |
thin-book-anomaly |
B — venue-local quality | |last − mid| > 0.15 while venue volume < 100 | a venue that printed a large move on trivial size has told us its book is not defended. Checked BEFORE weighting, so deep historical volume cannot launder it |
mad-outlier |
C — consensus | |mid − median| > 3 × MAD, and only where ≥ 3 venues survived the guards above | decided only by comparison with the other venues. Median absolute deviation, not standard deviation: with three or four venues one bad print moves a standard deviation enough to hide inside it |
The tiers are not decoration. A Tier A refusal is forced — no mid exists. A Tier B refusal is a judgement about what counts as a defended price, decided without looking at any other venue, which is what makes excluding it non-circular. Tier C is decided only by comparison with the other venues, which is right for a consolidated price and fatal for a measurement of disagreement — so any dispersion reading is frozen before the consensus trim runs and the trimmed venue is still inside it.
A member whose every venue quote is refused publishes no price and is counted, by reason, on the close row. Members priced from a single venue are flagged on every row.
Future methodology — declared, not in force
A log-odds aggregation is the declared migration target consolidation/logit-v2 and no published
value has ever been produced by it. It is printed here, inside a subsection whose heading says it is not in
force, because a thousand documents need one place that states what is coming; it appears nowhere else in this
document and a fixture enforces that.
p̃ = min(1−ε, max(ε, p)), z = ln( p̃ / (1 − p̃) )
ᾱ_jv = L · F · R · C, z̄_j = Σ_v α_jv z_jv / Σ_v α_jv, q_j = σ(z̄_j)
D_j = sqrt( Σ_v α_jv (z_jv − z̄_j)² / Σ_v α_jv ) (divergence, preserved beside q_j)
Until it ships, every document on this desk prints consolidation/prob-v1 and the arithmetic above
this subsection is the arithmetic that ran. A document that printed math the engine does not run is the defect
class this compiler exists to kill, so the two are separated by a heading rather than by a footnote.
5. Eligibility
Every threshold in force, with the published default beside it. Version eligibility/v1.
| Parameter | Published default | In force here | Source |
|---|---|---|---|
| Minimum trailing volume | 250 | 500 | per-spec |
| Maximum spread | 0.100 | 0.080 | per-spec |
| Price band — floor | 0.020 | 0.020 | published default |
| Price band — ceiling | 0.980 | 0.980 | published default |
| Shortest horizon (days) | 1 | 1 | published default |
| Longest horizon (days) | 730 | 730 | published default |
| Confirm gate enforced | no | no | published default |
| Admit reference-price settlement | no | no | published default |
| Constituent floor | 8 | 8 | per-spec |
| Resolution window (days) | — | 1 – 365 | per-spec horizon axis |
The overrides carry a written note, and this document does not compile without one. A parameter moved away from the published default without an explanation is a number no reader can challenge, so the compiler refuses a spec that overrides a threshold and does not name it in writing. The note as authored:
THE SPLIT IS THE POINT. lib/indices/registry.ts's
geopolitical-riskrule carries one list —inverseKeywords— that both ADMITS the de-escalation markets (a ceasefire market genuinely matches nowarkeyword, so without the list it is not in the index at all) and FLIPS them. Narrowing it to correct a sign therefore EJECTED members: in August 2026 a narrowing briefed as4 legs flipdroppedWill US withdraw from NATO by August 31?andIsrael withdraws from Lebanon by August 31, 2026?out of the index entirely, and was reverted. In this grammar the two jobs are two axes: the seven de-escalation terms appear inuniverse.keywords(where they keep admitting exactly what they admitted) AND insideRules.legacyInverseKeywords(where they keep flipping exactly what they flipped). That is whatfromLegacyRuledoes, and it is the only lossless carry-forward. SEVERITY AND ORIENTATION ARE INDEPENDENT AXES: a de-escalation market is not a low-severity market, it is the SAME conflict read from the other side, so it carries the severity of the war it would end. Getting that wrong understated the live 2026-08-05 WETGRI reading by 36% (20.046 vs 31.11). The eligibility overrides are tighter than the published defaults — 500 minimum volume against 250, an 8-cent maximum spread against 10 — because the conflict board is the deepest board WET indexes and there is no reason to admit its thinnest quotes into a severity-weighted average.
Resolution-source tiers. A member is admitted only where the settlement authority is one this desk can name. The tiers, in rank order:
| Rank | Tier | Label | Admitted |
|---|---|---|---|
| 1 | venue-discretion |
Venue discretion | no |
| 2 | major-outlet |
Major-outlet consensus | yes |
| 2 | reference-price |
Published reference price | yes |
| 3 | court |
Court or regulator ruling | yes |
| 4 | government |
Official data or an official act | yes |
A member whose settlement rests on the listing venue's own discretion is measuring the venue rather than the world, and is refused for that reason. Reference-price settlement is refused by default and admitted only where a spec declares it, because absent rules text means the settlement authority cannot be verified and failing closed is the only safe default when a price is about to be averaged into a published number.
Venue admission. At least one contributing venue must be CFTC-regulated, or named on this spec's venue whitelist (§3). Venues outside both may inform the consolidated price of an already-admitted member but can never be the sole basis for one.
What happens when the thresholds bite is not an abort. This desk publishes a graded ladder with a hard floor rather than a cliff, with this index's own κ_min = 95.00%; the full table, every threshold and the resulting published state are in §11.
6. Side selection and framing
Elected framing axis: severity — the market names an adverse instrument, and the side is the one on which the adverse outcome is the YES.
Orientation (wet-logic §6.3). Every formula in this document is stated and computed over the oriented value xⱼ, never the raw venue price qⱼ:
x_j = q_j when d_j = +1 (the member is held YES)
x_j = 1 − q_j when d_j = −1 (the member is held NO)
with the invariant that an increase in xⱼ always means stronger market support for the thesis. A mixed YES/NO index whose published formula read qⱼ would be publishing a formula the engine does not run.
Side is a declaration, never an admission filter. A member matching the universe is admitted with d = +1 by default; a side rule flips it to −1; no side rule ever ejects a member.
No alignment partition is declared, because the elected framing axis reads the market rather than a
declared partition. A contest ladder arriving in this universe with no partition to read is excluded from the
oriented gauge with the counted reason no-thesis-side rather than defaulted to YES.
Legacy orientation list, carried forward losslessly. ceasefire, de-escalat, hostage release, peace deal, peace talks, truce, withdraw
— these terms appear in universe.keywords as well, where they keep admitting exactly what they
admitted, and here, where they keep flipping exactly what they flipped. The split is the whole migration: one
list that both admitted and flipped is what made narrowing it eject members instead of re-orienting them.
Deprioritize ≠ delete.
The dead-zone rule. A member priced at or beyond 0.1 / 0.9 on the held side carries almost no information, whichever way it is priced. Dead-zone membership is invariant under the side choice — it is a property of the question, not of the holding — and a composition more than 50% dead on one side is refused at cultivation as one-sided-and-dead rather than published as a reading of a settled board.
No per-member side table is published yet, because this index has no settled history: no close row has been published for it yet, so every worked number below is stated as unavailable rather than invented. The section fills itself from the first published close and from nothing else.
Axis coverage is not yet measured for this index. It is published per close as the share of admitted members the elected axis could read; an unmeasured share is reported as unmeasured rather than as full.
7. Family collapse
Time-space collapse: ON. The dated legs of one question — the same subject at successive resolution dates — are grouped into a family and collapsed to ONE constituent by linear interpolation to a constant horizon of 90 days (this index's own value; the fleet default is 90):
x(τ) = x_a + (τ − t_a)/(t_b − t_a) · (x_b − x_a)
Clamped at both ends and never extrapolated. A target before the front cycle returns the front value; a target beyond the back cycle returns the back value. A made-up far point is worse than an honest flat one. The interpolation runs over the oriented legs: orientation is affine and monotone, so it commutes with both the interpolation and the clamp — which means the wrong order would produce the right number and would never be caught by a value moving. Doing it in the published order anyway is the point.
Rank-space collapse: OFF. No contest ladder in this universe is collapsed to an aligned mass; each admitted market is its own constituent. Where a mutually exclusive ladder does appear in a universe with this setting, its legs are individually admitted and individually weighted, and a reader should treat the resulting correlation between them as real rather than as an artefact.
8. Weighting
The basis.
b_j = Σ_v min(depth^bid_jv, depth^ask_jv)
Two-sided resting depth near touch — the lesser of the bid-side and ask-side visible resting size within the
published band of the best quote on that side, summed over venues. Side-symmetric by construction, so an
index holding a mix of YES and NO members weights them on one comparable basis. Unit: claim units of resting depth near touch — the lesser of the bid-side and ask-side visible resting size within the published band of the best quote on that side, summed over venues. One unit pays $1 on YES on every venue indexed. Never a dollar figure, and never an execution claim: W.E.T. handles no order fulfilment.
Basis version two-sided-resting-depth/v1.
Cap and redistribute, iterated to a fixpoint. No single member may exceed c = 15.00%; the excess above the cap is redistributed across the uncapped members and the procedure repeats until no member breaches it. Weights are then normalized, wⱼ = w̃ⱼ / Σ_k w̃_k.
The cap is enforced in EFFECTIVE space, which is the space the number is averaged over. A risk gauge averages over eⱼ = wⱼsⱼ / Σ(w·s), so capping wⱼ and multiplying severity in afterwards enforces the ceiling in a space no reader ever consumes. Measured on stored rows in August 2026: a capped depth top-1 printed exactly 15.00% beside an effective top-1 of 17.2%, and the page asserted the ceiling the published basket exceeded.
The degenerate fallback here is NOT equal weights. Equal effective weights would flatten severity entirely and turn the gauge into a plain mean of x — a formula this document does not publish. Where no valid capped vector exists the weights fall back to severity-tilted equal depth weights, eⱼ = sⱼ / Σs, which can and does exceed the cap; the row carries a written reason saying the ceiling is not enforced on that vector, and this document renders that reason rather than restating it.
Coverage. κ_t = Σ_{j priced} w_jt — the share of the published weight vector that actually carried a price today. This index's floor is κ_min = 95.00% and below it the index prints nothing at all (§11). κ is measured in the space the gauge publishes: on the effective weight vector eⱼ, because a coverage figure taken over a vector nobody consumes describes a number that was not published.
Concentration is published, not summarised away. HHI is Σ wⱼ² over the published vector and effective N is 1 / HHI: the count of equally-weighted members this weighting is worth. A roster of ninety names with an effective N of thirty is a thirty-name index that lists ninety, and the gap between those two counts is the thing a cap exists to bound.
No weighting report is published for this index yet. HHI, effective N and the concentration shares are read from a close row, never written beside one, and this index has no settled history to read.
9. Gauge
Declared family: risk. The published formula, stated over the oriented xⱼ:
G = 100 · Σ wⱼ sⱼ xⱼ / Σ wⱼ sⱼ (sⱼ from the named rubric)
Severity enters the numerator and the denominator, which makes this a severity-weighted mean rather than a severity-weighted sum. The distinction is load-bearing: a board of only mild markets all priced at 60% reads 60, not 12.
What the engine forms, and why it is not the vector above. The cap is applied to the COMPOSITE basis bⱼ·sⱼ, not to bⱼ (§8: the ceiling has to bind in the space the average is taken over). So the vector this index publishes is
eⱼ = cap-and-redistribute( bⱼ · sⱼ , c ), normalized to Σ e = 1 — §6's `e (full)` column
e^used_j = eⱼ / κ for a priced member, 0 otherwise — §6's `e (used)` column
and eⱼ ≠ wⱼsⱼ / Σ(w·s) whenever the cap binds, because capping bⱼ first and capping bⱼsⱼ are two different fixpoints. There is no published wⱼ column on a severity-weighted document for exactly that reason: the pre-severity capped vector is not a thing this engine computes, and printing one would be printing a number nothing runs.
The identity a reader reproduces from this page, over the e (used) and x columns and no
others:
G = 100 · Σ_{j priced} e^used_j x_j / Σ_{j priced} e^used_j
Every member of this close is printed above, so the identity closes over the rows on this page as they stand.
Severity is already inside those columns. Applying s to them a second time is the one misreading this section exists to prevent, and §14 measures what it would have cost on this index's own close rather than warning about it in the abstract. The class and the multiplier are published per member in §6 so the composite can be audited from the rubric table below, never so that they can be multiplied in again.
Self-inverse: no — a property of the formula, not a choice, and not authorable in the spec. Flipping every side maps G to 100 − G, so a twin is minted by default (§2).
The severity rubric: gpr-adapted/v1. Fixed, published and versioned; changeable only through the
methodology-change process and never by editorial discretion at compute time. Nothing in the rubric reads a
clock, a config file or an environment variable, and no caller can pass a multiplier in — because s enters a
published formula and the most obvious attack on a risk gauge is that its weights were chosen after seeing the
answer.
Lineage: Adapted from the eight-category taxonomy of the Geopolitical Risk index of Caldara & Iacoviello (Federal Reserve Board, "Measuring Geopolitical Risk", American Economic Review 2022) — their category structure and their threat/act ordering, over market prices rather than newspaper counts.
Table lives in: lib/indices/severity.ts — a rubric that copied another's table would say so here, and this one
does not: it re-exports the published table rather than restating a multiplier of its own.
| Class | s | Label | Adapted from | Scope |
|---|---|---|---|---|
act-war |
1.00 | Act of war | GPR "Beginning of War" + "Escalation of War" | A state-on-state armed conflict beginning, widening, or a named territory changing hands by force. The reference class the scale is anchored to. |
nuclear |
0.90 | Nuclear | GPR "Nuclear Threats" | Nuclear use, testing, or explicit deployment/alert changes. Weighted near the top even when only threatened, because the severity distribution has no comparable tail. |
act-terror |
0.85 | Act of terror | GPR "Terror Acts" | A realised mass-casualty attack by a non-state actor. |
act-military |
0.70 | Military action | GPR acts family, below declared war | Realised force short of a war beginning: airstrikes, incursions, blockades, naval interdiction, drone strikes, hostage seizure. |
threat-war |
0.50 | War threat | GPR "War Threats" | Explicit threat or credible imminence of armed conflict, including ultimatums and troop-movement deadlines, before any force is used. |
buildup |
0.40 | Military buildup | GPR "Military Buildups" | Mobilisation, force concentration, basing changes, major armament transfers. |
threat-terror |
0.35 | Terror threat | GPR "Terror Threats" | Credible threatened attack by a non-state actor, absent a realised event. |
sanctions |
0.30 | Economic coercion | GPR-adjacent; policy-uncertainty lineage (Baker–Bloom–Davis EPU) | Sanctions, export controls, asset seizure, tariffs imposed as geopolitical instruments. |
diplomatic |
0.20 | Diplomatic rupture | GPR-adjacent, below the threat tiers | Treaty withdrawal, expulsions, recognition changes, collapse of negotiations. |
Multipliers are ordinal, not cardinal. They encode a ranking between classes, never a claim that one outcome is exactly some number of units of anything. The ordering is the assertion; the spacing is a published convention.
A member the classifier could not read enters at multiplier 1 — the top of the scale — because a question nobody could classify is not discounted for being unreadable. A member carrying a class from a DIFFERENT rubric's table refuses the whole print: that is a vocabulary mix, and admitting it at 1 would publish one scale's answer under another scale's name.
De-escalation is an orientation, not a class. A market on the end of an adverse event is admitted, oriented 1 − q, and carries the severity of the event it would end. Giving it its own low multiplier would shrink the index every time the adverse outcome became less likely — when a collapsing settlement should raise the reading with the full weight of what it fails to stop.
10. Level and continuity
Continuity: chained. Event contracts resolve and vanish, and an index cannot jump when they do. Composition changes adjust the divisor, never the printed number:
V_t = Σ_j u_j m_jt, L_t = 100 · V_t / D_t, D_new = D_old · V_new / V_old
At a rebalance or a resolution the prior composition is valued at today's prices, so the divisor absorbs only the composition change and never a market move. The discontinuity at a rechain is 0.000000 by construction — that is what the divisor is for, and it is the property that makes a level comparable across a reconstitution when a spot reading is not.
Inception. The divisor is struck at the first governed close after mint, never from composition-time mids. A composition-time strike prices the basket at whatever the mids happened to be during the minting job — a moment nothing governs and nobody can reproduce — and every level in the series would inherit that arbitrary instant. There is no other inception rule and the grammar cannot express one.
Two numbers, and which one to quote. The gauge is the spot reading, recomputable from one close row's own members. The level is that gauge chained through the divisor, and it needs the divisor's whole history. They answer different questions and neither substitutes for the other.
No level is published yet. The divisor is struck at the first governed close after mint, so a newly minted index has a gauge and no level until that close runs.
11. Missing data and quality states
Three measured quantities, all printed on every close row.
κ_t = Σ_{j priced} w_jt (weight coverage)
π_t = |{ j : no price }| / |J_t| (missing-price COUNT share)
χ_t = |{ j : no two-sided basis }| / |J_t| (missing-basis count share)
κ and π are both required because they fail independently. κ catches the heavy members vanished; π catches the long tail vanished — a breadth failure that weight coverage hides completely while the top members still price.
The ladder, evaluated top-down, first match wins.
| # | Condition | State | Prints? |
|---|---|---|---|
| 1 | administrator action | paused |
no |
| 2 | κ_t < 95.00% (this index's floor) or π_t > 25.00% or fewer than 8 priced members | insufficient_data |
no — never a carried value |
| 3 | newest member mark older than 48 h | stale |
yes, badged — and no directional statement |
| 4 | π_t > 15.00% or χ_t > 50.00% | degraded |
yes, badged |
| 5 | κ_t < 98.00% or π_t > 5.00% or χ_t > 25.00% | limited |
yes, badged |
| 6 | otherwise | current |
yes |
Why a ladder and not a cliff. A single abort threshold makes a 5% day and a 19.9% day identical on the page, and then makes a 20.1% day identical to a total outage. That is the wrong shape for a number published every day, so the floor stays hard and everything above it is graded.
Rules that hold at every rung.
- Per-member absence sets availability A_jt = 0 and renormalizes the weight over the priced members, always disclosed (wet-logic §6.4). Renormalization is never silent: every member's full weight, used weight and availability are published, so a reader can re-derive the renormalization from the row.
- A missing depth basis degrades but never blocks. A member with a price and no two-sided book falls back to the observed mean basis within its cohort, disclosed. Losing the weight basis is a precision loss; losing the price is a truth loss; the ladder treats them differently on purpose, which is why χ never appears in the no-print rung.
- Q^idx_t = Σ_j w_jt Q_jt is published BESIDE the value, never inside it. A quality score folded into a level produces one number that answers neither question.
- The state is a published field on the close row, not a rendering decision. A reader consuming the JSON sees exactly what a reader of the page sees.
- π and χ thresholds are fleet-wide constants and change only under the methodology-change process; κ_min is per-index and is 95.00% here.
No close row exists yet, so no measured κ, π or χ is shown. The thresholds above are in force from the first close.
12. Sentinel and quarantine
The screen runs before the close, and the close refuses to run without it. Version
sentinel/v1. The rules:
volume-vs-movebook-depth-collapsedivergence-spikestale-mark-as-move
| Threshold | In force |
|---|---|
| large move | ≥ 0.15 in probability |
| undefended book | spread ≥ 0.1 AND ≥ 3× the prior spread |
| prior-spread floor | 0.005 — so a one-tick book does not make every widening infinite |
| depth collapse | depth_now / depth_prior ≤ 0.25 |
| divergence | ≥ 0.2 from the other venues' median on the same canonical event |
| divergence jump | ≥ 0.15 increase in that detachment since the prior snapshot |
| stale mark | 3 consecutive identical observations |
Quarantine is exclude-and-disclose. A quarantined input is dropped from the number and counted on the close row by rule. It is never silently dropped, and it is never left in with a caveat attached.
The screen observes anomalies and never asserts intent. No arrangement of a price tape can evidence a state of mind, so no output of this screen names a cause, and the vocabulary that would assert one is refused by the publishing layer rather than avoided by convention.
A rule that could not be evaluated is counted as unassessed, not as clear. An input nobody could check is not an input that passed, and a screen reporting only its hits would be claiming full coverage while running at a fraction of it.
No sentinel counts are published for this index yet. They arrive on the first close row and are read from it.
13. Governance and lifecycle
Class: experimental. Lifecycle state: experimental.
The standing class sits between the reserved top class — created only by human ratification under a formal consultation, and carrying its own reserved trust vocabulary that no document on this page may borrow — and the weekly slates. Its levels and its documents are public; its rows carry a spec digest and a methodology hash as flat stamps.
Published specs are immutable. "Never change a rule to produce a number" is structural here rather than aspirational: a published standing rule cannot change at all. Evolution is by succession — mint a successor spec, link it, retire the predecessor with notice. During the 28-day probation window an experimental spec may be re-minted in place with a version bump and a logged diff of every canonical field that moved; graduation freezes it.
Errata are not changes. A transcription error — a typo'd threshold that never matched the ratified proposal — is corrected under the restatement policy's existing input-error language: appended, disclosed, never silently edited. A methodology change is never an erratum.
Restatement and cessation. A published value is final unless it meets one of the narrow conditions in the restatement policy; corrections are appended, never edited in place. Cessation follows the cessation policy: 20 uncomputable days trigger a notice and a 30-day period, after which the series retires, its twin retires with it, and its history stays published permanently. See also methodology change and consultation, conflicts, data errors and complaints.
Hourly output, where it exists, is indicative and is labelled so on every surface. It carries no sentinel screen and it is never the governed print. Any surface showing an indicative value beside a governed one badges which is which.
Succession. None declared. This spec supersedes nothing and is superseded by nothing today.
The version block, stamped on this document and on every close row.
| Axis | Version |
|---|---|
| compiler | methodology-compiler/v1 |
| spec schema | worldview-spec/v1 |
| spec version | v1 |
| methodology hash recipe | methodology-hash/v1 |
| engine | wet-engine/v1 |
| gauge interpreter | spec-compute/v1 |
| weight basis | two-sided-resting-depth/v1 |
| consolidation policy | consolidation/v1 |
| eligibility | eligibility/v1 |
| quality | quality/v1 |
| sentinel | sentinel/v1 |
| entity resolution | literal/v1 |
| severity rubric | gpr-adapted/v1 |
14. Worked example and limitations
This index has no settled history: no close row has been published for it yet, so every worked number below is stated as unavailable rather than invented. The section fills itself from the first published close and from nothing else.
Limitations, generated from this spec rather than curated.
Single-venue exposure is not yet measured. The share of members priced by one venue only is published per close, and this index has none to read.
Indicative output is not governed output. Any hourly value carries no sentinel screen and is labelled indicative wherever it appears.
L + L̄ is not a constant. The twins are complementary in gauge space only; their levels chain independently and no statement here implies otherwise.
15. Disclaimer and reproducibility
Informational only. This document and the values it describes are data about what prediction markets are pricing. They are not advice, not a recommendation, and not a forecast issued by this desk.
No order routing, no custody, no execution. W.E.T. operates no venue and handles no order fulfilment. Any percentage quoted anywhere as an illustration is a hypothetical equal-notional percentage over the members described here, with no fees, no slippage and no fill assumption; it is arithmetic on published prices and it is not a return anyone received.
Not the probability that the thesis holds. Neither the gauge nor any level derived from it is the probability that the thesis is true or false. It is a weighted reading of separate markets pricing separate questions.
Multi-event statements use Fréchet–Hoeffding bounds, and nothing else. For any claim about several of these events occurring together, the only claim this desk makes is:
max( 0, Σ_{i=1..n} p_i − (n − 1) ) ≤ P(E_1 ∩ ... ∩ E_n) ≤ min_i p_i
Never a product of the individual probabilities, and never a directional joint claim. The events on one board are correlated by construction — they are drawn from one world — so a product understates a conjunction whenever they move together, which is most of the time and always in the direction that flatters the thesis. The compiler's prose guard refuses a document that states one.
Reproducibility.
| Stamp | Value |
|---|---|
| Spec digest | d25b59d11bc95577 |
| Methodology hash | b27346f80fad28de |
| Hash recipe | methodology-hash/v1 |
| Compiler | methodology-compiler/v1 |
| Consolidation stamp | consolidation/prob-v1 |
Both stamps are FNV-1a over a canonical serialization — two 32-bit lanes over the same bytes, concatenated to 16 hexadecimal characters, dependency-free so a third party can reproduce them without this code. The spec digest is taken over the axes that decide a number; the methodology hash is taken over those axes plus the thesis prose, the class and the twin link, because the thesis is what the number means. Both are carried on every close row, and the close job recompiles this document from the spec it executed and refuses to print on any mismatch — binding the document to the ledger rather than only to CI.
Maintained by Corbin V King. Spec digest d25b59d11bc95577 · methodology hash b27346f80fad28de. This page is regenerated from the spec on every build and is byte-identical to the document the close job recompiles before it prints.