Commit Graph
1891 Commits
Author SHA1 Message Date
Aditya 2c61d9e2b7 fix(geo): wrap longitude differences across the antimeridian
The flights ground-floor pipeline subtracted longitudes without wrapping.
approxDistanceKm, and its copy in the mesh-floor sampler, measured two
points 0.2° apart either side of 180° (21 km at Fiji) as about 38,000 km,
so low and grounded aircraft just across the line from the viewer were
never floored or mesh-sampled. corridorFloorCells walked a segment across
180° the long way round, filling its cell budget with ground behind the
contact and never requesting the cells it was about to cross, and
stickyFloorCell dropped its hysteresis for a contact on the seam. Each now
takes the short way round, and corridor points are normalised back into
[-180, 180].

SEARCH NEARBY SITES centred its Google Places search on the mean of west
and east, which for a view across 180° (west > east) is longitude 0, and
sized the radius from the view's height alone. It now measures the view's
width through 180° and searches its real centre.
2026-10-16 16:48:37 +05:30
Aditya bd48533b03 fix(director): land on the requested shot
A shot action seeks to the target shot's startProgress, which
sceneTimingForShot computes as start / total. sceneSeekState multiplied
that back into seconds and compared it with each shot's end, but
(start / total) * total can round one ulp below start. The comparison
then put the seek at the very end of the previous shot. With five equal
3.9 s shots, "go to" shots 2, 3 and 5 landed on shots 1, 2 and 4.

Compare the requested progress against each shot's end / total instead,
the same division the caller used, so a shot's own start always selects
that shot. Exact boundaries still select the next shot, and anything
below a start still selects the previous one.
2026-10-16 16:48:37 +05:30
Said TurkseverandClaude Opus 5.5 7a38727b85 fix(bikeshare): drop stations outside a city's load radius
Bogotá's and Santiago's PBSC feeds list depot stations in São Paulo and
Madrid as installed and renting, so activating either city drew live
docks thousands of kilometres away and counted them in the layer total.
Station information is now limited to the city's registered load radius;
every other registered feed already sits inside its radius (checked live
2026-10-16), so nothing else changes.

Adds a Bogotá/Santiago registry test matching the Brazilian and Barcelona
ones: proxy allowlist, outermost-station activation and radius reach, and
the depot filter through the real ingestion path.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 11:43:48 +01:00
Said Turksever c5feec26dc Merge remote-tracking branch 'upstream/main' into feat/bikeshare-bogota-santiago
# Conflicts:
#	CHANGELOG.md
#	DATA_SOURCES.md
#	src/data/dataCredits.js
#	src/layers/bikeshare/registry.js
2026-10-16 11:41:25 +01:00
Said Turksever 1e3ba28c88 Merge branch 'main' into feat/changelog-fragments 2026-10-16 11:40:51 +01:00
Said Turksever d4492d8f8c Merge pull request #1176 from ulihhhh/feat/bikeshare-barcelona
feat(bikeshare): add Barcelona's Bicing and AMBici
2026-10-16 11:39:16 +01:00
Said Turksever d4a6b1e0d4 Merge branch 'main' of https://github.com/bilawalsidhu/gods-eye-view into pr787
# Conflicts:
#	scripts/format-scope.json
2026-10-16 11:28:09 +01:00
ulihhhhandClaude Opus 5.5 dec79b6fcf test(bikeshare): pin the Barcelona load radii to their outermost stations
The map range check floors every radius at 100 km, so the station test
passed with any loadRadiusKm up to that. get_bike_share uses the radius as
registered, so assert each system's radius reaches the stations it lists.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 12:25:44 +02:00
Said Turksever 709b4f78e4 Merge branch 'main' into feat/bikeshare-barcelona 2026-10-16 11:24:36 +01:00
Said Turksever ca68d7e1ae Merge pull request #690 from daikaginza/fix/gbfs-rate-limit
fix(gbfs): rate-limit /api/gbfs
2026-10-16 11:23:22 +01:00
Meir Michanie fada8b161b Merge branch 'main' into i18n-spanish 2026-10-16 12:20:47 +02:00
Said Turksever 1d34ef9260 Merge branch 'main' into fix/gbfs-rate-limit 2026-10-16 11:10:22 +01:00
Said Turksever 775872fd2c Merge pull request #1114 from rudycelekli/contrib/gods-next-31-gbfs-unknown-counts-20261013
fix(bikeshare): preserve unknown availability counts
2026-10-16 11:09:54 +01:00
Said TurkseverandClaude Opus 5.5 4d42516ffe Make changelog assembly recoverable after a partial write
`--write` wrote CHANGELOG.md and then removed fragments one by one, so a
failure after the write left surviving fragments that a rerun spliced in
a second time.

The write is now staged. The assembled file goes into
changelog.d/.assembling/, the fragments are renamed in beside it, and
renaming the assembled file over CHANGELOG.md is the single commit
point. A run that fails rolls itself back when it can; otherwise the next
`npm run changelog` reads the staging directory and either restores the
fragments (assembled file still staged) or deletes the leftovers (batch
landed). `--check` reports a staged batch instead of reporting past it.

A failure-injection test makes every filesystem call in a `--write` fail
in turn, both as a one-off error and as a crash with no in-process
rollback. It asserts the retry produces exactly the uninterrupted
CHANGELOG.md, with each entry once and an empty directory. The test
fails against the previous write-then-delete and against delete-first.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 11:01:25 +01:00
Said Turksever 792c984e63 Merge branch 'main' into contrib/gods-next-31-gbfs-unknown-counts-20261013 2026-10-16 10:57:09 +01:00
German KhokhlovandClaude Opus 5.5 48e90c3780 Merge origin/main: CCTV model specs, transit Ontario, Brazil GBFS, camera packs
Conflicts:
- CCTV HUD: main's datasheet FOV, capability range and spec summary,
  with their labels translated; specFovCapabilityToken takes a format
  so the HUD can pass a translated one. Datasheet resolution labels are
  camera data (i18n-ignore).
- Transit: main's route labels and operator mode words, with the
  generic words still translated; an operator's own word stays a name.

Catalogs: es/ru 2566 messages each, complete.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 12:58:23 +04:00
ulihhhhandClaude Opus 5.5 194595e1b6 feat(bikeshare): add Barcelona's Bicing and AMBici
- Bicing (543 stations, PBSC) and AMBici (237 e-bike stations across the
  metropolitan area, nextbike) join the GBFS registry from the operators'
  keyless GBFS 2.3 feeds, both listed in MobilityData's systems catalogue.
- gbfs.nextbike.net joins the proxy allowlist as an exact host.
- Credits, DATA_SOURCES, CURRENT-STATE and CHANGELOG updated; a test pins
  each system's proxy reachability and the range check for its outermost
  stations.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 10:54:58 +02:00
Trygve Hemminghytt 2bec3d521b Merge remote-tracking branch 'origin/main' into HEAD
# Conflicts:
#	docs/CURRENT-STATE.md
#	server/providers/cctv/sources.js
2026-10-16 07:21:30 +02:00
daikaginza 202a310c7a Merge remote-tracking branch 'upstream/main' into fix/terrain-heights-bounds
main now rejects out-of-range coordinates at the proxy itself (19fcc00b), the
same check this branch added. main's version is kept, and the changelog entry
no longer claims that part; the cache cap, file ceiling and rate limit remain.
2026-10-16 09:25:51 +07:00
daikaginza 520d81694a Merge remote-tracking branch 'upstream/main' into feat/changelog-fragments 2026-10-16 09:23:03 +07:00
daikaginza e201cc3667 Merge remote-tracking branch 'upstream/main' into fix/gbfs-rate-limit
# Conflicts:
#	CHANGELOG.md
2026-10-16 09:21:54 +07:00
daikaginza 97aa35f917 Merge remote-tracking branch 'upstream/main' into fix/tracked-info-vertical-rate
# Conflicts:
#	CHANGELOG.md
2026-10-16 09:21:53 +07:00
Sameh Khamis e2274bbf0c Merge pull request #634 from cliph/feat/transit-ontario
Add nine Ontario transit feeds, with per-feed mode and route naming
2026-10-15 19:19:49 -07:00
daikaginza 995c1f3edc Merge remote-tracking branch 'upstream/main' into fix/gbfs-rate-limit 2026-10-16 09:16:42 +07:00
daikaginza a34deb8015 Merge remote-tracking branch 'upstream/main' into fix/tracked-info-vertical-rate 2026-10-16 09:15:24 +07:00
Sameh Khamis 4adeae0afe Merge branch 'main' into feat/transit-ontario
# Conflicts:
#	CHANGELOG.md
2026-10-15 19:14:21 -07:00
Sameh Khamis 978b8e9c88 Merge pull request #452 from ch-bas/feat/cctv-model-spec-enrichment
feat(cctv): enrich identified cameras with datasheet FOV + specs
2026-10-15 19:14:04 -07:00
Sameh Khamis ed00f7af30 Merge branch 'main' into feat/transit-ontario 2026-10-15 19:09:40 -07:00
Sameh Khamis cf63278126 Take TTC vehicle mode from the fleet number before the route
Replacement buses on 5xx streetcar routes were drawn as streetcars, and
Flexity streetcars reporting no route were drawn as buses. A feed can now
supply vehicleMode(id); TTC maps 4400-4699 to streetcars and every other
fleet number to buses, falling back to the route otherwise.
2026-10-15 19:09:27 -07:00
Sameh Khamis a4888d7846 Merge branch 'main' into feat/cctv-model-spec-enrichment
# Conflicts:
#	CHANGELOG.md
2026-10-15 19:08:55 -07:00
Sameh Khamis ec844c2ca2 Merge pull request #359 from MiguelGFerreira/feat/brazil-gbfs-cities
feat: add seven Brazilian Bike Itaú cities to the GBFS bikeshare layer
2026-10-15 19:08:49 -07:00
Sameh Khamis d7918d66f2 Merge branch 'main' into feat/brazil-gbfs-cities 2026-10-15 19:03:42 -07:00
Sameh Khamis f91dfc4b8f Merge pull request #636 from cliph/feat/webapp-icons
feat: ship a web app manifest and home-screen icons
2026-10-15 19:03:40 -07:00
Sameh Khamis 419a7afc04 Merge branch 'main' into feat/webapp-icons
# Conflicts:
#	CHANGELOG.md
2026-10-15 18:58:11 -07:00
daikaginza d5534c4bda docs(changelog): move the verticalRateMps entry to the top of the file
On current main the line it was anchored to sits under the released 0.2.0
heading, so the entry landed there. It now leads the unreleased entries.
2026-10-16 08:39:10 +07:00
daikaginza e9fb6c15c6 Merge remote-tracking branch 'upstream/main' into fix/tracked-info-vertical-rate 2026-10-16 08:39:10 +07:00
quanticsoul4772andClaude Opus 5.5 acd75efc7c Merge upstream main into feat/tools-area-breakdowns
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-15 17:33:20 -07:00
Sameh Khamis 265c8a1cc0 Tighten datasheet model matching and keep given fields of view
Codec, product and resolution words never identify a model; generation suffixes such as Mk II no longer fall back to the base model; a mismatched manufacturer never matches, and brand-only numeric names need the brand. The datasheet FOV only fills when the source and seed give none and the pose is not curated, and DATASHEET is shown only while no calibration offset applies. Adds the CC0 extract to DATA_SOURCES.
2026-10-15 17:27:55 -07:00
Sameh Khamis 687a94c9df Document Bike Itaú (Tembici) and test the Brazilian cities
The seven feeds publish no licence, operator or attribution fields, so DATA_SOURCES records that and credits the operator. Adds a registry test per city: allowed host and path, provider, and activation over its outermost live station.
2026-10-15 17:27:55 -07:00
Sameh Khamis 3cdb440bc2 Use the opaque iOS status bar and keep the SVG tab icon
black-translucent needs viewport-fit=cover and safe-area padding, which this change does not add. List the PNG favicon before the SVG so browsers that take the last usable icon keep the SVG, add mobile-web-app-capable, and give the manifest a stable id.
2026-10-15 17:27:55 -07:00
omerbberk 4399febaa0 fix(cctv): keep missing numbers unknown instead of reading them as zero
Number() reads null, blank strings and booleans as 0 (or 1), and
/api/cctv/sources sends an unknown number as JSON null. A source-pack
camera that left out its pose therefore reached the browser as zeros
clamped to each field's floor (north, pitch -2, FOV 20, range 120 m,
mount 6 m, ground 0 m) instead of taking the defaults, and a null or
blank position put the camera at 0,0.

toFiniteNumber (server) and safeNumber (browser) now return the fallback
for absent, blank and boolean values, as validateBox already does for
Recent Imagery. The same conversion fixes the per-pack paths: a Tallinn
row with a null heading no longer reads as a high-confidence north-facing
camera, a Caltrans camera with a blank elevation keeps its 150 m ground
prior, and TfL or Catalonia cameras with a null or blank coordinate are
dropped instead of kept at 0,0 or on the zero meridian.
2026-10-16 00:27:41 +00:00
Meir Michanie 05fdaaa97c Merge remote-tracking branch 'origin/i18n-spanish' into i18n-spanish 2026-10-16 02:19:40 +02:00
Cliff Flood 68e99d9407 docs: list the Ontario regions in the README feature table
The Transit row names the regions a reader can expect to see vehicles in,
and still stopped at South East Queensland after nine Ontario feeds were
added. Someone scanning the table for Toronto would have concluded the
layer does not cover it.

Toronto carries the subway caveat here too: the row would otherwise
promise metros in a city whose metro publishes no positions.
2026-10-15 20:18:21 -04:00
Cliff Flood 9ab26bbcb0 docs: record Hamilton's route table and the feeds left out
Two gaps. The Hamilton entry never said its route ids are internal keys,
which the Guelph, Burlington and YRT entries all say of theirs; the
route-table sentence in the transit notes named those three and not
Hamilton, though it now carries the largest table of the four. Both were
stale the moment Hamilton got a table.

The exclusions were half-recorded: GO Transit and Grand River had their
reasons written down, but Ottawa, London, Thunder Bay and the static-only
majority did not, so a later reader would have re-investigated feeds that
were already surveyed and rejected. All of them are now named with the
rule each one falls to, and the survey is stated as complete against the
Mobility Database's Ontario catalogue.

Also records that a route label is never invented, which is why YRT's
unpublished 9101 renders as the feed sends it.
2026-10-15 20:18:21 -04:00
Cliff Flood 65ac2d37fb feat(transit): name Hamilton's routes, which ship as internal keys
Not one of HSR's 80 route ids equals the number on the bus. Hamilton was
registered without a routeLabel, so every vehicle in the city read as
"Route 5783" where a rider would say 5 DELAWARE — 228 of them in an
afternoon sample. The mechanism to fix it already existed and simply was
never pointed at this feed.

Two details the table cannot skip:

Hamilton runs two generations of route id at once. `5688` and `5780` are
both the 2 BARTON, and both arrive in the live feed, so both are listed.
That is why 80 ids collapse to 46 distinct routes.

The seasonal and event shuttles publish a name where the local routes
publish a number — TC230, PEACH, ROCKTON. Those are already what a rider
would say, so they survive as published rather than being forced into a
number they do not have. Numbers are unpadded to match the rest of the
registry: routes.txt says `02`, a rider says 2.

Ids and names are from the City's own published GTFS routes.txt, which
sits under the same open-data licence as the realtime feed. Checked
against the live feed: all 30 route ids in service translate, none fall
through.
2026-10-15 20:18:21 -04:00
Cliff Flood 007562c6c8 docs: note the Ontario transit feeds in the changelog
CONTRIBUTING asks that a runtime behaviour change update CHANGELOG.md in
the same PR. Nine new feeds and two new label mechanisms qualify.
2026-10-15 20:18:20 -04:00
Meir Michanie e82e7a3dd4 Merge remote-tracking branch 'upstream/main' into i18n-spanish 2026-10-16 02:18:19 +02:00
Cliff Flood 4ffbdda3f5 feat(transit): name YRT's local branch routes
YRT encodes a branch as a two-digit suffix on the base route id. The Viva
table already depended on that scheme — `60102` is Viva Blue's B branch —
but local routes were passed through whole, on the reasoning that a YRT
route id is already the number on the bus. For a plain route it is. For a
branch it is not: a rider watching route 83's B-branch bus saw "8301".

A 15:41 EDT sample of the live feed found four branch ids in service.
Three are published in York Region's GTFS `routes.txt` and are named here
from it, unpadded to match the local routes beside them (the file says
`083A`; the registry has always preferred `105` to `005`):

    10702 -> 107B   KEELE
    8301  -> 83A    TRENCH
    9002  -> 90B    LESLIE

The fourth, `9101`, runs in the realtime feed but appears nowhere in
`routes.txt`. The pattern all but spells "91A" and that is precisely why
it is absent: the registry translates published names, it does not infer
them. It stays opaque until York Region publishes it.

Renamed YRT_VIVA_ROUTE_NAMES to YRT_ROUTE_NAMES, since the table is no
longer only about Viva.
2026-10-15 20:18:15 -04:00
Cliff Flood a7fc5ea7c5 feat(transit): add Burlington, switch Barrie and YRT on
Burlington's route ids are internal keys with a trap in them: `351` is
route 1 while `3510` is route 10, so no prefix trim is correct and the
table is a real join against the City's own published GTFS. Its licence is
the same 2011 municipal template as Mississauga — revocable, and the terms
must travel with the data, so licenseUrl is the terms document itself.
Plain http:// has no listener at all, so https is mandatory, not preferred.

Barrie and YRT ship on. Both operators invite acceptance of their licence
through a form, and both licences also state that use is itself acceptance
("By using Barrie Transit Data, you agree to be bound by these terms";
"Your Use of Information indicates Your acceptance"). This deployment
relies on that clause, and both entries record it so the reasoning does not
have to be re-derived.

Nine Ontario feeds now, all verified live against their upstreams.
2026-10-15 20:18:15 -04:00
Cliff Flood 8ccb0cd895 feat(transit): register YRT/Viva off, named by Viva colour
York Region's feed is first-party infrastructure under an open licence that
permits commercial use and does not even require attribution. It is the one
feed that fills the gap north of Toronto, and it is switched off anyway.

The operator asks that its licence be accepted through a form collecting a
name, company, phone and email. No credential is issued and nothing gates
the endpoint — the licence body says use is itself acceptance — but a form
asking for contact details is close enough to the registration this registry
refuses that a person should decide it, not a poller. Barrie is off for the
same reason. Both are one line from on.

Viva route ids get labels: YRT publishes `601` where every station sign says
Viva Blue. The numeric local routes already read correctly and carry no
entry, so the table is six lines, not 125.

No vehicle in this feed carries a bearing; heading comes from observed
movement, as with Durham.
2026-10-15 20:18:15 -04:00