Severities
Every validation rule ships with a fixed severity. The severity decides whether a finding is a compliance failure, a quality concern, or a best-practice suggestion — and, in CI, whether the pipeline goes red.
The three levels
Section titled “The three levels”Your feed is not compliant with the GTFS Schedule spec. A downstream consumer (Google Maps, Apple Maps, a trip planner) will likely reject the feed or silently drop the offending rows.
Examples:
- A
stop_timesrow references astop_idthat does not exist instops.txt. - A required column is missing from a required file.
- A
route_typevalue is outside the documented enumeration.
Any ERROR-level finding in a validate run causes the process to exit with code 1 (COMMAND_FAILED).
WARNING
Section titled “WARNING”The feed is technically compliant, but something about the data is suspicious. Consumers will accept it, but it is likely to produce wrong behavior downstream.
Examples:
- A
calendar_dates.txtservice_id with no matching row incalendar.txt(allowed by the spec; still usually a mistake). - Two routes share the same
route_short_namewithin one agency. - A trip’s shape point is hundreds of meters off the nearest stop.
Warnings do not fail validation by default.
A best-practice suggestion. The feed is compliant and internally consistent; the finding is cosmetic or stylistic.
Examples:
route_short_namemissing on a route that only hasroute_long_name.- Unknown columns (extension fields not defined by the spec) —
unknown_column. - Unused entities (e.g. a shape not referenced by any trip).
Infos never fail validation and never affect the exit code unless explicitly promoted via --min-severity.
Promotion with --min-severity
Section titled “Promotion with --min-severity”--min-severity filters and reclassifies. When you pass --min-severity warning, everything below warning is dropped from both the listing and the summary counts. This has two practical effects:
- The output is easier to scan — only actionable findings appear.
- The
PASS/FAILstatus flips when previously-filtered warnings become the most severe remaining findings.
In practice:
# Default: only ERROR fails.gapline validate -f gtfs.zip
# Strict: WARNING now fails too.gapline validate -f gtfs.zip --min-severity warning
# Stricter still: even INFO findings count.gapline validate -f gtfs.zip --min-severity infoUse --min-severity warning in CI when you want the pipeline to go red on anything that looks wrong, not just on spec violations.
Disabling a rule entirely
Section titled “Disabling a rule entirely”Sometimes a rule is too strict for your feed — for example, an internal route that intentionally overlaps a block with another trip. Disable it with --disable-rule <RULE_ID>:
gapline validate -f gtfs.zip --disable-rule block_id_trip_overlapFind every rule ID with gapline rules list. Shell completion suggests IDs dynamically.
You can pin a permanent list in gapline.toml:
[validation]disabled_rules = ["block_id_trip_overlap", "duplicate_coordinates"]--disable-rule on the command line appends to the config list — it does not replace it.
Common patterns
Section titled “Common patterns”| Goal | Flag |
|---|---|
| Only fail the build on ERROR-level findings (default). | (none) |
| Also fail on WARNING. | --min-severity warning |
| Fail on anything found. | --min-severity info |
| Keep the default policy but silence one specific rule. | --disable-rule <RULE_ID> |
| Silence a rule for this run only, on top of the config’s disabled list. | --disable-rule <RULE_ID> (appended) |
See also
Section titled “See also”gapline validate—--min-severityand--disable-rulereferences.gapline rules list— find rule IDs to disable.- Validation rules — full catalogue with severity annotations.
- Concepts / Exit codes.