licence: normalise the tree to MPL-2.0 (code) / CC-BY-SA-4.0 (docs), two-line SPDX - #161
Conversation
Owner ruling: code is MPL-2.0, documentation is CC-BY-SA-4.0, two-line SPDX, repository licence MPL-2.0. Closes DEBT items L-1 through L-6. DECLARATIONS - dialects/solo/compiler declared license = "MIT OR Palimpsest-0.8" — Palimpsest-0.8 is NOT a registered SPDX identifier, so the expression was unresolvable by any REUSE/SPDX validator. Now MPL-2.0. - my-ssg and playground/hives/me declared MIT with no LICENSES/MIT.txt present. Now MPL-2.0. - frontier-practices/LICENSE and playground/LICENSE were tagged SPDX: MPL-2.0 over a PALIMPSEST-MPL 1.0 body copyrighted to the 'Palimpsest Stewardship Council' — a machine/human mismatch naming a different rights holder. playground/hives/me/LICENSE.txt declared a MIT-or-MPL dual licence. All three replaced with the verbatim MPL-2.0 text (LICENSE.txt renamed to LICENSE). - LICENSES/AGPL-3.0-or-later.txt removed: nothing declared AGPL, and AGENTIC.a2ml bans it, but scanners reported it. - 24 manifests had no license key; all now license = "MPL-2.0". HEADERS — 507 files normalised to the two-line form <c> SPDX-License-Identifier: MPL-2.0 (CC-BY-SA-4.0 for .md/.adoc) <c> SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <...> on line 1, except where line 1 is load-bearing (#! shebang, Nickel K9!), where it follows immediately. Line 1 matters because the estate linters — including this repo's own hooks/validate-spdx.sh — grep head -1 only, so 127 files whose header sat on line 2+ were being read as MISSING. A further 55 had no header at all, and 421 used Owner:/Copyright (c) rather than SPDX-FileCopyrightText:. Exactly ONE identifier changed meaning: FOUNDATIONS_BRIDGE.md carried a malformed 'CC-BY-SA-4.0 AND CC-BY-SA-4.0'. Every other file kept the licence it already declared — form and position were normalised, nothing was relicensed. Several genuinely broken headers were repaired in passing (a doubled header rendering as a markdown H1; a nested '<!-- <!-- Owner:'). The sweep is block-aware: a multi-line comment is consumed only when every interior line is header material, so a (* or <!-- opening prose is never orphaned. VERIFIED after the sweep - cargo test --workspace --exclude my-llvm: 221 passed, 0 failed - Coq solo-core compiles, exit 0 (incl. SessionPi.v) - idris2 --build solo-core.ipkg: exit 0 - all 15 workflows parse as YAML; cargo metadata resolves - the sweep is idempotent (re-run changes nothing) Also records new debt C-7: my-ssg and both dialects/*/compiler are in neither workspace.members nor workspace.exclude, so cargo refuses them — confirmed pre-existing, not caused by this change. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
| SPDX-License-Identifier: CC-BY-SA-4.0 | ||
| Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk> | ||
| --> | ||
| <!-- SPDX-License-Identifier: CC-BY-SA-4.0 --> |
| ;; SPDX-License-Identifier: MPL-2.0 | ||
| ;; SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk> | ||
|
|
||
| ;;; SPDX-License-Identifier: MPL-2.0 | ||
| ;;; manifest.scm — Generic Guix manifest for RSR-compliant projects |
There was a problem hiding this comment.
⚠️ Quality: Duplicate SPDX-License-Identifier left in .scm manifests
The sweep prepended the new two-line header but did not remove the pre-existing ;;; SPDX-License-Identifier: MPL-2.0 line, so these Guix manifests now declare the licence identifier twice (line 1 with ;; and line 4 with ;;;). The comment-detection only matched ;;-style headers and treated the ;;; variant as ordinary body text. This contradicts the PR's stated goal of a single two-line SPDX and its idempotency claim, and duplicate identifiers can be flagged by SPDX/REUSE validators. The same pattern affects the remaining hives/*/manifest.scm files that carried the ;;; header. Fix: delete the leftover ;;; SPDX-License-Identifier: MPL-2.0 line in each affected manifest.
Remove the redundant ;;; SPDX-License-Identifier: MPL-2.0 line so the identifier is declared only once.:
;; SPDX-License-Identifier: MPL-2.0
;; SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
;;; manifest.scm — Generic Guix manifest for RSR-compliant projects
Was this helpful? React with 👍 / 👎
There was a problem hiding this comment.
Configure merge blocking · Maintainers can dismiss this review.
|
Note Automatic reviews are paused because your trial's included automatic processing has been used for this period. Upgrade now, or comment "Gitar review" to run a review anytime. Code Review
|
| Compact |
|
Important
Your trial ends in 3 days — upgrade now to keep code review, CI analysis, auto-apply, custom automations, and more.
Was this helpful? React with 👍 / 👎 | Gitar
#162) Follow-up to #161. That PR normalised every SPDX identifier and `license` declaration, but a licence is also what the prose *tells a reader* — and five passages in subtrees still said something different: - `frontier-practices/README.adoc` — *"licensed under the Palimpsest-MPL License v3.0 (PMPL-1.0)"*, plus a badge whose alt-text read `PMPL-1.0` while the image itself said MPL-2.0 - `frontier-practices/tabletop/README.adoc` — *"Licensed under MIT + Palimpsest v0.8"* - `playground/hives/me/CONTRIBUTING.md` — told contributors their work would be licensed under **the MIT License**, which is the passage most likely to actually mislead someone - `playground/PALIMPSEST.adoc` — asserted PMPL-1.0, mirroring the root file already converted in #159; given the same historical-note treatment All now state **MPL-2.0** for code and **CC-BY-SA-4.0** for documentation. **Verified:** no `.md`/`.adoc` asserts a non-MPL/CC licence · the tree contains exactly two SPDX identifiers (426 MPL-2.0 / 206 CC-BY-SA-4.0) · `hooks/validate-spdx.sh` passes. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Implements the ruling: code MPL-2.0, docs CC-BY-SA-4.0, two-line SPDX, repository licence MPL-2.0. Closes DEBT items L-1 – L-6 — the licence domain is now zero open.
Declarations fixed
dialects/solo/compiler:license = "MIT OR Palimpsest-0.8"— not a registered SPDX identifier, so unresolvable by any validatorMPL-2.0my-ssg,playground/hives/me:MITwith noLICENSES/MIT.txtin the treeMPL-2.0frontier-practices/LICENSE,playground/LICENSE: taggedSPDX: MPL-2.0over a Palimpsest-MPL 1.0 body copyrighted to the "Palimpsest Stewardship Council" — a machine/human mismatch naming a different rights holderplayground/hives/me/LICENSE.txt: declared a MIT-or-MPL dual licenceLICENSE)LICENSES/AGPL-3.0-or-later.txtpresent while nothing declared AGPL and policy bans it — but scanners reported itlicensekeylicense = "MPL-2.0"Headers — 507 files
Normalised to the two-line form, on line 1:
…except where line 1 is load-bearing (a
#!shebang, or the NickelK9!magic), where it follows immediately.Line 1 matters: the estate linters — including this repo's own
hooks/validate-spdx.sh— grephead -1only. So 127 files whose header sat on line 2+ were being read as missing. A further 55 had no header at all, and 421 usedOwner:/Copyright (c)rather thanSPDX-FileCopyrightText:.Nothing was relicensed
Exactly one identifier changed meaning —
FOUNDATIONS_BRIDGE.mdcarried a malformedCC-BY-SA-4.0 AND CC-BY-SA-4.0. Every other file kept the licence it already declared; only form and position changed. Some genuinely broken headers were repaired in passing (one doubled header was rendering as a markdown H1; another was a nested<!-- <!-- Owner:).The sweep is block-aware: a multi-line comment is consumed only when every interior line is header material. An earlier naive version stripped a bare
(*that opened prose inEval.v, turning the body into illegal Coq vernac — caught by compiling the proofs, and the reason that check is in the verification list below.Verified after the sweep
cargo test --workspace --exclude my-llvm→ 221 passed, 0 failedSessionPi.v)idris2 --build solo-core.ipkg→ exit 0cargo metadataresolvesNew debt recorded
C-7:
my-ssgand bothdialects/*/compilerare in neitherworkspace.membersnorworkspace.exclude, so cargo refuses to operate on them. Confirmed pre-existing (reproduces with all local changes stashed) — surfaced while verifying, not caused here.🤖 Generated with Claude Code