Commit Graph
3013 Commits
Author SHA1 Message Date
German Khokhlov ce985768bc test(qa): wheel floor against the floor's own ground; polite tile cache
The Navara wheel check measures clearance against engine.groundFloor's
ground (threshold 29 m: the floor keeps 30 m), so tiles streaming under a
still camera cannot flake it. The tile cache identifies itself with the
repository URL, keeps at most two misses in flight and merges identical
ones.
2026-10-16 15:06:15 +04:00
German Khokhlov da6141be4b perf(globe): lazy hidden tiles by tile extent; floor resample interval
sampleHeight collects hidden tiles only after the shown ones miss, with
no per-node allocation, and picks the finest by tile extent (Navara
exposes no geometric error), not per-mesh radius. The ground floor
resamples on a move only after 100 ms, and reports its own ground and
margin (engine.groundFloor, Navara-only diagnostics).
2026-10-16 15:06:15 +04:00
German Khokhlov 6dad3894bd fix(globe): sharpen sky mask past depth 0.99999, not >= 1
RGBA8 depth packing rounds near the far plane.
2026-10-16 15:06:15 +04:00
German Khokhlov 5188e8869d fix(globe): the cinematic look's atmosphere scale, warm-up and sunset clouds
- The takram uniform paths move to internals.js (forEachLuminanceUniform,
  loud in dev when a path is gone); look.js sets each factor to scale x
  the recorded base value, so shared or copied vectors are never scaled
  twice, and the stars keep the base value (own vector when shared).
  Stars at intensity 120: a starfield shows from space.
- Both night-side shader variants compile on the first two frames.
- The clouds hide once the sun sets at the camera (dark puffs at dusk).
- No allocation on look frames that change nothing (frozen updates, a
  scratch camera place from livePosition).
Gallery regenerated.
2026-10-16 15:06:15 +04:00
German Khokhlov bb4e6bafa4 perf(time): the app clock's frame latch without closure boxing
The clock keeps its numbers in object fields (stored in place) instead of
closure variables, and its default wall clock is one module-level
function. Micro-measure (Node, --expose-gc, 200k calls): the flights
render-time arithmetic allocates about 25-35 B per call with the app
clock against 66-102 B with JulianDate.now/addSeconds; an engine tick
(beginFrame + ticked) about 20-30 B.
2026-10-16 15:03:23 +04:00
German Khokhlov c33ee31efc refactor(layers): W1 timestamps without JulianDate
Flights and military keep their fix history in plain milliseconds
(timeMs, whole ms as the Date the JulianDate came from held) and read
"now" from the app clock: the render-delay time, bracketing,
extrapolation, the warm-up check and the trail seed are number
arithmetic (motion.js, tracking.js, snapshotRenderer.js), as is the turn
rate and the forward synthetic fix in data/motionModel.js, which no
longer imports Cesium. The JulianDate scratch fields in state.js and the
unused JulianDate.now() in queries.js go. Launches (mission frame, panel,
selection), the tracked satellite's SGP4 epoch and the celestial ring's
sun and moon read the app clock; where a Cesium property still takes a
JulianDate it is built from the app clock's now (as JulianDate.now did
from Date.now). Wall-clock throttles and feed receipt stamps stay on
Date.now; property reads at viewer.clock.currentTime (render, frozen at
boot) move with the render code in the *a tasks.

Tests that built JulianDate history fixtures now build ms ones with the
same instants (motionModel.test, flights.test, militaryFlights.test); new
tests show the military delayed position and the tracked satellite follow
the app clock (both fail on the previous code).
2026-10-16 15:01:46 +04:00
German Khokhlov f1a2df5cfe feat(time): the app clock on the engine
src/time/clock.js is the app's own time in ms since the epoch: by default
Date.now exactly (read at each call), with freeze/offset/rate/reset for QA
and tests, and one frame time latched per engine frame (beginFrame). The
contract gains engine.clock { now, frameTime, ticked }, in the fake engine
(a controllable wall clock, fake.advanceTime, fake.appClock), the contract
suite (one frame time for every listener of a frame, latched before
preUpdate, never decreasing), Cesium and Navara.

Cesium latches on the viewer clock's onTick, which CesiumWidget runs right
before scene.render, so scene listeners the app added before the engine
existed read the same frame time; the subscription appears on first use
and destroy removes it. The viewer clock itself is untouched: in the app
it never animates (shouldAnimate false, multiplier 1, its time frozen at
boot), and its time still drives Cesium's lighting as before. Navara
latches in the engine's handler of the view's preUpdate, and the look
reads the engine clock's frame time for the sun, so the app clock is the
one time source on Navara too.

src/time is a portable root in check-import-directions: no engine
packages, no browser globals.
2026-10-16 15:01:36 +04:00
German Khokhlov 27e28373d0 test(qa): W1 baseline and the main-chunk check
scripts/check-main-chunk.mjs (npm run check:main-chunk) finds the main
chunk of a build (the Vite manifest's entry, or the module script
dist/index.html loads), follows its static imports and fails when any of
them carries three or Navara markers; it prints the sizes. Base build:
main chunk 2,850,229 bytes (gzip 881,783), no static imports, clean.

scripts/qa-w1-baseline.mjs records Cesium mode for the W1 layers (flights,
military, local ADS-B, vessels, satellites, launches): counts, five known
objects with positions and screen points, JPEGs (path, size, sha256) at
the global / New York (JFK) / orbit poses, a tracked object's camera pose
after 2 s and what its share link restores. Live sources until the
fixture sources of Task 8.
2026-10-16 14:49:24 +04:00
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
German Khokhlov 26968f4903 fix(ui): the Cesium engine's render.sharpen() mirrors the sharpen stage
VisualEffects sends its sharpen state to engine.render.setSharpen when a
viewer exists too; the Cesium engine keeps it as state, and the Cesium
stage itself is unchanged.
2026-10-16 14:34:17 +04:00
German Khokhlov d50eaa28af test(qa): noon sky and stars, surface heights across engines, tile cache
qa-globe-contract checks the noon sky facing the horizon (daylight blue,
no star pixels) and stars at midnight; qa-engine-shell compares
sampleHeight at the Austin startup pose across engines and reports the
wheel floor's lowest frame. QA pages load OSM and keyless terrain tiles
through a disk cache with backoff on 429. Report updated.
2026-10-16 14:29:31 +04:00
German Khokhlov 1cca89adf2 fix(globe): Navara sampleHeight under a camera looking ahead
The ground under a tilted camera is outside the frustum, where Navara
hides its tiles, so the ray found nothing. When the shown tiles miss,
the loaded hidden ones answer, the finest first (within 1.5 times its
radius, which keeps out the quadtree parent). At the Austin startup
pose it agrees with Cesium within 0.12-1.04 m.
2026-10-16 14:29:31 +04:00
German Khokhlov a8a2ad5582 refactor(ui): engine-specific sharpen defaults instead of reading 49 as 80
The baseline and the style presets name ENGINE_SHARPEN_DEFAULT, which
resolves to 49 % on Cesium and 80 % on Navara. Share links and explicit
calls restore their value unchanged.
2026-10-16 14:29:31 +04:00
German Khokhlov abf16ae8af fix(globe): a daylight sky and no daytime stars in the cinematic look
The atmosphere draws physical radiance scaled for an exposure near 10,
while the baked Google tiles need exposure 1, so the noon sky came out
dark navy with the stars showing through. The cinematic look now scales
the atmosphere's radiance-to-luminance factors (sky, aerial perspective,
clouds) by 3, leaving the tiles alone, and shows its stars only from
space or with the sun below -6 degrees at the camera. Gallery
regenerated.
2026-10-16 14:29:31 +04: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 Khokhlov bb8c0b83c4 feat(globe): Sharpen on Navara, on at 80 % by default
The contract gains render.setSharpen({ enabled, amount }) and
render.sharpen(). Navara draws it as a custom EffectDesc: Cesium's unsharp
mask (3x3 box blur, gamma 2.2 round trip so one amount matches Cesium)
right after tone mapping and before SMAA/FXAA, skipping sky and cloud
pixels by scene depth. The Cesium engine keeps the state only; Cesium mode
still sharpens with its own post stage, unchanged. The fake engine records
it and the contract suite checks it.

Without a viewer the Sharpen slider and toggle drive the engine with the
same slider-to-amount mapping. On Navara the defaults, presets and share
links read Cesium's 49 % as 80 %.
2026-10-16 13:30:56 +04: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