Skip to content

Conversation

@ianktc
Copy link
Contributor

@ianktc ianktc commented Jan 14, 2026

Addresses issue #1165

Because the Chrono Saeiv portal does not provide the agency keys themselves, I referenced the Exo Open Data website directly to find the agency keys where possible. I also referenced the pre-existing stale Exo realtime feeds in the MobilityDatabase to try and find agency keys where possible.

Two Important Observations:

  1. Two feeds Roussillon (agency key: citrous) and Richelain (agency key: citlr) were combined into one: Le Richelain et Roussillon (agency key: lrrs)

  2. The realtime feeds for Haut Saint Laurent (agency key: cithsl) seems to no longer be maintained.

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates Exo realtime GTFS feeds to reflect current API endpoints, marking old feeds as deprecated and redirecting them to new sources. The update addresses agency consolidation (Roussillon and Richelain combined into Le Richelain et Roussillon) and migrates feeds from legacy endpoints to the Chrono Saeiv API portal and opendata.exo.quebec service.

Changes:

  • Deprecated 33 existing Exo realtime feed sources across multiple transit agencies
  • Added 30 new realtime feed sources with updated URLs pointing to Chrono Saeiv API or opendata.exo.quebec endpoints
  • Consolidated Roussillon and Le Richelain feeds into a single Le Richelain et Roussillon feed

Reviewed changes

Copilot reviewed 69 out of 69 changed files in this pull request and generated 1 comment.

File Description
Multiple deprecated feed files (*-1XXX.json) Added "deprecated" status and redirect metadata to old feed sources
Multiple new feed files (*-2XXX.json and *-3XXX.json) Created new feed sources using updated API endpoints (Chrono Saeiv or opendata.exo.quebec)
Richelain et Roussillon feed files (*-30{21,22,23}.json) New consolidated feeds for merged transit agencies
Comments suppressed due to low confidence (2)

catalogs/sources/gtfs/realtime/ca-quebec-exo-chambly-richelieu-carignan-gtfs-rt-vp-1365.json:3

  • Missing "status": "deprecated" field. All other deprecated feeds in this PR include this status field, but this file only adds the redirect without marking the feed as deprecated.
{
    "mdb_source_id": 1365,
    "data_type": "gtfs-rt",

catalogs/sources/gtfs/realtime/ca-quebec-exo-chambly-richelieu-carignan-gtfs-rt-tu-1363.json:3

  • Missing "status": "deprecated" field. All other deprecated feeds in this PR include this status field, but this file only adds the redirect without marking the feed as deprecated.
{
    "mdb_source_id": 1363,
    "data_type": "gtfs-rt",

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

"redirect": [
{
"id": "3020",
"comment": " "
Copy link

Copilot AI Jan 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Empty comment field in redirect object. Consider providing a meaningful description explaining why this feed was deprecated or redirecting, or remove the field entirely if no comment is needed.

Copilot uses AI. Check for mistakes.
@ianktc ianktc requested a review from emmambd January 16, 2026 15:11
@ianktc
Copy link
Contributor Author

ianktc commented Jan 28, 2026

Feed Submission Checklist

Thanks for contributing to the MobilityDatabase!

This is a comprehensive checklist detailing the things to consider before submitting a feed to the database. The schema links in this checklist will follow the convention of [1] for schedule feed schema and [2] for realtime feeds. You will find the schema definitions for schedule and realtime feeds are often the same, but both references are always included for completeness. If you have any questions, reach out to @ianktc.

General Checks

  • Valid Direct Download URL: Does the URL produce a zip file and is it valid gtfs? [1] If realtime, is it a protobuf? [2]
  • Official Status: Is the feed official? Check contact email, direct download URL, website etc. [1] or [2]
  • Service Status: Is the status active? Check feed_info file for service window. [1] or [2]
  • Authentication: Is there any authentication required? [1] or [2] Enum values are described [1] and [2] (they are the same)

All feeds are official and authenticated with a url parameter: token

Is Your Feed New?

No new feeds (all updates)

  • MDB Stable ID: Correct stable id in the file name? Does it match the mdb_source_id field? [1] or [2]. And stable id in the “latest url” field? [1]
  • Sequential Ordering: Does the stable id increment from latest stable id? Do they increase in sequential order? Refer to this spreadsheet for the latest mdb stable id.

Is Your Feed an Update?

All are feed updates. The redirects are the same as the previous redirect.

  • Official Status: If unofficial, do not deprecate and redirect the old feed, but import this new feed as unofficial so both feeds are available in the database
  • Deprecate and Redirect: If official, deprecate and redirect the old feed to this updated feed. [1] or [2]

Is it a Realtime Feed?

  • Reference: Does it have a reference to the schedule feed? [2]

Pre-existing Feed Existence [internal]

  • Perform a check on the mobility database website to check for pre-existing unpublished (wip) feeds from other sources
  • Sometimes the "old" feed is not included in the feed submission form, perform a check for fuzzy matches on Provider and Direct Download URL. In the case of probable matches, check with the validator for entity count, agency and feed info matches as well.

Other Considerations [internal]

These do not apply.

Sometimes you will encounter two active schedule feeds. There are some possible reasons this may occur:

  • Flex: Flex feeds are sometimes produced separately from schedule feeds. Import the flex feed as a brand new feed instead of a redirect of the schedule feed. [definition]
  • Reference Schedule Feed: One schedule feed may be used as the schedule, while the other is used as a reference to the realtime feed. Look for feeds produced by Passio (or other vehicle tracking software). [example]

@ianktc ianktc requested a review from jcpitre January 28, 2026 15:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants