18OE — Implementation Tracker

Bar widths reflect implementation effort (L3 step/round = 3× · L2 override = 2× · L1 constant = 1×), not item count.

Overall
113 / 226 items
Alpha
60% · 52 remaining · 65 beta deferred
Done & merged 106
Needs PR 7
Partial 10
Started 0
To do 103
Beta deferred 65
Milestone: Layer: Group by:
Done & Merged106
Game Setup7
Entities6
Map & Components11
Track Rights8
Track Rights Chit System5
Auction Phase2
Stock Market Grid11
Train Data & Phases9
Track Laying9
Token Placement3
Route & Revenue (Cross-Water)1
Train Purchase4
OR Steps (Major)7
Stock Rounds5
Railroad Formation3
Nationals2
Consolidation Phase1
End Game5
Minor Abilities5
Private Abilities2
In Work17
D-Train Revenue (BUG-031)
D-train city revenue doubling — 4D/5D trains double city value; then suppress doubling for Krasnaya Strela extra city (§15.7)L2
Minor Abilities
J – Grey LocomotiveL1
C (Golden Bell) — pre-OR blocking choice step (GoldenBellChoice); first/last/normal; entity order rebuilt from operating_order after choiceL3
Private Abilities
Wien Südbahnhoftoken (price: 0, teleport_price: 0, extra_action: true) wired; still needed: cost-bypass in Token step (standard reachability still applies per §14.3) + sea-zone crossing costs still chargedL2/L3
Star Harbortoken (extra_slot, special_only) wired; still needed: port routing, revenue exclusion, SR windowL3
White Cliffs Ferrytoken (hexes: ['N31']) wired; still needed: Phase 5 start event hook + ferry routingL3
Nationals
Rusted train claimL2/L3
Minor Mergers
Minor SR merge actionL2/L3
Plumbing / can_mergeL2/L3
merge_minor!L2/L3
To Do103
Map & Components
Verify M28 London / AA82 Constantinople / I20 Dublin / O28 Le Havre / X33 Marseille are in yellow: section in map.rb (edges added in 18oe_testing; section move not yet confirmed)L1
N31 Lille second token slot for White Cliffs Ferry — pre-printed Lille tile needs a secondary station slot; confirm against physical mapL1
OE9–OE11 — green double-town path edge orientations neededL1
OE20–OE22 — brown double-town path edge orientations neededL1
OE19 — tile type unknown; must be identified and definedL1
Verify standard tile quantities against physical tile manifestL1
Audit OE-specific tile upgrade paths against physical manifestL1
Auction Phase
All-pass price reduction — if all players consecutively pass before opening packet is sold, privates pay dividends then all items on topmost row reduce by £5; repeats; items reaching £0 must all be taken by next playerL2
Stock Rounds
Voluntary regional removal — player may remove one unfloated regional during Regional/Minor Phase; max 6 totalL2/L3
Reserved secondary shares — during Initial SR only, each player may designate one regional's secondary (25%) share as reserved; no other player may purchase it until the second SR; cancelled if regional expands to major before its first ORL2
Trade with another player — during own SR turn, controlling player may offer personal share trade to any other player; recipient not obligated to acceptL2
Track Laying
First-OR green tile exception (§11.1.9) — Phase 2 only, first OR after float: if RR cannot connect home token to any town/city via land or ferry without a sea crossing, it may lay one non-city green tile at cost of all remaining tile points; requires ≥1 tile point; cannot be exploited deliberatelyL2
Pullman Cars
Pullman asset type — does not count against train limit; max 1 per non-national companyL3
Revenue bonus: +£10 × assigned train level, once per ORL2/L3
Purchase from Minor M: £150 + £15 royalty; J-minor discount on price onlyL3
Purchase from Open Market: £150, no royalty; available Phase 4+L3
Purchase from another RR: negotiated priceL3
Minor M free Pullman: if Minor M not closed at Phase 4 start, places free PullmanL2/L3
Discard order: rusted trains first; Pullman voluntarily returnable to Open MarketL3
Company with zero trains but holds Pullman: retain until next train acquiredL3
Train Purchase
Train type lock for inter-company purchases — minors may only sell to minors, regionals to regionals, majors to majors (§11.3)L2
Forced purchase — president covers shortfall; else national conversion (majors) or insolvency (minors/regionals)L3
First-round insolvency: president cash → treasury; company receives reserved 2+2; presidential cert → Open Market; president paid face valueL3
OR Steps (Major)
Investigate Engine::Step::Exchange in OR step list — minor exchange abilities fire in SR only; confirm Exchange never triggers during OR and remove if vestigialL2
Minor Abilities
7.13 Minor M (CIWL) — holds 10 Pullman cars (see §11.6.2)L3
Private Abilities
8.2 Barclay, Bevan, Barclay & Tritton — owner selects one of three abilities at time of useL3
8.8 Swift Metropolitan Line — from Phase 4, one controlled RR may keep one 2+2 outside train limitL3
Token Transfer Between Majors
During major's OR Transfer Tokens step: controlling player transfers one token between two majorsL2
Cost: token value (paying major) + token value (receiving major, same zone) + transfer fee (Normal £20 / Grand £40 / Metropolis £60)L2
Selling a token: returns to charter at highest-cost open positionL2
Tests
Smoke spec — Engine::Game::G18OE.new(%w[A B C D]) does not raise
Basic game flow (auction → regional/minor → major phase)
Train phase transitions (rusting, limits)
Stock market movement (right/left/up/down, edge cases)
Minor ability transfer
Pullman car revenue
Map & Components
Ferry distance numbers — per-zone crossing distances needed for cross-water cost calculations (§8d); sea zone borders themselves are completeL1
Ferry sea hexes — partial work exists; still needed: N29/G22/N25/I22/I24/AE12/AF13/AB21/AB23/AB25L1
Ferry route engine override — game.rb override to whitelist exits toward blue hexes that carry a matching pre-printed pathL2
Lille↔London ferry — tiles connect correctly; all other ferry routes blocked pending L2 engine overrideL2
Port sea stubs [BETA] — blue tiles at port entry points use junction;path=a:X,b:_0,terminal:1 as connectors between land port paths and sea ferry routes; model: land port → stub → sea ferry hexes → stub → land port; implement per port once ferry routing engine override is in place; public vs private port access distinction applies here (see §8d)L1/L2
G30 inland port [BETA] — G30 currently has junction;path=a:4,b:_0 (missing terminal:1); inland ports differ from coastal port stubs in routing rules — define and document the distinction before implementing; add terminal:1 as part of this workL1
Patronage Tiles
Setup: randomise and place patronage tiles on map cities at game start (3 pink, 3 yellow, 3 white, 8 green drawn per group, rest discarded)L1
Payout: when a RR first lays a track tile in a patronage hex during Lay Track step, bank pays one-time bonus equal to tile amount for the highest track color available in current Train Phase; patronage tile removedL2
Float edge case: minor that places its home token on a patronage hex fulfils it immediately and receives the lowest payout shown on the tileL2
Stock Rounds
+3 RIGHT — on the first Orient Express run, share price moves 3 steps right (depends on §8e)L2
Route & Revenue (Cross-Water)
Local train town counting: towns beyond city limit fill to train level; express trains skip townsL2
Combined train runs: Level ≤4 trains combine (sum); Level 5+, 4D, 5D cannot combineL2
Cross-water costs: Ferry = +£5 track / +£20 token × distance; Sea = +£10 track / +£40 token × zonesL2
Ferry mechanics: distance counts against city limit; public ferry usable by any RR; enemy tokens blockL2
Port authority markers: each reduces sea zone count + ferry distance by 2; 16 total (8 North Sea, 8 Med)L2/L3
Port authority purchase — majors only, one per major; £125 paid during OR at any point before Buy Trains step; North Sea covers light-blue zones, Mediterranean covers sea-green zones; also reduces cross-water track and token costsL2
Port authority transfer — major may buy a PA marker from another major during its Transfer Tokens OR step; price exactly £125 to selling major's treasuryL2
Port types: public (any RR) vs private (owning RR only)L2
Offshore port mechanics: train connects regardless of intervening hexesL2
Channel passages at Copenhagen and ConstantinopleL2
Orient Express
Detect valid OE route: Constantinople (AA82) + one of Paris/London/Berlin/Madrid/Sankt-Peterburg + land trackL2
First-time bonus: £30 (Ph2–4), £60 (Ph5–6), £100 (Ph7–8); OE marker placed on majorL2
+3 RIGHT on first OE run (also §6b)L2
Train combining: Level ≤4 combine; combined level = sum; city limit = combined levelL2
Subsequent OE runs: no bonus, no extra stock movementL2
Mandatory OE: if OE route is best possible, president must run itL2
OE blocked for nationalsL2
D-train bonus does NOT apply to OE first-time bonusL2
OR Steps (Major)
Major purchases one abandoned minor from Open Market for £60 (to bank); minor's charter + assets added as if merged but no share of major stock issued to former ownerL2
Remove Engine::Step::Bankrupt from OR step list — base bankruptcy fires game-end immediately; 18OE force-buy should route to national conversion (BUG-019); replace with a custom no-op or overrideL2
Minor Abilities
7.9 Minor H (Great Western Steamship) — reduces sea zones by 1 (Ph1–6) or 2 (Ph7–8)L2
D (Green Junction) — sea/ferry variant: unreachable-city placement step where target city is accessible only via sea or ferryL3
Railroad Formation
Forming a national (trigger): phase 4/6/8 purchase → trigger_nationals_formation! → ordered queueL2
Forming a national (steps): Step::ConvertToNational — cash→bank, treasury certs→OM, tokens removed, national placed, trains inheritedL2/L3
Abandoning a minor (§9.5): triggered by national formation or consolidation failure — abandon_minor!: charter→Open Market; trains→Open Market; tokens removed; cash→bank; track rights chit staysL2
D minor token and L minor marker stay with their charters on abandonmentL2
M minor Pullman stays with charter on abandonmentL2
Nationals
national_revenue: linked/unlinked split, best-first, D-train double, flat-rate fill; [:payout] onlyL2
Inherent Pullman: +£10 × highest non-rusted train levelL2
No tokens / no terrain costs — return 0 if entity.type == :national in upgrade_cost (BUG-011); skip token step already doneL2
Train limit discard via depot.reclaim_trainL2
Merged minors abandoned at national formation (depends on @minor_track_rights)L3
Track rights / OE markers / private markers removed at formationL3
Exchange owned rusted train for higher-level unclaimed rusted trainL2/L3
Flip owned rusted train from express to local sideL2/L3
Upgrade rusted → non-rusted by purchasing from same-owner majorL2/L3
Minor Mergers
7.1 Ability transfer — minor merges into regional/major; ability inherited; nationals cannot inheritL3
7.2 Minor A (Silver Banner) — bank pays major current share price at moment of mergerL3
No-stock connection check: merge only if unlimited-city train can reach minor's token to major's networkL3
Player choice on token conflict and train declineL3
Cross-player personal cash side payment UIL3
Solicit-offers rule for unmergeable minorsL3
Cannot pass in Consolidation Phase if owns unfloated minors/regionals not yet mergedL2
Minor Mergers
Consolidation Round forced mergers (§10.6) — hook into Step::ConsolidateL3
Consolidation Phase
Conditional merger: major/national may offer; if no offer, company is abandonedL3
End Game
Second final OR: each company pays same revenue as first final OR; no track/token/train actions (BUG-026)L3
Tests
National revenue calculation
Orient Express bonus (first run, subsequent runs)
Concession Phase
Define Concession round with ordered float actions (CON1–CON10)L3
Wire concession cards to specific regional/major home tokens and par valuesL1
Float obligation: holder pays 2× par; obligation transfers if holder cannot payL3
Round sequencing: Auction → Concession → Regional/Minor PhaseL2
2-player without-concessions variant: skip Concession Phase (starting cash already correct)L2
Variants & Scenarios
UK-FR variant entities (4 minors: C/H/K/M; 7 regionals: BEL/GSWR/GWR/LNWR/MIDI/OU/PLM)L1
UK-FR train rusting rulesL1
UK-FR map hex definitionsL1
Medium / short scenarios — reduced RR counts, modified OE destinationsL2