The trip page: the predictions a trip report contains, how the report is polled and how delay is summarized.

Reference Value
Subject and boundary Trip detail report window, live polling, delay summary rules and tests.
Verified source TripDetail.svelte at main 9733eb26d92533f56cdc8bc46b81b93fbb5987c8, checked November 10, 2026.
Support state Implemented.

The page is an article like the line and stop pages: DetailFrame with the shared ArticleHeader (category, trip title, subtitle, a back link to home, the route short name as meta, and actions for report freshness and View on map), article keywords beside the body and an ArticleSectionStack. It has no breadcrumbs. The Live notice above the summary comes from livePresentation.

The trip report lists predictions for up to one hour when it is prepared, not every remaining stop or a proven terminal. Count prediction rows and label the last reported stop. An absent trip is absent from that report; its ID may have expired or no data may have been reported. The optional stop index falls back to IDs.

createLiveStore polls only trips at the mounted manifest’s live TTL, uses the shared server clock and its 3×TTL stale policy, retains the last report on failure, and refreshes on the global refresh epoch. It pauses polling while hidden/offline and refreshes once when active again; unmount stops it. Label the report timestamp, keep stale/failed reports visible with a warning, and preserve the timestamp when a trip is absent. ResourceBoundary owns cold loading/error/retry; optional names do not determine report freshness.

TripDetail keeps the summary delay slot rendered alongside the published status, including 0 min for on_time with exact zero. Nonzero, null/omitted delay and unknown/conflicting status stay separate; missing delay stays unreported. site/delayPresentation formats the minute measurement and derives minute-based display tones; it does not reconstruct the published raw-second status. The summary tests cover zero and conflicting status/measurement cases.

Keep mobile stop names above metadata, ETA text together, and localized map/line/stop links. Run bun run test src/lib/features/trips from apps/web; browser checks cover both locales, report windows, polling, retained failures, recovery and links.

Capture-age warning

The trip report uses the trips family's health. Production trips carry feed_captured_utc as recorded on Snapshot publication and public contract (open production checks: Decisions and limitations). Payloads without the field use publication age; explicit null means unknown capture age. For payloads with the field, trips use a 300-second capture limit alongside the publication-age check. A retained report stays visible with a caution, including when its capture age is explicitly unknown.