Skip to content

feat(places): add ranked regional places to normal map browsing - #436

Open
Medformatik wants to merge 14 commits into
mainfrom
feat/ambient-places-399
Open

Medformatik wants to merge 14 commits into
mainfrom
feat/ambient-places-399

Conversation

@Medformatik

@Medformatik Medformatik commented Oct 7, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Show ranked, named OSM/Overture destinations during ordinary browsing in one operator-published German region. Tiles, accepted OSM↔GERS search results, matched owned-basemap taps and details share canonical identities; category/selection markers suppress duplicates.

Publish bounded immutable PostGIS generations with conservative closure/confidence/tenant policy, source provenance, staged atomic publication, generation cache URLs, failed-build fallback, disable/enable and rollback. Authenticated admin controls expose coverage and policy version. Existing developer and user documentation is updated.

Policy 2 uses auditable regional landmark evidence rather than translated-name count alone. Actual extractor categories and legacy tag storage are handled, production localization preserves supplied translations, category/DOM markers retain click priority, retained snapshots resolve their exact GERS entity, theme recreation retains suppression, and uncategorized indexed road/building records stay out of ambient publication. Quirinus-Münster and Cologne Cathedral are real positive controls; ordinary/private/closed/tenant features remain negative controls.

Ambient places now use the active basemap's category badges, label colors, fonts, sizes and halos. The separate teal dots are removed. Ordinary names sit below their badges; landmark names use compact wrapping and can remain visible when only the badge collides. Neither icons nor text force overlap. Style reloads refresh both cartography and canonical suppression.

Fixes #399

Final implementation commit: 6a3c4fbf0 (includes the current-main integration and cartographic correction).

Verification

  • Integrated current main at 78e099076, resolving the database-suite script and the new ambient importer peer version while preserving upstream migrations and dependency pins. The artifact preserves earlier measurements with their original hashes and identifies the final cartographic renderer, Next 16.3.8 and MapLibre 6.10.0 separately.
  • Root lint, policy and all workspace type checks plus discovery-evaluation types passed. Clean production web, API, data-manager and docs builds passed; temporary QA routes/servers are removed from the shipped tree.
  • Full Vitest suite: 17,528 tests across 1,544 files passed; 142 tests / 31 files intentionally skipped, using four workers. The cartographic map/style/identity regressions passed 88 tests across 10 files. The preceding implementation acceptance explicitly enabled PostGIS suites: 97 tests across 16 files.
  • Real dated Geofabrik extracts, cropped to Rhine bounds [6.58,50.89,7.07,51.31], produced 14,232 indexed places and 13,454 eligible ambient destinations. Source URLs, SHA-256, epochs, runtime, generations, code hashes, individual measurements and image hashes are recorded in the acceptance artifact.
  • Forty-five off/on camera pairs cover dense/sparse/rural scenes, zooms 14–18, dark style, German/English and three no-region controls. Road-name lists and owned-basemap POI source/source-layer/feature-ID, rendered-layer, coordinate/name identities match in every pair; ambient label and decoded tile IDs have no explicit duplicates. Actual pointer taps from ambient and worship basemap features select the same canonical Quirinus entity, including after theme/full-style changes.
  • Quiet final regional reads: first 32.85 ms, warm p95 4.53 ms (30 tiles), concurrent-eight p95 47.61 ms (40 requests), maximum 83 features / 6,881 bytes. Publication after indexing: 0.655 s. Replacement preserves old bytes; forced candidate failure preserves discovery; rollback and disable retain coherent generation semantics. A concurrent-build/test diagnostic exceeded the 100 ms warm limit at 127.89 ms; it remains in the artifact.
  • Final cartographic renderer: five foreground five-second sweeps per state in T3's native Electron preview measure desktop pooled p95 10.1/10.1 ms off/on. Native iOS simulator Safari initially measured 36/34 ms and missed the unchanged 33.4 ms target in both states; an isolated repeat measured 33/33 ms with on >50 ms 0%. Across both native runs p95 is 34/34 ms. All individual/initial/repeat samples remain in the artifact; these are local simulator observations, not physical-device certification.
  • API/PostGIS, existing Martin/PostGIS and verified regional PMTiles were compared with identical synthetic tiles. The initial online implementation uses the bounded API/PostGIS boundary; the small archive comparison is not real regional archive capacity or offline delivery.

Before / after

Before is the actual PR base (78e099076424), without any changes from this PR. These replacement images were captured from a separate production build of that base commit; the ambient integration does not exist in that source. They replace the incorrectly labelled images of an intermediate renderer within this PR. After remains the unchanged 6a3c4fbf0 capture.

Matching Neuss camera [6.6916,51.1982], zoom 16, bearing/pitch 0, German, owned light/dark style and hosted basemap. The basemap style assets and tileset build/replication provenance match the after captures. Temporary camera/theme QA controls are visible in both sets and absent from the shipped app; the baseline controls identify the pre-PR build. Desktop CSS viewport: 1280 × 800, exported by T3 preview as 640 × 400 PNGs. Native iPhone Safari PNGs: 402 × 874.

Light style:

Before PR: light basemap at 78e099076

After PR: light map with regional ambient places

Dark style, same camera:

Before PR: dark basemap at 78e099076

After PR: dark map with regional ambient places

Native iPhone 18 Pro simulator Safari, same camera:

Before this PR (78e099076) After this PR (6a3c4fbf0)
Before PR: native Safari basemap After PR: native Safari with regional ambient places

The visualCartographyFollowup section in the acceptance artifact retains the historical comparison of two renderers within this PR. Those historical images are not the pre-PR baseline shown above.

The unchanged admin controls/provenance from the prior implementation acceptance are shown below. This earlier capture uses its own generation; the induced failed-stage error retains active publication. Outer authentication is bypassed only in the disposable rendering fixture; production API authorization is tested separately.

Admin: source provenance, retained generation and publication controls

Rollout limits

An operator must build the existing regional OSM index, optionally finish Overture ingestion/conflation, then publish under Admin → Services → Data workflows → Nearby places. This PR verifies a real OSM-only regional extract locally; Overture/confidence/conflation and enabled-provider canonical and retained-snapshot GERS resolution use real PostGIS regression fixtures. It has not merged or deployed anything.

The existing OSM index requires alias/code/acronym terms: source-present name-only objects can still be missing. Uncategorized destinations, conservative policy, tile caps, source gaps and collisions limit coverage. Initial bounds are at most 0.5° × 0.5°, 100,000 input rows per source/output places, source publication age at most 90 days. Discovery disable does not revoke cached immutable tiles.

Frame results are qualified local simulator measurements, not physical-device thermal/battery certification. Restarted-cold database, deployed network/CDN and physical devices remain rollout checks. Snapshot GERS details can lack richer live-provider metadata. No planet/direct ATP ingestion, geocoder rewrite, OpenConditions/adapters/feeds/mobility changes, or offline package is included.

Checklist

  • Conventional Commits title and changeset
  • Existing documentation and source notices updated
  • Isolated worktree and feature branch; normal Git hooks
  • No secrets, source PBFs, temporary QA product files or screenshot binaries in git

@Medformatik Medformatik added documentation Improvements or additions to documentation enhancement New feature or request javascript Pull requests that update javascript code integration New or changed data provider, source, or backend integration labels Oct 7, 2026
@Medformatik Medformatik self-assigned this Oct 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation enhancement New feature or request integration New or changed data provider, source, or backend integration javascript Pull requests that update javascript code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Publish a ranked ambient OSM/Overture place layer with shared identity

1 participant