Skip to content

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

  1. 4 buckets are a coarse simplification of Kahn's 44-rung ladder
  2. 5 region presets (others → generic fallback)
  3. bps / pct range has no external benchmark verification
  4. rung > 99 safety rail falls back to 'unknown' (not 'tactical_nuclear_extreme' extrapolation) — users must understand this convention
  5. commodity_exposure_weights sum < 1 (remainder generic) — not portfolio weights
  6. 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 equality
  • determinism — 10 reruns byte-identical
  • region_case_insensitiveHormuz / HORMUZ / hormuz equivalent
  • space_normalizedred seared_sea automatic
  • unknown_region_falls_to_generic — safety rail
  • bucket_boundaries — rung 5/6, 10/11, 15/16, 99/100 boundary inclusive / exclusive semantics locked
  • out_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)

Verifiable intelligence for the decisions that demand scrutiny.