Skip to content

licence: normalise the tree to MPL-2.0 (code) / CC-BY-SA-4.0 (docs), two-line SPDX - #161

Merged
hyperpolymath merged 1 commit into
mainfrom
licence/mpl-ccbysa-normalisation
Aug 7, 2026
Merged

licence: normalise the tree to MPL-2.0 (code) / CC-BY-SA-4.0 (docs), two-line SPDX#161
hyperpolymath merged 1 commit into
mainfrom
licence/mpl-ccbysa-normalisation

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

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

Was Now
dialects/solo/compiler: license = "MIT OR Palimpsest-0.8"not a registered SPDX identifier, so unresolvable by any validator MPL-2.0
my-ssg, playground/hives/me: MIT with no LICENSES/MIT.txt in the tree MPL-2.0
frontier-practices/LICENSE, playground/LICENSE: 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 verbatim MPL-2.0 text
playground/hives/me/LICENSE.txt: declared a MIT-or-MPL dual licence MPL-2.0 (renamed to LICENSE)
LICENSES/AGPL-3.0-or-later.txt present while nothing declared AGPL and policy bans it — but scanners reported it removed
24 manifests with no license key license = "MPL-2.0"

Headers — 507 files

Normalised to the two-line form, on line 1:

<c> SPDX-License-Identifier: MPL-2.0        # CC-BY-SA-4.0 for .md/.adoc
<c> SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>

…except where line 1 is load-bearing (a #! shebang, or the Nickel K9! magic), where it follows immediately.

Line 1 matters: 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:.

Nothing was relicensed

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; 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 in Eval.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-llvm221 passed, 0 failed
  • Coq solo-core compiles, exit 0 (including SessionPi.v)
  • idris2 --build solo-core.ipkgexit 0
  • all 15 workflows parse as YAML; cargo metadata resolves
  • the sweep is idempotent — re-running changes nothing

New debt recorded

C-7: my-ssg and both dialects/*/compiler are in neither workspace.members nor workspace.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

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 -->
Comment thread manifest.scm
Comment on lines +1 to 5
;; 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

@gitar-bot gitar-bot Bot Aug 7, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ 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 👍 / 👎

@gitar-bot gitar-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ This PR is blocked due to unresolved code review findings.

Configure merge blocking · Maintainers can dismiss this review.

@gitar-bot

gitar-bot Bot commented Aug 7, 2026

Copy link
Copy Markdown

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.
Learn more

Code Review ⚠️ Changes requested 0 resolved / 1 findings

Normalises the repository codebase to MPL-2.0 and documentation to CC-BY-SA-4.0 with standardized two-line SPDX headers, but leaves duplicate SPDX identifiers in .scm manifests.

⚠️ Quality: Duplicate SPDX-License-Identifier left in .scm manifests

📄 manifest.scm:1-5 📄 playground/manifest.scm:1-5 📄 frontier-practices/manifest.scm:1-5 📄 hives/solo-hive/manifest.scm:1-5

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
🤖 Prompt for agents
Code Review: Normalises the repository codebase to MPL-2.0 and documentation to CC-BY-SA-4.0 with standardized two-line SPDX headers, but leaves duplicate SPDX identifiers in .scm manifests.

1. ⚠️ Quality: Duplicate SPDX-License-Identifier left in .scm manifests
   Files: manifest.scm:1-5, playground/manifest.scm:1-5, frontier-practices/manifest.scm:1-5, hives/solo-hive/manifest.scm:1-5

   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.

   Fix (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

Options

Display: compact → Showing less information.

Comment with these commands to change the behavior for this request:

Compact
gitar display:verbose         

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

@hyperpolymath
hyperpolymath merged commit 9587d2b into main Aug 7, 2026
33 of 34 checks passed
@hyperpolymath
hyperpolymath deleted the licence/mpl-ccbysa-normalisation branch August 7, 2026 12:22
hyperpolymath added a commit that referenced this pull request Aug 7, 2026
#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>
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.

2 participants