Locked
--
Loaded and transiting. No diversion window, whichever corridor they're in.
In-window
--
Approaching a strait. Diversion possible at the cost shown, computed per vessel's own corridor.
Pre-commitment
--
Not yet loaded. Same cost basis, zero sunk cost.
Diverted
$0
Rerouted. Cost is real where a real alternate route exists, flagged as an estimate where it doesn't.
No vessels diverted yet
Eight corridors, seven of them real-routing now — rebuilt 2026-09-18 against direct queries of the live routing graph, not assumptions. Bab el-Mandeb (a Fujayrah→Rotterdam voyage that, confirmed against the graph, actually crosses THREE named passages in sequence — Bab el-Mandeb, Suez, and Gibraltar — not just the one it's filed under; blocking Bab el-Mandeb alone already forces the same full Cape reroute as blocking it and Suez together), Suez (Jiddah→Rotterdam, its own scenario — Jiddah sits north of Bab, so this voyage only ever crosses Suez + Gibraltar), Malacca (Colombo→Shanghai — moved off Singapore, which sits at the strait's own eastern mouth and so never actually crossed a Malacca-tagged edge; blocking it now produces a real, engine-confirmed +625nm detour via Sunda), Panama (Houston→Shanghai; blocking it sends this voyage the full way around through FOUR other tracked corridors at once — Gibraltar, Suez, Bab el-Mandeb, and Malacca, all confirmed), Gibraltar (New York→Genova; blocking it sends the vessel around the Cape of Good Hope and through Bab el-Mandeb and Suez), Hormuz (newly real — Ras Tannurah→Singapore genuinely crosses both Hormuz and Malacca on the same voyage, confirmed), and Bosphorus (newly real — Novorossiysk→Genova, confirmed via Bosphorus + Dardanelles in sequence). Hormuz and the Bosphorus both come back "no route found" when blocked — a real, engine-confirmed dead end (there is genuinely no water alternate out of the Persian Gulf or the Black Sea), shown as one, not guessed as one. Only Danish Straits is still a flat, labeled estimate, because the routing graph has no passage tag for it at all yet — confirmed by querying it directly, not assumed.
Corridors now show their real full passage list, not one label. The Corridor column and each vessel's detail panel read directly off what the graph actually returned (e.g. "Bab el-Mandeb + Suez + Gibraltar"), not the single bucket a vessel happens to be filed under. A vessel that diverts out of ANY tracked corridor is checked against every OTHER corridor's own real passage list, plus four passages that have no FLEET bucket of their own but are confirmed real landings — Sunda, Dardanelles, Cape of Good Hope, and Cape Horn/Chile Strait — so a Gibraltar closure correctly shows a vessel now exposed off the Cape of Good Hope even though no vessel is ever "based" there. Nothing here is hand-mapped per corridor anymore; it's whatever the engine says a voyage actually crosses.
Bunker/port-call risk, ported from CAPE. A handful of vessels list the ports they actually call at or bunker at (Djibouti, Las Palmas, Istanbul), scored against the same
Origins are real ports, not basins. Every corridor's from/to endpoint is a named port with real coordinates from the Narrows port index (World Port Index-derived, ~4,000 ports) — Al Fujayrah, Jiddah, Colombo, Houston, New York, Ras Tannurah, Novorossiysk, Primorsk, Rotterdam, Shanghai, Singapore, Genova.
Status is computed, not authored. Locked/window/pre are derived every render from each vessel's ETA against the scenario clock in the header. Diversion days are per-vessel: class and CII grade set an effective speed (the same "CII-adjusted effective days" idea Narrows' own Malacca/Lombok analysis already publishes), not one flat speed for every ship.
Built to receive shared assumptions later, not fake them now. Corridors, passages, JWC flags, port risk, and per-class speed all live in one clearly marked block in this file, the same shape NARROWS-RATES.js already uses as a real shared file across CAPE and CASCADE+ — the next step is making that block a shared file the same way, so this page and CAPE/CDM stop hand-copying each other.
Corridors now show their real full passage list, not one label. The Corridor column and each vessel's detail panel read directly off what the graph actually returned (e.g. "Bab el-Mandeb + Suez + Gibraltar"), not the single bucket a vessel happens to be filed under. A vessel that diverts out of ANY tracked corridor is checked against every OTHER corridor's own real passage list, plus four passages that have no FLEET bucket of their own but are confirmed real landings — Sunda, Dardanelles, Cape of Good Hope, and Cape Horn/Chile Strait — so a Gibraltar closure correctly shows a vessel now exposed off the Cape of Good Hope even though no vessel is ever "based" there. Nothing here is hand-mapped per corridor anymore; it's whatever the engine says a voyage actually crosses.
Bunker/port-call risk, ported from CAPE. A handful of vessels list the ports they actually call at or bunker at (Djibouti, Las Palmas, Istanbul), scored against the same
PORT_RISK table CAPE's own "waypoints" feature uses — because a diversion can be clean at the strait and still bunker somewhere JWC-listed on its own (Djibouti sits inside the Gulf of Aden listed area regardless of which strait the hull avoided). This is a risk overlay, the same as CAPE's, not a routed leg — it doesn't change distance or cost, only what shows as exposed.Origins are real ports, not basins. Every corridor's from/to endpoint is a named port with real coordinates from the Narrows port index (World Port Index-derived, ~4,000 ports) — Al Fujayrah, Jiddah, Colombo, Houston, New York, Ras Tannurah, Novorossiysk, Primorsk, Rotterdam, Shanghai, Singapore, Genova.
Status is computed, not authored. Locked/window/pre are derived every render from each vessel's ETA against the scenario clock in the header. Diversion days are per-vessel: class and CII grade set an effective speed (the same "CII-adjusted effective days" idea Narrows' own Malacca/Lombok analysis already publishes), not one flat speed for every ship.
Built to receive shared assumptions later, not fake them now. Corridors, passages, JWC flags, port risk, and per-class speed all live in one clearly marked block in this file, the same shape NARROWS-RATES.js already uses as a real shared file across CAPE and CASCADE+ — the next step is making that block a shared file the same way, so this page and CAPE/CDM stop hand-copying each other.