Last reviewed: 2026-07-08. Base branch: main.
This file is a plain-language map of the project as it exists on main. It does not replace the README, roadmap, audit docs, or source comments. It points to them so a reviewer can see the whole shape without reading every file first.
GTFS Scorecard measures public transit feed quality and publishes daily scorecards. It combines validator output, freshness, rider-facing completeness, realtime checks, accessibility, equity review, and public pages for agencies and advocates.
- Transit agencies that need to see feed problems before riders feel them.
- State DOTs, associations, and advocates comparing data quality across feeds.
- Maintainers running scheduled scoring, site generation, and data releases.
- Agency configuration and daily artifact generation.
- Validator, freshness, accessibility, equity, realtime, and NTD-related checks.
- GitHub Actions for scoring, Pages, dataset release, discovery, and watchdog tasks.
- Public docs for methodology, onboarding, rule pages, and standards.
- Data artifacts, badges, conformance files, and generated outputs.
registry/index.yamldefines the manifest of tracked feed shards.- data/artifacts/ stores historical score outputs.
- docs/ explains scoring, onboarding, methodology, and standards.
- scripts and package files drive scoring and site generation.
- Workflows run daily refresh, pages publish, realtime monitor, a11y, and security gates.
Observed source and operations surfaces:
Makefileaction.ymlinfra/pipeline/scripts/web/
GitHub workflow files checked:
.github/workflows/a11y.yml.github/workflows/canada-equity.yml.github/workflows/ci.yml.github/workflows/codeql.yml.github/workflows/dataset-release.yml.github/workflows/discover.yml.github/workflows/e2e.yml.github/workflows/equity.yml.github/workflows/mutation.yml.github/workflows/onboard.yml.github/workflows/openssf-scorecard.yml.github/workflows/otp-qa.yml.github/workflows/pages.yml.github/workflows/refresh.yml.github/workflows/rt-archive.yml.github/workflows/rt-monitor.yml.github/workflows/scorecard.yml.github/workflows/security.yml.github/workflows/standards-pin.yml.github/workflows/tiles.yml.github/workflows/trufflehog.yml.github/workflows/validator-canary.yml.github/workflows/watchdog.yml
- The scorecard states what a feed contains; it does not certify legal compliance.
- An agency with no realtime feed is shown neutrally as "Not yet published", never scored as a zero.
- Generated artifacts should carry validator versions and dates because transit rules move.
- It does not speak for FTA, NTD, or an agency vendor.
- Scores depend on available public feeds and the rule versions in use.
- Large artifact history is data output, not hand-authored documentation.
This pass checked 131 hand-authored doc or metadata files, 102 test files, and 23 workflow files on main. The count excludes vendored provider licenses, dependency folders, generated cache files, and large generated artifact history.
Large content groups were counted rather than listed file by file:
docs/standards/: 12 files
Primary docs checked:
.github/ISSUE_TEMPLATE/accessibility.md.github/PULL_REQUEST_TEMPLATE.mdCHANGELOG.mdCITATION.cffCLAUDE.mdCODE_OF_CONDUCT.mdCONTRIBUTING.mdLICENSEREADME.mdSECURITY.mddocs/INTERACTIVITY-ROADMAP.mddocs/OTP_WIRING_PATTERN.mddocs/RESEARCH-ROADMAP.mddocs/SIDE_BY_SIDE_COMPARE_DESIGN.mddocs/USER-RESEARCH.mddocs/accessibility-testing.mddocs/accessibility.mddocs/add-your-agency.mddocs/api.mddocs/ci-action.mddocs/conformance.mddocs/crosswalk.mddocs/decisions/0001-validator-runtime.mddocs/decisions/0002-artifacts-to-s3.mddocs/decisions/0003-fan-out-compute.mddocs/decisions/0004-opt-in-alerts.mddocs/decisions/0005-competitive-positioning.mddocs/decisions/0006-accessibility-sub-score.mddocs/decisions/0007-gtfs-flex-awareness.mddocs/decisions/0008-fares-v2-awareness.mddocs/decisions/0009-pathways-levels-awareness.mddocs/decisions/0010-update-cadence.mddocs/decisions/0011-mobility-feed-api-reuse.mddocs/decisions/0012-realtime-monitoring-cron.mddocs/decisions/0013-static-public-api.mddocs/decisions/0014-routing-qa-without-otp.mddocs/decisions/0015-equity-overlay-state-level.mddocs/decisions/0016-ntd-id-alignment.mddocs/decisions/0017-persona-surfaces.mddocs/decisions/0018-national-rt-and-ntd-crosswalk.mddocs/decisions/0019-national-problems-kb.mddocs/decisions/0020-national-quality-trend.mddocs/decisions/0021-ridership-weighting.mddocs/decisions/0022-equity-choropleth.mddocs/decisions/0023-national-all-routes-pmtiles.mddocs/decisions/0024-validator-rule-links.mddocs/decisions/0025-access-to-opportunity-scope.mddocs/decisions/0026-internationalization.mddocs/decisions/0027-canada-equity-cimd.mddocs/decisions/0028-global-south-pilot.mddocs/decisions/0029-instant-score-funnel.mddocs/decisions/0030-data-plane-history-remediation.mddocs/decisions/0030-honesty-primitives-standard.mddocs/decisions/0030-signage-visual-identity.mddocs/decisions/0031-observability-tier.md- Plus 76 more files in the same inventory.
Representative test files checked:
pipeline/tests/e2e/test_failure.pypipeline/tests/e2e/test_keyboard.pypipeline/tests/e2e/test_parity.pypipeline/tests/e2e/test_routes.pypipeline/tests/test_access.pypipeline/tests/test_accessibility.pypipeline/tests/test_adhoc.pypipeline/tests/test_adoption.pypipeline/tests/test_agencies.pypipeline/tests/test_alerts.pypipeline/tests/test_anomaly.pypipeline/tests/test_archive.pypipeline/tests/test_atomfeed.pypipeline/tests/test_autofix.pypipeline/tests/test_badge.pypipeline/tests/test_cadence.pypipeline/tests/test_canary.pypipeline/tests/test_cemv.pypipeline/tests/test_cimd.pypipeline/tests/test_cli.pypipeline/tests/test_cli_skip.pypipeline/tests/test_completeness.pypipeline/tests/test_conformance.pypipeline/tests/test_dataset.pypipeline/tests/test_directory.pypipeline/tests/test_effort_calibration.pypipeline/tests/test_equity.pypipeline/tests/test_fares.pypipeline/tests/test_fares_v2.pypipeline/tests/test_feedapi.pypipeline/tests/test_feeddiff.pypipeline/tests/test_fetch.pypipeline/tests/test_findings_national.pypipeline/tests/test_fixlog.pypipeline/tests/test_flex.pypipeline/tests/test_flex_completeness.pypipeline/tests/test_gbfs.pypipeline/tests/test_generated_constants.pypipeline/tests/test_geo.pypipeline/tests/test_google_gate.pypipeline/tests/test_gtfs.pypipeline/tests/test_infra_handlers.pypipeline/tests/test_lapse_risk.pypipeline/tests/test_lint.pypipeline/tests/test_liveness.py- Plus 57 more test files.
For this docs PR, validation means the scope file was generated from the clean origin/main worktree, reviewed against repo metadata and docs inventory, and checked with git diff --check. Project test suites are still the authority for code behavior, because this PR changes documentation only.