Virginia tolls: how to maintain

Files: /srv/toll/draft/VA, last built 2026-10-09 11:14 ET · the VA toll page · map test · facts below are read from the files each time this page is built (python3 /home/geo1/system/handbuilt/maintain_pages.py VA)

Procedure for this state

Two layers. The corpus (/home/geo1/maps/toll/corpus/VA) carries the rates printed on VDOT's "Toll Roads in Virginia" pages; va_state.py starts from it and adds positions, the operator-sourced amounts below, and the express-lane schedule rows.

When to check

Refresh and rebuild

  1. python3 /home/geo1/system/handbuilt/fetch_list.py VA [names] (all VA sources are in urls.txt).
  2. Rate images: erc_toll_chart_2026 (PNG) and snjb_toll_rates_2026 (JPG) are read by eye and typed into va_state.py (ERT: erc_toll_rates_api JSON is the machine source; SNJB: the image only). A new image means re-reading it.
  3. Rates only: python3 va_state.py. New or moved points: the full chain. OSM box for VA/MD/DE: -83.7,36.5,-75.0,39.75 (vamdde).

Express lanes

No operator publishes an amount or a minimum (regulation 24VAC30-620-30 B: rates "vary as necessary to manage the demand"). Each express-lane point carries rows with an empty amount: live (toll in effect, with hours and direction) or closed (reversible lanes not running that way). The engine turns them into notices in passed[] with express_lanes; they never enter a total. The router never drives reversible lanes (OSM oneway=reversible), so the 95, 395 and 64 Norfolk lanes are told through the beside: points on the general lanes next to them.

Watch out

The chain every state shares

Hosts: geo1 (192.168.50.220) holds the sources, builders, drafts, map and API; b100 (192.168.50.14) is the test client. All times are Eastern.

whatwhere (geo1 unless said)
sources list/home/geo1/maps/toll/VA/urls.txt (name <tab> URL)
archived sources/home/geo1/maps/toll/VA/sources/<name>/<YYYY-MM-DD>/ (file + meta.json: url, fetched, sha256)
builder/home/geo1/system/handbuilt/va_state.py; shared code toll_common.py
OpenStreetMap inputs/home/geo1/system/handbuilt/osm/va_* (cut from /home/geo1/maps/osm/us-latest.osm.pbf)
outputdraft /srv/toll/draft/VA/ (the builders write here); published /srv/toll/VA/ (copied from the draft by promote.py publish). The map and the API read the published page, or the draft while it is listed for review
toll enginesource /home/geo1/maps/web/tolls.js, served copy /srv/maps/tolls.js (the API runs the served copy)
API/home/geo1/maps/api/server.mjs on 127.0.0.1:8090 behind nginx /api/; pid in logs/test.pid
regression tripsb100: ~/apitest/site/cases.json, runner ~/apitest/run.py, browser check ~/apitest/browser.mjs

1. Refresh a source

  1. Fetch into a new dated folder: python3 /home/geo1/system/handbuilt/fetch_list.py VA [name ...] (no names = every line of urls.txt). A new source: add a line to urls.txt first, then fetch it by name.
  2. A site that refuses geo1 (HTTP 403) or scripts: fetch it on b100 in headless Chrome with node ~/apitest/fetch_b100.mjs <out> <name>=<url> ..., then rsync -a <out>/ geo1@192.168.50.220:/home/geo1/maps/toll/VA/sources/. Its meta.json records that it came from b100.
  3. Compare the new file with the previous dated one (diff, pdftotext -layout for PDFs). Same content: nothing to do. Changed amounts or a new effective date: rebuild (step 2) and update the expected amounts of the affected regression trips from the operator's own figures.

1b. The corpus (NJ, PA, VA start from it; DE is published from it)

python3 /home/geo1/maps/toll/bin/tollup.py VA update fetches the adapter's sources (bin/adapters/va.py), stores a document only when its content changes, writes one rate file per version under /home/geo1/maps/toll/VA/rates/ and appends every price change to history.csv (every run to runs.log). TOLL_WEB=/home/geo1/maps/toll/corpus python3 /home/geo1/maps/toll/bin/publish.py VA writes the corpus /home/geo1/maps/toll/corpus/VA from it (DE: plain publish.py DE writes /srv/toll/DE). Never hand-edit either. Then rebuild the draft (step 2) so it picks up the new rates.

2. Rebuild

3. Load it into the API and test from b100

  1. The API reads the toll pages and tolls.js when it starts. Restart it: cd /home/geo1/maps/api && kill $(cat logs/test.pid); (nohup /home/geo1/maps/node/bin/node server.mjs > logs/server.log 2>&1 & echo $! > logs/test.pid) (it is started by hand, not a service).
  2. From b100 only: python3 ~/apitest/run.py ~/apitest/site/cases.json. Every trip must be OK. Add a trip for every rate or rule you change, with the amount taken from the operator's own source.
  3. Engine change (tolls.js): edit /home/geo1/maps/web/tolls.js, check with /home/geo1/maps/node/bin/node --check, copy to /srv/maps/tolls.js with sudo install -o www-data -g www-data -m 644, restart the API, run the trips.

4. OpenStreetMap refresh (all states at once)

The builders match toll points to the OSM way ids the router drives, so the extracts here must come from the same us-latest.osm.pbf the router (Valhalla, /home/geo1/maps/valhalla_data) was built from (now 2026-09-27). New OSM data means: rebuild the router tiles, then for each state cut the box, rebuild its OSM inputs and run the full chain, then compare untied_toll_nodes.csv and the estimated positions below. The box for VA and the cutting commands are in the state's procedure above; the toll-node and way index comes from python3 tollnode_ways.py VA.

5. Publish

A rebuild writes the draft (/srv/toll/draft/VA); the published page (/srv/toll/VA) does not change. python3 /home/geo1/maps/toll/bin/promote.py review VA lists the draft for review: the map and the API then read it instead of the published page. Run the regression trips from b100. After approval, python3 /home/geo1/maps/toll/bin/promote.py publish VA copies the draft to /srv/toll/VA (the previous page is kept under /home/geo1/maps/toll/VA/published/<time>/) and takes it off the review list. After a change, update the coverage line for VA in the API page (/api.html, generator /home/geo1/maps/api/doc/api_page.py) and rebuild this page: python3 /home/geo1/system/handbuilt/maintain_pages.py VA.

Sources (50)

Each fetch is kept in its own dated folder under /home/geo1/maps/toll/VA/sources/<name>/; the builder always reads the newest one, so a new fetch takes effect at the next rebuild and the old one stays for comparison.

sourcefetched (newest)fetches kepthowlisted in urls.txtrows using it
cbbt_tolls
https://www.cbbt.com/tolls/
2026-10-031fetch_list.pyno16
chesapeake_dominion_page
https://www.cityofchesapeake.net/957/Dominion-Boulevard-Veterans-Bridge
2026-10-031fetch_list.pyno
chesapeake_dominion_toll_schedule
https://www.cityofchesapeake.net/966/Toll-Schedule
2026-10-031fetch_list.pyno6
chesapeake_expressway_page
https://www.cityofchesapeake.net/2982/Chesapeake-Expressway
2026-10-031fetch_list.pyno12
dullesgreenway_calculator
https://www.dullesgreenway.com/toll-calculator/
2026-10-091fetch_list.pyyes
dullesgreenway_tolls_json
https://www.dullesgreenway.com/wp-content/themes/dulles-greenway/resources/assets/json/tol
2026-10-091fetch_list.pyyes280
erc_toll_chart_2026
https://driveerc.com/contentService/sites/default/files/inline-images/ERC%202026%20Toll%20
2026-10-091fetch_list.pyyes
erc_toll_rates_api
https://driveerc.com/contentService/api/ratesandsavings/toll-rates
2026-10-091fetch_list.pyyes16
expresslanes_faqs
https://www.expresslanes.com/faqs
2026-10-091fetch_list.pyyes8
expresslanes_home
https://www.expresslanes.com/
2026-10-091fetch_list.pyyes
expresslanes_learn_the_lanes
https://expresslanes.com/learn-the-lanes
2026-10-091fetch_list.pyyes64
expresslanes_memorial_summer_2025
https://expresslanes.com/MemorialDaySummer2025
2026-10-091fetch_list.pyyes
mwaa_dtr_toll_rates_page
https://www.dullestollroad.com/toll-rates-electronic-payment-and-pay-plate
2026-10-081fetch_list.pyno
mwaa_how_to_pay_tolls
https://www.dullestollroad.com/toll-rates/how-pay-tolls
2026-10-031fetch_list.pyno
mwaa_regulations_10_1
https://www.dullestollroad.com/sites/dullestollroad.com/files/2022-06/proposed_amendment_t
2026-10-031fetch_list.pyno60
pocahontas_toll_rates
https://pocahontas895.com/toll-rates/
2026-10-031fetch_list.pyno15
ride66express_corridor_map
https://static.ride66express.com/wp-content/uploads/2023/11/05001226/corridor-map.png
2026-10-081fetch_list.pyno
ride66express_dynamic_pricing
https://ride66express.com/pricing/how-dynamic-pricing-works/
2026-10-091fetch_list.pyyes7
ride66express_hov_free
https://ride66express.com/pricing/hov-travel-free/
2026-10-091fetch_list.pyyes
ride66express_i66_plugin_js
https://ride66express.com/wp-content/plugins/i66//public/js/scripts.js?ver=1.4.0
2026-10-091fetch_list.pyyes
ride66express_maps_page
https://ride66express.com/roadway-info/maps/
2026-10-081fetch_list.pyno
ride66express_plan_trip
https://ride66express.com/pricing/plan-your-trip/
2026-10-091fetch_list.pyyes
ride66express_plan_trip_js
https://ride66express.com/wp-content/themes/i66/assets/js/modules/plan-your-trip.js?ver=1.
2026-10-091fetch_list.pyyes
ride66express_pricing
https://ride66express.com/pricing/
2026-10-091fetch_list.pyyes
ride66express_toll_segments
https://ride66express.com/pricing/pricing-and-toll-segments/
2026-10-081fetch_list.pyno
rmta_all_electronic_tolling
https://www.rmtaonline.org/all-electronic-tolling/
2026-10-031fetch_list.pyno
rmta_toll_rates
https://www.rmtaonline.org/toll-rates/
2026-10-031fetch_list.pyno63
snjb_toll_rates_2026
https://snjb.net/wp-content/uploads/2026/06/thumbnail_thumbnail_2026-Toll-Rates.jpg
2026-10-091fetch_list.pyyes
snjb_tolling
https://snjb.net/tolling/
2026-10-091fetch_list.pyyes8
tollroadsinvirginia_facilities
https://www.tollroadsinvirginia.com/Home/TollFacilities/
2026-10-081fetch_list.pyno19
tollroadsinvirginia_map_overview
https://www.tollroadsinvirginia.com/Home/MapOverview/
2026-10-081fetch_list.pyno
transurban_live_prices
https://www.expresslanes.com/maps-api/infra-price-confirmed-all
2026-10-091fetch_list.pyyes
trv_expresslanes395
https://www.tollroadsinvirginia.com/Facility/ExpressLanes395/
2026-10-091fetch_list.pyyes
trv_expresslanes495
https://www.tollroadsinvirginia.com/Facility/ExpressLanes495/
2026-10-091fetch_list.pyyes
trv_expresslanes64
https://www.tollroadsinvirginia.com/Facility/ExpressLanes64/
2026-10-091fetch_list.pyyes
trv_expresslanes66i
https://www.tollroadsinvirginia.com/Facility/ExpressLanes66InsideTheBeltway/
2026-10-091fetch_list.pyyes
trv_expresslanes66o
https://www.tollroadsinvirginia.com/Facility/ExpressLanes66OutsideTheBeltway/
2026-10-091fetch_list.pyyes
trv_expresslanes95
https://www.tollroadsinvirginia.com/Facility/ExpressLanes95/
2026-10-091fetch_list.pyyes
va_register_42_7_24vac30_620
https://register.dls.virginia.gov/details.aspx?id=12012
2026-10-031fetch_list.pyno
vai66tolls_home
https://vai66tolls.com/
2026-10-091fetch_list.pyyes
vai66tolls_intchload_js
https://vai66tolls.com/js/intchLoad.js
2026-10-091fetch_list.pyyes
vai66tolls_main_js
https://vai66tolls.com/js/main.js
2026-10-091fetch_list.pyyes
vdot_24vac30_620_30
https://law.lis.virginia.gov/admincode/title24/agency30/chapter620/section30/
2026-10-031fetch_list.pyno20
vdot_66express_about
https://www.vdot.virginia.gov/projects/major-projects/66expresslanes/about/
2026-10-091fetch_list.pyyes16
vdot_66express_faqs
https://www.vdot.virginia.gov/projects/major-projects/66expresslanes/faqs/
2026-10-091fetch_list.pyyes
vdot_about_hrel
https://www.vdot.virginia.gov/projects/major-projects/64expresslanes/about-hrel/
2026-10-081fetch_list.pyno
vdot_hrel_chesapeake_segment
https://vdot.virginia.gov/projects/major-projects/64expresslanes/about-hrel/chesapeake-seg
2026-10-091fetch_list.pyyes1
vdot_hrel_dynamic_tolling
https://vdot.virginia.gov/projects/major-projects/64expresslanes/using-the-lanes/dynamic-t
2026-10-091fetch_list.pyyes
vdot_hrel_faqs
https://vdot.virginia.gov/projects/major-projects/64expresslanes/using-the-lanes/faqs/
2026-10-091fetch_list.pyyes
vdot_hrel_norfolk_reversible
https://vdot.virginia.gov/projects/major-projects/64expresslanes/about-hrel/norfolk-revers
2026-10-091fetch_list.pyyes12

Facilities (19)

idfacilityoperatorpointsrate / trip rowseffective dates in the rowssource
VA-TU-495495 Express LanesTransurban (USA) Operations Inc88(none printed)tollroadsinvirginia_facilities
VA-VDOT-66I66 Express Lanes - Inside the BeltwayVDOT416(none printed)tollroadsinvirginia_facilities
VA-I66EMP-66O66 Express Lanes - Outside the BeltwayI-66 Express Mobility Partners77(none printed)tollroadsinvirginia_facilities
VA-TU-9595 Express LanesTransurban (USA) Operations Inc1144(none printed)tollroadsinvirginia_facilities
VA-TU-395395 Express LanesTransurban (USA) Operations Inc520(none printed)tollroadsinvirginia_facilities
VA-TDGDulles GreenwayToll Road Investors Partnership II (Dulles Greenway)72802025-08-01tollroadsinvirginia_facilities
VA-MWAA-DTRDulles Toll RoadMetropolitan Washington Airports Authority12602023-01-01tollroadsinvirginia_facilities
VA-POCAPocahontas ParkwayGlobalvia3152026-04-01tollroadsinvirginia_facilities
VA-VDOT-PPEPowhite Parkway ExtensionVDOT4202025-12-17tollroadsinvirginia_facilities
VA-RMTA-BBBoulevard BridgeRichmond Metropolitan Transportation Authority (RMTA)132026-10-03_observedtollroadsinvirginia_facilities
VA-RMTA-DEDowntown ExpresswayRichmond Metropolitan Transportation Authority (RMTA)3362026-10-03_observedtollroadsinvirginia_facilities
VA-RMTA-PPPowhite ParkwayRichmond Metropolitan Transportation Authority (RMTA)2242026-10-03_observedtollroadsinvirginia_facilities
VA-VDOT-64X64 Express Lanes (Hampton Roads Express Lanes)VDOT413(none printed)tollroadsinvirginia_facilities
VA-CBBTChesapeake Bay Bridge-TunnelChesapeake Bay Bridge and Tunnel Commission1162024-01-01tollroadsinvirginia_facilities
VA-CHES-XChesapeake ExpresswayCity of Chesapeake1122026-05-01tollroadsinvirginia_facilities
VA-CHES-DBVBDominion Boulevard Veterans BridgeCity of Chesapeake162026-07-01tollroadsinvirginia_facilities
VA-ERT-DTElizabeth River Tunnels - Downtown TunnelElizabeth River Crossings (ERC)182026-01-01tollroadsinvirginia_facilities
VA-ERT-MTElizabeth River Tunnels - Midtown TunnelElizabeth River Crossings (ERC)182026-01-01tollroadsinvirginia_facilities
VA-SNJBSouth Norfolk Jordan BridgeUnited Bridge Partners182026-01-01tollroadsinvirginia_facilities

Positions placed by estimate (20): re-check when OpenStreetMap or the operator changes

pointfacilitylocationplaced onwhy
VA-TU-395-03395 Express Lanesexpress lanes north of Shirlingtonexpress-lane way (no OSM gantry)R3 estimate: OSM maps the I-395 express lanes to the D.C. line but no toll gantry north of Seminary Road; a booth on the express-lane way at 38.852 N so a trip on that stretch is located (Transurban does not publish gantry positions)
VA-I66EMP-66O-0166 Express Lanes - Outside the Beltwayeastbound EB Segment 1 (10 miles): Gainesville (US 29) to Stringfellow Roadoperator corridor map + express-lane wayR3 estimate: the 66 Express corridor map (I-66 Express Mobility Partners) draws EB Segment 1 (10 miles) from Gainesville (US 29) to Stringfellow Road; the map is not to scale, so the segment's limits are taken at the interchanges' longitudes on OSM (-77.597, -77.399) and its booth is on the eastbound express-lane way midway; the OSM toll gantry 9091703233 on this segment
VA-I66EMP-66O-0266 Express Lanes - Outside the Beltwayeastbound EB Segment 2 (5 miles): Stringfellow Road to Chain Bridge Road (VA 123)operator corridor map + express-lane wayR3 estimate: the 66 Express corridor map (I-66 Express Mobility Partners) draws EB Segment 2 (5 miles) from Stringfellow Road to Chain Bridge Road (VA 123); the map is not to scale, so the segment's limits are taken at the interchanges' longitudes on OSM (-77.399, -77.308) and its booth is on the eastbound express-lane way midway
VA-I66EMP-66O-0366 Express Lanes - Outside the Beltwayeastbound EB Segment 3 (7 miles): Chain Bridge Road (VA 123) to I-495operator corridor map + express-lane wayR3 estimate: the 66 Express corridor map (I-66 Express Mobility Partners) draws EB Segment 3 (7 miles) from Chain Bridge Road (VA 123) to I-495; the map is not to scale, so the segment's limits are taken at the interchanges' longitudes on OSM (-77.308, -77.222) and its booth is on the eastbound express-lane way midway
VA-I66EMP-66O-0466 Express Lanes - Outside the Beltwaywestbound WB Segment 3 (5 miles): I-495 to Chain Bridge Road (VA 123)operator corridor map + express-lane wayR3 estimate: the 66 Express corridor map (I-66 Express Mobility Partners) draws WB Segment 3 (5 miles) from I-495 to Chain Bridge Road (VA 123); the map is not to scale, so the segment's limits are taken at the interchanges' longitudes on OSM (-77.222, -77.308) and its booth is on the westbound express-lane way midway
VA-I66EMP-66O-0566 Express Lanes - Outside the Beltwaywestbound WB Segment 2 (5 miles): Chain Bridge Road (VA 123) to Sully Road (VA 28)operator corridor map + express-lane wayR3 estimate: the 66 Express corridor map (I-66 Express Mobility Partners) draws WB Segment 2 (5 miles) from Chain Bridge Road (VA 123) to Sully Road (VA 28); the map is not to scale, so the segment's limits are taken at the interchanges' longitudes on OSM (-77.308, -77.445) and its booth is on the westbound express-lane way midway
VA-I66EMP-66O-0666 Express Lanes - Outside the Beltwaywestbound WB Segment 1B (3 miles): Sully Road (VA 28) to Sudley Road (VA 234 Business)operator corridor map + express-lane wayR3 estimate: the 66 Express corridor map (I-66 Express Mobility Partners) draws WB Segment 1B (3 miles) from Sully Road (VA 28) to Sudley Road (VA 234 Business); the map is not to scale, so the segment's limits are taken at the interchanges' longitudes on OSM (-77.445, -77.497) and its booth is on the westbound express-lane way midway
VA-I66EMP-66O-0766 Express Lanes - Outside the Beltwaywestbound WB Segment 1A (7 miles): Sudley Road (VA 234 Business) to Gainesville (US 29)operator corridor map + express-lane wayR3 estimate: the 66 Express corridor map (I-66 Express Mobility Partners) draws WB Segment 1A (7 miles) from Sudley Road (VA 234 Business) to Gainesville (US 29); the map is not to scale, so the segment's limits are taken at the interchanges' longitudes on OSM (-77.497, -77.597) and its booth is on the westbound express-lane way midway
VA-TU-95-0895 Express Lanesexpress lanes between Dumfries and Garrisonville Roadexpress-lane way (no OSM gantry)R3 estimate: OSM maps the 95 Express Lanes here but no toll gantry; a booth on the express-lane way at 38.505 N so a trip on this stretch is located (Transurban does not publish gantry positions)
VA-TU-95-0995 Express LanesFredericksburg extension, Garrisonville Road to US 17express-lane way (no OSM gantry)R3 estimate: OSM maps the 95 Express Lanes here but no toll gantry; a booth on the express-lane way at 38.41 N so a trip on this stretch is located (Transurban does not publish gantry positions)
VA-TU-495-07495 Express Lanesnorthbound express lanes north of Balls Hill (495 NEXT, to the George Washington Memorial Parkway)express-lane way (no OSM gantry)R3 estimate: the 495 Express Lanes extension north of the Dulles Toll Road (495 NEXT, open since late November 2025) is mapped in OSM (toll=yes) with no toll gantry; a booth on the express-lane way at 38.952 N
VA-TU-495-08495 Express Lanessouthbound express lanes north of Balls Hill (495 NEXT, to the George Washington Memorial Parkway)express-lane way (no OSM gantry)R3 estimate: the 495 Express Lanes extension north of the Dulles Toll Road (495 NEXT, open since late November 2025) is mapped in OSM (toll=yes) with no toll gantry; a booth on the express-lane way at 38.952 N
VA-VDOT-64X-0164 Express Lanes (Hampton Roads Express Lanes)Norfolk reversible express lanes (I-264 to I-564)express-lane way (no OSM gantry)R3 estimate: VDOT: 'Norfolk Reversible Express Lanes from I-264 to I-564' tolled; OSM maps them as 'I 64 Express Lanes' with no toll gantry: a booth midway on that way
VA-VDOT-64X-0264 Express Lanes (Hampton Roads Express Lanes)Chesapeake express lanes (Bowers Hill to I-264), at the High Rise Bridgethe express-lane ways (OSM: one-lane motorways, toll=yes, hov=yes)R3 estimate: VDOT: the Chesapeake segment adds 'one Express Lane alongside the two general purpose lanes in each direction'; OSM maps each as its own one-lane way (eastbound 1309089898, westbound 1467051228): a booth on each near the High Rise Bridge
VA-TU-95-1095 Express Lanesbeside: northbound general lanes of I-95 at Lortongeneral-lane carriageway beside reversible express lanesR3 estimate: the router does not drive reversible lanes (OSM oneway=reversible); a point on the northbound general lanes of I 95 beside them, so a route there is told whether the express lanes run its way and where their price is posted (not a toll)
VA-TU-95-1195 Express Lanesbeside: southbound general lanes of I-95 at Lortongeneral-lane carriageway beside reversible express lanesR3 estimate: the router does not drive reversible lanes (OSM oneway=reversible); a point on the southbound general lanes of I 95 beside them, so a route there is told whether the express lanes run its way and where their price is posted (not a toll)
VA-TU-395-04395 Express Lanesbeside: northbound general lanes of I-395 at Shirlingtongeneral-lane carriageway beside reversible express lanesR3 estimate: the router does not drive reversible lanes (OSM oneway=reversible); a point on the northbound general lanes of I 395 beside them, so a route there is told whether the express lanes run its way and where their price is posted (not a toll)
VA-TU-395-05395 Express Lanesbeside: southbound general lanes of I-395 at Shirlingtongeneral-lane carriageway beside reversible express lanesR3 estimate: the router does not drive reversible lanes (OSM oneway=reversible); a point on the southbound general lanes of I 395 beside them, so a route there is told whether the express lanes run its way and where their price is posted (not a toll)
VA-VDOT-64X-0364 Express Lanes (Hampton Roads Express Lanes)beside: eastbound general lanes of I-64 in Norfolk, Norfolk reversible lanesgeneral-lane carriageway beside reversible express lanesR3 estimate: the router does not drive reversible lanes (OSM oneway=reversible); a point on the eastbound general lanes of I 64 beside them, so a route there is told whether the express lanes run its way and where their price is posted (not a toll)
VA-VDOT-64X-0464 Express Lanes (Hampton Roads Express Lanes)beside: westbound general lanes of I-64 in Norfolk, Norfolk reversible lanesgeneral-lane carriageway beside reversible express lanesR3 estimate: the router does not drive reversible lanes (OSM oneway=reversible); a point on the westbound general lanes of I 64 beside them, so a route there is told whether the express lanes run its way and where their price is posted (not a toll)

Decisions by rule

R2a: 7, R2b: 57, R3: 20, direction: 3, not: 40, priced: 6 (all in decisions.csv).

Open gaps (0)

None.

Untied OSM toll nodes: 134

Toll booths / gantries mapped in OpenStreetMap on or near this state's roads that no toll point claims; a route through one lists it under unpriced. After an OSM refresh, look at new ones here (untied_toll_nodes.csv): a new gantry on a priced road means a point is missing.

Regression trips for VA (16)

Run from b100 (never on geo1): python3 ~/apitest/run.py ~/apitest/site/cases.json. Every trip must come back OK; a changed amount is either a rate change (update the expected amount from the operator's own source) or a fault.

tripexpected
VA Greenway Leesburg->Dulles eastbound 07:30 Wed, E-ZPass (Main Plaza rush $5.80)$5.80
VA Greenway Leesburg->Dulles eastbound 12:00 Wed, E-ZPass (Main Plaza $5.25)$5.25
VA Greenway Dulles Airport->Leesburg westbound 17:00 Wed, E-ZPass (DTR Sully Road ramp $2.00 + Greenway Main Plaza rush $5.80, as the Greenway page notes)$7.80
VA Downtown Tunnel Norfolk->Portsmouth 08:00 Wed, E-ZPass (peak $3.40)$3.40
VA Downtown Tunnel Portsmouth->Norfolk 12:00 Wed, Pay by Plate (off-peak $7.25)$7.25
VA Downtown Tunnel Norfolk->Portsmouth 08:00 Sat, E-ZPass (weekend off-peak $2.42)$2.42
VA Midtown Tunnel Norfolk->Portsmouth 12:00 Wed, E-ZPass (off-peak $2.42)$2.42
VA Jordan Bridge 12:00 Wed, E-ZPass ($3.70)$3.70
VA Jordan Bridge 12:00 Wed, pay-by-mail ($3.70 + $5.50)$9.20
VA 66 Inside eastbound Sat 08:00: toll-free hours (VDOT), $0.00$0.00
VA 66 Inside eastbound Wed 11:00: toll-free hours (VDOT), $0.00$0.00
VA 66 Inside westbound Wed 08:00: toll-free hours (VDOT), $0.00$0.00
VA 495 Express Tysons -> Springfield: optional express lanes, a notice only, never in the total ($0.00)$0.00
VA 66 Inside eastbound Wed 08:00 (toll hours): notice only ($0.00)$0.00
VA 66 Outside Gainesville -> Vienna: notice only ($0.00)$0.00
VA 64 Chesapeake express lane Bowers Hill -> Battlefield Blvd: notice only ($0.00)$0.00