Provide deterministic workflows so human and AI contributors can work safely and quickly.
make check.make review and self-review the full diff before commit.mainThe project depends on free, shared, volunteer-run services - Overpass for OSM extracts, and transit agencies’ open-data endpoints. They shed load by design. A script that hammers them is not just impolite; it produces failures that look like bugs in our own code and sends the next person debugging a query that was never wrong.
Learned the hard way on 2026-08-20: fetch-missing-regions.sh fired four
regions back-to-back with no pacing and no retry. Three “failed”. None of them
had anything wrong with it - Overpass allows 2 concurrent slots per IP and
had simply refused. The queries succeeded unchanged once paced.
Any script that calls one of these services must:
https://overpass-api.de/api/status reports slots).rate_limited and Dispatcher_Client::...::timeout as runtime errors in the
response body, under an ordinary HTTP status. Those deserve a backoff and a
retry. A parse error, or a selector matching nothing, will fail identically
however many times it is asked, so retrying only burns the quota - stop and
report instead.region-data.py writes
*.failed-response-body.txt and friends; that is what made the diagnosis
above possible after the fact.Do not paper over the difference by retrying everything: a selector bug that silently retries four times and then reports a timeout is strictly harder to diagnose than one that fails immediately and says why.