Skip to content

chore(license): normalise licence declarations to EUPL-1.2 - #224

Merged
rubenvdlinde merged 3 commits into
developmentfrom
chore/eupl-license-normalisation-2026-08-05
Aug 5, 2026
Merged

chore(license): normalise licence declarations to EUPL-1.2#224
rubenvdlinde merged 3 commits into
developmentfrom
chore/eupl-license-normalisation-2026-08-05

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

What

The app is licensed EUPL-1.2composer.json, appinfo/info.xml and the bundled LICENSE all say so — but package.json and seven source/config files still carried AGPL-3.0-or-later SPDX headers left over from the Nextcloud app template. A licence header is a legal claim, so a repo that states two different licences about itself is a real defect, not a lint nit.

Changed (9 files)

category count files
package.json license field 1 package.json
package-lock.json root entry 1 package-lock.json
SPDX-License-Identifier: AGPL-3.0-or-laterEUPL-1.2 7 css/show-menu-labels.css, js/lib/tokenTransforms.js, vitest.config.js, tests/e2e/visual/_visual-helpers.ts, tests/integration/run-newman.sh, tests/vitest/tokenTransforms.spec.js, tests/vitest/lasuiteBridgeRadiusScale.spec.js

No @copyright / SPDX-FileCopyrightText line was touched — this normalises the licence only.

Deliberately NOT changed — third-party, not ours to relicense

  • scripts/sources/lasuite-deployed-cunningham-tokens.css — MIT, verbatim vendored from suitenumerique/docs; its own header says do NOT hand-edit.
  • LICENSES/Etalab-2.0.txt, MARIANNE-LICENCE.md, AGREEMENT-MARIANNE.md, css/systems/lasuite/fonts/marianne/ — French State Etalab-2.0 licence governing the bundled Marianne font.
  • tests/Unit/MarianneFontTest.php'Etalab-2.0' there is a test assertion string, not a licence declaration on the file. Changing it would break the test.
  • The AGPL-3.0-or-later entries in package-lock.json for @nextcloud/dialogs, @nextcloud/files, @nextcloud/notify_push, @nextcloud/vue — upstream's own licences.
  • openspec/** prose and openspec/coverage-report.md — historical narrative describing past state, not licence declarations.

Verification

Header-only change; no behaviour touched.

check before after
PHPUnit (PHP 8.4) OK — 556 tests, 4261 assertions OK — 556 tests, 4261 assertions
vitest 81 passed (8 files) 81 passed (8 files)
hydra gate-28 license-triangle PASS PASS

PHPUnit was run under PHP 8.4 (host PHP is 8.2, which aborts with exit 255 on platform_check — a VOID run, not a verdict). Gate-28 was positive-controlled in this checkout first: flipping one lib/ header to AGPL made it FAIL as expected, so the PASS is a live green, not an absent check.

The app is licensed EUPL-1.2 — composer.json, appinfo/info.xml and the
bundled LICENSE all say so — but package.json and seven source/config
files still carried AGPL-3.0-or-later SPDX headers left over from the
Nextcloud app template. A licence header is a legal claim, so a repo
that states two different licences about itself is a real defect, not a
lint nit.

Changed:
- package.json + package-lock.json root entry: AGPL-3.0-or-later -> EUPL-1.2
- SPDX-License-Identifier headers on 7 files: css/show-menu-labels.css,
  js/lib/tokenTransforms.js, vitest.config.js, tests/e2e/visual/_visual-helpers.ts,
  tests/integration/run-newman.sh, tests/vitest/tokenTransforms.spec.js,
  tests/vitest/lasuiteBridgeRadiusScale.spec.js

Deliberately NOT changed (third-party — not ours to relicense):
- scripts/sources/lasuite-deployed-cunningham-tokens.css (MIT, verbatim
  vendored from suitenumerique/docs; header says do NOT hand-edit)
- LICENSES/Etalab-2.0.txt, MARIANNE-LICENCE.md, AGREEMENT-MARIANNE.md and
  css/systems/lasuite/fonts/marianne/ (French State Etalab-2.0 licence
  governing the bundled Marianne font)
- tests/Unit/MarianneFontTest.php — 'Etalab-2.0' there is a test assertion
  string, not a licence declaration on the file
- the AGPL entries in package-lock.json for @nextcloud/* packages — those
  are upstream's own licences

Header-only change; no behaviour touched. PHPUnit 556 tests OK before and
after (PHP 8.4), vitest 81 passed before and after, hydra gate-28
license-triangle PASS before and after.
Pre-existing CI failure, unrelated to the licence sweep: `test:l10n` was red on
`development` before this branch existed. js/admin.js:2829 calls
t('nldesign', 'Saved. Reload to see the change.') in the custom-CSS save
handler, but the key was never added to l10n/en.json, so the string shipped
untranslated in every locale.

Verified pre-existing by running the check against a pristine `origin/development`
tree: it fails there identically, and this branch touches neither js/admin.js
nor l10n/.

- l10n/en.json: added the key (key === English source).
- l10n/<36 locales>.json: backfilled via the repo's own
  `check-l10n-completeness.js --write`, which is what keeps that second check
  green once en.json gains a key.
- l10n/nl.json: translated properly rather than left as an English placeholder,
  matching the phrasing of the neighbouring "Herlaad de pagina om ..." strings.

test:l10n FAIL -> OK; test:l10n:completeness OK -> OK (209 keys, 36 locales).
@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/nldesign @ 8acee2b

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
test-l10n
composer ✅ 100/100
npm ✅ 2/2
PHPUnit
Newman
Playwright
Hydra gates

Quality workflow — 2026-08-05 18:30 UTC

Download the full PDF report from the workflow artifacts.

@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/nldesign @ c1a4a7c

Check PHP Vue Security License Tests
lint ⏭️
phpcs ⏭️
phpmd ⏭️
psalm ⏭️
phpstan ⏭️
phpmetrics ⏭️
eslint ⏭️
stylelint ⏭️
build ⏭️
composer ⏭️ ⏭️
npm ⏭️ ⏭️
PHPUnit
Newman
Playwright
Hydra gates

Quality workflow — 2026-08-05 18:41 UTC

Download the full PDF report from the workflow artifacts.

@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/nldesign @ 5edd23f

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
test-l10n
composer ✅ 100/100
npm ✅ 2/2
PHPUnit
Newman
Playwright
Hydra gates

Quality workflow — 2026-08-05 19:00 UTC

Download the full PDF report from the workflow artifacts.

@rubenvdlinde
rubenvdlinde merged commit 930ebf0 into development Aug 5, 2026
30 of 33 checks passed
@rubenvdlinde
rubenvdlinde deleted the chore/eupl-license-normalisation-2026-08-05 branch August 5, 2026 19:01
@rubenvdlinde

Copy link
Copy Markdown
Contributor Author

Merging under the licence-normalisation merge rule.

  • gate-28 license-triangle: PASS (run 31035541857) — and the whole gate sweep is clean: RESULT: ALL 58 APPLICABLE GATES PASSED — and all 58 of them ran.
  • Diff is licence-only: 9 files, +9/-9, every changed line an SPDX-License-Identifier or license field moving AGPL-3.0-or-later → EUPL-1.2. No file added, deleted or renamed.
  • Every red is also red on the base. PR reds = Frontend Check (test:l10n), Integration Tests (Newman), Quality Report. Base development run 31034294318 is red on all three (plus Hydra Gates, which this PR actually turns green). The PR's failures are a strict subset of the base's.
  • The unrelated l10n commit that was on this branch has been reverted (83640ae); that change now lives in its own PR fix(l10n): register the missing "Saved. Reload to see the change." key #225, so this diff is licence-only as intended.

rubenvdlinde added a commit that referenced this pull request Aug 5, 2026
Follow-up to #224. The docs site's 'Open Source' feature card told every
visitor the app is 'AGPL-3.0 licensed', while composer.json, package.json,
appinfo/info.xml, the bundled LICENSE and every source header say EUPL-1.2.

This is the most public licence claim the app makes — it is the landing page
of the documentation site — and my sweep in #224 missed it because I grepped
for SPDX identifiers and @license tags, not for prose.

No behaviour change; one string in a Docusaurus feature card.
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