chore(license): normalise licence declarations to EUPL-1.2 - #224
Merged
rubenvdlinde merged 3 commits intoAug 5, 2026
Conversation
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).
Contributor
Quality Report — ConductionNL/nldesign @
|
| 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.
…nge." key" This reverts commit 6268a18.
Contributor
Quality Report — ConductionNL/nldesign @
|
| 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.
Contributor
Quality Report — ConductionNL/nldesign @
|
| 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.
Contributor
Author
|
Merging under the licence-normalisation merge rule.
|
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
The app is licensed EUPL-1.2 —
composer.json,appinfo/info.xmland the bundledLICENSEall say so — butpackage.jsonand seven source/config files still carriedAGPL-3.0-or-laterSPDX 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)
package.jsonlicensefieldpackage.jsonpackage-lock.jsonroot entrypackage-lock.jsonSPDX-License-Identifier: AGPL-3.0-or-later→EUPL-1.2css/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.jsNo
@copyright/SPDX-FileCopyrightTextline 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 fromsuitenumerique/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.AGPL-3.0-or-laterentries inpackage-lock.jsonfor@nextcloud/dialogs,@nextcloud/files,@nextcloud/notify_push,@nextcloud/vue— upstream's own licences.openspec/**prose andopenspec/coverage-report.md— historical narrative describing past state, not licence declarations.Verification
Header-only change; no behaviour touched.
license-trianglePHPUnit 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 onelib/header to AGPL made it FAIL as expected, so the PASS is a live green, not an absent check.