fix: close the #11 attribution audit gaps (OFL, sprites MIT, Open-Meteo link, third-party notices, ODbL)#40
Merged
Merged
Conversation
- Ship SIL OFL 1.1 text for the self-hosted Noto Sans glyph PBFs
(app/public/basemap-assets/fonts/OFL.txt, verbatim from
protomaps/basemaps-assets) and add it to the documented copy step.
- Ship MIT license for the sprite sheet (derived from tangrams/icons,
(c) 2017 Mapzen) and correct the pipeline README's BSD-3-Clause
mislabel — BSD-3 covers the @protomaps/basemaps styles library, not
the sprite assets.
- Hyperlink EMODnet Bathymetry and Open-Meteo in the map-corner
attribution ("Weather data by Open-Meteo.com", as their licence
requires).
- Add app/scripts/gen-third-party-notices.mjs (npm run notices) and the
generated app/public/THIRD-PARTY-NOTICES.txt covering the bundled
runtime deps; deploys with the site, stays out of the SW precache
(.txt is not in globPatterns).
- State that mask.bin is an ODbL Derivative Database of OSM data in the
README and in build_mask.py's mask.meta.json sources (committed
artifact catches up at next mask regeneration).
- README: link CC-BY 4.0 for EMODnet, indicate the data was processed
(reprojected/quantized), point the License section at
THIRD-PARTY-NOTICES.txt, drop the stale "no license file yet" note.
- i18n: reword about.sources.openMeteo, add about.sources.osmMask
(de+en) and render it in the About dialog sources list.
Refs #11
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
M1: gen-third-party-notices.mjs now reproduces the canonical BSD-3-Clause/
MIT text (with the package's copyright holder) for packages that declare a
license but ship no text in their npm tarball, instead of a bare
declared-license note; unknown licenses without a bundled text now fail the
run. Holders for pmtiles ("2021 Protomaps LLC") and @protomaps/basemaps
("2019-2023 Protomaps LLC, Kelso Cartography") are verified against the
upstream LICENSE files via an explicit override map, since their package.json
author fields ("Brandon Liu" / "The Protomaps Authors") differ from the
upstream copyright lines. Regenerated THIRD-PARTY-NOTICES.txt; output is
byte-stable across runs.
M2: comment in build_mask.py at the new ODbL sources entry — once the mask
is regenerated and mask.meta.json carries this string, the static
about.sources.osmMask i18n item must be removed/deduped in AboutDialog to
avoid rendering the ODbL statement twice.
Refs #11
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
DocGerd
commented
Jul 16, 2026
DocGerd
commented
Jul 16, 2026
DocGerd
commented
Jul 16, 2026
DocGerd
commented
Jul 16, 2026
DocGerd
commented
Jul 16, 2026
DocGerd
commented
Jul 16, 2026
DocGerd
commented
Jul 16, 2026
DocGerd
commented
Jul 16, 2026
- ci.yml app job: after build, run `npm run notices` and `git diff --exit-code public/THIRD-PARTY-NOTICES.txt` so a dep bump that forgets to regenerate the committed notices fails CI. Pathspec is relative to the job's working-directory (app/) — the repo-root form `app/public/...` would fatal from that cwd. - gen-third-party-notices.mjs: document findLicenseFile's first-match-wins and files-only assumptions (dual licenses / a licenses/ dir need a re-check); note that @protomaps/basemaps' upstream LICENSE.md is a compound file (also MIT sections for Mapzen 2015-2018 / Linux Foundation 2019) and the generated block reproduces the canonical BSD-3 per the declared npm license. Comments only — generated output verified byte-identical. - README: bathymetry processing reworded to "resampled onto the app's ~46 m grid and depth-quantized" (same-CRS resample, not a reprojection); ODbL in the Derivative Database statement now links to opendatacommons.org/licenses/odbl/1.0/. - build_mask.py: new ODbL source string uses "(c)" like its siblings. Refs #11 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes the audit half of #11 (the Apache-2.0 license half merged in PR #30). A full attribution/license audit of every data source and shipped third-party asset found five gaps; this PR closes all of them.
Closes #11
Gaps closed
.pbfglyph ranges are font software, but the license text was dropped when the pipeline copied only the font subdirectories from upstream.app/public/basemap-assets/fonts/OFL.txtnow ships (verbatim upstream copy, diff-verified), and the pipeline's documented copy step includes it.sprites/LICENSE.txtadded (verbatim upstream, diff-verified); both READMEs corrected, keeping the styles-library-vs-sprite-assets distinction.app/scripts/gen-third-party-notices.mjs,npm run notices, no new deps) emitsapp/public/THIRD-PARTY-NOTICES.txt(11 runtime packages; canonical license texts inlined for the two packages whose tarballs ship none, with copyright holders verified against upstream LICENSE files). Byte-stable across runs; throws rather than silently degrading for future deps.about.sources.osmMask, both dicts), and the pipeline source so the next mask regeneration carries it inmask.meta.json(the committed artifact was deliberately not hand-edited; a code comment documents the future dedupe).Plus: EMODnet CC-BY licence link + changes-indicated note (README), stale "no license file yet" sentence removed.
Deliberately out of scope
Offline/precache invariants
.txtis not in the precache globPatterns: all three license files deploy with the site but stay out of the SW precache — proven bygrep -c 'OFL.txt\|LICENSE.txt\|THIRD-PARTY' dist/sw.js= 0 with precache unchanged at 791 entries (this branch predates the #27/#28 font change).Verification
🤖 Generated with Claude Code