From 99264e80d66b6455d88253d3aef873b5fb58c878 Mon Sep 17 00:00:00 2001 From: German Khokhlov Date: Thu, 8 Oct 2026 16:22:18 +0400 Subject: [PATCH] docs(street-level): drop stale provider and stepping wording; the gate fails when it cannot park Co-Authored-By: Claude Opus 5.5 --- CONTRIBUTING.md | 5 +++-- docs/CURRENT-STATE.md | 9 +++++---- scripts/fixtures/street-level/mapillaryGraph.mjs | 4 ++-- scripts/qa-street-level.mjs | 1 + src/data/layerState.js | 2 +- 5 files changed, 12 insertions(+), 9 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 63f83e4c2..6ff596696 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -66,8 +66,9 @@ gate for the feature you changed. > **CI does not cover this for you.** The workflow runs the setup policy > checks, the formatting and package-boundary checks, the unit suite and the > production build, plus a Windows onboarding job. It runs neither -> `npm run test:track` nor any `qa-*.mjs` gate — both need a live dev server -> and a browser. Include the applicable local run in your PR's validation +> `npm run test:track` nor any other `qa-*.mjs` gate — both need a live dev +> server and a browser. The one exception is the hermetic Street Level fixture +> gate (`street-level-browser` job). Include the applicable local run in your PR's validation > evidence. ## Share-link layer tokens diff --git a/docs/CURRENT-STATE.md b/docs/CURRENT-STATE.md index 5a109975f..64394b341 100644 --- a/docs/CURRENT-STATE.md +++ b/docs/CURRENT-STATE.md @@ -3032,8 +3032,7 @@ Like the iD editor's photo overlay it shows Mapillary only: 360°/flat and captured-since filters (relative days, so a link keeps its meaning), one embedded viewer and an on-globe credit while the layer is on. Share options: `m` (Mapillary on/off; off draws nothing), `p` (`a`/`p`/`f` panoramas), `s` -(since, days). The header pill is the only layer switch and also turns a -switched-off `m` back on. +(since, days). The header pill is the only layer switch. Coverage is z11–14 sequence lines below 60 km; above that nothing is drawn and the panel says to zoom in. Tiles come from the visible ground within range of @@ -3066,8 +3065,10 @@ so the whole photo fits. Browser gates: `npm run qa:street-level -- --url ` runs against real Mapillary with a token; `npm run qa:street-level:fixtures` answers every Mapillary request from fixtures (`providers/mapillary/coverageFixture.mjs`, -`scripts/fixtures/street-level/`). CI runs the fixture gate with `--strict` -against a production build served by `vite preview` with a dummy token. +`scripts/fixtures/street-level/`); its server (default `:4173`) still needs a +`MAPILLARY_CLIENT_TOKEN`, and any value will do. CI runs the fixture gate with +`--strict` against a production build served by `vite preview` with a dummy +token. Directions is a keyless front end to the routing the voice agent already uses. Its row chips are the whole interface: DRIVE / WALK / BIKE pick the diff --git a/scripts/fixtures/street-level/mapillaryGraph.mjs b/scripts/fixtures/street-level/mapillaryGraph.mjs index 5653b0092..1f331d1f0 100644 --- a/scripts/fixtures/street-level/mapillaryGraph.mjs +++ b/scripts/fixtures/street-level/mapillaryGraph.mjs @@ -2,8 +2,8 @@ import { readFileSync } from 'node:fs'; /** * Mapillary Graph API and image CDN answered from fixtures, covering every - * request the provider and MapillaryJS make while opening, stepping and - * closing a photo, so the gate needs no network and no real token. + * request the provider and MapillaryJS make while opening and closing a + * photo, so the gate needs no network and no real token. * * No `merge_cc` or `sfm_cluster` means MapillaryJS never asks for a mesh or * cluster, and empty S2 cells mean no spatial edges, which the gate does not diff --git a/scripts/qa-street-level.mjs b/scripts/qa-street-level.mjs index 3fce18e1b..ae10892fc 100644 --- a/scripts/qa-street-level.mjs +++ b/scripts/qa-street-level.mjs @@ -319,6 +319,7 @@ async function park(page) { }, PARK); if (stayed) return; } + throw new Error('the camera would not stay parked over the photo line'); } async function main() { diff --git a/src/data/layerState.js b/src/data/layerState.js index 92a18179c..f3ee3077d 100644 --- a/src/data/layerState.js +++ b/src/data/layerState.js @@ -411,7 +411,7 @@ const OPTION_GROUPS = Object.freeze({ booleanOption('viirs', 'v', false), ]), 'street-level': Object.freeze([ - // One switch per registered imagery provider (src/app/layers/streetLevel.js). + // The Mapillary switch: off, the layer draws nothing. booleanOption('mapillary', 'm', true), enumOption('pano', 'p', 'all', ['all', 'pano', 'flat'], { all: 'a',