← Back to blog
·5 min read·SettleRisk Team

Multi-Step Resolution: Markets with Compound Settlement Conditions

Deep Dive

Executive Summary

Some prediction markets resolve based on a single observable fact ("Did the Fed cut rates?"). Others resolve only when a chain of conditions all hold ("Did the Fed cut rates AND was the cut by 25bps AND was it announced at the scheduled FOMC?"). The second category is MULTI_STEP_RESOLUTION in SettleRisk's taxonomy. It carries 10 base points and surprising dispute risk: each additional condition multiplies the probability of at least one resolution-time ambiguity.

This post derives the math, walks through a worked example, and explains how to size around it.

Core Concept

A multi-step market with n conditions and per-condition dispute probability q has a compound dispute probability of:

p_compound = 1 - (1 - q) ** n

If each condition has a 5% dispute probability, three chained conditions take the compound dispute probability to:

1 - 0.95**3 = 1 - 0.857 = 14.3%

That is three times the per-condition rate. Four conditions reaches 18.5%; five reaches 22.6%. The relationship is roughly linear at low q but accelerates as q rises.

| Conditions | Per-cond q=2% | q=5% | q=10% | |-----------|---------------|------|-------| | 1 | 2.0% | 5.0% | 10.0% | | 2 | 4.0% | 9.8% | 19.0% | | 3 | 5.9% | 14.3% | 27.1% | | 4 | 7.8% | 18.5% | 34.4% | | 5 | 9.6% | 22.6% | 41.0% |

SettleRisk's MULTI_STEP_RESOLUTION driver fires when the LLM extractor identifies more than one chained condition in the rules text. The driver's points_contribution scales with n.

Worked Example

A Kalshi market on "Will the next Fed action be (a) a rate cut, (b) of 25bps, (c) announced at the scheduled FOMC meeting?" — three conditions chained.

from settlerisk import SettleRiskClient

client = SettleRiskClient(api_key="sk-...")
score = client.get_risk_score("kalshi", "fed-25bps-fomc-2026")

for d in score.drivers:
    if d.driver_type == "MULTI_STEP_RESOLUTION":
        print(f"Conditions detected: {d.metadata['condition_count']}")
        for i, cond in enumerate(d.metadata['conditions']):
            print(f"  {i+1}. {cond}")
Conditions detected: 3
  1. Fed cuts rates
  2. Cut magnitude == 25bps
  3. Announced at FOMC meeting (not intermeeting)

The score includes MULTI_STEP_RESOLUTION at 18 points (10 base + scaling for 3 conditions) plus driver contributions from other patterns. Overall this market scored 54 — HIGH tier — even though each individual condition is itself easy to observe.

TypeScript pattern for sizing:

import { SettleRiskClient } from "settlerisk";

const client = new SettleRiskClient({ apiKey: "sk-..." });
const score = await client.getRiskScore("kalshi", "fed-25bps-fomc-2026");

const multiStep = score.drivers.find((d) => d.driverType === "MULTI_STEP_RESOLUTION");
const conditionCount = multiStep?.metadata?.conditionCount ?? 1;

// Per-condition q ~ 5% as a baseline
const perCondQ = 0.05;
const compoundP = 1 - Math.pow(1 - perCondQ, conditionCount);
console.log(`Compound dispute probability: ${(compoundP * 100).toFixed(1)}%`);

// Cap position size proportionally
const baseExposure = 0.02;
const exposure = baseExposure * Math.pow(1 - compoundP, 2);
console.log(`Adjusted exposure cap: ${(exposure * 100).toFixed(3)}%`);

Implementation Notes

Conditions are AND, not OR. A market that resolves on (A) cut AND (B) at FOMC requires both. The compound probability formula above applies to AND chains. For OR chains, the formula is different (and typically lower risk).

Each condition gets its own micro-risk profile. SettleRisk decomposes the conditions and assigns sub-risk to each via the metadata.conditions field. Use this to identify which condition is the weak link.

Watch for hidden conditions. Many rule sets contain implicit conditions ("subject to platform discretion"). These don't count as conditions in the driver math but they do increase real-world dispute risk. Cross-check with AMBIGUOUS_WORDING and SUBJECTIVE_JUDGMENT.

| Pattern | Treatment | |---------|-----------| | Explicit AND chain | Apply compound formula | | Explicit OR chain | Min of per-condition q | | Mixed AND/OR | Compute per-clause then combine | | Hidden conditional escape | Treat as +1 implicit condition |

Quote-skip at five or more conditions. Empirically, markets with 5+ chained conditions have dispute rates that exceed venue economics. The pricing engine flags these with do_not_quote=true by default.

Failure Modes

1. Multiplying probabilities incorrectly. p_compound = q * n is wrong (linear approximation). 1 - (1-q)**n is right. The difference matters at higher q.

2. Treating conditions as independent. Some conditions are correlated. "Cut AND at FOMC" — the chance of a cut at a non-FOMC meeting is conditional on the chance of a cut at all. Use the joint distribution when you have one.

3. Skipping the conditions list. The driver metadata.conditions field is high-signal. A reviewer who only sees "MULTI_STEP_RESOLUTION: 18 pts" cannot evaluate quality.

4. Mixing OR and AND in one rule. Some markets resolve on "A or B but not C." Decomposing this requires careful boolean parsing. SettleRisk's extractor handles it, but human reviewers often miss the precedence.

5. Ignoring temporal sequencing. "X must happen BEFORE Y" adds a sequencing constraint on top of the AND. Treat as +1 condition for sizing purposes.

Checklist

  • [ ] Read metadata.conditions for every MULTI_STEP_RESOLUTION market
  • [ ] Apply the 1 - (1-q)**n compound formula, not the linear approximation
  • [ ] Cap position size proportionally to compound dispute probability
  • [ ] Quote-skip 5+ condition markets
  • [ ] Watch for hidden conditional-escape clauses
  • [ ] Persist condition decomposition for compliance

Sources + Further Reading

  • SettleRisk methodology — MULTI_STEP_RESOLUTION decomposition
  • Driver attribution post — how this combines with other drivers
  • Dispute probability post — per-condition q calibration
  • Probability Compounding in Sequential Events — Feller (1968)
  • Kalshi rules archives — empirical multi-step contract examples

Test multi-step decomposition on a real rule: /demo parses any rules text instantly.

Get weekly risk analysis in your inbox

Market risk scores, emerging dispute patterns, and settlement delay trends — delivered every Monday.