- A link's photo step compares with the navigation token its own restore flight owned, so a navigation after the flight landed (while the layers still load) keeps the camera. - A request that switches the source keeps the open photo up until it is replaced (holdViewer), so EXPAND stays across sources. - A lookup given up while it looked leaves the open photo and the panel as they were, also when it found nothing or failed. - A failed replacement shows its error inside the expanded viewer. - A replacing lookup stops a playing Mapillary sequence before the found photo opens. - The action refuses coordinates outside the globe, keeps a name given with coordinates as its label, and fly: false keeps the camera only for coordinates (its test-only entity and query branches are gone). - Numbered entities carry their label; a view's street-level point is a pair. - Mapillary's nearest search always asks for 50 m and 100 images. - Tests: the lifecycle reproductions, PLAY on replacement, out-of-range coordinates, half a point, and the named label; three layer tests share enabledLayer; the second payload digest is gone. - Docs: the tool count, the panel freshness rule, armed: false, the photo replacement, the browser-gate comment and a shorter changelog fragment.
Changelog fragments
One file per entry. A pull request adds a file here instead of editing
CHANGELOG.md, and a release concatenates them into it.
changelog.d/<pull request number>-<slug>.md
723-atc-decision-layer.md, for example. The slug is lowercase, words separated
by -. Two pull requests never pick the same filename, because the pull request
number is already unique — which is the point: new CHANGELOG.md entries go at
the top of the file, so two pull requests in flight write into the same few lines
and git has nothing to merge on.
Write the file exactly as the entry should read in CHANGELOG.md: a - bullet,
wrapped the way the surrounding entries are, crediting yourself and the pull
request.
- Report which upstream declined a Street Traffic road load. The layer row now
reads `Overpass rate-limited` instead of a general "Road data temporarily
unavailable" (yourname, #665).
The text is spliced in unchanged apart from trailing whitespace, so what you
write here is what ships. Fragments are deliberately outside
scripts/format-scope.json, so npm run format never reflows one.
At release time:
npm run changelog:check # list what would move, change nothing
npm run changelog # move every fragment into CHANGELOG.md
The assembler refuses a batch rather than guessing: a filename that is not
<pull request>-<slug>.md, or two fragments claiming one pull request number,
stops the run before anything is written and names the files.
If npm run changelog fails part-way (a full disk, a killed process), run it
again. The batch is staged in changelog.d/.assembling/ and only lands when the
assembled file replaces CHANGELOG.md in a single rename, so the rerun either
finishes that batch or puts its fragments back first. It never adds an entry
twice or drops one. npm run changelog:check names a staged batch, if one is
left over, instead of reporting past it.
A documentation claim that needs a regression test — the way
src/annotations/drawTool.test.mjs asserts against CHANGELOG.md — should
assert against docs/CURRENT-STATE.md or README.md instead. A pull request
still edits those directly, so the text is in the file while the change is under
review; a fragment does not reach CHANGELOG.md until release.