Skip to content

Promote ai/main: July fix round (ArcGIS basemaps, URL validation, shields, zoom bounds, label font) - #6

Closed
caesterlein wants to merge 32 commits into
mainfrom
ai/main
Closed

caesterlein wants to merge 32 commits into
mainfrom
ai/main

Conversation

@caesterlein

Copy link
Copy Markdown
Collaborator

Promotes the 2026-07-06 AI work round from ai/main for human review.

Bug fixes

  • USGS topo basemap never draws (P1) — 74696e5
    • Shared validateSourceUrl (trim, strip wrapping quotes, reject embedded quotes/backslashes/whitespace) enforced on POST/PUT /api/sources, /api/sources/import (skips + reports invalid rows), and client-side in all SourcesPage save handlers. The corrupted DB value that caused the bug is now rejected with 400.
    • ArcGIS cached MapServer support, normalized to XYZ: detection (detectTileSourceType → 'arcgis'), ?f=json inspection (requires singleFusedMapCache + Web Mercator), derived {url}/tile/{z}/{y}/{x} template + LOD-based maxZoom, new source-level maxZoom on OgcApiSourceSchema for overzoom, basemap synthesis via "From imagery source" mode, guided error when a MapServer root is pasted as a style URL.
    • Verified E2E on the local stack: basemap draws at z12; at z17 requests cap at /tile/15/… and imagery upscales (no 404s).

Features

  • Clickable hyperlink fields in popups/detail panel (P1) — 7c0a22b: type: 'link' + linkText on propertyDisplay; renders safe http(s) links in a new tab.
  • Highway shields (P1) — b2128ac: bundled tintable SDF shield sprite, runtime-injected default, "+ Add road shields" quick action.
  • Imagery source display-name labeling (P1) — f6e99ac: resolveDisplayLabel fallback in toggles, non-blank label seeds, blank-label wizard lint.
  • Per-style zoom visibility (P2) — 14d274c: per-style minZoom/maxZoom intersected with layer bounds in both renderers, editor fields + zoom chip.
  • Per-map default label font (P2) — 554cfea: ui.defaultLabelFont (default Open Sans Bold) applied in both renderers; per-style text-font wins.

All merges were verified with pnpm verify plus the admin-app, map-client, and ingest-service suites. Note: the claude-review CI job is known-broken and fails on every PR — test / analyze / CodeQL are the signal.

🤖 Generated with Claude Code

# Conflicts:
#	packages/map-ui-lib/src/schemas/__tests__/config.test.ts
# Conflicts:
#	apps/map-client/src/components/MapContainer.tsx
# Conflicts:
#	apps/admin-app/src/components/MapPreview.tsx
#	apps/map-client/src/components/MapContainer.tsx
#	packages/map-ui-lib/src/utils/index.ts
Comment thread packages/map-ui-lib/src/utils/arcgis.ts Fixed
Comment on lines +111 to +114
const response = await fetch(appendAuth(`${root}?f=json`, auth), {
headers: { Accept: 'application/json', ...authHeaders(auth) },
signal,
});
Comment thread packages/map-ui-lib/src/utils/ogcApi.ts Fixed
Comment thread packages/map-ui-lib/src/utils/ogcApi.ts Fixed
@caesterlein

Copy link
Copy Markdown
Collaborator Author

Closing — promotion to main not requested yet; ai/main merge was the goal and is complete.

@caesterlein caesterlein closed this Jul 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants