How Transit's numbers are defined: which observations count, which clock a window uses, and how a requested filter becomes the filter actually applied.

Reference Value
Subject and boundary Metric contracts, populations, clocks, rounding, honest outcomes and the requested-to-effective filter contract. Gold storage is on ‣.
Verified source gold/reader/rates.py, gold/rollups.py, route_reliability.py, kpis.js, filters/state.ts at main 9733eb26d92533f56cdc8bc46b81b93fbb5987c8, checked November 10, 2026.
Support state Implemented formulas. All delay metrics come from agency predictions, not observed arrivals. The public explanation is the metrics page content.

What a metric contract names

Numerator, denominator, grain, source window, observation basis, methodology version, provider capability and the no-data meaning. Ingredients (counts, sums, histogram bins, windows) are stored so later aggregation stays exact.

Populations and clocks

Surface Population and calculation Clock and pitfall
Route on-time Known predicted delays in [−60, 300) seconds ÷ all known readings. Repeated reports of one trip count repeatedly Daily route rows use the hourly reporting view and can include a partial local day
Historic severe Delay > 300 s and within ±3,600 s. Route denominator keeps all known delays; stop denominator uses eligible in-clamp readings Exactly 300 s is neither on time nor severe. Early and outlier readings mean the shares are not complementary
Mean delay Sum of in-clamp seconds ÷ in-clamp count, then minutes. Pool sums and counts, never rounded daily means Rounded once to one decimal, half away from zero
Stop proxy Eligible readings that are not severely late ÷ eligible readings A ten-minute-early reading passes; it is not route on-time performance. Percentile-only stop days have no badge percentage
Closed-day windows Latest available spine date; day, week and month span 1, 7 and 30 calendar dates Each local midnight converts to UTC separately for DST. Missing dates stay absent
Edge KPI Per-provider /api/v1/kpis?provider= (STM when omitted): vehicle anchor, mean trip delay, network coverage Sources at least 60 s old are unusable; missing trip or network values become null
Live status bands Published trip status uses raw-second SQL bands in the builder helper; delayPresentation derives display tones from minutes A 40 s delay can be published as on_time with delay_min=1. A tone derived from rounded minutes cannot reconstruct the published status

The historic publication stamp is the UTC date at 00:00, not the build instant or a closed-day cutoff. Compare each payload's own dates, counts and windows when comparing views.

Honest outcomes

A metric is available, partial, stale, missing, unsupported, not applicable or intentionally unavailable. It never becomes zero by default and never claims more precision than its sample supports. Rates with too few observations are not comparative claims; ranked views show observation counts and Wilson intervals where that method applies.

Requested and effective filters

Concept Owner Rule
Requested filter URL and controls, lib/filters/url.ts and state.ts What the visitor asked for
Effective filter The feature selector The part of the request the metric, provider, window, grain and coverage can actually answer
Downgrade or ignored request Selector view model Always shown with a visible reason
History range lib/v1/history/rangeResource.svelte.ts Selecting a date never creates coverage the publisher did not produce

A filter or ranking never uses the outcome it claims to explain. Selectors resolve requests into view models outside Svelte markup; sections only render them.

Charts and tables

Every chart has explicit units and time framing, explicit domains, position or length as the primary signal with color as a redundant cue, visible null and no-data states, a text or table alternative and reduced-motion behavior.

Provider scope

STM and OC Transpo are the active providers. Capability flags and published coverage decide which metrics each can expose; configuration alone does not make two providers comparable.

Reliability verdict

verdict.ts supplies one verdict to lines, stops and network views. Below 30 observations, or without a usable uncertainty range, the result is tentative. With sufficient observations, exact on-time counts produce the 95% Wilson interval; otherwise valid published percentage bounds are used as supplied. No count is reconstructed from a rounded percentage.

A lower bound of 80.0 or more and a displayed rate of at least 80% is reliable. An upper bound below 80% is patchy at a displayed rate of at least 60%, otherwise unreliable. A range crossing 80%, including an upper bound of exactly 80.0 with a lower bound below it, is tentative. Missing, partial, reversed, non-finite or out-of-range published bounds yield tentative without an interval. Classification uses the source bounds before display rounding, so 79.6–79.8 can be patchy while its interval prints 80–80. Only patchy/unreliable are problem lines. Sample size is included in tentative verdict sentences.

The headline uses the first sufficiently sampled day, week or month, then falls back to the latest day as tentative. These labels do not make the stop non-severe proxy equivalent to route on-time performance.