{
 "about": "Changes Terminal Walk made to the OpenStreetMap-derived walkway network behind its walking times, with the gates and terminals kept out of the walking routes. Made available under the Open Database License (ODbL) 1.0, the same license as the map data.",
 "license": "ODbL-1.0",
 "map_data": "OpenStreetMap contributors",
 "data_frozen": "2026-10-18",
 "counts": {
  "patches": 53,
  "changes": 31,
  "exclusions": 22,
  "total": 106
 },
 "about_patches": "patches: every entry of our patch file, by section (links added to the walking network, moving-walkway zones, transit lines, pedestrian ways removed, gates kept out, shared doors, checkpoint exit points, checkpoint allowances), each with its reason, source and date. changes and exclusions: what the data files derive from those patches today.",
 "patches": {
  "links": [
   {
    "id": "ATL-L1",
    "airport": "ATL",
    "from": [
     33.6413636,
     -84.4419506
    ],
    "to": [
     33.6412385,
     -84.4396791
    ],
    "reason": "Concourse T's walk network (21 gates) has no OSM link to the Transportation Mall walkway toward Concourse A; the mall is continuous from the Domestic Terminal through T to F. Adds the missing 211 m mall segment between the nearest T-side and A-side mall nodes.",
    "source": "OSM gap found 2026-10-08 (venture history, ATL walking-route test); mall continuity: CDC/PMC article PMC5463209 ('connecting corridor between the 7 airport concourses (domestic terminus, A, B, C, D, E, and F)'); The Parking Spot ATL Plane Train guide ('moving walkways connecting all concourses').",
    "walkway": true,
    "confidence": "M",
    "date": "2026-10-10"
   },
   {
    "id": "ATL-L2",
    "airport": "ATL",
    "from": [
     33.6439718,
     -84.4248213
    ],
    "to": [
     33.64385,
     -84.4251503
    ],
    "snap_m": 5,
    "reason": "Gates E40, E41 and E42 each sit on their own short OSM stub, not joined to the Concourse E corridor (3 isolated E gates). ATL-L2, L3, L4 join each stub to the nearest Concourse E corridor node (33 m, 58 m, 61 m).",
    "source": "OSM gap found 2026-10-08 (3 isolated E gates); join point by geometry.",
    "confidence": "M",
    "date": "2026-10-10"
   },
   {
    "id": "ATL-L3",
    "airport": "ATL",
    "from": [
     33.6440337,
     -84.4245636
    ],
    "to": [
     33.64385,
     -84.4251503
    ],
    "snap_m": 5,
    "reason": "Gate E41 stub join, see ATL-L2.",
    "source": "OSM gap found 2026-10-08 (3 isolated E gates); join point by geometry.",
    "confidence": "M",
    "date": "2026-10-10"
   },
   {
    "id": "ATL-L4",
    "airport": "ATL",
    "from": [
     33.6441078,
     -84.4245634
    ],
    "to": [
     33.64385,
     -84.4251503
    ],
    "snap_m": 5,
    "reason": "Gate E42 stub join, see ATL-L2.",
    "source": "OSM gap found 2026-10-08 (3 isolated E gates); join point by geometry.",
    "confidence": "M",
    "date": "2026-10-10"
   },
   {
    "id": "LAX-L1",
    "airport": "LAX",
    "from": [
     33.9425809,
     -118.3939465
    ],
    "to": [
     33.943166,
     -118.3964365
    ],
    "length_m": 240,
    "extra_s": 540,
    "reason": "Gates 52A to 52I (American Eagle remote satellite) are reached by an airside bus, not a walkway. Modeled as one link: about 240 m plus 9 minutes (average bus wait plus ride, assumption L).",
    "source": "security-vs-walking-2026-10-10.md row LAX ('Exception: American Eagle remote satellite uses an airside bus'); bus time is our assumption (L).",
    "confidence": "L",
    "date": "2026-10-10",
    "mode_note": "airside bus"
   },
   {
    "id": "DTW-L1",
    "airport": "DTW",
    "from": [
     42.2083,
     -83.3565
    ],
    "to": [
     42.2232,
     -83.3508
    ],
    "length_m": 150,
    "extra_s": 600,
    "mode": "landside_transit",
    "snap_m": 250,
    "reason": "McNamara (Concourses A, B, C) and Evans (Concourse D) are linked only by a landside shuttle bus; travelers re-screen. Modeled as one landside leg: 150 m of walking to and from the stops plus 600 s (5 min average wait at a 10-minute headway plus about 5 min ride, ride is our estimate).",
    "source": "https://www.metroairport.com/how-do-i-transfer-between-terminals (Shuttles depart approximately every 10 minutes from the Ground Transportation Centers), read 2026-10-10; re-screening: security-vs-walking-2026-10-10.md row DTW (L).",
    "confidence": "L",
    "date": "2026-10-10"
   },
   {
    "id": "LGA-L1",
    "airport": "LGA",
    "from": [
     40.7714876,
     -73.8663453
    ],
    "to": [
     40.7715789,
     -73.8663135
    ],
    "snap_m": 5,
    "mode": "landside_walk",
    "reason": "Terminal B and Terminal C networks are 10.5 m apart in OSM at the B-C pedestrian path. Joined as a LANDSIDE walking link (travelers re-screen at C or B).",
    "source": "https://www.laguardiaairport.com/flights/connections-guide (B-C pedestrian path and free bus); airside not shown by any source (security-vs-walking row LGA, L).",
    "confidence": "L",
    "date": "2026-10-10"
   },
   {
    "id": "LGA-L2",
    "airport": "LGA",
    "from": [
     40.7706143,
     -73.885511
    ],
    "to": [
     40.7704235,
     -73.8853681
    ],
    "snap_m": 5,
    "mode": "landside_walk",
    "reason": "Terminal A (Marine Air Terminal, gates 1 to 6) network stops 24 m short of the outdoor footway network. Joined as a LANDSIDE link; the airport runs a free shuttle bus between terminals, and every A connection re-screens.",
    "source": "https://www.laguardiaairport.com/flights/connections-guide (free bus between terminals); security-vs-walking row LGA (L).",
    "confidence": "L",
    "date": "2026-10-10"
   },
   {
    "id": "MSP-L1",
    "airport": "MSP",
    "from": [
     44.881381,
     -93.2056673
    ],
    "to": [
     44.8812205,
     -93.2055753
    ],
    "snap_m": 5,
    "mode": "landside_walk",
    "reason": "The Terminal 1 Ground Transportation Center walk network (where the Blue Line station is) stops 19 m short of the Terminal 1 terminal network in OSM. Joined as a LANDSIDE walking link so Terminal 2 (H gates) is reachable by the light rail; re-screening applies.",
    "source": "https://www.mspairport.com/directions/between-terminals (light rail between terminals); join point by geometry.",
    "confidence": "L",
    "date": "2026-10-10"
   },
   {
    "id": "SEA-L1",
    "airport": "SEA",
    "from": [
     47.4450418,
     -122.300998
    ],
    "to": [
     47.4450698,
     -122.3009228
    ],
    "snap_m": 2,
    "length_m": 18,
    "extra_s": 60,
    "reason": "The SEA Underground North Loop platform under the D end of the main terminal (shared with the Terminal Shuttle's D station) is a separate piece in OpenStreetMap: its escalators to the concourse are not mapped, so no walking route reached it and routes to the N gates went south to the A Gates station, rode the Terminal Shuttle and changed trains (1,136 m, 10 to 16 min from Checkpoint 4 to N1). Adds the two escalator rides (30 s each, our escalator rule) and the 18 m between them, from the concourse node above to the platform node below.",
    "source": "https://maps.flysea.org/ directions Security Checkpoint 4 to Gate N1 (General lane): 'Proceed northeast 159 meters to Escalator', 'Take escalator down to Baggage Claim', 'Proceed southeast 18 meters to Escalator', 'Take escalator down to Train Platform', one train ride, 839 m, 11 min total; read 2026-10-17",
    "confidence": "M",
    "date": "2026-10-17",
    "mode_note": "two escalators down to the North Loop platform"
   },
   {
    "id": "IAH-SK1",
    "airport": "IAH",
    "from": [
     29.9872691,
     -95.3387773
    ],
    "to": [
     29.9876531,
     -95.3385187
    ],
    "snap_m": 2,
    "length_m": 46,
    "extra_s": 30,
    "reason": "OpenStreetMap lands the Terminal C Skyway stop south of the C/D corridor, so every walk from the stop first went about 75 m south and back (C stop to D6 549 m, to C1 400 m). The airport's route finder takes the escalator straight down beside the stop and walks east to the corridor. Adds that step: the escalator ride (30 s, our escalator rule) and the 46 m from the node below the stop to the corridor node, from the airport's own steps.",
    "source": "https://iahmaps.fly2houston.com/ route finder, Skyway Stop (Terminal C, POI 816) to Gate D6: 'Proceed <1 minute to Escalator' 23 m, 'Take escalator down to Level 2' 18 m, 'Proceed 5 minutes to Gate D6' 288 m, 328 m total; escalator foot 29.987449, -95.338719; same stop to C1 201 m, C14 476, C30 479, C45 446, D10 448; read 2026-10-18",
    "confidence": "M",
    "date": "2026-10-18",
    "mode_note": "escalator down from the Skyway stop to the C/D corridor"
   }
  ],
  "walkway_zones": [
   {
    "id": "ATL-W1",
    "airport": "ATL",
    "bbox": [
     33.6401,
     -84.4445,
     33.6417,
     -84.4205
    ],
    "coverage": 0.7,
    "reason": "Transportation Mall moving walkways are barely tagged in OSM (16 to 25 m on the 2026-10-08 test routes). Sets walk segments inside the mall band to moving-walkway speed at 70 percent coverage (walkways stop at each concourse hall).",
    "source": "The Parking Spot ATL Plane Train guide ('The underground Transportation Mall has moving walkways connecting all concourses'), read 2026-10-10; coverage 0.7 is our assumption (L).",
    "confidence": "L",
    "date": "2026-10-10",
    "name": "the Transportation Mall"
   },
   {
    "id": "DEN-W1",
    "airport": "DEN",
    "bbox": [
     39.8504,
     -104.6741,
     39.8531,
     -104.6735
    ],
    "coverage": 0.6,
    "reason": "The A Bridge (1,100 ft, terminal Level 6 to Concourse A) has moving walkways that OSM does not tag. Sets the bridge's walk segments to moving-walkway speed at 60 percent coverage.",
    "source": "https://www.flydenver.com/the-bridge-to-concourse-a-walk-it-dont-train-it/ (bridge with moving walkways, 1,100 ft), read 2026-10-10 for task 2; coverage 0.6 is our assumption (L).",
    "confidence": "L",
    "date": "2026-10-10",
    "name": "the A Bridge"
   }
  ],
  "transit": [
   {
    "id": "ATL-PlaneTrain",
    "airport": "ATL",
    "airside": true,
    "headway_s": 108,
    "headway_source": "https://www.atl.com/the-plane-train-getting-you-there-since-1980/ ('the wait time is only 108 seconds'), read 2026-10-10",
    "ride_source": "No published station-to-station ride time found; default rule (10 m/s plus 30 s dwell), confidence L.",
    "airside_source": "https://www.atl.com/traveling-soon-heres-how-to-navigate-atl-like-a-pro/ ('connects all concourses and runs through the Transportation Mall'); security-vs-walking-2026-10-10.md row ATL (M)",
    "confidence": "M",
    "date": "2026-10-10",
    "stations": [
     {
      "name": "Domestic Terminal",
      "p": [
       33.6408409,
       -84.4439128
      ]
     },
     {
      "name": "T Gates",
      "p": [
       33.6408381,
       -84.4424198
      ]
     },
     {
      "name": "A Gates",
      "p": [
       33.6408322,
       -84.4392028
      ]
     },
     {
      "name": "B Gates",
      "p": [
       33.6408259,
       -84.4358953
      ]
     },
     {
      "name": "C Gates",
      "p": [
       33.6408197,
       -84.4326106
      ]
     },
     {
      "name": "D Gates",
      "p": [
       33.6408117,
       -84.4292955
      ]
     },
     {
      "name": "E Gates",
      "p": [
       33.6408082,
       -84.4264281
      ]
     },
     {
      "name": "F Gates & International Terminal",
      "p": [
       33.6405092,
       -84.4208113
      ]
     }
    ]
   },
   {
    "id": "DFW-Skylink",
    "airport": "DFW",
    "airside": true,
    "loop": true,
    "headway_s": 120,
    "headway_source": "https://www.dfwairport.com/skylinkfaqs/ (Skylink FAQ; trains about every 2 minutes), as read for task 2 on 2026-10-10; Upgraded Points DFW guide (max about 9 minutes ride)",
    "ride_source": "Default rule (10 m/s plus 30 s dwell), gives about 6 to 7 minutes for half the loop, inside the 9-minute maximum quoted by Upgraded Points; confidence M.",
    "airside_source": "https://www.dfwairport.com/explore/plan/connect/ ('the shortest route to your stop while inside of security'), H",
    "confidence": "M",
    "date": "2026-10-10",
    "note": "Bidirectional loop; station positions are the OSM Skylink station nodes.",
    "stations": [
     {
      "name": "A8-A21",
      "p": [
       32.9066651,
       -97.0363808
      ]
     },
     {
      "name": "A22-A39",
      "p": [
       32.9024848,
       -97.0365567
      ]
     },
     {
      "name": "C2-C19",
      "p": [
       32.8995066,
       -97.0363645
      ]
     },
     {
      "name": "C20-C39",
      "p": [
       32.8955622,
       -97.0364005
      ]
     },
     {
      "name": "E2-E16",
      "p": [
       32.8923544,
       -97.036434
      ]
     },
     {
      "name": "E17-E38",
      "p": [
       32.888335,
       -97.0365854
      ]
     },
     {
      "name": "D6-D22",
      "p": [
       32.8962624,
       -97.0441611
      ]
     },
     {
      "name": "D23-D40",
      "p": [
       32.8988576,
       -97.0441816
      ]
     },
     {
      "name": "B1-B19",
      "p": [
       32.9027905,
       -97.0442605
      ]
     },
     {
      "name": "B20-B49",
      "p": [
       32.9065929,
       -97.0443546
      ]
     }
    ]
   },
   {
    "id": "DEN-AGTS",
    "airport": "DEN",
    "airside": true,
    "headway_s": 90,
    "end_to_end_s": 300,
    "access_s": 30,
    "headway_source": "https://en.wikipedia.org/wiki/Automated_Guideway_Transit_System_(Denver_International_Airport) ('Trains generally run at 1.5 minute intervals during peak times resulting in an 11-minute travel time from end to end (round trip)'), read 2026-10-10 (secondary, M)",
    "ride_source": "Terminal to Concourse C one way taken as 300 s (half the 11-minute round trip less turnaround); intermediate stations pro rata by distance. Upgraded Points DEN guide: about 6 minutes by train to Concourse C (task 2 file) is consistent once the wait is added.",
    "airside_source": "https://www.flydenver.com/security/ (two checkpoints in the Terminal 'to access all airlines gates'); security-vs-walking-2026-10-10.md row DEN (M)",
    "confidence": "M",
    "date": "2026-10-10",
    "note": "access_s 45: the train platform is two levels below the concourse and terminal walk levels (escalators).",
    "stations": [
     {
      "name": "Jeppesen Terminal",
      "p": [
       39.8493625,
       -104.6738112
      ]
     },
     {
      "name": "A Gates",
      "p": [
       39.8538247,
       -104.6737636
      ]
     },
     {
      "name": "B Gates",
      "p": [
       39.8586854,
       -104.6737066
      ]
     },
     {
      "name": "C Gates",
      "p": [
       39.8630496,
       -104.6736578
      ]
     }
    ]
   },
   {
    "id": "ORD-ATS",
    "airport": "ORD",
    "airside": false,
    "headway_s": 240,
    "access_s": 60,
    "headway_source": "https://www.flychicago.com/ohare/ServicesAmenities/services/Pages/transitupdate.aspx (service every 3-5 minutes during peak hours, 24 hours), read 2026-10-10; 240 s used",
    "ride_source": "Default rule (10 m/s plus 30 s dwell), confidence L.",
    "airside_source": "https://www.flychicago.com/ohare/ServicesAmenities/services/Pages/tbt.aspx (T1-T3 connected airside; T5 connection outside 11:30 a.m. to 9:30 p.m. means exiting security, riding ATS, re-screening); security-vs-walking-2026-10-10.md (H). The secure-side Terminal Transfer Bus (11:30 a.m. to 9:30 p.m.) is not modeled as an edge (time-dependent; re-check at launch).",
    "confidence": "M",
    "date": "2026-10-10",
    "note": "Landside: any route using it needs re-screening; the tool must show legs, not one walking time.",
    "stations": [
     {
      "name": "Terminal 1",
      "p": [
       41.9792725,
       -87.905546
      ]
     },
     {
      "name": "Terminal 2",
      "p": [
       41.9773228,
       -87.9049611
      ]
     },
     {
      "name": "Terminal 3",
      "p": [
       41.9771175,
       -87.9018439
      ]
     },
     {
      "name": "Terminal 5",
      "p": [
       41.9749721,
       -87.8902406
      ]
     },
     {
      "name": "Multi-Modal Facility",
      "p": [
       41.9929384,
       -87.8823353
      ]
     }
    ]
   },
   {
    "id": "DTW-ExpressTram",
    "airport": "DTW",
    "airside": true,
    "headway_s": 180,
    "access_s": 30,
    "headway_source": "No published headway found in this pass; 180 s assumed (L).",
    "ride_source": "Default rule (10 m/s plus 30 s dwell), L.",
    "airside_source": "https://www.metroairport.com/at-dtw/getting-around/transportation-within-terminal (ExpressTram runs the length of Concourse A); security-vs-walking row DTW (L).",
    "confidence": "L",
    "date": "2026-10-10",
    "stations": [
     {
      "name": "South Station",
      "p": [
       42.2040285,
       -83.361015
      ]
     },
     {
      "name": "Terminal Station",
      "p": [
       42.2082952,
       -83.3577407
      ]
     },
     {
      "name": "North Station",
      "p": [
       42.2134093,
       -83.3541217
      ]
     }
    ]
   },
   {
    "id": "MSP-BlueLine-T1T2",
    "airport": "MSP",
    "airside": false,
    "headway_s": 600,
    "access_s": 60,
    "headway_source": "No airport-published headway found in this pass; 10-minute headway assumed for the Blue Line between terminals (L).",
    "ride_source": "Default rule (10 m/s plus 30 s dwell), L.",
    "airside_source": "https://www.mspairport.com/directions/between-terminals ('Use the LRT to travel between airport terminals'); re-screening per security-vs-walking row MSP (L).",
    "confidence": "L",
    "date": "2026-10-10",
    "note": "Landside, re-screening needed.",
    "stations": [
     {
      "name": "Terminal 1",
      "p": [
       44.8805283,
       -93.20562
      ]
     },
     {
      "name": "Terminal 2",
      "p": [
       44.8741545,
       -93.2241343
      ]
     }
    ]
   },
   {
    "id": "MSP-ConcourseC-Tram",
    "airport": "MSP",
    "airside": true,
    "headway_s": 180,
    "access_s": 30,
    "headway_source": "Not found; 180 s assumed (L).",
    "ride_source": "Default rule, L.",
    "airside_source": "Within Concourse C, inside security (security-vs-walking row MSP: single secure zone covers all seven concourses, L).",
    "confidence": "L",
    "date": "2026-10-10",
    "note": "Stations are OSM stop nodes named for nearby gates.",
    "stations": [
     {
      "name": "Gate C1",
      "p": [
       44.8845832,
       -93.2102221
      ]
     },
     {
      "name": "Gate C8",
      "p": [
       44.8827334,
       -93.2059312
      ]
     },
     {
      "name": "Gate C12",
      "p": [
       44.8824052,
       -93.2052973
      ]
     },
     {
      "name": "Gate C27",
      "p": [
       44.8806188,
       -93.2012833
      ]
     }
    ]
   },
   {
    "id": "JFK-AirTrain",
    "airport": "JFK",
    "airside": false,
    "loop": true,
    "headway_s": 600,
    "access_s": 90,
    "headway_source": "https://www.jfkairport.com/transportation/airtrain ('The AirTrain takes passengers between terminals at JFK in under 10 minutes. Trains run every 5-15 minutes'), read 2026-10-10; 600 s used.",
    "ride_source": "Default rule (10 m/s plus 30 s dwell), consistent with 'under 10 minutes'; M.",
    "airside_source": "https://www.jfkairport.com/flights/connections-guide ('you will need to go through TSA security screening again'), H.",
    "confidence": "M",
    "date": "2026-10-10",
    "note": "Landside, re-screening needed. Terminal loop only (Federal Circle branch not modeled). access_s 90: AirTrain stations sit in the terminal frontage, above the roads.",
    "stations": [
     {
      "name": "Terminal 1",
      "p": [
       40.6435616,
       -73.7893673
      ]
     },
     {
      "name": "Terminal 4",
      "p": [
       40.6439222,
       -73.7824099
      ]
     },
     {
      "name": "Terminal 5",
      "p": [
       40.6468134,
       -73.7798601
      ]
     },
     {
      "name": "Terminal 7",
      "p": [
       40.6482282,
       -73.783189
      ]
     },
     {
      "name": "Terminal 8",
      "p": [
       40.6467488,
       -73.7888644
      ]
     }
    ]
   },
   {
    "id": "LAS-Tram-Blue",
    "airport": "LAS",
    "airside": true,
    "headway_s": 180,
    "access_s": 45,
    "headway_source": "Not found in this pass; 180 s assumed (L).",
    "ride_source": "Default rule (10 m/s plus 30 s dwell), L.",
    "airside_source": "https://www.harryreidairport.com/busses-shuttles/airport-trams (trams serve Terminal 1, Terminal 3, C Gates and D Gates); security-vs-walking row LAS (L).",
    "confidence": "L",
    "date": "2026-10-10",
    "note": "Terminal 1 to D Gates. Station positions are the OSM line ends.",
    "stations": [
     {
      "name": "Terminal 1 (Blue)",
      "p": [
       36.0849125,
       -115.1486263
      ]
     },
     {
      "name": "D Gates (Blue)",
      "p": [
       36.0820311,
       -115.1380373
      ]
     }
    ]
   },
   {
    "id": "LAS-Tram-Green",
    "airport": "LAS",
    "airside": true,
    "headway_s": 180,
    "access_s": 45,
    "headway_source": "Not found in this pass; 180 s assumed (L).",
    "ride_source": "Default rule, L.",
    "airside_source": "As LAS-Tram-Blue.",
    "confidence": "L",
    "date": "2026-10-10",
    "note": "Terminal 1 to C Gates.",
    "stations": [
     {
      "name": "Terminal 1 (Green)",
      "p": [
       36.084783,
       -115.1489777
      ]
     },
     {
      "name": "C Gates (Green)",
      "p": [
       36.0811049,
       -115.1468993
      ]
     }
    ]
   },
   {
    "id": "LAS-Tram-Red",
    "airport": "LAS",
    "airside": true,
    "headway_s": 180,
    "access_s": 45,
    "headway_source": "Not found in this pass; 180 s assumed (L).",
    "ride_source": "Default rule, L.",
    "airside_source": "As LAS-Tram-Blue.",
    "confidence": "L",
    "date": "2026-10-10",
    "note": "D Gates to Terminal 3.",
    "stations": [
     {
      "name": "D Gates (Red)",
      "p": [
       36.0821282,
       -115.1376375
      ]
     },
     {
      "name": "Terminal 3 (Red)",
      "p": [
       36.0854731,
       -115.1368327
      ]
     }
    ]
   },
   {
    "id": "MCO-GateLink-1",
    "airport": "MCO",
    "airside": true,
    "headway_s": 120,
    "access_s": 30,
    "headway_source": "https://flymco.com/connect-transfer/ ('Runs every 2 minutes, 24/7', Gate Link), read 2026-10-10",
    "ride_source": "Default rule (10 m/s plus 30 s dwell), M.",
    "airside_source": "https://flymco.com/connect-transfer/ ('You will not need to leave the secured area'), M",
    "confidence": "M",
    "date": "2026-10-10",
    "note": "Main terminal to gates 1-29 (OSM track ends).",
    "stations": [
     {
      "name": "Main terminal NW",
      "p": [
       28.4313739,
       -81.3095864
      ]
     },
     {
      "name": "Gates 1-29",
      "p": [
       28.4344238,
       -81.3139322
      ]
     }
    ]
   },
   {
    "id": "MCO-GateLink-30",
    "airport": "MCO",
    "airside": true,
    "headway_s": 120,
    "access_s": 30,
    "headway_source": "As MCO-GateLink-1.",
    "ride_source": "Default rule, M.",
    "airside_source": "As MCO-GateLink-1.",
    "confidence": "M",
    "date": "2026-10-10",
    "note": "Main terminal to gates 30-59.",
    "stations": [
     {
      "name": "Main terminal SW",
      "p": [
       28.4309211,
       -81.3096197
      ]
     },
     {
      "name": "Gates 30-59",
      "p": [
       28.4278181,
       -81.3138691
      ]
     }
    ]
   },
   {
    "id": "MCO-GateLink-70",
    "airport": "MCO",
    "airside": true,
    "headway_s": 120,
    "access_s": 30,
    "headway_source": "As MCO-GateLink-1.",
    "ride_source": "Default rule, M.",
    "airside_source": "As MCO-GateLink-1.",
    "confidence": "M",
    "date": "2026-10-10",
    "note": "Main terminal to gates 70-99.",
    "stations": [
     {
      "name": "Main terminal SE",
      "p": [
       28.4310511,
       -81.306079
      ]
     },
     {
      "name": "Gates 70-99",
      "p": [
       28.427441,
       -81.3014991
      ]
     }
    ]
   },
   {
    "id": "MCO-GateLink-100",
    "airport": "MCO",
    "airside": true,
    "headway_s": 120,
    "access_s": 30,
    "headway_source": "As MCO-GateLink-1.",
    "ride_source": "Default rule, M.",
    "airside_source": "As MCO-GateLink-1.",
    "confidence": "M",
    "date": "2026-10-10",
    "note": "Main terminal to gates 100-129.",
    "stations": [
     {
      "name": "Main terminal NE",
      "p": [
       28.4314127,
       -81.3060842
      ]
     },
     {
      "name": "Gates 100-129",
      "p": [
       28.4352543,
       -81.3016143
      ]
     }
    ]
   },
   {
    "id": "MCO-TerminalLink",
    "airport": "MCO",
    "airside": false,
    "headway_s": 240,
    "access_s": 60,
    "headway_source": "https://flymco.com/connect-transfer/ ('Runs every 4 minutes, 24/7', Terminal Link), read 2026-10-10",
    "ride_source": "Default rule, M.",
    "airside_source": "security-vs-walking row MCO ('Terminal C always needs a new screening', L)",
    "confidence": "M",
    "date": "2026-10-10",
    "note": "Main terminal (A/B) to South Terminal C, landside.",
    "stations": [
     {
      "name": "Main terminal (Terminal Link)",
      "p": [
       28.4306217,
       -81.3059687
      ]
     },
     {
      "name": "Terminal C",
      "p": [
       28.4118635,
       -81.3087684
      ]
     }
    ]
   },
   {
    "id": "MIA-ETrain",
    "airport": "MIA",
    "airside": true,
    "headway_s": 180,
    "access_s": 45,
    "headway_source": "Not found in this pass; 180 s assumed (L).",
    "ride_source": "Default rule, L.",
    "airside_source": "Concourse E satellite train, inside security (security-vs-walking row MIA D-E bridge is airside, L).",
    "confidence": "L",
    "date": "2026-10-10",
    "note": "OSM stations 'Gates E2-E11' and 'Gates E20-E35'.",
    "stations": [
     {
      "name": "Gates E2-E11",
      "p": [
       25.795013,
       -80.2796279
      ]
     },
     {
      "name": "Gates E20-E35",
      "p": [
       25.7952429,
       -80.2836513
      ]
     }
    ]
   },
   {
    "id": "MIA-SkyTrain",
    "airport": "MIA",
    "airside": true,
    "headway_s": 180,
    "access_s": 45,
    "headway_source": "Not found in this pass; 180 s assumed (L).",
    "ride_source": "Default rule, L.",
    "airside_source": "Concourse D Skytrain runs inside security (L).",
    "confidence": "L",
    "date": "2026-10-10",
    "note": "OSM stations 1 to 4 along Concourse D.",
    "stations": [
     {
      "name": "1",
      "p": [
       25.7981328,
       -80.2739062
      ]
     },
     {
      "name": "2",
      "p": [
       25.7973015,
       -80.276631
      ]
     },
     {
      "name": "3",
      "p": [
       25.7971664,
       -80.2798102
      ]
     },
     {
      "name": "4",
      "p": [
       25.7977552,
       -80.2837754
      ]
     }
    ]
   },
   {
    "id": "IAH-Skyway",
    "airport": "IAH",
    "airside": true,
    "headway_s": 180,
    "end_to_end_s": 255,
    "access_s": 45,
    "headway_source": "No headway found in this pass; 180 s assumed (L).",
    "ride_source": "https://www.fly2houston.com/iah/connecting-passengers/ (Skyway 4 min 15 s or 9 min, Terminal A to D/E, as read for task 2 on 2026-10-10); 255 s A to D/E used, stations pro rata (M).",
    "airside_source": "https://www.fly2houston.com/iah/connecting-passengers/ ('between terminals while inside security'), H.",
    "confidence": "M",
    "date": "2026-10-10",
    "stations": [
     {
      "name": "Terminal A",
      "p": [
       29.9873597,
       -95.3499671
      ]
     },
     {
      "name": "Terminal B",
      "p": [
       29.9873305,
       -95.3455675
      ]
     },
     {
      "name": "Terminal C",
      "p": [
       29.9874179,
       -95.3389689
      ]
     },
     {
      "name": "Terminal D/E",
      "p": [
       29.9872085,
       -95.3334895
      ]
     }
    ]
   },
   {
    "id": "SEA-SouthLoop",
    "airport": "SEA",
    "airside": true,
    "loop": true,
    "headway_s": 120,
    "access_s": 45,
    "headway_source": "Not published on the Port of Seattle train guide (read 2026-10-10); 120 s assumed (L).",
    "ride_source": "Default rule, L.",
    "airside_source": "https://www.portseattle.org/blog/users-guide-train-sea-airport ('All airlines at SEA Airport are connected and easy to access after you pass through security checkpoints'), H.",
    "confidence": "L",
    "date": "2026-10-10",
    "note": "Main terminal south stations and the S satellite; modeled both directions although the loop runs one way.",
    "stations": [
     {
      "name": "B Gates",
      "p": [
       47.4407445,
       -122.3035866
      ]
     },
     {
      "name": "S Gates",
      "p": [
       47.4389414,
       -122.302668
      ]
     },
     {
      "name": "A Gates",
      "p": [
       47.4417469,
       -122.3007133
      ]
     }
    ]
   },
   {
    "id": "SEA-NorthLoop",
    "airport": "SEA",
    "airside": true,
    "loop": true,
    "headway_s": 120,
    "access_s": 45,
    "headway_source": "As SEA-SouthLoop (L).",
    "ride_source": "Default rule, L.",
    "airside_source": "As SEA-SouthLoop, H.",
    "confidence": "L",
    "date": "2026-10-10",
    "note": "Main terminal north stations and the N satellite; modeled both directions.",
    "stations": [
     {
      "name": "C Gates",
      "p": [
       47.4460556,
       -122.30377
      ]
     },
     {
      "name": "N Gates",
      "p": [
       47.4483757,
       -122.302834
      ]
     },
     {
      "name": "D Gates",
      "p": [
       47.4449672,
       -122.301144
      ]
     }
    ]
   },
   {
    "id": "SEA-TerminalShuttle",
    "airport": "SEA",
    "airside": true,
    "headway_s": 120,
    "access_s": 45,
    "headway_source": "As SEA-SouthLoop (L).",
    "ride_source": "Default rule, L.",
    "airside_source": "As SEA-SouthLoop, H.",
    "confidence": "L",
    "date": "2026-10-10",
    "note": "A Gates to D Gates shuttle (OSM track ends).",
    "stations": [
     {
      "name": "A Gates",
      "p": [
       47.4417979,
       -122.300677
      ]
     },
     {
      "name": "D Gates",
      "p": [
       47.4449196,
       -122.301127
      ]
     }
    ]
   },
   {
    "id": "EWR-AirTrain",
    "airport": "EWR",
    "airside": false,
    "headway_s": 240,
    "access_s": 90,
    "headway_source": "Not read in this pass; 240 s assumed (L).",
    "ride_source": "Default rule, L (straight-line between terminal stations; the real guideway is longer).",
    "airside_source": "https://www.newarkairport.com/flights/connections-guide ('many customers will need to go through TSA screening again'), H. The United post-security shuttle between A and C (domestic arrivals, one way, limited hours) is not modeled (time-dependent; re-check at launch).",
    "confidence": "L",
    "date": "2026-10-10",
    "note": "Landside, re-screening needed. Terminal stations only.",
    "stations": [
     {
      "name": "Terminal C",
      "p": [
       40.6959975,
       -74.1775216
      ]
     },
     {
      "name": "Terminal B",
      "p": [
       40.690757,
       -74.1766324
      ]
     },
     {
      "name": "Terminal A",
      "p": [
       40.6873529,
       -74.1907716
      ]
     }
    ]
   },
   {
    "id": "PHX-SkyTrain",
    "airport": "PHX",
    "airside": false,
    "headway_s": 240,
    "access_s": 60,
    "headway_source": "Not read in this pass; 240 s assumed (L).",
    "ride_source": "Default rule, L.",
    "airside_source": "https://comments.skyharbor.com/hc/en-us/articles/202959929-How-do-I-connect-to-another-flight ('You must exit the sterile (post-security) area in order to access the PHX Sky Train'), M.",
    "confidence": "L",
    "date": "2026-10-10",
    "note": "Landside, re-screening needed. Terminal 3 and Terminal 4 stations only.",
    "stations": [
     {
      "name": "Terminal 3",
      "p": [
       33.4347411,
       -112.0100737
      ]
     },
     {
      "name": "Terminal 4",
      "p": [
       33.434762,
       -111.9980561
      ]
     }
    ]
   }
  ],
  "landside_ways": [
   {
    "id": "ORD-LS1",
    "airport": "ORD",
    "ways": [
     845935764,
     845935765,
     845935766,
     1155408920,
     1155408921,
     1155408922,
     1155408923,
     1155408924,
     1155408925,
     1155408926,
     1155408927,
     1155408928,
     1155408929,
     1155408930,
     1155408931,
     1155408932,
     1155408933,
     1155408934,
     1155408935,
     1155408936,
     1155408937,
     1155408938,
     1155408939,
     1155408940,
     1155408941,
     1155408942,
     1155408943,
     1155408945,
     1155408950,
     1155408951,
     1155408952,
     1155408953,
     1155408956,
     1155408961,
     1155408962,
     1155408963,
     1155408967,
     1155408968,
     1155408969,
     1155408970,
     1155408971,
     1155408972,
     1155408975,
     1155408976,
     1155408977,
     1155408978,
     1155408979,
     1155408980,
     1155408981,
     1155408982,
     1155408983,
     1155408984,
     1155408985,
     1155408986,
     1155408987,
     1155408988,
     1156061540,
     1156061541,
     1156061542,
     1156061543,
     1156061544,
     1156061545,
     1156061546,
     1156061547,
     1156061548,
     1156061549,
     1156061550,
     1156061551,
     1156061553,
     1156061555,
     1156061556,
     1156061557,
     1156061558,
     1156061559,
     1156529884,
     1156530600,
     1227581627,
     1227581632,
     1227581638,
     1227581652,
     1227581653,
     1256467409,
     1256467410,
     1256467411,
     1256467413,
     1256467414,
     1256467415,
     1256467416,
     1256467417,
     1256467418,
     1256467419,
     1256467421,
     1256467422,
     1256467423,
     1256467424,
     1256467425,
     1256467426,
     1256467427,
     1256467428,
     1256467429,
     1266043744,
     1429084128
    ],
    "reason": "OpenStreetMap's level -1 pedestrian tunnels under the O'Hare terminal core ('Pedestrian Tunnel 2B' and '2D', 102 ways, one connected group) run on the check-in side between Terminals 1, 2 and 3 and the parking garage. OSM does not mark them landside, so the walking network let a Terminal 1 Checkpoint 2 route drop into them by elevator and come back up through Terminal 3's Checkpoint 7 (807 m to Gate H5, an elevator and three escalators). The airport's own map routes Checkpoint 2 to H5 on one level, 965 m. Removed from the walking network; with them out the route is 862 m on one level. The separate level -1 tunnel between Concourses B and C ('Sky's the Limit', airside) is kept.",
    "source": "https://maps.ord.flychicago.com/ (directions Security Checkpoint 2 to Gate H5: 'Proceed southeast 940 meters to Gate H5', 965 m total, no level change), read 2026-10-17; OSM way tags (level -1, tunnel, names) read 2026-10-17",
    "confidence": "M",
    "date": "2026-10-17"
   }
  ],
  "exclude_gates": [
   {
    "airport": "IAH",
    "ref_regex": "^C[A-E]\\d+$",
    "reason": "21 aeroway=gate points named CA1 to CE5 sit in the IAH cargo area east of the passenger terminals (beside aeroway=cargo and hangar buildings); they are cargo stands, not passenger gates, so they are left out of the gate count and the network.",
    "source": "OSM geometry and neighboring tags, checked 2026-10-10",
    "confidence": "M",
    "date": "2026-10-10"
   },
   {
    "airport": "LAX",
    "ref_regex": "^4(0[1-9]|1[0-8])[A-Z]?$",
    "reason": "Gates 401 to 418 are the West Remote Gates: aircraft stands reached only by flight-specific airfield buses that board at the Tom Bradley bus gates 136 to 146. No walking route exists. The tool sends a 400-series gate to the TBIT bus gates (snap node n9976747441) with the note: bus to the aircraft, timed by the airline.",
    "source": "LAWA ops advisory 2019-19 (renumbering 2xx remote stands to 4xx), https://www.lawa.org/-/media/lawa-web/lawa-airport-operations/files/lax-operation-advisory/lax-ops-2019/lax-ops-advisory-201919.ashx ; lax-west-gates-2026-10-10.md Option A",
    "confidence": "H",
    "date": "2026-10-15",
    "walkable": false,
    "access_note": "airport bus from the Tom Bradley bus gates 136 to 146"
   },
   {
    "airport": "LAX",
    "ref_regex": "^52[A-I]$",
    "reason": "Gates 52A to 52I are the remote American Eagle terminal, reached by airside bus from Terminal 4 (gate 47A bus port) or Terminal 6; Terminal 5 itself is closed for construction (reopening 2028, flylax.com), so it is held: no LAX-T5 checkpoint exit and no walking time. The tool walks only to the bus port.",
    "source": "spotcheck-2026-10-14.md rows 1 to 9 (flylax.com Terminal 5 closure)",
    "confidence": "M",
    "date": "2026-10-15",
    "walkable": false,
    "access_note": "airside bus from Terminal 4 (gate 47A) or Terminal 6",
    "held_terminal": "T5"
   }
  ],
  "shared_doors": [
   {
    "airport": "ORD",
    "door_gate": "B22",
    "gates": [
     "B23",
     "B24"
    ],
    "reason": "The O'Hare map lists 'Gates B22, B23, B24' as one place: after security, Departures / Check-In, Terminal 1, at the east tip of Concourse B. OSM puts B23 and B24 on the apron 83 m and 114 m beyond the concourse outline (L7 check 2026-10-17).",
    "note": "boards through the shared B22, B23, B24 door at the east end of Concourse B",
    "source": "https://maps.ord.flychicago.com/ (search B24, result 'Gates B22, B23, B24'), read 2026-10-17",
    "confidence": "H",
    "date": "2026-10-17"
   },
   {
    "airport": "PHX",
    "door_gate": "B15A",
    "gates": [
     "B15B",
     "B15C"
    ],
    "reason": "The Sky Harbor map lists 'Gates B15A, B15B, B15C' as one place: after security, Level 3, Terminal 4. OSM puts B15B on the apron 104 m from the Terminal 4 outline (L7 check 2026-10-17); B15C is not in OSM.",
    "note": "boards through the shared B15A, B15B, B15C door in Terminal 4",
    "source": "https://maps.skyharbor.aero/ (search B15, result 'Gates B15A, B15B, B15C'), read 2026-10-17",
    "confidence": "H",
    "date": "2026-10-17"
   }
  ],
  "checkpoint_origins": [
   {
    "id": "DEN-West",
    "airport": "DEN",
    "terminal": "Jeppesen",
    "name": "West Security exit (Level 6, north end)",
    "p": [
     39.8501,
     -104.6742
    ],
    "source": "https://www.flydenver.com/press-release/den-celebrates-opening-of-east-security-checkpoint/ ('The East Security Checkpoint, located on Level 6 directly across from the West Security Checkpoint'; 'both checkpoints at the north end of Level 6 near airline ticket counters'; after screening, the walkway to Concourse A or the main escalators down to the Level 4 train platform), read 2026-10-10",
    "confidence": "M",
    "note": "Exit point estimated on the Level 6 inner walkway at the north end, west side; level and end are official, the exact exit is our estimate (about plus or minus 40 m).",
    "date": "2026-10-10"
   },
   {
    "id": "DEN-East",
    "airport": "DEN",
    "terminal": "Jeppesen",
    "name": "East Security exit (Level 6, north end)",
    "p": [
     39.8501,
     -104.6734
    ],
    "source": "https://www.flydenver.com/press-release/den-celebrates-opening-of-east-security-checkpoint/ ('The East Security Checkpoint, located on Level 6 directly across from the West Security Checkpoint'; 'both checkpoints at the north end of Level 6 near airline ticket counters'; after screening, the walkway to Concourse A or the main escalators down to the Level 4 train platform), read 2026-10-10",
    "confidence": "M",
    "note": "As DEN-West, east side.",
    "date": "2026-10-10"
   },
   {
    "id": "JFK-T4",
    "airport": "JFK",
    "terminal": "T4",
    "name": "Terminal 4 checkpoint exit (post-security hall at the roots of Concourses A and B)",
    "p": [
     40.6437,
     -73.7823
    ],
    "source": "Estimated from OSM terminal geometry: the post-security hall sits between the AirTrain-side headhouse and the roots of Concourse A (east) and Concourse B (southwest). No official coordinate; jfkairport.com T4 page gives only the walk-time table.",
    "confidence": "L",
    "date": "2026-10-10"
   },
   {
    "id": "IAH-E",
    "airport": "IAH",
    "terminal": "Terminal E",
    "patch_id": "IAH-CP1",
    "name": "Terminal E checkpoint (airside start moved to the E concourse side)",
    "p": [
     29.98661,
     -95.334006
    ],
    "snap_node": "n10672992638",
    "source": "https://iahmaps.fly2houston.com/ (Houston Airport System interactive map, 'Terminal E Checkpoint' at 29.98661, -95.33401; route finder from the checkpoint: Gate E10 223 m, E2 376 m, E22 328 m, C30 about 809 m, Skyway escalator 95 m plus 13 m up), read 2026-10-17",
    "confidence": "H",
    "note": "Our 2026-10-14 airside snap rule chose a node 103 m south of the checkpoint; walks now start at node n10672992638, 68 m from the checkpoint on the E concourse side (E10 +21 m, E2 +31 m, E22 +18 m, C30 +5 m against the airport's routes). Walks from Terminal E to the Skyway stay about 164 m longer than the airport's route.",
    "date": "2026-10-17"
   },
   {
    "id": "JFK-T5",
    "airport": "JFK",
    "terminal": "T5",
    "patch_id": "JFK-CP1",
    "name": "Terminal 5 checkpoint (official point from the airport's map)",
    "p": [
     40.64568,
     -73.77581
    ],
    "snap_node": "n11929185304",
    "approximate": false,
    "source": "https://maps.jfkairport.com/ (Port Authority interactive map, 'Security Checkpoint' on the Terminal 5 departures level at 40.64568, -73.77581; route finder, lane 48 m included: Gate 525 250 m, 502 202 m, 530 427 m, 508 134 m), read 2026-10-17; replaces the 2026-10-10 estimate (40.6462, -73.7775, confidence L)",
    "confidence": "H",
    "note": "The 2026-10-10 estimate sat about 70 m from the checkpoint and the airside snap a further 80 m (start near gate 525, so 525 read 1 to 2 min against the airport's 3 to 7 and 502 about 400 m). Walks now start at n11929185304, 15 m from the airport's point: 525 199 m, 502 148 m, 530 388 m, 508 125 m after the lane (airport 202, 154, 379, 86). The point is official, so Decision 8 widening no longer applies.",
    "date": "2026-10-17"
   },
   {
    "id": "EWR-B1",
    "airport": "EWR",
    "terminal": "Terminal B",
    "patch_id": "EWR-CP1",
    "name": "Concourse B1 checkpoint (airside start moved to the checkpoint)",
    "p": [
     40.689946,
     -74.17758
    ],
    "snap_node": "n10807076729",
    "source": "https://maps.newarkairport.com/ (Port Authority interactive map, route finder read 2026-10-17: the checkpoint points equal ours; from the B1 checkpoint to B42 282 m, B2 to B52 193 m, B3 to B62 257 m, lanes included; B42 to B52, B52 to B62 and B42 to B62 each exit and pass the next satellite's checkpoint)",
    "confidence": "H",
    "note": "Our 2026-10-14 airside snap rule put the start up to 220 m from the checkpoint (few airside nodes in the satellite); walks now start at n10807076729, at the checkpoint point (EWR-B1 to B42: 300 m vs the airport's 282 m).",
    "date": "2026-10-17"
   },
   {
    "id": "EWR-B2",
    "airport": "EWR",
    "terminal": "Terminal B",
    "patch_id": "EWR-CP2",
    "name": "Concourse B2 checkpoint (airside start moved to the checkpoint)",
    "p": [
     40.690507,
     -74.177155
    ],
    "snap_node": "n10807162467",
    "source": "https://maps.newarkairport.com/ (Port Authority interactive map, route finder read 2026-10-17: the checkpoint points equal ours; from the B1 checkpoint to B42 282 m, B2 to B52 193 m, B3 to B62 257 m, lanes included; B42 to B52, B52 to B62 and B42 to B62 each exit and pass the next satellite's checkpoint)",
    "confidence": "H",
    "note": "Our 2026-10-14 airside snap rule put the start up to 220 m from the checkpoint (few airside nodes in the satellite); walks now start at n10807162467, at the checkpoint point (EWR-B2 to B52: 192 m vs the airport's 193 m).",
    "date": "2026-10-17"
   },
   {
    "id": "EWR-B3",
    "airport": "EWR",
    "terminal": "Terminal B",
    "patch_id": "EWR-CP3",
    "name": "Concourse B3 checkpoint (airside start moved to the checkpoint)",
    "p": [
     40.691577,
     -74.176618
    ],
    "snap_node": "n10562368896",
    "source": "https://maps.newarkairport.com/ (Port Authority interactive map, route finder read 2026-10-17: the checkpoint points equal ours; from the B1 checkpoint to B42 282 m, B2 to B52 193 m, B3 to B62 257 m, lanes included; B42 to B52, B52 to B62 and B42 to B62 each exit and pass the next satellite's checkpoint)",
    "confidence": "H",
    "note": "Our 2026-10-14 airside snap rule put the start up to 220 m from the checkpoint (few airside nodes in the satellite); walks now start at n10562368896, at the checkpoint point (EWR-B3 to B62: 250 m vs the airport's 257 m).",
    "date": "2026-10-17"
   }
  ],
  "checkpoint_allowances": [
   {
    "id": "JFK-T5",
    "airport": "JFK",
    "patch_id": "JFK-AL1",
    "extra_s": 150,
    "note": "matches JFK's published Terminal 5 walk times (allowance, not mapped)",
    "source": "https://www.jfkairport.com/explore-jfk/terminals/terminal-5 (gates 501-507 3-5 min, 508-521 5-10 min, 522-530 3-7 min), read 2026-10-10",
    "why": "From the airport's map point (patch JFK-CP1) our walks read 1-3, 1-5 and 1-6 min; 150 s puts all three rows' midpoints inside JFK's figures (501-507 now 3-5, as published).",
    "date": "2026-10-18"
   },
   {
    "id": "LGA-C",
    "airport": "LGA",
    "patch_id": "LGA-AL1",
    "extra_s": 45,
    "note": "matches LaGuardia's published Terminal C walk times (allowance, not mapped)",
    "source": "https://www.laguardiaairport.com/explore-lga/terminals/terminal-c (gates 60-69 9-11 min, 70-79 5-7, 80-89B 3-5, 92-98 5-10), read 2026-10-10",
    "why": "Gates 60-69 read 5-9 min against the airport's 9-11; 45 s puts all four rows' midpoints inside LaGuardia's figures (60-69 now 6-10).",
    "date": "2026-10-18"
   }
  ]
 },
 "rules": {
  "auto_stub_join_m": 100,
  "auto_stub_join_about": "Rule-based alteration, applied by scripts/run_network.py after the listed patches: every component of the walk network that holds 1 to 4 gates (a stub, not a terminal or concourse) and is not joined to the airport's main network gets ONE straight walk link from its closest node to the closest main-network node, when that gap is 100 m or less (30 m or less: confidence M; 30 to 100 m: L). Reason: OSM often maps a gate holdroom or jet-bridge stub without its join to the concourse corridor. One link per component means no shortcut between other gates can be created. Every join made is listed per airport in network-summary-2026-10-10.md and in network/summary.json (auto_joins).",
  "date": "2026-10-10",
  "auto_stub_max_gates": 4
 },
 "changes": [
  {
   "type": "train_platform_access_seconds",
   "airport": "DEN",
   "line": "DEN-AGTS",
   "name": "the train",
   "seconds": 30,
   "source": "https://en.wikipedia.org/wiki/Automated_Guideway_Transit_System_(Denver_International_Airport) ('Trains generally run at 1.5 minute intervals during peak times resulting in an 11-minute travel time from end to end (round trip)'), read 2026-10-10 (secondary, M)"
  },
  {
   "type": "train_platform_access_seconds",
   "airport": "ORD",
   "line": "ORD-ATS",
   "name": "the Airport Transit System (ATS)",
   "seconds": 60,
   "source": "https://www.flychicago.com/ohare/ServicesAmenities/services/Pages/transitupdate.aspx (service every 3-5 minutes during peak hours, 24 hours), read 2026-10-10; 240 s used"
  },
  {
   "type": "train_platform_access_seconds",
   "airport": "JFK",
   "line": "JFK-AirTrain",
   "name": "AirTrain JFK",
   "seconds": 90,
   "source": "https://www.jfkairport.com/transportation/airtrain ('The AirTrain takes passengers between terminals at JFK in under 10 minutes. Trains run every 5-15 minutes'), read 2026-10-10; 600 s used."
  },
  {
   "type": "train_platform_access_seconds",
   "airport": "LAS",
   "line": "LAS-Tram-Blue",
   "name": "the tram",
   "seconds": 45,
   "source": "Not found in this pass; 180 s assumed (L)."
  },
  {
   "type": "train_platform_access_seconds",
   "airport": "LAS",
   "line": "LAS-Tram-Green",
   "name": "the tram",
   "seconds": 45,
   "source": "Not found in this pass; 180 s assumed (L)."
  },
  {
   "type": "train_platform_access_seconds",
   "airport": "LAS",
   "line": "LAS-Tram-Red",
   "name": "the tram",
   "seconds": 45,
   "source": "Not found in this pass; 180 s assumed (L)."
  },
  {
   "type": "train_platform_access_seconds",
   "airport": "MCO",
   "line": "MCO-GateLink-1",
   "name": "the airside shuttle train",
   "seconds": 30,
   "source": "https://flymco.com/connect-transfer/ ('Runs every 2 minutes, 24/7', Gate Link), read 2026-10-10"
  },
  {
   "type": "train_platform_access_seconds",
   "airport": "MCO",
   "line": "MCO-GateLink-30",
   "name": "the airside shuttle train",
   "seconds": 30,
   "source": "As MCO-GateLink-1."
  },
  {
   "type": "train_platform_access_seconds",
   "airport": "MCO",
   "line": "MCO-GateLink-70",
   "name": "the airside shuttle train",
   "seconds": 30,
   "source": "As MCO-GateLink-1."
  },
  {
   "type": "train_platform_access_seconds",
   "airport": "MCO",
   "line": "MCO-GateLink-100",
   "name": "the airside shuttle train",
   "seconds": 30,
   "source": "As MCO-GateLink-1."
  },
  {
   "type": "train_platform_access_seconds",
   "airport": "MCO",
   "line": "MCO-TerminalLink",
   "name": "the Terminal Link train",
   "seconds": 60,
   "source": "https://flymco.com/connect-transfer/ ('Runs every 4 minutes, 24/7', Terminal Link), read 2026-10-10"
  },
  {
   "type": "train_platform_access_seconds",
   "airport": "MIA",
   "line": "MIA-ETrain",
   "name": "the E Train",
   "seconds": 45,
   "source": "Not found in this pass; 180 s assumed (L)."
  },
  {
   "type": "train_platform_access_seconds",
   "airport": "MIA",
   "line": "MIA-SkyTrain",
   "name": "the Skytrain",
   "seconds": 45,
   "source": "Not found in this pass; 180 s assumed (L)."
  },
  {
   "type": "train_platform_access_seconds",
   "airport": "SEA",
   "line": "SEA-SouthLoop",
   "name": "the SEA Underground train",
   "seconds": 45,
   "source": "Not published on the Port of Seattle train guide (read 2026-10-10); 120 s assumed (L)."
  },
  {
   "type": "train_platform_access_seconds",
   "airport": "SEA",
   "line": "SEA-NorthLoop",
   "name": "the SEA Underground train",
   "seconds": 45,
   "source": "As SEA-SouthLoop (L)."
  },
  {
   "type": "train_platform_access_seconds",
   "airport": "SEA",
   "line": "SEA-TerminalShuttle",
   "name": "the SEA Underground train",
   "seconds": 45,
   "source": "As SEA-SouthLoop (L)."
  },
  {
   "type": "train_platform_access_seconds",
   "airport": "PHX",
   "line": "PHX-SkyTrain",
   "name": "PHX Sky Train",
   "seconds": 60,
   "source": "Not read in this pass; 240 s assumed (L)."
  },
  {
   "type": "train_platform_access_seconds",
   "airport": "EWR",
   "line": "EWR-AirTrain",
   "name": "AirTrain Newark",
   "seconds": 90,
   "source": "Not read in this pass; 240 s assumed (L)."
  },
  {
   "type": "train_platform_access_seconds",
   "airport": "IAH",
   "line": "IAH-Skyway",
   "name": "the Skyway",
   "seconds": 45,
   "source": "No headway found in this pass; 180 s assumed (L)."
  },
  {
   "type": "train_platform_access_seconds",
   "airport": "MSP",
   "line": "MSP-BlueLine-T1T2",
   "name": "the Blue Line light rail",
   "seconds": 60,
   "source": "No airport-published headway found in this pass; 10-minute headway assumed for the Blue Line between terminals (L)."
  },
  {
   "type": "train_platform_access_seconds",
   "airport": "MSP",
   "line": "MSP-ConcourseC-Tram",
   "name": "the Concourse C tram",
   "seconds": 30,
   "source": "Not found; 180 s assumed (L)."
  },
  {
   "type": "train_platform_access_seconds",
   "airport": "DTW",
   "line": "DTW-ExpressTram",
   "name": "the Express Tram",
   "seconds": 30,
   "source": "No published headway found in this pass; 180 s assumed (L)."
  },
  {
   "type": "checkpoint_extra_seconds",
   "airport": "JFK",
   "checkpoint": "JFK-T5",
   "seconds": 150,
   "note": "matches JFK's published Terminal 5 walk times (allowance, not mapped)"
  },
  {
   "type": "checkpoint_extra_seconds",
   "airport": "LGA",
   "checkpoint": "LGA-C",
   "seconds": 45,
   "note": "matches LaGuardia's published Terminal C walk times (allowance, not mapped)"
  },
  {
   "type": "checkpoint_extra_seconds",
   "airport": "SEA",
   "checkpoint": "SEA-1",
   "seconds": 38,
   "note": "escalator ride up to the A gates level (estimate, not mapped)"
  },
  {
   "type": "shared_door",
   "airport": "ORD",
   "gate": "B23",
   "door_gate": "B22",
   "note": "gate sits at the point of its door gate (airport map)"
  },
  {
   "type": "shared_door",
   "airport": "ORD",
   "gate": "B24",
   "door_gate": "B22",
   "note": "gate sits at the point of its door gate (airport map)"
  },
  {
   "type": "shared_door",
   "airport": "PHX",
   "gate": "B15B",
   "door_gate": "B15A",
   "note": "gate sits at the point of its door gate (airport map)"
  },
  {
   "type": "shared_door",
   "airport": "PHX",
   "gate": "B15C",
   "door_gate": "B15A",
   "note": "gate sits at the point of its door gate (airport map)"
  },
  {
   "type": "secure_area_inherited",
   "airport": "ORD",
   "gate": "F19",
   "from_gate": "F17",
   "metres": 35
  },
  {
   "type": "gate_alias",
   "airport": "PHX",
   "gate": "B15C",
   "maps_to": "B15A"
  }
 ],
 "exclusions": [
  {
   "type": "checkpoint_held",
   "airport": "BOS",
   "checkpoint": "BOS-7",
   "reason": "no walks start here"
  },
  {
   "type": "checkpoint_held",
   "airport": "LAX",
   "checkpoint": "LAX-T5",
   "reason": "no walks start here"
  },
  {
   "type": "gate_excluded_from_walking_network",
   "airport": "LAX",
   "gate": "408",
   "reason": "airport bus from the Tom Bradley bus gates 136 to 146",
   "source": "LAWA ops advisory 2019-19 (renumbering 2xx remote stands to 4xx), https://www.lawa.org/-/media/lawa-web/lawa-airport-operations/files/lax-operation-advisory/lax-ops-2019/lax-ops-advisory-201919.ashx ; lax-west-gates-2026-10-10.md Option A"
  },
  {
   "type": "gate_excluded_from_walking_network",
   "airport": "LAX",
   "gate": "407",
   "reason": "airport bus from the Tom Bradley bus gates 136 to 146",
   "source": "LAWA ops advisory 2019-19 (renumbering 2xx remote stands to 4xx), https://www.lawa.org/-/media/lawa-web/lawa-airport-operations/files/lax-operation-advisory/lax-ops-2019/lax-ops-advisory-201919.ashx ; lax-west-gates-2026-10-10.md Option A"
  },
  {
   "type": "gate_excluded_from_walking_network",
   "airport": "LAX",
   "gate": "406",
   "reason": "airport bus from the Tom Bradley bus gates 136 to 146",
   "source": "LAWA ops advisory 2019-19 (renumbering 2xx remote stands to 4xx), https://www.lawa.org/-/media/lawa-web/lawa-airport-operations/files/lax-operation-advisory/lax-ops-2019/lax-ops-advisory-201919.ashx ; lax-west-gates-2026-10-10.md Option A"
  },
  {
   "type": "gate_excluded_from_walking_network",
   "airport": "LAX",
   "gate": "409",
   "reason": "airport bus from the Tom Bradley bus gates 136 to 146",
   "source": "LAWA ops advisory 2019-19 (renumbering 2xx remote stands to 4xx), https://www.lawa.org/-/media/lawa-web/lawa-airport-operations/files/lax-operation-advisory/lax-ops-2019/lax-ops-advisory-201919.ashx ; lax-west-gates-2026-10-10.md Option A"
  },
  {
   "type": "gate_excluded_from_walking_network",
   "airport": "LAX",
   "gate": "418",
   "reason": "airport bus from the Tom Bradley bus gates 136 to 146",
   "source": "LAWA ops advisory 2019-19 (renumbering 2xx remote stands to 4xx), https://www.lawa.org/-/media/lawa-web/lawa-airport-operations/files/lax-operation-advisory/lax-ops-2019/lax-ops-advisory-201919.ashx ; lax-west-gates-2026-10-10.md Option A"
  },
  {
   "type": "gate_excluded_from_walking_network",
   "airport": "LAX",
   "gate": "416",
   "reason": "airport bus from the Tom Bradley bus gates 136 to 146",
   "source": "LAWA ops advisory 2019-19 (renumbering 2xx remote stands to 4xx), https://www.lawa.org/-/media/lawa-web/lawa-airport-operations/files/lax-operation-advisory/lax-ops-2019/lax-ops-advisory-201919.ashx ; lax-west-gates-2026-10-10.md Option A"
  },
  {
   "type": "gate_excluded_from_walking_network",
   "airport": "LAX",
   "gate": "414",
   "reason": "airport bus from the Tom Bradley bus gates 136 to 146",
   "source": "LAWA ops advisory 2019-19 (renumbering 2xx remote stands to 4xx), https://www.lawa.org/-/media/lawa-web/lawa-airport-operations/files/lax-operation-advisory/lax-ops-2019/lax-ops-advisory-201919.ashx ; lax-west-gates-2026-10-10.md Option A"
  },
  {
   "type": "gate_excluded_from_walking_network",
   "airport": "LAX",
   "gate": "412",
   "reason": "airport bus from the Tom Bradley bus gates 136 to 146",
   "source": "LAWA ops advisory 2019-19 (renumbering 2xx remote stands to 4xx), https://www.lawa.org/-/media/lawa-web/lawa-airport-operations/files/lax-operation-advisory/lax-ops-2019/lax-ops-advisory-201919.ashx ; lax-west-gates-2026-10-10.md Option A"
  },
  {
   "type": "gate_excluded_from_walking_network",
   "airport": "LAX",
   "gate": "410",
   "reason": "airport bus from the Tom Bradley bus gates 136 to 146",
   "source": "LAWA ops advisory 2019-19 (renumbering 2xx remote stands to 4xx), https://www.lawa.org/-/media/lawa-web/lawa-airport-operations/files/lax-operation-advisory/lax-ops-2019/lax-ops-advisory-201919.ashx ; lax-west-gates-2026-10-10.md Option A"
  },
  {
   "type": "gate_excluded_from_walking_network",
   "airport": "LAX",
   "gate": "402",
   "reason": "airport bus from the Tom Bradley bus gates 136 to 146",
   "source": "LAWA ops advisory 2019-19 (renumbering 2xx remote stands to 4xx), https://www.lawa.org/-/media/lawa-web/lawa-airport-operations/files/lax-operation-advisory/lax-ops-2019/lax-ops-advisory-201919.ashx ; lax-west-gates-2026-10-10.md Option A"
  },
  {
   "type": "gate_excluded_from_walking_network",
   "airport": "LAX",
   "gate": "52F",
   "reason": "airside bus from Terminal 4 (gate 47A) or Terminal 6",
   "source": "spotcheck-2026-10-14.md rows 1 to 9 (flylax.com Terminal 5 closure)"
  },
  {
   "type": "gate_excluded_from_walking_network",
   "airport": "LAX",
   "gate": "52E",
   "reason": "airside bus from Terminal 4 (gate 47A) or Terminal 6",
   "source": "spotcheck-2026-10-14.md rows 1 to 9 (flylax.com Terminal 5 closure)"
  },
  {
   "type": "gate_excluded_from_walking_network",
   "airport": "LAX",
   "gate": "52D",
   "reason": "airside bus from Terminal 4 (gate 47A) or Terminal 6",
   "source": "spotcheck-2026-10-14.md rows 1 to 9 (flylax.com Terminal 5 closure)"
  },
  {
   "type": "gate_excluded_from_walking_network",
   "airport": "LAX",
   "gate": "52C",
   "reason": "airside bus from Terminal 4 (gate 47A) or Terminal 6",
   "source": "spotcheck-2026-10-14.md rows 1 to 9 (flylax.com Terminal 5 closure)"
  },
  {
   "type": "gate_excluded_from_walking_network",
   "airport": "LAX",
   "gate": "52B",
   "reason": "airside bus from Terminal 4 (gate 47A) or Terminal 6",
   "source": "spotcheck-2026-10-14.md rows 1 to 9 (flylax.com Terminal 5 closure)"
  },
  {
   "type": "gate_excluded_from_walking_network",
   "airport": "LAX",
   "gate": "52G",
   "reason": "airside bus from Terminal 4 (gate 47A) or Terminal 6",
   "source": "spotcheck-2026-10-14.md rows 1 to 9 (flylax.com Terminal 5 closure)"
  },
  {
   "type": "gate_excluded_from_walking_network",
   "airport": "LAX",
   "gate": "52A",
   "reason": "airside bus from Terminal 4 (gate 47A) or Terminal 6",
   "source": "spotcheck-2026-10-14.md rows 1 to 9 (flylax.com Terminal 5 closure)"
  },
  {
   "type": "gate_excluded_from_walking_network",
   "airport": "LAX",
   "gate": "52I",
   "reason": "airside bus from Terminal 4 (gate 47A) or Terminal 6",
   "source": "spotcheck-2026-10-14.md rows 1 to 9 (flylax.com Terminal 5 closure)"
  },
  {
   "type": "gate_excluded_from_walking_network",
   "airport": "LAX",
   "gate": "52H",
   "reason": "airside bus from Terminal 4 (gate 47A) or Terminal 6",
   "source": "spotcheck-2026-10-14.md rows 1 to 9 (flylax.com Terminal 5 closure)"
  },
  {
   "type": "terminal_held",
   "airport": "LAX",
   "terminal": "Terminal 5",
   "note": "Closed for construction until 2028; no page and no walking times (call 2026-10-14).",
   "source": "https://www.flylax.com/lax-terminal-maps"
  }
 ]
}
