fix(gnss): date replayed snapshots by the proxy-reported age, not cross-clock fetchedAt

The layer compared the server's fetchedAt with the browser's clock, so a
skewed client clock could shift or void the 30-minute window. The proxy now
returns ageMs (its own now minus fetchedAt, at serve time, on fresh, cached
and stale answers); the source refuses a snapshot without a finite,
non-negative ageMs, and the layer dates rows as its now() - ageMs. fetchedAt
stays in the payload for display.

Tests: proxy cached/stale answers report ageMs on the server clock; the
source rejects missing/invalid/negative ageMs; the layer replay test drives
ageMs. qa-gnss stubs send ageMs.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
Leo PechnickiandClaude Opus 5.5 authored and Mazeyar Moeini Feizabadi committed 2026-10-13 17:20:43 +02:00
1 parent 7e570a79ad
commit 783c5b16f4
9 files changed
+55 -25

No files matched your search

+2 -1
View File
@@ -169,7 +169,8 @@
Keyless, worldwide wherever adsb.lol has receivers; reads
a capped 250 nm snapshot around the camera through `/api/gnss-integrity`,
which returns integrity fields only and serves the last snapshot (with its
original observation time, for at most 30 minutes) when the upstream fails.
original observation time and `ageMs`, for at most 30 minutes) when the
upstream fails.
Only ADS-B versions 1 and 2 with a known position age of 0-60 s count. A
degraded report keeps an aircraft degraded for 30 minutes after that report,
not after its latest healthy one; replayed snapshots keep their age, and