Repository navigation
Add Apache-2.0 §4(b)/(c) provenance blocks and normalize upstream citations (#19394, #19395) - #60
Conversation
519ed05 to
1424550
Compare
Licensing review packetThis PR is held pending a licensing review. It is not blocked on engineering — CI is green and it merges cleanly. The point of this comment is to make the review short for whoever picks it up, by laying out the facts and the actual questions. Nothing below is a legal opinion, and no agent's reading of Apache-2.0 §4 counts as sign-off here.
What the PR changes31 files. All comment/header text plus NOTICE edits, with one exception: Licensing facts (verified, not assumed)
uv-pep508 / uv-pep440 claim: verified, holdsChecked against
Pin errors — fixed at
|
…19394, #19395) Adds a per-file provenance header (upstream symbols + a Changed: note) to every file carrying ported pypa/packaging, pip, uv, pkginfo, or twine code across version/, distribution/, tags/, wheelname/, extras/, internal/pep508/, requirement/, marker/, and reqtxt/. license/ is excluded: its predecessor (rstudio/package-manager) is Posit's own code, so there is no outside licensor for Apache §4(b)/(c) to satisfy there. Corrects NOTICE's uv-pep508/uv-pep440 license claim (they override uv's workspace license to Apache-2.0 OR BSD-2-Clause and are not simply Apache-2.0-OR-MIT) and adds the missing konstin and Aqua Security copyright lines; version/'s NOTICE entry now credits pypa/packaging directly, not just its aquasecurity/rstudio ancestry. Combined with #19395 (citation normalization) because both touch the same package headers: retrofits all 12 pypa/packaging permalink citations in version/ to one pinned SHA (4eb0753, the newest of the three candidates and already used elsewhere in NOTICE) in a symbol-name-first format, via a new exported version.UpstreamPackagingSHA const so version_test.go (an external test package) can cite it too. Comment/header-only change; no behavior touched. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
4eb0753 is a main commit 128 commits after the 26.2 release, not the release itself; relabel it everywhere it was called "26.2". Replace 6ce6143, which is the 26.2 tag object rather than a commit, with the commit it points to (84a87ee). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
1424550 to
b15db55
Compare
…tudio/package-manager#18746) (#61) * distribution: add default-CI parse coverage with synthetic fixtures Parse only had test coverage behind the distribution_integration build tag, which needs python/twine/cargo/gpg and clones GitHub repos, so default CI (plain `go test ./...`) never exercised it. Builds wheels and sdists in-test with archive/zip, archive/tar and compress/gzip instead of committing sample archives, so every byte is Posit-authored and there is nothing for the pending NOTICE/licensing review on #60 to cover. Refs rstudio/package-manager#18746. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * distribution/archiver: close file when tarReadCheck fails NewArchiveReader opened f for a .tar.gz, then returned early on a tarReadCheck error without closing it. The gzip.NewReader error branch right above already closes f; this makes the tarReadCheck branch match. Refs rstudio/package-manager#18746. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…io/package-manager#19392) (#62) * extras: port pypa canonicalize_name conformance table Ports test_canonicalize_name and the non-validating half of test_canonicalize_name_invalid from pypa/packaging (rstudio/package-manager#19392). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * marker: port pypa test_markers.py conformance tables Ports TestOperatorEvaluation, the parse/evaluate tables, PEP 345 and setuptools-legacy variable coverage, extra normalization, and the module-level and/or evaluation tests from pypa/packaging (rstudio/package-manager#19392). All rows pass unchanged; no fixes needed. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * pep508: port uv-pep508 error caret positions Ports the error_* inputs and caret spans from uv-pep508 (rstudio/package-manager#19392), asserting our own Start/End offsets and message text, never uv's prose. 34 rows pass or are annotated divergences (point vs span convention); 10 are documented skips (different error anchor, an oracle conflict with uv, or version validity deferred to package requirement). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * NOTICE: attribute the new conformance ports (append-only) Adds three paragraphs for the marker/, extras/ and internal/pep508 conformance tests added for rstudio/package-manager#19392. Appended after the existing rapid paragraph so it merges cleanly with #60, which is rewriting NOTICE elsewhere; needs the same licensing review. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * pep508: fix row-count arithmetic in error_position_test.go header Independent review caught the header's self-reported split (5+28+7+4=44) undercounting by one: the table has 45 rows (5 pass, 30 divergence, 10 skip), not 44. No table or test logic changed. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Adds Apache-2.0 §4(b)/(c) provenance headers to every file with ported third-party code, fixes two NOTICE errors, and retrofits the 12 pypa/packaging permalink citations in
version/to one pinned SHA in a symbol-name-first format.This combines #19394 and #19395: #19394 already edits the same ~10 package headers #19395 needs, so doing the citation retrofit now avoids a second review pass over near-identical churn.
Provenance blocks (#19394) — 30 files
version/version.go,specifier.go,version_test.go,specifier_test.go,specifier_conformance_test.go,specifierset_conformance_test.godistribution/parse.go,internal/distributions/distribution.go,metadata.go,sdist.go,wheel.go,internal/packages/hash_manager.go,types/types.gotags/generate.gowheelname/wheelname.goextras/extras.gointernal/pep508/tokenizer.go,marker.go,requirement.go,grammar_conformance_test.gorequirement/requirement.go,conformance_test.gomarker/evaluate.go,environment.goreqtxt/preprocess.go,shlex.go,classify.go,flatten.go,parse.go,types.goEach block names the exact upstream symbols (not just "the tokenizer") and a per-file
Changed:note specific to that file's actual divergence from upstream — not a copy-pasted paragraph.internal/pep508/tokenizer.gogets only the header block; nothing else in that file changed.license/(license.go,classifiers.go) deliberately gets no block despite reproducingrstudio/package-manager'sgetLicense/getLicenseTypes: that predecessor is Posit's own code, so there is no outside licensor for Apache §4(b)/(c) to satisfy — it's an internal Go-to-Go copy, not third-party-derived material.Files were also excluded where citations exist only for verification/rationale rather than copied source or data (e.g.
marker/marker.go, most_test.goregression files,tags/target.go,reqtxt/string.go) — see individual blockChanged:notes for what each file actually ports.NOTICE corrections (#19394)
uv-pep508/uv-pep440override uv's workspace license per-crate toApache-2.0 OR BSD-2-Clause, not the workspace'sApache-2.0 OR MITNOTICE previously claimed. Added the missing konstin copyright line (theirLicense-BSDreadsCopyright (c) 2023 konstin) and thepypa/packaging → konstin → Astral → usprovenance chain. I could not independently verify uv's live source in this sandbox — this is built from the issue's cited evidence (uv-pep508/src/lib.rs:50,1062,uv-pep440/CHANGELOG.md). Left themarker/entry'suv-configurationcitation untouched, since that crate does correctly inherit the workspace dual license.70d9dd0(Aug 2026) — verified viagit log -Son NOTICE; no action needed here.version/'s NOTICE entry credited onlyaquasecurity/go-pep440-versionand never pypa/packaging, despiteversion.gocarrying direct pypa citations. Added the pypa/packaging mention and the missing Aqua Security copyright line.Citation normalization (#19395)
Re-grepped
github.com/pypa/packaging/blob/onorigin/main: 12 citations (not the issue's claimed 13),a6407e3a×7 (not ×8) +28d2fa07×4 +4eb0753×1.Picked
4eb0753dba8fcaaac8eb75463374e448f0931558— it's the newest of the three (2026-07-28 vs. 2020-12-02 and 2021-01-04) and already anchors theversion/conformance-test citation in NOTICE. Added an exportedversion.UpstreamPackagingSHAconst inversion/version.go(exported, not just package-private, sinceversion_test.golives in the externalversion_testpackage and needs to cite it too); every citation now readsPinned: see UpstreamPackagingSHA (L<n> at that commit)orPinned: see version.UpstreamPackagingSHA (...)from outside the package.I do have outbound network access in this sandbox (verified via GitHub's REST API), so I fetched pypa/packaging at
4eb0753and re-verified every citation's logical block by symbol name, not just by line count:preReleaseAliases/postReleaseAliasessplit now maps to upstream's single merged_LETTER_NORMALIZATIONdict — noted inversion.go's block.specifier_test.go'sSPECIFIERSlist and its companion invalid-case list — the two the issue flagged as already stale — are re-pointed to the correct current lines (L33-L43andL55-L102); a comment on the invalid-case citation notes upstream's list has grown since (pre/post/dev-tagged prefix-matching, non-ASCII local-segment cases) beyond what this file ports.version_test.go's valid/invalid version lists similarly re-verified and re-pointed, with the same "upstream has grown" note.Request for licensing review
Do not merge without a review from someone with authority on licensing. This is a public repo and the open questions are legal, not technical:
uv-pep508/uv-pep440per-crate license override (Apache-2.0 OR BSD-2-Clause) and the konstin copyright line correctly stated? I built this from the issue's cited evidence, not live verification of uv's current source.Changed:wording in each provenance block an adequate discharge of Apache §4(b) ("modified files... carry prominent notices")?license/no block at all, on the theory that a Posit-to-Posit copy fromrstudio/package-managerdoesn't trigger Apache §4(b)/(c) (no outside licensor to satisfy)? NOTICE's existinglicense/paragraph still credits that predecessor either way.I am not providing that sign-off myself, even though I made the edits.
Overlap with #58 / #59
#58 (
19401-marker-string-escapes) and #59 (19402-url-token-whitespace) are open against this repo and touchinternal/pep508/tokenizer.go,marker.go, andrequirement.go. This PR only touches the header region (right after the SPDX line) of any file they also touch — nothing else. Expect a possible trivial rebase if either merges first.Verification
go build ./...,go vet ./...,gofmt -l .: cleango test ./... -count=1 -timeout 900s: 543 pass / 0 fail across 12 packages, identical before and after (comment/header-only change, confirmed by running the suite against both the base commit and this commit)go test ./... -race: cleangolangci-lint run ./...: 2 pre-existinggovetfindings (reflect.Ptrdeprecation) indistribution/internal/distributions/distribution.go:323,327— present onmainbefore this change, unrelated to the comment-only diff here. My localgolangci-lintis v2.13.1; CI pins v2.11.2 (.github/workflows/ci.yml), so please treat CI's run as authoritative.🤖 Generated with Claude Code