Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
be235c5
updated skeleton loading
Alessandro100 Sep 10, 2026
774bed3
include latest dataset for reliability view
Alessandro100 Sep 10, 2026
10ecc54
probation window helper functions
Alessandro100 Sep 10, 2026
ab1d029
availability ui elements
Alessandro100 Sep 10, 2026
8672e9c
criterion reusable elements: probation and grace period
Alessandro100 Sep 10, 2026
a5f596c
compliance ui element
Alessandro100 Sep 10, 2026
d0dd751
date function
Alessandro100 Sep 10, 2026
7f546c4
available and compliant ui elements
Alessandro100 Sep 10, 2026
a6b93b2
availability data handle
Alessandro100 Sep 10, 2026
106f4a8
language keys
Alessandro100 Sep 10, 2026
fe9ae7c
stronger error handling from availability
Alessandro100 Sep 10, 2026
b06916e
date utc adjustment
Alessandro100 Sep 10, 2026
1a1ea59
stronger error message for compliant
Alessandro100 Sep 10, 2026
2033ce6
days chip removed and text adjustments
Alessandro100 Sep 10, 2026
c16f4f7
remote config do not cache errored fetch
Alessandro100 Sep 11, 2026
1f98692
removed feature flag in server api call
Alessandro100 Sep 11, 2026
5c07a74
moved the seal firebase feature flag client side
Alessandro100 Sep 11, 2026
f204b73
fix session bug on expired cookie
Alessandro100 Sep 11, 2026
e7ed810
tie date in available now goes with latest date
Alessandro100 Sep 11, 2026
cfcb855
change available limit logic
Alessandro100 Sep 11, 2026
85c9f74
updated translations
Alessandro100 Sep 11, 2026
359693d
lint
Alessandro100 Sep 11, 2026
fe65e13
unit test
Alessandro100 Sep 11, 2026
2b51384
date improvements
Alessandro100 Sep 11, 2026
f95c7de
auth error strengthening
Alessandro100 Sep 11, 2026
f89ec89
Potential fix for pull request finding
Alessandro100 Sep 11, 2026
d999564
fixing ai mistakes
Alessandro100 Sep 11, 2026
e68c271
update available limit to 200
Alessandro100 Sep 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
128 changes: 40 additions & 88 deletions external_types/DatabaseCatalogAPI.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -332,10 +332,11 @@ paths:
- $ref: "#/components/parameters/feed_id_path_param"
get:
description: >
Returns the continuous coverage history for a GTFS feed: one entry per dataset, ordered by
`downloaded_at` from newest to oldest. Each entry carries the service window the dataset
covers, the window declared in its `feed_info.txt`, whether the two agree, and how much that
dataset overlaps the previous (older) one.
Returns the continuous coverage of a GTFS feed: `latest_state` and `latest_failure`,
plus the history, one entry per dataset ordered by `downloaded_at` from newest to oldest.
Each entry carries the service window the dataset covers, the window declared in its
`feed_info.txt`, whether the two agree, and how much that dataset overlaps the previous
(older) one.
tags:
- "feeds"
operationId: getGtfsFeedContinuousCoverage
Expand Down Expand Up @@ -1203,13 +1204,14 @@ components:
description: >
One criterion's contribution to the Seal of Reliability.

`status` is the criterion's own check at the last evaluation, undebounced, so a criterion
can read `fail` while the feed still holds the seal - that is the at-risk state, and
`in_grace_period` distinguishes it from a confirmed failure. Conversely a criterion can
read `pass` while `on_probation` is true, in which case it still does not count towards
the seal. The three states a client renders are therefore: healthy (`pass`), at risk
(`fail` with `in_grace_period`), and failing (`fail` without it) - with `on_probation`
as an independent flag on top.
`status` is the criterion's debounced verdict - the one the seal is decided on, so a
client can always explain the `has_seal` beside it. A criterion failing its daily check
but still inside its grace period reads `pass` with `in_grace_period` true: grace is not
a failing state, it is the warning before one. Conversely a criterion can read `pass`
while `on_probation` is true, in which case it still does not count towards the seal.
The three states a client renders are therefore: healthy (`pass`), at risk (`pass` with
`in_grace_period`), and failing (`fail`) - with `on_probation` as an independent flag
on top.
type: object
required:
- criterion
Expand Down Expand Up @@ -1237,14 +1239,15 @@ components:
example: compliant
status:
description: >
The criterion's verdict at the last evaluation, with no grace period applied.
* `pass` - the check passed.
* `fail` - the check failed. The seal is only withdrawn once the failure outlasts
the criterion's grace period, so check `in_grace_period` before presenting this
as a loss.
* `unknown` - the criterion was evaluated but its inputs were missing, so no verdict
could be reached this time. It is skipped when deciding the seal rather than counted
as a failure.
The criterion's debounced verdict: what it contributes to the seal, grace period
already applied.
* `pass` - the criterion is not counting against the seal. Either its check passed,
or the check failed and the failure is still inside the criterion's grace period,
which `in_grace_period` tells apart.
* `fail` - the failure is confirmed and the criterion is withholding the seal.
* `unknown` - not produced. A run whose inputs were missing reaches no verdict and
leaves this value untouched, so the last verdict stands. Listed only because the
underlying column can hold it.
* `not_applicable` - the criterion does not apply to this feed (for example a
coverage criterion on a seasonal feed) and is withdrawn from the seal entirely.
* `never_evaluated` - the criterion has produced no verdict for this feed yet. It is
Expand All @@ -1259,10 +1262,12 @@ components:
example: fail
in_grace_period:
description: >
Whether a failing check is still inside the criterion's grace period, and so is not
yet counting against the seal. Can only be true while `status` is `fail`, and is
always false while `on_probation` is true, since a failure during probation restarts
probation outright rather than being absorbed.
Whether the criterion's daily check is currently failing but the failure is still
inside its grace period, and so is not yet counting against the seal. This is the
at-risk state, and the only thing in the response that reports the raw daily check.
Can only be true while `status` is `pass`, and is always false while `on_probation`
is true, since a failure during probation restarts probation outright rather than
being absorbed.
type: boolean
example: true
grace_period_ends_at:
Expand Down Expand Up @@ -1387,10 +1392,14 @@ components:

GtfsFeedContinuousCoverageResponse:
type: object
description: >
`latest_state` is the feed's latest dataset measured against the one before it;
`latest_failure` is the same measurement at the criterion's last observed failure. Both
have the structure of an `items[]` entry, and either can be null. Together they name at
most four datasets, shared when the latest state is itself the failure.
required:
- feed_id
- items
- latest_files
- total
- offset
- limit
Expand All @@ -1399,67 +1408,10 @@ components:
type: string
description: Unique identifier of the GTFS feed.
example: mdb-123
latest_files:
type: array
description: >
The files the calculation reads for the feed's latest dataset (the `items[]` entry
with `is_latest: true`), and whether each was present. Always returned in the same
order with one entry per file, so a client can render a fixed row.
items:
$ref: "#/components/schemas/GtfsFeedContinuousCoverageFile"
latest_coverage_window:
$ref: "#/components/schemas/ServiceDateWindow"
latest_coverage_window_source:
type: string
nullable: true
description: >
Which input the latest dataset's `latest_coverage_window` was taken from.

* `service_dates` - the service dates derived by the validator from `calendar.txt` and
`calendar_dates.txt`.
* `feed_info` - the dates declared in `feed_info.txt`, used only when the service dates
are missing.
enum:
- service_dates
- feed_info
example: service_dates
latest_within_max_coverage_window:
type: boolean
nullable: true
description: >
Whether the latest dataset's `latest_coverage_window` stays inside the maximum
coverage window the seal allows (two years). Null when there is no coverage window to
measure.
example: true
latest_service_window:
$ref: "#/components/schemas/ServiceDateWindow"
latest_feed_info_window:
$ref: "#/components/schemas/ServiceDateWindow"
latest_feed_info_matches:
type: boolean
nullable: true
description: >
Whether the latest dataset's `latest_feed_info_window` agrees with
`latest_service_window` on both bounds. Null when either window is missing, which is
not the same as a mismatch.
example: true
latest_overlap_days:
type: integer
nullable: true
description: >
Days of overlap between the latest dataset's coverage window and that of the dataset
immediately older than it. Zero means the windows meet exactly; a gap is reported as
`latest_gap_days` instead. Null when either window is missing or there is no older
dataset.
example: 15
latest_gap_days:
type: integer
nullable: true
description: >
Days of uncovered service between the end of the older dataset's window and the start
of the latest dataset's window. Null when the windows overlap or meet, which is the
passing case.
example: 3
latest_state:
$ref: "#/components/schemas/GtfsFeedContinuousCoverage"
latest_failure:
$ref: "#/components/schemas/GtfsFeedContinuousCoverage"
total:
type: integer
description: Total number of matching datasets regardless of limit and offset.
Expand Down Expand Up @@ -2677,12 +2629,12 @@ components:
limit_query_param_availability_endpoint:
name: limit
in: query
description: The number of items to be returned. Maximum is 100.
description: The number of items to be returned. Maximum is 200.
required: False
schema:
type: integer
minimum: 0
maximum: 100
maximum: 200
default: 100
example: 10

Expand Down Expand Up @@ -2761,4 +2713,4 @@ components:
$ref: "./BearerTokenSchema.yaml#/components/securitySchemes/Authentication"

security:
- Authentication: []
- Authentication: []
44 changes: 43 additions & 1 deletion messages/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,9 @@
"sealCriterionPass": "Passing",
"sealCriterionFail": "Failing",
"sealCriterionInGracePeriod": "At Risk",
"sealCriterionDaysLeftChip": "{days, plural, one {# day} other {# days}} left",
"sealCriterionGracePeriodNote": "In grace period until {date}.",
"sealCriterionProbationNote": "On probation until {date}.",
"sealCriterionNotApplicable": "Not Applicable",
"sealCriterionNotEvaluated": "Not Evaluated",
"sealCriterionOnProbation": "On Probation",
Expand Down Expand Up @@ -321,6 +323,46 @@
"sealEarnedAt": "Seal of Reliability earned",
"sealLostAt": "Seal of Reliability lost",
"sealEvaluatedAt": "Seal of Reliability last evaluated",
"sealAvailabilityIntro": "Daily fetch results over the last {months, plural, one {# month} other {# months}}.",
"sealAvailabilityNoFailures": "Every day ended with a successful fetch.",
"sealAvailabilityRecovered": "{count, plural, one {# day ended with a failed fetch} other {# days ended with a failed fetch}} (last on {date}), recovered within the {graceDays}-day grace window.",
"sealAvailabilityAtRisk": "The feed has been unreachable since {date}.",
"sealAvailabilityAtRiskUndated": "The feed has been unreachable.",
"sealAvailabilityGraceTitle": "{days, plural, one {# day} other {# days}} left to restore access",
"sealAvailabilityGraceDescription": "Restore access to the feed before the grace period ends to keep the Seal.",
"sealAvailabilityFailing": "The feed has been unreachable since {date}. Ensure this feed is available consistently for {months, plural, one {# month} other {# months}} to pass this criterion.",
"sealAvailabilityFailingUndated": "The feed has been unreachable. Ensure this feed is available consistently for {months, plural, one {# month} other {# months}} to pass this criterion.",
"sealAvailabilityProbation": "Fetches are succeeding again. This criterion is rebuilding its six-month record after its last recorded error on {date}.",
"sealAvailabilityProbationUndated": "Fetches are succeeding again. This criterion is rebuilding its six-month record after a confirmed failure.",
"sealAvailabilityNotApplicable": "Daily availability checks don't apply to this feed.",
"sealAvailabilityNoData": "No availability checks have been recorded for this feed yet.",
"sealAvailabilityError": "Availability history could not be loaded right now.",
"sealAvailabilityErrorDescription": "We couldn't load this feed's daily fetch history. Please try again later.",
"sealAvailabilitySuccessfulDays": "{count, plural, one {# successful day} other {# successful days}}",
"sealAvailabilityFailedDays": "{count, plural, one {# failed day} other {# failed days}}",
"sealAvailabilityUncheckedDays": "{count, plural, one {# day not checked} other {# days not checked}}",
"sealAvailabilityUptime": "{percent}% uptime",
"sealAvailabilityHeatmapLabel": "Daily fetch results: {success} successful days and {failed} failed days.",
"sealAvailabilityDaySuccess": "{date}: fetch succeeded",
"sealAvailabilityDayFailure": "{date}: fetch failed",
"sealAvailabilityDayUnchecked": "{date}: not checked",
"sealCompliantNoErrorsSubtitle": "No validation errors",
"sealCompliantHasErrorsSubtitle": "Validation errors found",
"sealCompliantNoReportSubtitle": "No validation report available",
"sealCompliantNotEvaluatedSubtitle": "Not evaluated yet",
"sealCompliantNotApplicableSubtitle": "Not applicable to this feed",
"sealCompliantPassing": "The latest dataset was validated on {date} with no errors.",
"sealCompliantPassingUndated": "The latest dataset validates with no errors.",
"sealCompliantAtRisk": "The latest validation report has {count, plural, one {# error} other {# errors}}.",
"sealCompliantGraceTitle": "{days, plural, one {# day} other {# days}} left to resolve errors",
"sealCompliantGraceDescription": "Resolve these errors before the grace period ends to keep the Seal.",
"sealCompliantFailing": "The latest validation report has {count, plural, one {# error} other {# errors}}. Resolve these validation errors to pass this criterion.",
"sealCompliantProbation": "The latest dataset validates with no errors. This criterion is rebuilding its six-month record after its last recorded error on {date}.",
"sealCompliantProbationUndated": "The latest dataset validates with no errors. This criterion is rebuilding its six-month record after a confirmed failure.",
"sealCompliantNotApplicable": "Validation doesn't apply to this feed.",
"sealCompliantNoReport": "No validation report is available for this feed's latest dataset.",
"sealCompliantNoData": "This feed's compliance has not been evaluated yet.",
"sealCompliantViewReport": "View latest validation report",
"pageGeneratedAt": "Page generated at",
"serviceDateRange": "Service Date Range",
"serviceDateRangeTooltip": "Dates are relative to the specified timezone. If no timezone is specified, the dates are in UTC.",
Expand Down Expand Up @@ -678,7 +720,7 @@
"shortTitle": "Official",
"notAuthorizedSubtitle": "Not authorized by the transit agency",
"notAuthorizedDescription": "This feed is created by an unaffiliated community member rather than the transit agency, making it unofficial.",
"subtitle": "Authorized by the transit agency.",
"subtitle": "Authorized by the transit agency",
"description": "The feed has been confirmed as an official source, published by or on behalf of the transit agency."
},
"stable": {
Expand Down
Loading
Loading