GTFS Schedule Validation Report

This report was generated by the Canonical GTFS Schedule validator, version 7.1.0 at 2026-01-23T19:52:21Z,
for the dataset file:///shared/ponytracker.zip. No country code was provided.

Use this report alongside our documentation.

Summary

Agencies included


Feed Info


Publisher Name:
Potomac Valley Transit Authority
Feed Email:
moreinfo@potomacvalleytransit.org
Feed Language:
English
Feed Start Date:
2023-08-01
Feed End Date:
2025-12-31

Files included


  1. agency.txt
  2. calendar.txt
  3. calendar_dates.txt
  4. fare_attributes.txt
  5. fare_rules.txt
  6. feed_info.txt
  7. routes.txt
  8. shapes.txt
  9. stop_times.txt
  10. stops.txt
  11. transfers.txt
  12. trips.txt

Counts


  • Agencies: 1
  • Blocks: 0
  • Routes: 24
  • Shapes: 29
  • Stops: 93
  • Trips: 44

Specification Compliance report

107 notices reported (2 errors, 105 warnings, 0 infos)

Notice Code Severity Total
stop_time_timepoint_without_times ERROR 2

stop_time_timepoint_without_times

arrival_time or departure_time not specified for timepoint.

Any records with stop_times.timepoint set to 1 must define a value for stop_times.arrival_time and stop_times.departure_time fields.

You can see more about this notice here.

csvRowNumber (?) The row number of the faulty record. tripId (?) The faulty record's id. stopSequence (?) The faulty record's `stops.stop_sequence`. specifiedField (?) Either `departure_time` or `arrival_time`.
172 "RMP_T02" 12 "arrival_time"
172 "RMP_T02" 12 "departure_time"
duplicate_route_name WARNING 1

duplicate_route_name

Two distinct routes have either the same route_short_name, the same route_long_name, or the same combination of route_short_name and route_long_name.

All routes of the same route_type with the same agency_id should have unique combinations of route_short_name and route_long_name.

Note that there may be valid cases where routes have the same short and long name, e.g., if they serve different areas. However, different directions must be modeled as the same route.

Example of bad data:

route_id route_short_name route_long_name
route1 U1 Southern
route2 U1 Southern

You can see more about this notice here.

csvRowNumber1 (?) The row number of the first occurrence. routeId1 (?) The id of the the first occurrence. csvRowNumber2 (?) The row number of the other occurrence. routeId2 (?) The id of the the other occurrence. routeShortName (?) Common `routes.route_short_name`. routeLongName (?) Common `routes.route_long_name`. routeTypeValue (?) Common `routes.route_type`. agencyId (?) Common `routes.agency_id`.
20 "PePP" 21 "PePP2" "" "Petersburg to Pilgrim's Pride" 3 "PVTA"
equal_shape_distance_diff_coordinates_distance_below_threshold WARNING 77

equal_shape_distance_diff_coordinates_distance_below_threshold

Two consecutive points have equal shape_dist_traveled and different lat/lon coordinates in shapes.txt and the distance between the two points is greater than 0 but less than 1.11m.

When sorted by shape.shape_pt_sequence, the values for shape_dist_traveled must increase along a shape. Two consecutive points with equal values for shape_dist_traveled and small difference of coordinates (greater than 0 but less than 1.11 m distance) result in a warning.

You can see more about this notice here.

Only the first 50 of 77 affected records are displayed below.

shapeId (?) The id of the faulty shape. csvRowNumber (?) The row number from `shapes.txt`. shapeDistTraveled (?) The faulty record's `shape_dist_traveled` value. shapePtSequence (?) The faulty record's `shapes.shape_pt_sequence`. prevCsvRowNumber (?) The row number from `shapes.txt` of the previous shape point. prevShapeDistTraveled (?) The previous shape point's `shape_dist_traveled` value. prevShapePtSequence (?) The previous record's `shapes.shape_pt_sequence`. actualDistanceBetweenShapePoints (?) Actual distance traveled along the shape from the first shape point to the previous shape point.
"PT" 17973 34.808 947 17972 34.808 946 0.8629216698393434
"PT" 18013 36.049 987 18012 36.049 986 0.8629096758661322
"PT" 18031 36.711 1005 18030 36.711 1004 0.8629074726623767
"PT" 18664 78.177 1638 18663 78.177 1637 0.861890888053219
"PT" 18775 88.119 1749 18774 88.119 1748 0.8612434662048448
"KRKOut" 1790 10.594 235 1789 10.594 234 0.8596038010383964
"KRKOut" 1835 11.535 280 1834 11.535 279 0.8596936629131994
"KRKOut" 1935 15.038 380 1934 15.038 379 0.8599651299955107
"KRKOut" 2471 37.334 916 2470 37.334 915 0.859987150784257
"RMPOut" 38109 19.338 489 38108 19.338 488 0.8607438728872374
"RMPOut" 38584 42.416 964 38583 42.416 963 0.8631051161973856
"RMPOut" 39069 61.539 1449 39068 61.539 1448 0.8641247892384198
"RMPOut" 39275 67.395 1655 39274 67.395 1654 0.864353751665427
"RMPOut" 39292 67.816 1672 39291 67.816 1671 0.8643506994272293
"PPK" 34162 45.677 1063 34161 45.677 1062 0.8598844169264461
"KPP" 34641 7.49 153 34640 7.49 152 0.8593214500543571
"KPP" 34856 13.847 368 34855 13.847 367 0.8599075503572207
"KPP" 35160 24.455 672 35159 24.455 671 0.8601298431755049
"MPP" 28819 11.683 303 28818 11.683 302 0.8572568424795728
"PPM" 31079 36.271 758 31078 36.271 757 0.8601767011003911
"KRKIn" 973 15.635 362 972 15.635 361 0.8601202495214356
"KRKIn" 994 16.362 383 993 16.362 382 0.8600502602222546
"KRKIn" 1181 23.751 570 1180 23.751 569 0.8599610700036877
"KRKIn" 1456 32.121 845 1455 32.121 844 0.8592282054754671
"RCIn" 8813 28.142 802 8812 28.142 801 0.8576684226252206
"PPP" 26045 24.1 712 26044 24.1 711 0.864353751665427
"PPP" 26062 24.521 729 26061 24.521 728 0.8643506994272293
"SPP" 26641 26.446 524 26640 26.446 523 0.8604090973051345
"PPS" 27994 30.715 679 27993 30.715 678 0.8604090973051345
"RPP" 32415 12.516 286 32414 12.516 285 0.8604090973051345
"PePPNew" 44127 1.675 56 44126 1.675 55 0.8643506994272293
"PePPNew" 44144 2.096 73 44143 2.096 72 0.864353751665427
"KCOut" 423 21.312 422 422 21.312 421 0.8570540967472491
"WRMP" 40433 5.695 112 40432 5.695 111 0.8618751926784533
"WRMP" 40681 23.765 360 40680 23.765 359 0.8608565288993911
"WRMP" 41223 43.84 902 41222 43.84 901 0.8607239697314498
"WRMP" 41785 69.948 1464 41784 69.948 1463 0.8601748563290416
"WRMP" 42142 86.287 1821 42141 86.287 1820 0.8604090973051345
"WRMP" 42292 90.95 1971 42291 90.95 1970 0.8607438728872374
"WRMP" 43409 134.869 3088 43408 134.869 3087 0.8641716874055283
"PMRW" 2557 2.233 58 2556 2.233 57 0.8641752302189976
"PMRW" 3064 17.909 565 3063 17.909 564 0.8636339441073495
"PMRW" 4279 70.108 1780 4278 70.108 1779 0.8601425114744659
"PMRW" 4505 80.398 2006 4504 80.398 2005 0.8604883849480839
"PMRW" 4997 101.974 2498 4996 101.974 2497 0.8604425324746782
"PMRW" 5600 134.016 3101 5599 134.016 3100 0.8621667141646908
"KT" 22185 10.028 234 22184 10.028 233 0.8596038010383964
"KT" 22230 10.969 279 22229 10.969 278 0.8596936629131994
"KT" 22352 15.043 401 22351 15.043 400 0.8599885051510391
"KT" 23093 44.58 1142 23092 44.58 1141 0.8601425114744659
expired_calendar WARNING 8

expired_calendar

Dataset should not contain date ranges for services that have already expired.

This warning takes into account the calendar_dates.txt file as well as the calendar.txt file.

You can see more about this notice here.

csvRowNumber (?) The row of the faulty record. serviceId (?) The service id of the faulty record.
2 "thurs"
3 "wed"
4 "mtwtf"
5 "mtwt"
6 "twtf"
7 "13w"
8 "2w"
9 "alldays"
fast_travel_between_consecutive_stops WARNING 2

fast_travel_between_consecutive_stops

A transit vehicle moves too fast between two consecutive stops.

The speed threshold depends on route type:

Route type Description Threshold, km/h
0 Light rail 100
1 Subway 150
2 Rail 500
3 Bus 150
4 Ferry 80
5 Cable tram 30
6 Aerial lift 50
7 Funicular 50
11 Trolleybus 150
12 Monorail 150
- Unknown 200

You can see more about this notice here.

tripCsvRowNumber (?) The row number of the problematic trip. tripId (?) `trip_id` of the problematic trip. routeId (?) `route_id` of the problematic trip. speedKph (?) Travel speed (km/h). distanceKm (?) Distance between stops (km). csvRowNumber1 (?) The row number of the first stop time. stopSequence1 (?) `stop_sequence` of the first stop. stopId1 (?) `stop_id` of the first stop. stopName1 (?) `stop_name` of the first stop. departureTime1 (?) `departure_time` of the first stop. csvRowNumber2 (?) The row number of the second stop time. stopSequence2 (?) `stop_sequence` of the second stop. stopId2 (?) `stop_id` of the second stop. stopName2 (?) `stop_name` of the second stop. arrivalTime2 (?) `arrival_time` of the second stop.
28 "PPKMor_T01" "PPK" 415.0090262858974 20.75045131429487 215 1 "223" "Moorefield Pilgrim's Pride" "08:00:00" 216 2 "229" "Purgitsville Post Office" "08:02:00"
3 "KROut_T02" "KRK" 563.1612447139071 9.386020745231784 12 5 "122" "Junction - Side Road, call (304) 257-1414 for a 3/4 mile deviation" "14:20:00" 13 6 "162" "Walgreens - Transfer Station, call (304) 257-1414 for a 3/4 mile deviation" "14:20:00"
fast_travel_between_far_stops WARNING 1

fast_travel_between_far_stops

A transit vehicle moves too fast between two far stops.

Two stops are considered "far" if they are more than 10 km apart. This normally indicates a more serious problem than too fast travel between consecutive stops.

The speed threshold depends on route type and are the same as fast_travel_between_consecutive_stops.

You can see more about this notice here.

tripCsvRowNumber (?) The row number of the problematic trip. tripId (?) `trip_id` of the problematic trip. routeId (?) `route_id` of the problematic trip. speedKph (?) Travel speed (km/h). distanceKm (?) Distance between stops (km). csvRowNumber1 (?) The row number of the first stop time. stopSequence1 (?) `stop_sequence` of the first stop. stopId1 (?) `stop_id` of the first stop. stopName1 (?) `stop_name` of the first stop. departureTime1 (?) `departure_time` of the first stop. csvRowNumber2 (?) The row number of the second stop time. stopSequence2 (?) `stop_sequence` of the second stop. stopId2 (?) `stop_id` of the second stop. stopName2 (?) `stop_name` of the second stop. arrivalTime2 (?) `arrival_time` of the second stop.
28 "PPKMor_T01" "PPK" 415.0090262858974 20.75045131429487 215 1 "223" "Moorefield Pilgrim's Pride" "08:00:00" 216 2 "229" "Purgitsville Post Office" "08:02:00"
feed_expiration_date7_days WARNING 1

feed_expiration_date7_days

Dataset should be valid for at least the next 7 days.

The dataset expiration date defined in feed_info.txt is in seven days or less. At any time, the published GTFS dataset should be valid for at least the next 7 days.

You can see more about this notice here.

csvRowNumber (?) The row number of the faulty record. currentDate (?) Current date (YYYYMMDD format). feedEndDate (?) Feed end date (YYYYMMDD format). suggestedExpirationDate (?) Suggested expiration date (YYYYMMDD format).
2 "20260123" "20251231" "20260130"
stop_too_far_from_shape WARNING 2

stop_too_far_from_shape

Stop too far from trip shape.

Per GTFS Best Practices, route alignments (in shapes.txt) should be within 100 meters of stop locations which a trip serves. This potentially indicates a problem with the location of the stop or the path of the shape.

You can see more about this notice here.

tripCsvRowNumber (?) The row number of the faulty record from `trips.txt`. shapeId (?) The id of the shape that is referred to. tripId (?) The id of the trip that is referred to. stopTimeCsvRowNumber (?) The row number of the faulty record from `stop_times.txt`. stopId (?) The id of the stop that is referred to. stopName (?) The name of the stop that is referred to. match (?) Latitude and longitude pair of the location. geoDistanceToShape (?) Distance from stop to shape.
22 "RMPOut" "RMP_T01" 153 "163" "Walmart Moorefield, call (304) 257-1414 for a 3/4 mile deviation" [39.08534225018706,-78.96248178357554] 118.08105115463904
24 "PMRIn" "PMR_T01" 183 "163" "Walmart Moorefield, call (304) 257-1414 for a 3/4 mile deviation" [39.08534225018706,-78.96248178357554] 118.08105115463904
stop_too_far_from_shape_using_user_distance WARNING 4

stop_too_far_from_shape_using_user_distance

Stop time too far from shape.

A stop time entry that is a large distance away from the location of the shape in shapes.txt as defined by shape_dist_traveled values.

You can see more about this notice here.

tripCsvRowNumber (?) The row number of the faulty record from `trips.txt`. shapeId (?) The id of the shape that is referred to. tripId (?) The id of the trip that is referred to. stopTimeCsvRowNumber (?) The row number of the faulty record from `stop_times.txt`. stopId (?) The id of the stop that is referred to. stopName (?) The name of the stop that is referred to. match (?) Latitude and longitude pair of the location. geoDistanceToShape (?) Distance from stop to shape.
38 "KT" "KT_T01" 282 "212" "Junction - Side Road" [39.31331999999999,-78.86265] 185.31897531469855
38 "KT" "KT_T01" 285 "210" "Fryes Flat Liberty Station" [39.31269,-78.65768] 522.1259647139376
40 "TK" "TK_T01" 309 "210" "Fryes Flat Liberty Station" [39.31269,-78.65768] 522.1259647139376
10 "RCOut" "RCOut_T01" 54 "151" "Ridgeley, call (304) 257-1414 for a 3/4 mile deviation" [39.64342,-78.76832] 137.98596472614227
stop_without_stop_time WARNING 7

stop_without_stop_time

A stop in stops.txt is not referenced by any stop_times.stop_id.

Such stops are not used by any trip and normally do not provide user value. This notice may indicate a typo in stop_times.txt.

You can see more about this notice here.

csvRowNumber (?) The row number of the faulty record. stopId (?) The id of the faulty stop. stopName (?) The name of the faulty stop.
2 "100" "1629 E Oldtown Rd"
11 "113" "Cheryl's Snack Shack"
28 "136" "Millstone Country Store"
33 "144" "Oldtown Fire Co"
34 "145" "Omps Grocery"
35 "146" "Paw Paw and Bloomery Pike"
48 "159" "State Line Store"
trip_coverage_not_active_for_next7_days WARNING 1

trip_coverage_not_active_for_next7_days

Trips data should be valid for at least the next seven days.

This notice is triggered if the date range where a significant number of trips are running ends in less than 7 days.

You can see more about this notice here.

currentDate (?) Current date (YYYYMMDD format). serviceWindowStartDate (?) The start date of the majority service window. serviceWindowEndDate (?) The end date of the majority service window.
"20260123" "20230801" "20251231"
unused_shape WARNING 1

unused_shape

Shape is not used in GTFS file trips.txt.

All records defined by GTFS shapes.txt should be used in trips.txt.

You can see more about this notice here.

shapeId (?) The faulty record's id. csvRowNumber (?) The row number of the faulty record.
"PePP" 24498