Repository navigation
fix(license): give each file the copyright line of whoever wrote it - #103
Merged
Merged
Conversation
Every file carrying an SPDX header asserted NVIDIA's copyright, including the ones this fork authored. Apache-2.0 §4(c) requires retaining upstream's notices, not extending them to work upstream did not do. Classified against upstream/main at merge-base a818f50 with git diff --diff-filter, never by path — a blanket rewrite over src/ would reach tests/fixtures/, whose files are analyzer input. - Fork-authored files: the fork's line only. - Inherited-and-modified files: NVIDIA's line, then the fork's. That pairing is the §4(b) notice for anything with comment syntax, so no separate MODIFICATIONS.md to rot on the next upstream merge. - Inherited-and-untouched files: unchanged. - Headerless fixtures under tests/fixtures/: left headerless, since a header there is content the Scan reads. A modified build or documentation file — Makefile, pyproject.toml, README.md, docs/ — has nowhere to put a per-file notice. §4(b) for those is a README Transparency bullet stating that this fork modifies inherited files, and the rule and the audit skill both now say so. /license-audit widens its classification scope to include scripts/, which carries a header the previous src/tests/contrib scope missed. It stays scoped rather than going unscoped: a bare recursive grep matches the documentation about headers and counts prose as source. THIRD_PARTY_NOTICES.md gains tree-sitter and tree-sitter-java, both MIT, with copyright lines read from the installed dist-info rather than recalled. LICENSE stays byte-identical; upstream still ships no NOTICE, so §4(d) has nothing to propagate. make update-snapshots left every snapshot unmodified. Refs #95 Signed-off-by: Rodrigo França <rodrigo_rjsf@hotmail.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 #95.
Every file in this fork carrying an SPDX header asserted NVIDIA's copyright, including the ones the
fork wrote. Apache-2.0 §4(c) requires retaining upstream's notices, not extending them to work
upstream did not do — and §4(b) requires a modified file to say it was modified. This corrects both.
The blocking decision
#95 could not run until the maintainer chose the copyright line for fork-authored files. They chose
Copyright (c) 2026 SkillSpector-Polyglot contributors, which is the line.claude/rules/license-compliance.mdalready proposed, so the rule's stated target is unchanged andthe sweep implements it as written.
What was measured
Classified against
upstream/mainat merge-basea818f50withgit diff --diff-filter, never bypath — a blanket rewrite over
src/would reachtests/fixtures/, whose files are analyzer input.The three counts add up to the full header population in scope, which is the audit's completion
criterion.
/license-auditre-measures them; this PR deliberately does not write the numbersinto a durable doc, because a count in prose rots on the next upstream merge and #95's own body
rotted exactly that way.
Twelve headerless
.pyfixtures undertests/fixtures/stay headerless. A header there is contentthe Scan reads, and adding one would move that fixture's Behavior Snapshot for a reason unrelated to
licensing.
§4(b) where a header cannot reach
Makefile,pyproject.toml,README.mdanddocs/have no comment syntax to carry a per-filenotice. The §4(b) notice for those is a
README.mdTransparency bullet stating that this forkmodifies inherited files; the rule and
/license-auditboth now say so, and the skill checks thebullet is still present.
#95's option 1 proposed a root
MODIFICATIONS.mdin addition to per-file headers. This PR doesnot add one — it would duplicate what the headers already state for the files that have them, and
would need re-enumerating on every upstream merge. The README bullet covers the remainder without
carrying a list.
Third-party notices
tree-sitterandtree-sitter-java, both MIT, with copyright lines read from the installeddist-infolicense files rather than recalled —tree-sitteris "Max Brunsfeld, GitHub", andtree-sitter-javais 2017, both different from the plausible guess.Four further runtime dependencies are missing from that file —
langchain-anthropic,langchain-aws,boto3,langsmith— all introduced upstream before the merge-base. That is aninherited omission and out of #95's stated scope, so it is filed as #102 rather than folded in here.
Deliberate narrowing
#95 asked for the classification script to be committed under
contrib/. It is not./license-auditdid not exist when #95 was filed and now automates the classification, the arithmetic check, the
notices comparison and the §4(d) check; a committed one-off script would be a second copy of it.
The sweep ran from a throwaway script instead. The audit skill is the re-runnable artifact.
/license-auditalso gained a scope fix this PR exposed: it classified oversrc tests contrib,which misses the header under
scripts/release/. It now coversscriptstoo, and stays scopedrather than going unscoped — a bare recursive grep matches the documentation about headers and
counts prose as source.
Verification
make update-snapshotsthengit status: no snapshot modified, notests/fixtures/file touched.make test-unit: 2662 passed, 12 skipped, 4 xfailed.make lint,make format-check: clean.LICENSEbyte-identical to upstream (git diff $MB HEAD -- LICENSEempty); upstream ships noNOTICE, re-checked againstupstream/main, so §4(d) has nothing to propagate.Reviewed on both axes by
/code-review; every finding from both passes is fixed on this branch.