Skip to content

Add NOTICE and record the embedded specification bundle#7

Merged
kikashy merged 1 commit into
mainfrom
feat/attribution-notice
Jul 23, 2026
Merged

Add NOTICE and record the embedded specification bundle#7
kikashy merged 1 commit into
mainfrom
feat/attribution-notice

Conversation

@kikashy

@kikashy kikashy commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Why

Two attribution gaps, one legal and one silent.

No copyright owner was asserted anywhere. LICENSE is the unmodified Apache-2.0 text — its appendix is a template for marking your own files, not a field to fill in. The repo credited Doug Clark and The Go Authors in THIRD_PARTY_NOTICES but nobody for its own ~3,900 lines.

THIRD_PARTY_NOTICES omitted the specification bundle. internal/artifacts/artifacts.go:18 is //go:embed jps — 51 files from judgment-pack-spec are compiled into every binary. That is Apache-2.0 material from a separate project, it appears in neither go.mod nor go.sum, and it is the one attribution Apache-2.0 §4 actually requires. The Go-modules-only framing missed it entirely.

What

  • NOTICE — names Brian Jin, carries the bubbled-up attribution for the embedded bundle
  • THIRD_PARTY_NOTICES — restructured into embedded artifacts + Go modules, with the spec bundle listed first
  • LICENSEuntouched, byte-identical to canonical (sha256 cfc7749b…), so license scanners keep reporting a clean Apache-2.0 match
  • .goreleaser.yml / release.yml / README.md — ship NOTICE in the archives and describe it accurately
  • CHANGELOG.md — corrects the stale "LICENSE copyright-owner line not yet filled in" entry, which would have led someone to edit LICENSE incorrectly

The non-obvious bit

NOTICE also had to go into the release workflow's touch list, not just .goreleaser.yml. GoReleaser stamps each extra archive member with its filesystem mtime unless archives.files[].info is set — and no info: block exists, so that touch is the repo's only reproducibility mechanism. A file in files: but not in touch lands with checkout time, differing on every run. It fails silently: checksums.txt and the attestation still cover whatever was produced.

Verified

Snapshot build (goreleaser release --snapshot):

  • asset count 7 — the != 7 gate at release.yml:225 holds
  • NOTICE present in all 6 archives
  • mtime 2026-07-23 16:31:54 in every archive, identical to LICENSE/README.md/THIRD_PARTY_NOTICES and equal to SOURCE_DATE_EPOCH

go test ./..., go vet ./..., goreleaser check all clean.

🤖 Generated with Claude Code

The repository asserted no copyright owner: `LICENSE` is the unmodified
Apache-2.0 text, whose appendix is a template rather than a field to fill.
Add a `NOTICE` naming Brian Jin and leave `LICENSE` byte-identical so
automated license scanners keep reporting a clean Apache-2.0 match.

`THIRD_PARTY_NOTICES` credited the four Go modules but not the specification
bundle, even though `internal/artifacts/artifacts.go` embeds 51 files from
judgment-pack-spec into every binary. That material is Apache-2.0 from a
separate project and appears in neither go.mod nor go.sum, so the previous
Go-modules-only framing omitted the one attribution Apache-2.0 section 4
actually requires.

Ship `NOTICE` in the release archives, and add it to the release workflow's
timestamp-normalization list. GoReleaser copies each extra file's filesystem
mtime into the archive and `.goreleaser.yml` sets no `info:` block, so a file
omitted from that `touch` lands with checkout time and silently breaks
byte-reproducibility -- checksums and attestation still cover whatever bytes
were produced.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Brian Jin <35789537+kikashy@users.noreply.github.com>
@kikashy
kikashy merged commit 99ebc76 into main Jul 23, 2026
4 checks passed
@kikashy
kikashy deleted the feat/attribution-notice branch July 23, 2026 22:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant