Repository navigation
Fix missing third-party notices in THIRD_PARTY_LICENSES.md - #2668
Merged
Merged
Conversation
Sentry.framework 9.10.0 contains SentryCrash (a modified KSCrash fork) plus code derived from other projects. The notice file only carried Sentry's own MIT text, so the KSCrash MIT, the YANDEX MIT, the fishhook BSD-3-Clause and the Apple Public Source License 2.0 notices were missing from the app bundle. Copy all four, with their full license texts, from the upstream THIRD_PARTY_NOTICES.md at the 9.10.0 tag into the Sentry section.
… license file FluidAudio's fastcluster (BSD) code is statically linked into the app, and its license requires the copyright notice, conditions and disclaimer to travel with binary redistributions. The notice file only said the texts "ship in the upstream repository", so the shipped app carried none of them. Copy the four files from FluidAudio v0.17.2's ThirdPartyLicenses/ (fastcluster, VBx, the Japanese G2P and UniDic notices, and the Spanish/French lexicon notices) into the FluidAudio section. The Kokoro G2P and multilingual G2P objects show up in a local app build's link map, so those notices stay instead of being dropped.
…lama-server The llama.cpp section said the source revision "isn't recorded yet" (it is, in docs/llama-server-provenance.md) and said vendored license texts live in the upstream licenses/ directory. At the pinned commit that directory holds only the nlohmann/json text; cpp-httplib, xxHash and the rest keep their licenses next to their code. The shipped helper therefore carried no cpp-httplib or other vendored-code notices. - Name commit 2115b73d8e... and the web UI snapshot (release b10612). Checked that all 70 embedded UI assets in the pinned helper decompress to the files in that release's dist.tar.gz. - Reproduce, from the pinned commit, the texts for nlohmann/json, cpp-httplib, llamafile sgemm, YaRN, xxHash, rotate-bits, and the Unlicense, stb_image and miniaudio dedications, with a table of which code llama-server is built from. - The UI's npm dependencies are minified into the bundle with no notices. Leave that as a marked gap, list the direct imports with their lockfile licenses, and add the three libraries vendored under tools/ui. Reword the provenance doc so it stops saying b10612 is only "likely", records the gap, and notes that LLAMA_BUILD_UI=OFF alone does not stop the UI download.
…ir versions float swift-transformers' Hub target depends on swift-huggingface, swift-collections, swift-crypto and yyjson, and swift-huggingface depends on EventSource. A local app build's link map shows swift-huggingface, swift-collections, EventSource and yyjson objects linked into the app, but the notice file listed none of them. Only the top-level packages are pinned in build-deps.sh, so the header's claim that library versions are pinned there was wrong for these. - Add sections for swift-huggingface 0.13.0, EventSource 1.6.0 (app copy), swift-collections 1.7.6, swift-crypto 4.5.2 (with its NOTICE.txt) and yyjson 0.12.0, each with the upstream license text fetched at the exact resolved revision. - Say which versions are pinned and that the others were what SwiftPM resolved on 2026-11-12, to be re-checked per release. - swift-crypto: none of its objects are linked on macOS (the Crypto module re-exports CryptoKit; BoringSSL builds only on other platforms). Keep its notice anyway because the version floats, and record that status in the entry. - Clarify the MCP helper section: its swift-collections sentence is about the helper's lockfile, while the app does link OrderedCollections.
…e pinned commit The diarizer notice named FluidAudio 0.17.2's pinned model revision as if the app ran with it. FluidAudioCompatibility.keepUnpinnedDiarizerCaches() overrides that pin to `main` at runtime, so a runtime download can differ from the revision the notice was checked against. build-beta.sh also copies the whole cache directory with no allowlist or hash check. Reword the entry to name the pin as the checked revision, state the override, and describe the copy accurately. The build script itself is unchanged here.
…dependencies The notice file is the only one the app ships, and it had drifted from what the build links (missing Sentry, fastcluster, llama-server vendored code and the floating SwiftPM packages). Add a short doc with a before-release checklist: which version variable each entry follows, how to see the versions SwiftPM resolves for the unpinned packages, and the two related gaps that the notice file cannot fix (the .mcpb bundle contents and the diarizer cache copy).
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.
Fixes the
privacy-licensingfindings from the bug hunt over #2530. This PR only touchesTHIRD_PARTY_LICENSES.mdand docs. No code, build script or workflow changes. Every license text added here was fetched from the upstream repo at the exact tag or commit and pasted unchanged, none typed from memory.What was wrong, and what changed
One commit per finding.
1. Sentry notices (cabb6e8). The app ships
Sentry.framework9.10.0, which contains SentryCrash plus code derived from other projects. The notice file only had Sentry's own MIT text, so the KSCrash MIT, the YANDEX MIT, the fishhook BSD-3-Clause and the Apple Public Source License 2.0 notices were missing from every signed build. Added all four with full texts, copied fromTHIRD_PARTY_NOTICES.mdat the 9.10.0 tag, plus a pointer to the 9.10.0 source (the APSL asks for that).2. FluidAudio notices (764270d). fastcluster (BSD) is statically linked into the app and its license requires the copyright notice, conditions and disclaimer to travel with binaries. The file just said the texts "ship in the upstream repository". Added fastcluster, VBx, the Japanese G2P/UniDic notices and the Spanish/French lexicon notices, copied from
ThirdPartyLicenses/at v0.17.2. The finding suggested dropping the Kokoro G2P and UniDic text if unlinked. They are linked (JapaneseG2P,JapaneseCutlet,JapaneseMecabDictionaryand the multilingual G2P model objects are in a local app build's link map), so I kept them. I left out the NeMo text-processing notice because that trait is off and its library isn't linked.3. llama.cpp (e581ea6). The section said the revision "isn't recorded yet" (it is:
2115b73d8e...) and that vendored license texts live in upstream'slicenses/directory. At that commit that directory holds only the nlohmann/json text. Now recorded: the commit, a table of what llama-server is built from (read from upstream's CMake files and source headers, because the shipped helper is stripped), and the texts for nlohmann/json, cpp-httplib, llamafile sgemm, the YaRN-derived code, xxHash, rotate-bits and the Unlicense/stb_image/miniaudio dedications. I also checked the web UI snapshot: all 70 embedded assets in the pinned helper decompress to the same SHA-256 as the 70 files in the b10612dist.tar.gz, so the provenance doc's "likely b10612" is now confirmed, and I updated it.4. Packages swift-transformers pulls in (72f95b9).
Hubdepends on swift-huggingface, swift-collections, swift-crypto and yyjson, and swift-huggingface on EventSource. A local build's link map shows swift-huggingface, swift-collections (OrderedCollections), EventSource and yyjson objects linked, and the file listed none of them. Added sections for swift-huggingface 0.13.0, EventSource 1.6.0, swift-collections 1.7.6, swift-crypto 4.5.2 (with NOTICE.txt) and yyjson 0.12.0, at the revisions a freshswift package resolveof the build-deps graph returned today. Fixed the header, which said library versions are pinned inbuild-deps.sh(only the top-level ones are). Clarified the MCP section's swift-collections sentence: it is about the helper's lockfile, while the app does link OrderedCollections.5. Diarizer notice wording (ce3feae). The notice named FluidAudio's pinned model revision as if the app used it.
FluidAudioCompatibility.keepUnpinnedDiarizerCaches()overrides it tomain, so a runtime download can differ from the checked revision. Reworded, and described thebuild-beta.shcache copy accurately (no allowlist, no hash check). This is the notice-wording half of that finding only.6. New doc (96bba72).
docs/third-party-notices.md, indexed indocs/README.md: a before-release checklist saying which version variable each entry follows and how to see the versions SwiftPM resolves for the floating packages. It is a new file so I did not touchdocs/release-packaging.md, which the test matrix maps to full release builds.Where I disagreed with the findings
Cryptomodule re-exports CryptoKit, BoringSSL/XKCP build only on other platforms, and none of the package's 94Cryptoobjects (or the BoringSSL ones) appear in a local build's link map. swift-asn1 isn't linked either and has no entry. I kept a swift-crypto entry anyway because its version floats, and wrote the linking status into the entry.vbx-LICENSE.mdcarries. Added the whole file.build-deps.shchange, which was out of scope. The notice file now says plainly that they float.Not done here: owner follow-ups
.github/workflows/publish-mcp-registry.yml(finding 5). The.mcpbit zips holds onlytranscripted-mcp,manifest.jsonand an icon. The helper statically links the MCP Swift SDK, swift-system, swift-log and EventSource, and none of their notices are in the bundle. Suggested fix: copyTHIRD_PARTY_LICENSES.md(or an MCP-only extract) into$stagebefore the zip. Bundles already attached to releases won't change unless rebuilt.scripts/entrypoints/build-beta.sh(finding 6).dittocopies the whole local diarizer cache into the app with no allowlist and no hash check, so any legacy model file sitting in a build machine's cache would ship. Suggested fix: copy only the Community-1 files, verify their SHA-256s against the pinnedprovenance.json, and fail on anything else. Record bundled model hashes and cached revisions in a build manifest #2664 already edits this file, so I left it for that PR.tools/ui(the lockfile has 1,213 packages, build tooling included). The shipped bytes carry no notices and the bundled subset can't be read back from them, so I left this as a marked GAP in the file instead of guessing. The file lists the direct imports with their lockfile licenses and includes the texts for the libraries vendored undertools/ui. Closing it means either an owned build without the UI or generating the notices from the lockfile. If you go the owned-build route: at that commitLLAMA_BUILD_UI=OFFalone doesn't stop the prebuilt UI download, you also needLLAMA_USE_PREBUILT_UI=OFF(from reading upstream'sscripts/ui-assets.cmake; not built to confirm). I noted this indocs/llama-server-provenance.md.build-deps.shor commit a lockfile for the generated graph, so a release build can't pick different versions than the notices name.Checks
bash check.sh changed --base e66e3e4f: PASS (source pins, doc-paths self-test, doc-paths).bash check.sh quick: PASS, every step, including doc paths, known traps, rule registry, test shape and the privacy leak sweep.scripts/dev/agent-preflight.sh: PASS..githooks/public-repo-guard.pyon the outgoing commits : exit 0. I also grepped the diff and commit messages for competitor names and found none.Sources/orTests/changed.What isn't verified
deps-tools.Tests/README.mdpoints consistency checks atscripts/dev/check-*.py, which would need wiring into the rule registry and test matrix, outside this PR's docs-only scope. A check that compares the versions inbuild-deps.shwith the notice file would be the right follow-up.🤖 Generated with Claude Code