Gtfs Validator Versions Save

Canonical GTFS Validator project for schedule (static) files.

v5.0.1

1 month ago

This minor release was created to fix a key bug that was preventing feed URLs from running successfully in the Web UI. This bug only impacted the Web UI, not the desktop app or CLI tool.

For more details on our 5.0.0 release, you can read about them here.

PR List

Full Changelog: https://github.com/MobilityData/gtfs-validator/compare/v5.0.0...v5.0.1

v5.0.0

2 months ago

Highlights

Reducing the noisiness of errors

There have been repeated issues with the sensitivity of trip_distance_exceeds_shape_distanceand equal_shape_distance_diff_coordinates. No more! We did an extensive review of real life GTFS data from the Mobility Database and decided on thresholds for these two errors. Now data producers will only see these errors when they’re a significant issue for data quality. Below the thresholds, these issues will generate a warning instead.

Breaking changes: JSON report improvements

  • Issue #1652: Use ISO_ZONED_DATE_TIME for validatedAt field to be machine readable.
  • Issue #1685 Change gtfsComponents label to gtfsFeatures.

Notice changes

  • equal_shape_distance_diff_coordinates: Error is triggered when there's 1.11 metres or more distance between the different shape points. Discussion here.
  • trip_distance_exceeds_shape_distance: Error is triggered when there's 11.1 metres or more distance between the last stop point and the last shape point. Discussion here.
  • stop_without_zone_id changed from πŸ”΄ ERROR to βšͺ INFO and updated so it is only triggered when there are route-based fare related fields in fare_rules.txt . Discussed in the spec in https://github.com/google/transit/pull/432.

New notices

  • route_networks_specified_in_more_than_one_file: New πŸ”΄ ERROR for Fares v2 data. Added to spec in https://github.com/google/transit/pull/405.
  • equal_shape_distance_diff_coordinates_distance_below_threshold: New 🟑 WARNING that is triggered when the distance between the different shape points is less than 1.11 metres.
  • trip_distance_exceeds_shape_distance_below_threshold: New 🟑 WARNING that is triggered when the distance between the last stop point and the last shape point is less than 11.1 metres.

Impacts on existing data

You can find the impact of this release on all existing datasets we have in the Mobility Database in this spreadsheet.

Other notable improvements

New Contributors

PR List

Full Changelog: https://github.com/MobilityData/gtfs-validator/compare/v4.2.0...v5.0.0

v4.2.0

6 months ago

Overview

This release includes

  • Support for time variable fares that was adopted in GTFS in July 2023
  • A new summary section of the validation report, including tags to see if a feed has GTFS components like Blocks, Frequencies, or Fares v2
  • Automatic generation of the RULES documentation on https://gtfs-validator.mobilitydata.org/rules.html
  • New releases published to Maven

New notices

Notices for Fares v2 - time variable fares, added to the spec in https://github.com/google/transit/pull/357

  • timeframe_overlap πŸ”΄ ERROR
  • timeframe_only_start_or_end_time_specified πŸ”΄ ERROR
  • timeframe_start_or_end_time_greater_than_twenty_four_hours πŸ”΄ ERROR

Changed notices

  • Downgraded platform_without_parent_station 🟠WARNING β†’ βšͺ INFO
  • Replaced missing_timepoint_column 🟠WARNING β†’ missing_recommended_column 🟠WARNING

Impacts on existing data

You can find the impact of this release on all existing datasets we have in the Mobility database in this spreadsheet.

Full Changelog: https://github.com/MobilityData/gtfs-validator/compare/v4.1.0...v4.2.0

New Contributors

What's Changed

Rules

Bug fixes

New summary section of report

Generate documentation automatically

Web-based validator improvements

For developers: Ability to change "required" status of GTFS files/tables at run-time instead of compile time

Report improvements

Documentation updates

Maintenance

v4.1.0

1 year ago

Overview

This release includes the addition of the Web version available at https://gtfs-validator.mobilitydata.org/, new notices, support for Fare Media that was adopted in GTFS in March 2023, and initial support to programmatically generate the notice documentation. See the notice mapping between releases in NOTICE_MIGRATION.md.

New notices

  • invalid_currency_amount πŸ”΄ ERROR
  • missing_stop_name πŸ”΄ ERROR
  • stop_without_location πŸ”΄ ERROR
  • too_many_rows πŸ”΄ ERROR
  • duplicate_fare_media 🟠 WARNING
  • expired_calendar 🟠 WARNING
  • missing_feed_info_date 🟠 WARNING
  • mixed_case_recommended_field 🟠 WARNING
  • route_long_name_contains_short_name 🟠 WARNING
  • trip_coverage_not_active_for_next7_days 🟠 WARNING

Impacts on existing data

You can find the impact of this release on all existing datasets we have in the Mobility database in this spreadsheet.

What's Changed

Web-based validator

Bug fixes

Rules

Documentation updates

Generate the doc programmatically

Acceptance tests improvements

General maintenance + other good stuff

New Contributors

Full Changelog: https://github.com/MobilityData/gtfs-validator/compare/v4.0.0...v4.1.0

v4.0.0

1 year ago

Overview

This is tagged as a major release because adding the rules for Fares v2 base implementation is affecting the validity of existing datasets. We started to evaluate the impact of new rules on production data in 2022 with the acceptance tests, which runs this validator on all datasets from the Mobility Database, and reports if additional errors appear. When new errors appear, we publish a major release.

New notices

GTFS-Fares v2 base implementation, added in google/transit/pull/286

  • fare_transfer_rule_duration_limit_type_without_duration_limit πŸ”΄ ERROR
  • fare_transfer_rule_duration_limit_without_type πŸ”΄ ERROR
  • fare_transfer_rule_invalid_transfer_count πŸ”΄ ERROR
  • fare_transfer_rule_missing_transfer_count πŸ”΄ ERROR
  • fare_transfer_rule_with_forbidden_transfer_count πŸ”΄ ERROR
  • invalid_currency_amount πŸ”΄ ERROR

Transfers, changes in google/transit/pull/303 and google/transit/pull/284

  • transfer_with_invalid_stop_location_type πŸ”΄ ERROR
  • transfer_with_invalid_trip_and_route πŸ”΄ ERROR
  • transfer_with_invalid_trip_and_stop πŸ”΄ ERROR
  • transfer_with_suspicious_mid_trip_in_seat 🟠 WARNING

Best Practice rules

  • missing_recommended_file (applies to feed_info.txt) 🟠 WARNING
  • missing_recommended_field (applies to feed_info.txt start_date, end_date, email, URL, version) 🟠 WARNING)
  • feed_expiration_date_7_days (replacing feed_expiration_date) 🟠 WARNING
  • feed_expiration_date_30_days (replacing feed_expiration_date) 🟠 WARNING

Impacts on existing data

On all datasets MobilityData ran the analytics on, we found that 73 sources would be affected by this release. The datasets affected mostly contain earlier versions of Fares v2 that don't match what was adopted in the spec, and uncertain cases, future versions. The detailed analysis is in the Fares v2 base implementation for the validator document.

Producers affected

  • Trillium Transit
  • San Diego Metropolitan Transit System

Complete list

See the complete list of datasets affected 1/2
URL Notices
http://data.trilliumtransit.com/gtfs/nts-ca-us/nts-ca-us.zip duplicate_key,fare_transfer_rule_missing_transfer_count,invalid_currency_amount,missing_required_field
http://data.trilliumtransit.com/gtfs/victorville-ca-us/victorville-ca-us.zip duplicate_key,invalid_currency_amount,missing_required_field
http://data.trilliumtransit.com/gtfs/tracy-ca-us/tracy-ca-us.zip duplicate_key,fare_transfer_rule_missing_transfer_count,invalid_currency_amount,missing_required_field
http://data.trilliumtransit.com/gtfs/downey-ca-us/downey-ca-us.zip duplicate_key,fare_transfer_rule_missing_transfer_count,invalid_currency_amount,missing_required_field
http://data.trilliumtransit.com/gtfs/weaverville-ca-us/weaverville-ca-us.zip duplicate_key,foreign_key_violation,invalid_currency_amount
http://data.trilliumtransit.com/gtfs/laketransit-ca-us/laketransit-ca-us.zip duplicate_key,fare_transfer_rule_missing_transfer_count,invalid_currency_amount,missing_required_field
http://data.trilliumtransit.com/gtfs/auburntransit-ca-us/auburntransit-ca-us.zip duplicate_key,fare_transfer_rule_missing_transfer_count,invalid_currency_amount,missing_required_field
http://data.trilliumtransit.com/gtfs/cityofridgecrest-ca-us/cityofridgecrest-ca-us.zip duplicate_key,fare_transfer_rule_missing_transfer_count,invalid_currency_amount,missing_required_field
https://www.sdmts.com/google_transit_files/google_transit.zip duplicate_key,fare_transfer_rule_missing_transfer_count,invalid_currency_amount,missing_required_field
http://data.trilliumtransit.com/gtfs/lagunabeach-ca-us/lagunabeach-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/goldcountrystage-ca-us/goldcountrystage-ca-us.zip duplicate_key,fare_transfer_rule_with_forbidden_transfer_count,foreign_key_violation,invalid_currency_amount
https://transitfeeds.com/p/santa-cruz-metro/343/latest/download duplicate_key,invalid_currency_amount,missing_required_field
http://data.trilliumtransit.com/gtfs/redding-ca-us/redding-ca-us.zip duplicate_key,foreign_key_violation,invalid_currency_amount
http://data.trilliumtransit.com/gtfs/corona-ca-us/corona-ca-us.zip fare_transfer_rule_missing_transfer_count,foreign_key_violation,invalid_currency_amount
http://data.trilliumtransit.com/gtfs/gtrans-ca-us/gtrans-ca-us.zip fare_transfer_rule_with_forbidden_transfer_count,invalid_currency_amount
http://data.trilliumtransit.com/gtfs/vctc-ca-us/vctc-ca-us.zip fare_transfer_rule_with_forbidden_transfer_count,invalid_currency_amount
http://data.trilliumtransit.com/gtfs/sanbenitocounty-ca-us/sanbenitocounty-ca-us.zip fare_transfer_rule_with_forbidden_transfer_count,invalid_currency_amount
http://data.trilliumtransit.com/gtfs/delnorte-ca-us/delnorte-ca-us.zip fare_transfer_rule_with_forbidden_transfer_count,foreign_key_violation,invalid_currency_amount
http://data.trilliumtransit.com/gtfs/plumas-ca-us/plumas-ca-us.zip foreign_key_violation,invalid_currency_amount
http://data.trilliumtransit.com/gtfs/sagestage-ca-us/sagestage-ca-us.zip foreign_key_violation,invalid_currency_amount
http://data.trilliumtransit.com/gtfs/bigbear-ca-us/bigbear-ca-us.zip foreign_key_violation,invalid_currency_amount
http://data.trilliumtransit.com/gtfs/mercedthebus-ca-us/mercedthebus-ca-us.zip foreign_key_violation,invalid_currency_amount
http://data.trilliumtransit.com/gtfs/thousandoaks-ca-us/thousandoaks-ca-us.zip foreign_key_violation,invalid_currency_amount
See the complete list of datasets affected 2/2
URL Notices
http://data.trilliumtransit.com/gtfs/lassen-ca-us/lassen-ca-us.zip foreign_key_violation,invalid_currency_amount
http://data.trilliumtransit.com/gtfs/banning-ca-us/banning-ca-us.zip foreign_key_violation,invalid_currency_amount
http://data.trilliumtransit.com/gtfs/morongobasin-ca-us/morongobasin-ca-us.zip foreign_key_violation,invalid_currency_amount
http://data.trilliumtransit.com/gtfs/amador-ca-us/amador-ca-us.zip foreign_key_violation,invalid_currency_amount
http://data.trilliumtransit.com/gtfs/glenn-ca-us/glenn-ca-us.zip foreign_key_violation,invalid_currency_amount
http://data.trilliumtransit.com/gtfs/mendocino-ca-us/mendocino-ca-us.zip foreign_key_violation,invalid_currency_amount
http://data.trilliumtransit.com/gtfs/humboldtcounty-ca-us/humboldtcounty-ca-us.zip foreign_key_violation,invalid_currency_amount
http://data.trilliumtransit.com/gtfs/yosemite-ca-us/yosemite-ca-us.zip foreign_key_violation,invalid_currency_amount
http://data.trilliumtransit.com/gtfs/avalon-ca-us/avalon-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/cityofmadera-ca-us/cityofmadera-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/missionbaytma-ca-us/missionbaytma-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/porterville-ca-us/porterville-ca-us.zip invalid_currency_amount
https://data.trilliumtransit.com/gtfs/delano-ca-us/delano-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/dpwlacounty-ca-us/dpwlacounty-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/yubasutter-ca-us/yubasutter-ca-us.zip invalid_currency_amount,missing_required_field
http://data.trilliumtransit.com/gtfs/huntingtonpark-ca-us/huntingtonpark-ca-us.zip invalid_currency_amount,missing_required_field
http://data.trilliumtransit.com/gtfs/eldoradotransit-ca-us/eldoradotransit-ca-us.zip invalid_currency_amount
https://transitfeeds.com/p/santa-barbara-mtd/1156/latest/download invalid_currency_amount,missing_required_field
http://data.trilliumtransit.com/gtfs/clovistransit-ca-us/clovistransit-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/simivalley-ca-us/simivalley-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/kerncounty-ca-us/kerncounty-ca-us.zip invalid_currency_amount,missing_required_field
http://data.trilliumtransit.com/gtfs/moorparkcitytransit-ca-us/moorparkcitytransit-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/guadalupeflyer-ca-us/guadalupeflyer-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/blossomexpress-ca-us/blossomexpress-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/escalon-ca-us/escalon-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/tahoe-ca-us/tahoe-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/laketahoe-ca-us/laketahoe-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/camarillo-ca-us/camarillo-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/glendora-ca-us/glendora-ca-us.zip invalid_currency_amount,missing_required_field
http://data.trilliumtransit.com/gtfs/beaumont-ca-us/beaumont-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/montereypark-ca-us/montereypark-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/turlock-ca-us/turlock-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/compton-ca-us/compton-ca-us.zip invalid_currency_amount,missing_required_field
http://data.trilliumtransit.com/gtfs/southcountytransitlink-ca-us/southcountytransitlink-ca-us.zip invalid_currency_amount,missing_required_field
http://data.trilliumtransit.com/gtfs/tehama-ca-us/tehama-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/pvpta-ca-us/pvpta-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/calaveras-ca-us/calaveras-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/smat-ca-us/smat-ca-us.zip invalid_currency_amount,missing_required_field
http://data.trilliumtransit.com/gtfs/easternsierra-ca-us/easternsierra-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/siskiyou-ca-us/siskiyou-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/mountainview-ca-us/mountainview-ca-us.zip invalid_currency_amount
http://data.trilliumtransit.com/gtfs/needles-ca-us/needles-ca-us.zip invalid_currency_amount
https://unitrans.ucdavis.edu/media/gtfs/Unitrans_GTFS.zip missing_required_column
https://data.trilliumtransit.com/gtfs/tcat-flex-ca-us/tcat-ca-us.zip missing_required_field
http://data.trilliumtransit.com/gtfs/bellflower-ca-us/bellflower-ca-us.zip missing_required_field
http://data.trilliumtransit.com/gtfs/bellgardens-ca-us/bellgardens-ca-us.zip missing_required_field
http://data.trilliumtransit.com/gtfs/lynwood-ca-us/lynwood-ca-us.zip missing_required_field
http://data.trilliumtransit.com/gtfs/rosemead-ca-us/rosemead-ca-us.zip missing_required_field
http://data.trilliumtransit.com/gtfs/getaroundtownexpress-ca-us/getaroundtownexpress-ca-us.zip missing_required_field

What's changed

Bug fixes

Rules

Documentation updates

Other great stuff + general maintenance

New Contributors

Full Changelog: https://github.com/MobilityData/gtfs-validator/compare/v3.1.1...v4.0.0

v3.1.1

1 year ago

Bug fixes

Enhancements

New Contributors

Full Changelog: https://github.com/MobilityData/gtfs-validator/compare/v3.1.0...v3.1.1

v3.1.0

1 year ago

πŸ“£ New feature alert! Users can now run the validator as a packaged app and see the results in the browser. This work is described in the epic issue #1124

Enhancements

Bugs fixed

Documentation improvements

Maintenance and upkeep improvements

Contributors to this release

  • @barbeau always a pleasure 🀝
  • πŸ‘‹ welcome @bdferris-v2
  • πŸ‘‹ welcome @ed-g
  • @isabelle-dr
  • @maximearmstrong

Full Changelog: https://github.com/MobilityData/gtfs-validator/compare/v3.0.1...v3.1.0

v3.0.1

2 years ago

Main update

The main difference between the v3.0.0 and v3.0.1 is the modification of ShapeIncreasingDistanceValidator. After a discussion in #1070, we realized that we had a problem with the notice DecreasingOrEqualShapeDistanceNotice (previously an ERROR): because of the way scheduling software produce data, we can have records in shapes.txt that have equal coordinates, and equal values for shape_dist_traveled. This can happen when two shape points are really close to one another. It creates a somewhat duplicative record, and this should not be an ERROR. A true ERROR happens if values of shape_distance_traveled are equal for two shape points that have different coordinates.

We decided to replace this notice with three new ones (in PR #1083): 1- DecreasingShapeDistanceNotice as an ERROR: if two consecutive shape points have decreasing values for shape_dist_traveled. 2- EqualShapeDistanceDiffCoordinatesNotice as an ERROR: if two consecutive points have equal shape_dist_traveled and different lat/lon coordinates in shapes.txt. 3- EqualShapeDistanceSameCoordinatesNotice as a WARNING: if two record have the same values for shape_dist_traveled and lat/lon coordinates in shapes.txt.

List of merged PRs

New Contributors

Full Changelog: https://github.com/MobilityData/gtfs-validator/compare/v3.0.0...v3.0.1

v3.0.0

2 years ago

We're excited to bring you the 3.0.0 release, it's a big one!

We three had main goals for this release:

➑️ Solve discrepancies with the official GTFS specification. 26 new rules have been added in total:

  • New validation rules were added for the adopted GTFS extensions pathways.txt, levels.txt, translations.txt
  • New custom rules were added for parts of the spec that were missing from this validator
  • Some existing rules were improved to better reflect the specification
  • The severity of some rules was updated to reflect the specification after the update to RFC 2119 has been done

Please refer to the V2.0.0 to V3.0.0 rule mapping available in NOTICE_MIGRATION.md for more details on the rule updates.

➑️ Implement automated tests that will evaluate if a new rule results in datasets from the mobility database getting additional errors. If so, the Pull Request is blocked and a report will be generated for further investigation. This ensures the stability and reliability of this validator, while still being updated with updates and extensions in the specification.

➑️ Make sure MobilityData's work has related public communication to facilitate community contribution (issues opened, public sprint board and bug tracking board, roadmap, ways for users to voice what they'd like to see next and for contributors to see how to get involved).

There are also new command line parameters that can be found in USAGE.md.

There is a lot more work included in this release, thanks to our amazing contributors. See details below!

Work βš™οΈ

Solve discrepancies with the spec

routes.txt

stops.txt

stop_times.txt

pathways.txt and levels.txt

translations.txt

Automated test to see if a PR results in additional errors

  • implementation of acceptance test (#1037, #1038, #926)

Other work included

  • We ran some analytics on all datasets from the mobility database (#1041) Better rules
  • improve rule logic (#839, #944, #946, #956, #957, #958, #978, #972)

Better notice schema export

  • implement RTTI machine for notice schema (#922, #924, #925, #951, #923)

Better documentation

  • documentation improvements (#842, #836, #837, #940, #902, #905, #1024, #1009, #988, #1057)

Bugs

Other good stuff

Contributors πŸ™

Massive shoutout to: πŸŽ‰ @aababilov πŸŽ‰ @asvechnikov2 πŸŽ‰ @barbeau πŸŽ‰ @lionel-nj πŸŽ‰ @maximearmstrong πŸŽ‰ @isabelle-dr

v2.0.0

3 years ago

What's new πŸ†•

We're excited to bring you this v2 release of the gtfs-validator! A lot has changed since v1, and we think you'll appreciate the new features.

  • Faster πŸš€ and stronger πŸ’ͺ thanks to a new multi-threaded architecture (thank you @aababilov!) (PR #486)
    • Supports the largest known real-world GTFS datasets. For example, the Netherlands GTFS previously failed with an OutOfMemory error, and now it can be validated in 2 minutes and 12 seconds on an ordinary laptop!
    • Validates datasets much faster. For example, MBTA used to take 38 seconds to validate, and now it only takes 14 seconds - less than half the time!
  • ⏬ Reduces the amount of code needed for adding new validation rules and support for new GTFS files and fields by leveraging Java annotations and AutoValue
  • πŸ“ Notice definitions for validation rules have been updated
    • Notice severities now align with the canonical GTFS spec (e.g., issues #472, #417). ERRORS are for items that the spec explictly requires or prohibits, and WARNINGS are for items that will impact the quality of GTFS datasets but aren't strictly required (suggestions or best practices).
    • Notices have ported to the new architecture (e.g., PR #592, PR #710). See the "Rules" documentation for the new v2 notice definitions and the "v1 to v2 Migration Guide" for a table mapping v1 notices to v2 notices.
  • πŸ›  Better error handling and reporting
    • In case of problems with the validator software itself, an error report is now written to a file system_errors.json to help with troubleshooting (PR #596). Normal validation results can be found in report.json.
  • πŸ—Ί New project roadmap
    • Check out the project wiki. Please feel free to add things you are interested in!