What (One-liner)
Maps geopolitical conflict rungs (1-99+) via lookup to stylized risk premium ranges + equity shock ranges + regional commodity exposure dictionaries. Scenario-analysis tool, not calibrated prediction.
How to use
Drag b0_escalation_v1 into Canvas, fill in rung (required, integer) + region (optional, 5 presets + 'generic' fallback). Outputs ladder_stage + risk_premium bps range + equity_shock % range + region commodity weights.
Typical usage:
rung=3, region=hormuz→ conventional stage, rp 80-180 bps mid 130, CL=F 35% / BZ=F 25% / NG=F 15%rung=12, region=black_sea→ nuclear_rhetoric, rp 350-600 bps, ZW=F 25% / ZC=F 15% / CL=F 10%
Core formulas
_LADDER_STAGES lookup:
( 1- 5) → conventional rp 80-180 bps eq (-3, +2)%
( 6-10) → hybrid_asymmetric rp 180-350 eq (-8, +4)
(11-15) → nuclear_rhetoric rp 350-600 eq (-12, +5)
(16-99) → tactical_nuclear_extreme rp 600-1200 eq (-35, +10)
other → unknown rp 0-100 eq (-5, +5)
REGION_COMMODITY lookup:
hormuz → {CL=F:0.35, BZ=F:0.25, NG=F:0.15}
red_sea → {CL=F:0.12, BZ=F:0.10, shipping_cost_index:0.40}
black_sea → {ZW=F:0.25, ZC=F:0.15, CL=F:0.10}
taiwan_strait→ {SOXX:0.35, EWT:0.20, CL=F:0.10}
generic → {GLD:0.20, TLT:0.15, SPY:0.15}Region matching is case-insensitive + spaces→underscores normalization. Unknown region → generic.
Assumptions & applicability
Assumptions: 4-bucket stylized ladder + 5-region preset + bps/pct ranges are internal calibration + interval inclusive boundaries.
Applicable: Geopolitical event what-if, cross-asset narrative feed, teaching demo.
Not Applicable: Real-time nowcast, precise point estimates, fine-grained geographies not in the preset region list.
Known limitations
- 4 buckets are a coarse simplification of Kahn's 44-rung ladder
- 5 region presets (others → generic fallback)
- bps / pct range has no external benchmark verification
- rung > 99 safety rail falls back to 'unknown' (not 'tactical_nuclear_extreme' extrapolation) — users must understand this convention
- commodity_exposure_weights sum < 1 (remainder generic) — not portfolio weights
- region is dict lookup (no fuzzy match)
References
Kahn (1965) On Escalation original ladder framework + Freedman (2013) modern review + Pangura 2026-03 internal calibration notes (not peer reviewed).
Golden Test
tests/golden/fixtures/tier2/b0_escalation/, 1e-12 tolerance (exact lookup + integer arithmetic). 7 tests:
matches_reference— 10 scenario × (4 bucket + 5 region + 2 boundary + 2 out-of-range) byte equalitydeterminism— 10 reruns byte-identicalregion_case_insensitive—Hormuz/HORMUZ/hormuzequivalentspace_normalized—red sea→red_seaautomaticunknown_region_falls_to_generic— safety railbucket_boundaries— rung 5/6, 10/11, 15/16, 99/100 boundary inclusive / exclusive semantics lockedout_of_range_is_unknown— rung=0 / <0 / >99 → 'unknown' (not extrapolation)
Reference verbatim duplicates both lookup tables → any Pangura constant drift will fail this golden, forcing reviewer to sync update.
Changelog
- 1.0.0 (2026-04-20) — First Active (Tier 2 batch 2, rule-based scenario pilot)

