Hormuz Toll. Teach industrial and market math, not a Hollywood carrier charge.

System

MVVM, one board, tests that play the game

Same split as Collapse Lab. If a critic claims mines sit still or that paying Iran sweeps the lane, they open one Model file and a matching test.

Model

src/model/

Pure TypeScript. No React. No DOM. No SVG. Sim lives in nautical miles. Seeded RNG.

ViewModel

src/viewmodel/

Commands and derived labels. The View never constructs the engine.

View

src/view/

Header, map overlay, role panels. Pretty. Not the argument.

Turn order

  1. 01 priceTick
  2. 02 hiddenPipeline
  3. 03 expandMines
  4. 04 usOrders
  5. 05 iranOrders
  6. 06 tankerOrders
  7. 07 resolve
  8. 08 bankExit
  9. 09 fuses
  10. 10 decay

Architect locks, 9 Sep

Ingest is closed. This is a math problem. Transcripts keep their numbers. The sim uses one cited knob per family.

  • 1.4 vs 1.6 mb/d is the same faucet. Sim uses 1.5.
  • 17 pierside warships at match start. 120 speedboats on the water. 1,500 FAC in sheds.
  • Mine prices are a family: M-08 about $1,500, EM52 about $15,000, influence $15k to $60k.
  • Destroyer sticker is a family by flight and year. $1.8B to $2.5B can all be true.
  • Avenger class status is open research. Clearance stays rented either way.
  • Facebook blockade reel stays a title card. Do not average transcripts.

Modules (master §14, relocated)

  • balance.tsTunables, image calibration, price bands
  • geo.tsnm points, polylines, circle clip, corridor holes
  • engine.tsTurn order, resolve, fuses, price
  • factions.tsUS / Iran / tanker action schemas
  • ai.tsScripted v1 tendencies
  • copy.tsTeaching beats, tooltips, after-action
  • scenarios.tsReopen / one-transit / overplay / mine-warfare / iran-warfare
  • receipts.tsAnnotated bibliography
  • rng.tsSeeded PRNG

Invariants (tests lock these)

  1. 01Existing mine circles expand one step during expandMines. New lays wait.
  2. 02Red fog paints water, including the till. It does not paint land.
  3. 03One tanker mine-kill in the TSS collapses insurance for the match.
  4. 04Bribes never shrink circles and never grant mine immunity.
  5. 05STEEL never fills in v1. CONTRACTS can.
  6. 06US: at most one off-board lever per turn.
  7. 07Factory hits are permanent. Pit hits relocate.
  8. 08Capital ships start off-map. Commit paints a prestige target.
  9. 09High price funds Iran's next-turn pool.
  10. 10Secret packages still arrive if factories are dead, unless banks and off-board levers pinch them.
  11. 11Neighbor strike lights OPPOSITION and speeds CONTRACTS.

Gameplay simulations

Not UI tests. An array of role/action pairs against engine.dispatch.

  • pits-only-while-factories-liveTutor flag after 3 pit-only US turns
  • one-boom-kills-insuranceInsurance collapsed, CONTRACTS +3
  • pay-iran-funds-molesDirected boats drop, mines unchanged, pool grows
  • high-price-is-a-factoryHigh P grants Iran kits next turn
  • steel-never-fillsSTEEL stays 0
  • us-offboard-onceSecond off-board in one turn is illegal
  • carrier-in-the-lanePrestige target flag on
  • neighbor-strike-funds-oppositionOPPOSITION opens
  • reopen-lane-us-ai-88-turn match completes
  • tanker-naked-hullAfter collapse, hull_factor is 0 or 1

Tanker slice is two doors, not a plotted track. Wait forces US clearance and an Iran lay. Price sits on the map.