Skip to content

v0.5.0 — Authority-based classification + CLI

Choose a tag to compare

@ttezer ttezer released this 11 Jul 11:22

Scores are not comparable to 0.4.0. This release continues the authority-based reclassification started in 0.4.0: more rules moved between classes, so a feed's Overall and Publication scores can shift even though the feed is unchanged and detection is identical. Re-baseline any Golden snapshots after upgrading.

Added

  • Command-line interface. A new gtfs-cli crate ships the gtfs-analyzer binary: gtfs-analyzer validate feed.zip with --json, --summary, --rule <ID>, --severity <level>, --config <file>, --today <YYYYMMDD>. Exit codes: 0 no notices, 1 notices present, 2 fatal / config error. It runs the same validation core as the web app — no separate logic.

Changed

  • Authority-based classification completed. Every Spec rule card must now cite an explicit gtfs.org field anchor, enforced by a test gate. Rules lacking an explicit GTFS Schedule normative basis were reclassified off Spec/Interop:
    • XFL_020 / XFL_021 (transfers cross-file consistency): SpecQuality.
    • TRP_017 (frequencies trip missing stop_times): InteropQuality (MobilityData's unused_trip is a different condition — no exact-notice parity).
    • Google Transit checks grouped under a dedicated GoogleTransitInterop authority.
    • Detection is unchanged — the same issues are still reported; only class labels and scoring weights moved.
  • ATR_009 was mislabelled "attribution_phone invalid"; it actually flags rows where more than one of agency_id / route_id / trip_id is set. Title, message, and en/tr/ja locales corrected (no behaviour change).
  • Interop rules no longer appear in the R1 publishability report.

Fixed

  • On the file map, shape geometry for trip-context rules (e.g. STM_014, OPR_007, STM_017) is now fetched on demand in deferred (large-shape) mode, so the route line renders alongside the stop pins.

Full changelog: https://github.com/ttezer/gtfs-analyzer/blob/main/CHANGELOG.md