Files
worldmonitor/scripts/shared/country-port-clusters.json
Elie Habib 6e401ad02f feat(supply-chain): Global Shipping Intelligence — Sprint 0 + Sprint 1 (#2870)
* feat(supply-chain): Sprint 0 — chokepoint registry, HS2 sectors, war_risk_tier

- src/config/chokepoint-registry.ts: single source of truth for all 13
  canonical chokepoints with displayName, relayName, portwatchName,
  corridorRiskName, baselineId, shockModelSupported, routeIds, lat/lon
- src/config/hs2-sectors.ts: static dictionary for all 99 HS2 chapters
  with category, shockModelSupported (true only for HS27), cargoType
- server/worldmonitor/supply-chain/v1/_chokepoint-ids.ts: migrated to
  derive CANONICAL_CHOKEPOINTS from chokepoint-registry; no data duplication
- src/config/geo.ts + src/types/index.ts: added chokepointId field to
  StrategicWaterway interface and all 13 STRATEGIC_WATERWAYS entries
- src/components/MapPopup.ts: switched chokepoint matching from fragile
  name.toLowerCase() to direct chokepointId === id comparison
- server/worldmonitor/intelligence/v1/_shock-compute.ts: migrated from old
  IDs (hormuz/malacca/babelm) to canonical IDs (hormuz_strait/malacca_strait/
  bab_el_mandeb); same for CHOKEPOINT_LNG_EXPOSURE
- proto/worldmonitor/supply_chain/v1/supply_chain_data.proto: added
  WarRiskTier enum + war_risk_tier field (field 16) on ChokepointInfo
- get-chokepoint-status.ts: populates warRiskTier from ChokepointConfig.threatLevel
  via new threatLevelToWarRiskTier() helper (FREE field, no PRO gate)

* feat(supply-chain): Sprint 1 — country chokepoint exposure index + sector ring

S1.1: scripts/shared/country-port-clusters.json
  ~130 country → {nearestRouteIds, coastSide} mappings derived from trade route
  waypoints; covers all 6 seeded Comtrade reporters plus major trading nations.

S1.2: scripts/seed-hs2-chokepoint-exposure.mjs
  Daily cron seeder. Pure computation — reads country-port-clusters.json,
  scores each country against CHOKEPOINT_REGISTRY route overlap, writes
  supply-chain:exposure:{iso2}:{hs2}:v1 keys + seed-meta (24h TTL).

S1.3: RPC get-country-chokepoint-index (PRO-gated, request-varying)
  - proto: GetCountryChokepointIndexRequest/Response + ChokepointExposureEntry
  - handler: isCallerPremium gate; cachedFetchJson 24h; on-demand for any iso2
  - cache-keys.ts: CHOKEPOINT_EXPOSURE_KEY(iso2, hs2) constant
  - health.js: chokepointExposure SEED_META entry (48h threshold)
  - gateway.ts: slow-browser cache tier
  - service client: fetchCountryChokepointIndex() exported

S1.4: Chokepoint popup HS2 sector ring chart (PRO-gated)
  Static trade-sector breakdown (IEA/UNCTAD estimates) per 9 major chokepoints.
  SVG donut ring + legend shown for PRO users; blurred lockout + gate-hit
  analytics for free users. Wired into renderWaterwayPopup().

🤖 Generated with Claude Sonnet 4.6 via Claude Code (https://claude.com/claude-code) + Compound Engineering v2.49.0

Co-Authored-By: Claude Sonnet 4.6 (200K context) <noreply@anthropic.com>

* fix(tests): update energy-shock-v2 tests to use canonical chokepoint IDs

CHOKEPOINT_EXPOSURE and CHOKEPOINT_LNG_EXPOSURE keys were migrated from
short IDs (hormuz, malacca, babelm) to canonical registry IDs
(hormuz_strait, malacca_strait, bab_el_mandeb) in Sprint 0.
Test fixtures were not updated at the time; fix them now.

* fix(tests): update energy-shock-seed chokepoint ID to canonical form

VALID_CHOKEPOINTS changed to canonical IDs in Sprint 0; the seed test
that checks valid IDs was not updated alongside it.

* fix(cache-keys): reword JSDoc comment to avoid confusing bootstrap test regex

The comment "NOT in BOOTSTRAP_CACHE_KEYS" caused the bootstrap.test.mjs
regex to match the comment rather than the actual export declaration,
resulting in 0 entries found. Rephrase to "excluded from bootstrap".

* fix(supply-chain): address P1 review findings for chokepoint exposure index

- Add get-country-chokepoint-index to PREMIUM_RPC_PATHS (CDN bypass)
- Validate iso2/hs2 params before Redis key construction (cache injection)
- Fix seeder TTL to 172800s (2× interval) and extend TTL on skipped lock
- Fix CHOKEPOINT_EXPOSURE_SEED_META_KEY to match seeder write key
- Render placeholder sectors behind blur gate (DOM data leakage)
- Document get-country-chokepoint-index in widget agent system prompts

* fix(lint): resolve Biome CI failures

- Add biome.json overrides to silence noVar in HTML inline scripts,
  disable linting for public/ vendor/build artifacts and pro-test/
- Remove duplicate NG and MW keys from country-port-clusters.json
- Use import attributes (with) instead of deprecated assert syntax

* fix(build): drop JSON import attribute — esbuild rejects `with` syntax

---------

Co-authored-by: Claude Sonnet 4.6 (200K context) <noreply@anthropic.com>
2026-04-09 17:06:03 +04:00

179 lines
15 KiB
JSON

{
"_comment": "Country port cluster config for HS2 chokepoint exposure seeding. Maps iso2 -> { nearestRouteIds, coastSide }. coastSide: 'atlantic'|'pacific'|'indian'|'med'|'landlocked'|'multi'. nearestRouteIds are TRADE_ROUTES.id values from src/config/trade-routes.ts.",
"US": { "nearestRouteIds": ["china-us-west", "china-us-east-suez", "china-us-east-panama", "transatlantic", "us-europe-lng"], "coastSide": "multi" },
"CN": { "nearestRouteIds": ["china-europe-suez", "china-us-west", "china-us-east-suez", "china-us-east-panama", "gulf-asia-oil", "qatar-asia-lng", "intra-asia-container", "china-africa", "cpec-route"], "coastSide": "pacific" },
"RU": { "nearestRouteIds": ["russia-med-oil"], "coastSide": "multi" },
"IR": { "nearestRouteIds": ["gulf-europe-oil", "gulf-asia-oil"], "coastSide": "indian" },
"IN": { "nearestRouteIds": ["india-europe", "india-se-asia", "gulf-asia-oil"], "coastSide": "indian" },
"TW": { "nearestRouteIds": ["china-us-west", "intra-asia-container"], "coastSide": "pacific" },
"JP": { "nearestRouteIds": ["gulf-asia-oil", "qatar-asia-lng", "intra-asia-container"], "coastSide": "pacific" },
"KR": { "nearestRouteIds": ["gulf-asia-oil", "qatar-asia-lng", "intra-asia-container"], "coastSide": "pacific" },
"DE": { "nearestRouteIds": ["china-europe-suez", "asia-europe-cape", "transatlantic"], "coastSide": "atlantic" },
"GB": { "nearestRouteIds": ["china-europe-suez", "transatlantic", "us-europe-lng"], "coastSide": "atlantic" },
"FR": { "nearestRouteIds": ["china-europe-suez", "transatlantic", "us-europe-lng"], "coastSide": "atlantic" },
"IT": { "nearestRouteIds": ["china-europe-suez", "gulf-europe-oil"], "coastSide": "med" },
"ES": { "nearestRouteIds": ["china-europe-suez", "singapore-med", "transatlantic"], "coastSide": "multi" },
"NL": { "nearestRouteIds": ["china-europe-suez", "gulf-europe-oil", "transatlantic"], "coastSide": "atlantic" },
"BE": { "nearestRouteIds": ["china-europe-suez", "transatlantic"], "coastSide": "atlantic" },
"PL": { "nearestRouteIds": ["china-europe-suez", "transatlantic"], "coastSide": "atlantic" },
"SE": { "nearestRouteIds": ["china-europe-suez", "transatlantic"], "coastSide": "atlantic" },
"NO": { "nearestRouteIds": ["transatlantic"], "coastSide": "atlantic" },
"DK": { "nearestRouteIds": ["china-europe-suez", "transatlantic"], "coastSide": "atlantic" },
"FI": { "nearestRouteIds": ["china-europe-suez"], "coastSide": "atlantic" },
"TR": { "nearestRouteIds": ["russia-med-oil", "gulf-europe-oil"], "coastSide": "med" },
"GR": { "nearestRouteIds": ["china-europe-suez", "gulf-europe-oil"], "coastSide": "med" },
"PT": { "nearestRouteIds": ["china-europe-suez", "transatlantic"], "coastSide": "atlantic" },
"SA": { "nearestRouteIds": ["gulf-europe-oil", "gulf-asia-oil"], "coastSide": "indian" },
"AE": { "nearestRouteIds": ["gulf-europe-oil", "gulf-asia-oil"], "coastSide": "indian" },
"KW": { "nearestRouteIds": ["gulf-europe-oil", "gulf-asia-oil"], "coastSide": "indian" },
"IQ": { "nearestRouteIds": ["gulf-europe-oil"], "coastSide": "indian" },
"QA": { "nearestRouteIds": ["qatar-europe-lng", "qatar-asia-lng"], "coastSide": "indian" },
"EG": { "nearestRouteIds": ["china-europe-suez", "gulf-europe-oil"], "coastSide": "med" },
"ZA": { "nearestRouteIds": ["brazil-china-bulk", "asia-europe-cape", "gulf-americas-cape"], "coastSide": "multi" },
"BR": { "nearestRouteIds": ["brazil-china-bulk", "transatlantic"], "coastSide": "atlantic" },
"AR": { "nearestRouteIds": ["transatlantic"], "coastSide": "atlantic" },
"MX": { "nearestRouteIds": ["china-us-west", "panama-transit"], "coastSide": "multi" },
"CA": { "nearestRouteIds": ["transatlantic", "china-us-west"], "coastSide": "multi" },
"AU": { "nearestRouteIds": ["brazil-china-bulk", "gulf-asia-oil"], "coastSide": "multi" },
"NZ": { "nearestRouteIds": ["brazil-china-bulk"], "coastSide": "pacific" },
"SG": { "nearestRouteIds": ["gulf-asia-oil", "china-europe-suez", "singapore-med"], "coastSide": "indian" },
"MY": { "nearestRouteIds": ["gulf-asia-oil", "china-europe-suez"], "coastSide": "indian" },
"ID": { "nearestRouteIds": ["china-europe-suez", "gulf-asia-oil"], "coastSide": "multi" },
"TH": { "nearestRouteIds": ["gulf-asia-oil", "intra-asia-container"], "coastSide": "indian" },
"VN": { "nearestRouteIds": ["intra-asia-container", "china-us-west"], "coastSide": "pacific" },
"PH": { "nearestRouteIds": ["intra-asia-container", "china-us-west"], "coastSide": "pacific" },
"PK": { "nearestRouteIds": ["cpec-route", "india-se-asia"], "coastSide": "indian" },
"BD": { "nearestRouteIds": ["india-se-asia", "china-europe-suez"], "coastSide": "indian" },
"LK": { "nearestRouteIds": ["india-se-asia", "china-europe-suez"], "coastSide": "indian" },
"NG": { "nearestRouteIds": ["china-africa", "transatlantic"], "coastSide": "atlantic" },
"GH": { "nearestRouteIds": ["china-africa", "transatlantic"], "coastSide": "atlantic" },
"CI": { "nearestRouteIds": ["china-africa"], "coastSide": "atlantic" },
"SN": { "nearestRouteIds": ["china-africa", "transatlantic"], "coastSide": "atlantic" },
"TZ": { "nearestRouteIds": ["china-africa", "india-se-asia"], "coastSide": "indian" },
"KE": { "nearestRouteIds": ["china-africa", "india-se-asia"], "coastSide": "indian" },
"ET": { "nearestRouteIds": ["india-se-asia", "gulf-europe-oil"], "coastSide": "landlocked" },
"MZ": { "nearestRouteIds": ["brazil-china-bulk", "asia-europe-cape"], "coastSide": "indian" },
"AO": { "nearestRouteIds": ["brazil-china-bulk", "transatlantic"], "coastSide": "atlantic" },
"MA": { "nearestRouteIds": ["china-europe-suez", "transatlantic"], "coastSide": "multi" },
"DZ": { "nearestRouteIds": ["china-europe-suez", "transatlantic"], "coastSide": "med" },
"TN": { "nearestRouteIds": ["china-europe-suez"], "coastSide": "med" },
"LY": { "nearestRouteIds": ["china-europe-suez"], "coastSide": "med" },
"IL": { "nearestRouteIds": ["gulf-europe-oil", "china-europe-suez"], "coastSide": "med" },
"JO": { "nearestRouteIds": ["gulf-europe-oil"], "coastSide": "indian" },
"LB": { "nearestRouteIds": ["gulf-europe-oil"], "coastSide": "med" },
"SY": { "nearestRouteIds": ["russia-med-oil"], "coastSide": "med" },
"OM": { "nearestRouteIds": ["gulf-asia-oil", "gulf-europe-oil"], "coastSide": "indian" },
"YE": { "nearestRouteIds": ["gulf-europe-oil"], "coastSide": "indian" },
"UA": { "nearestRouteIds": ["russia-med-oil"], "coastSide": "multi" },
"RO": { "nearestRouteIds": ["russia-med-oil", "china-europe-suez"], "coastSide": "multi" },
"BG": { "nearestRouteIds": ["russia-med-oil"], "coastSide": "multi" },
"HR": { "nearestRouteIds": ["china-europe-suez"], "coastSide": "med" },
"RS": { "nearestRouteIds": ["russia-med-oil"], "coastSide": "landlocked" },
"AT": { "nearestRouteIds": ["china-europe-suez"], "coastSide": "landlocked" },
"HU": { "nearestRouteIds": ["china-europe-suez"], "coastSide": "landlocked" },
"CZ": { "nearestRouteIds": ["china-europe-suez"], "coastSide": "landlocked" },
"SK": { "nearestRouteIds": ["china-europe-suez"], "coastSide": "landlocked" },
"CH": { "nearestRouteIds": ["china-europe-suez"], "coastSide": "landlocked" },
"CL": { "nearestRouteIds": ["panama-transit", "brazil-china-bulk"], "coastSide": "pacific" },
"PE": { "nearestRouteIds": ["panama-transit"], "coastSide": "pacific" },
"CO": { "nearestRouteIds": ["panama-transit", "transatlantic"], "coastSide": "multi" },
"VE": { "nearestRouteIds": ["transatlantic"], "coastSide": "atlantic" },
"EC": { "nearestRouteIds": ["panama-transit"], "coastSide": "pacific" },
"BO": { "nearestRouteIds": ["brazil-china-bulk"], "coastSide": "landlocked" },
"PY": { "nearestRouteIds": ["brazil-china-bulk"], "coastSide": "landlocked" },
"UY": { "nearestRouteIds": ["transatlantic", "brazil-china-bulk"], "coastSide": "atlantic" },
"KZ": { "nearestRouteIds": ["russia-med-oil"], "coastSide": "landlocked" },
"UZ": { "nearestRouteIds": ["cpec-route"], "coastSide": "landlocked" },
"AF": { "nearestRouteIds": ["cpec-route"], "coastSide": "landlocked" },
"MM": { "nearestRouteIds": ["india-se-asia", "china-africa"], "coastSide": "indian" },
"KH": { "nearestRouteIds": ["intra-asia-container"], "coastSide": "pacific" },
"LA": { "nearestRouteIds": ["intra-asia-container"], "coastSide": "landlocked" },
"MN": { "nearestRouteIds": ["china-us-west"], "coastSide": "landlocked" },
"NP": { "nearestRouteIds": ["india-se-asia"], "coastSide": "landlocked" },
"HK": { "nearestRouteIds": ["china-us-west", "intra-asia-container"], "coastSide": "pacific" },
"MO": { "nearestRouteIds": ["china-us-west"], "coastSide": "pacific" },
"ZW": { "nearestRouteIds": ["brazil-china-bulk", "asia-europe-cape"], "coastSide": "landlocked" },
"ZM": { "nearestRouteIds": ["brazil-china-bulk"], "coastSide": "landlocked" },
"SD": { "nearestRouteIds": ["gulf-europe-oil", "india-se-asia"], "coastSide": "multi" },
"SS": { "nearestRouteIds": ["china-africa"], "coastSide": "landlocked" },
"CD": { "nearestRouteIds": ["china-africa"], "coastSide": "atlantic" },
"CG": { "nearestRouteIds": ["china-africa"], "coastSide": "atlantic" },
"CM": { "nearestRouteIds": ["china-africa"], "coastSide": "atlantic" },
"GA": { "nearestRouteIds": ["china-africa"], "coastSide": "atlantic" },
"GQ": { "nearestRouteIds": ["china-africa"], "coastSide": "atlantic" },
"CF": { "nearestRouteIds": ["china-africa"], "coastSide": "landlocked" },
"TD": { "nearestRouteIds": ["china-africa"], "coastSide": "landlocked" },
"NE": { "nearestRouteIds": ["china-africa"], "coastSide": "landlocked" },
"ML": { "nearestRouteIds": ["china-africa"], "coastSide": "landlocked" },
"BF": { "nearestRouteIds": ["china-africa"], "coastSide": "landlocked" },
"GN": { "nearestRouteIds": ["china-africa"], "coastSide": "atlantic" },
"GW": { "nearestRouteIds": ["china-africa"], "coastSide": "atlantic" },
"SL": { "nearestRouteIds": ["china-africa"], "coastSide": "atlantic" },
"LR": { "nearestRouteIds": ["china-africa"], "coastSide": "atlantic" },
"BJ": { "nearestRouteIds": ["china-africa"], "coastSide": "atlantic" },
"TG": { "nearestRouteIds": ["china-africa"], "coastSide": "atlantic" },
"MR": { "nearestRouteIds": ["china-africa", "transatlantic"], "coastSide": "atlantic" },
"SO": { "nearestRouteIds": ["india-se-asia", "gulf-europe-oil"], "coastSide": "indian" },
"DJ": { "nearestRouteIds": ["india-se-asia", "gulf-europe-oil"], "coastSide": "indian" },
"ER": { "nearestRouteIds": ["gulf-europe-oil"], "coastSide": "indian" },
"MG": { "nearestRouteIds": ["asia-europe-cape", "brazil-china-bulk"], "coastSide": "indian" },
"MW": { "nearestRouteIds": ["brazil-china-bulk"], "coastSide": "landlocked" },
"UG": { "nearestRouteIds": ["china-africa"], "coastSide": "landlocked" },
"RW": { "nearestRouteIds": ["china-africa"], "coastSide": "landlocked" },
"BI": { "nearestRouteIds": ["china-africa"], "coastSide": "landlocked" },
"NA": { "nearestRouteIds": ["asia-europe-cape", "brazil-china-bulk"], "coastSide": "atlantic" },
"BW": { "nearestRouteIds": ["asia-europe-cape"], "coastSide": "landlocked" },
"SZ": { "nearestRouteIds": ["asia-europe-cape"], "coastSide": "landlocked" },
"LS": { "nearestRouteIds": ["asia-europe-cape"], "coastSide": "landlocked" },
"MU": { "nearestRouteIds": ["asia-europe-cape", "india-se-asia"], "coastSide": "indian" },
"SC": { "nearestRouteIds": ["india-se-asia"], "coastSide": "indian" },
"KM": { "nearestRouteIds": ["india-se-asia"], "coastSide": "indian" },
"CV": { "nearestRouteIds": ["transatlantic"], "coastSide": "atlantic" },
"ST": { "nearestRouteIds": ["china-africa"], "coastSide": "atlantic" },
"MV": { "nearestRouteIds": ["india-se-asia"], "coastSide": "indian" },
"GE": { "nearestRouteIds": ["russia-med-oil"], "coastSide": "multi" },
"AM": { "nearestRouteIds": ["russia-med-oil"], "coastSide": "landlocked" },
"AZ": { "nearestRouteIds": ["russia-med-oil"], "coastSide": "landlocked" },
"TM": { "nearestRouteIds": ["cpec-route"], "coastSide": "landlocked" },
"TJ": { "nearestRouteIds": ["cpec-route"], "coastSide": "landlocked" },
"KG": { "nearestRouteIds": ["cpec-route"], "coastSide": "landlocked" },
"BY": { "nearestRouteIds": ["russia-med-oil", "china-europe-suez"], "coastSide": "landlocked" },
"MD": { "nearestRouteIds": ["russia-med-oil"], "coastSide": "landlocked" },
"LT": { "nearestRouteIds": ["china-europe-suez", "transatlantic"], "coastSide": "atlantic" },
"LV": { "nearestRouteIds": ["china-europe-suez", "transatlantic"], "coastSide": "atlantic" },
"EE": { "nearestRouteIds": ["china-europe-suez", "transatlantic"], "coastSide": "atlantic" },
"IE": { "nearestRouteIds": ["transatlantic", "us-europe-lng"], "coastSide": "atlantic" },
"IS": { "nearestRouteIds": ["transatlantic"], "coastSide": "atlantic" },
"LU": { "nearestRouteIds": ["china-europe-suez", "transatlantic"], "coastSide": "landlocked" },
"MT": { "nearestRouteIds": ["china-europe-suez", "gulf-europe-oil"], "coastSide": "med" },
"CY": { "nearestRouteIds": ["china-europe-suez", "gulf-europe-oil"], "coastSide": "med" },
"SI": { "nearestRouteIds": ["china-europe-suez"], "coastSide": "med" },
"AL": { "nearestRouteIds": ["china-europe-suez"], "coastSide": "med" },
"BA": { "nearestRouteIds": ["china-europe-suez"], "coastSide": "med" },
"ME": { "nearestRouteIds": ["china-europe-suez"], "coastSide": "med" },
"MK": { "nearestRouteIds": ["russia-med-oil"], "coastSide": "landlocked" },
"XK": { "nearestRouteIds": ["russia-med-oil"], "coastSide": "landlocked" },
"CU": { "nearestRouteIds": ["panama-transit", "transatlantic"], "coastSide": "multi" },
"JM": { "nearestRouteIds": ["panama-transit", "transatlantic"], "coastSide": "multi" },
"HT": { "nearestRouteIds": ["transatlantic"], "coastSide": "multi" },
"DO": { "nearestRouteIds": ["transatlantic"], "coastSide": "multi" },
"TT": { "nearestRouteIds": ["transatlantic"], "coastSide": "atlantic" },
"BB": { "nearestRouteIds": ["transatlantic"], "coastSide": "atlantic" },
"PA": { "nearestRouteIds": ["panama-transit"], "coastSide": "multi" },
"CR": { "nearestRouteIds": ["panama-transit"], "coastSide": "multi" },
"HN": { "nearestRouteIds": ["panama-transit"], "coastSide": "multi" },
"GT": { "nearestRouteIds": ["panama-transit"], "coastSide": "multi" },
"SV": { "nearestRouteIds": ["panama-transit"], "coastSide": "pacific" },
"NI": { "nearestRouteIds": ["panama-transit"], "coastSide": "multi" },
"BZ": { "nearestRouteIds": ["panama-transit"], "coastSide": "multi" },
"GY": { "nearestRouteIds": ["transatlantic"], "coastSide": "atlantic" },
"SR": { "nearestRouteIds": ["transatlantic"], "coastSide": "atlantic" },
"FJ": { "nearestRouteIds": ["brazil-china-bulk"], "coastSide": "pacific" },
"PG": { "nearestRouteIds": ["brazil-china-bulk"], "coastSide": "pacific" },
"PW": { "nearestRouteIds": ["china-us-west"], "coastSide": "pacific" },
"SB": { "nearestRouteIds": ["brazil-china-bulk"], "coastSide": "pacific" },
"TO": { "nearestRouteIds": ["brazil-china-bulk"], "coastSide": "pacific" },
"VU": { "nearestRouteIds": ["brazil-china-bulk"], "coastSide": "pacific" },
"WS": { "nearestRouteIds": ["brazil-china-bulk"], "coastSide": "pacific" }
}