Problem definition
go-gtfs does not parse feed_info.txt — it is listed as unsupported (❌) in the README's supported-files table. This blocks consumers from reading the feed's authoritative feed_start_date / feed_end_date fields, which the GTFS spec defines as the dataset's date range.
Impact on OneBusAway/watchdog: Watchdog monitors GTFS bundle expiration (gtfs_bundle_expiration). Because go-gtfs can't read feed_info.txt, it has to infer expiry by scanning calendar.txt service end dates. That logic lives in getEarliestAndLatestServiceDates (see its doc comment for the documented rationale). This workaround is an inaccurate proxy:
- calendar.txt services frequently extend beyond the declared feed_end_date, producing false "not expired" states.
- Feeds where some services end earlier than the feed span produce false "expired" states.
- feed_info.txt is conditionally required by the spec, so it's absent from some feeds - the workaround can't distinguish "no expiry declared" from "expired".
Request: Add a FeedInfo model to ParseStatic, surfacing feed_start_date / feed_end_date (and ideally the remaining optional fields: feed_publisher_name, feed_publisher_url, feed_lang, feed_version, feed_contact_email, feed_contact_url), with an opt-in flag so feeds lacking feed_info.txt don't fail parsing.
Problem definition
go-gtfs does not parse feed_info.txt — it is listed as unsupported (❌) in the README's supported-files table. This blocks consumers from reading the feed's authoritative feed_start_date / feed_end_date fields, which the GTFS spec defines as the dataset's date range.
Impact on OneBusAway/watchdog: Watchdog monitors GTFS bundle expiration (gtfs_bundle_expiration). Because go-gtfs can't read feed_info.txt, it has to infer expiry by scanning calendar.txt service end dates. That logic lives in getEarliestAndLatestServiceDates (see its doc comment for the documented rationale). This workaround is an inaccurate proxy:
Request: Add a FeedInfo model to ParseStatic, surfacing feed_start_date / feed_end_date (and ideally the remaining optional fields: feed_publisher_name, feed_publisher_url, feed_lang, feed_version, feed_contact_email, feed_contact_url), with an opt-in flag so feeds lacking feed_info.txt don't fail parsing.