chore(license): normalise 3 stray AGPL-3.0 SPDX declarations to EUPL-1.2 - #134
Conversation
Three test files declared SPDX-License-Identifier: AGPL-3.0-or-later while every other licence signal in the repo (LICENSE, composer.json, package.json, appinfo/info.xml and every lib/**.php @license tag) says EUPL-1.2. - tests/e2e/docs-screenshots.spec.ts - tests/e2e/visual/_visual-helpers.ts - tests/e2e/visual/openbuild.visual.spec.ts NOT changed: lib/Resources/template/appinfo/info.xml still says <licence>agpl</licence>. That file is inside the vendored nextcloud-app-template snapshot, which docs/releasing.md says must be refreshed wholesale by rsync and never hand-edited, and whose .snapshot-meta.json records the exact upstream commit it came from. Upstream already says EUPL-1.2, so the correct fix is a snapshot refresh, not an edit here. See the PR body. Header-only change; PHPUnit (746 tests) and vitest (1364 tests) are identical before and after. gate-28: PASS -> PASS.
Quality Report — ConductionNL/openbuild @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| check-manifest | ✅ | ||||
| test-l10n | ✅ | ||||
| composer | ✅ | ✅ 101/101 | |||
| npm | ✅ | ✅ 654/654 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ | ||||
| Hydra gates | ❌ |
Quality workflow — 2026-08-05 18:51 UTC
Download the full PDF report from the workflow artifacts.
|
Merging with gate-28 license-triangle: PASS. Diff is licence-only. Every changed line is The single failing gate is gate-58 Verified directly against the base tree — Why the base "green" is not the right comparison.
Nothing suppressed: no waiver, no baseline entry, no gate disabled. gate-58 stays red and the pre-existing |
What
Three test files still declared
SPDX-License-Identifier: AGPL-3.0-or-later, while everyother licence signal in the repo says EUPL-1.2:
LICENSE(EUPL-1.2 text),composer.json,package.json,appinfo/info.xml(<licence>EUPL-1.2</licence>), and everylib/**/*.php@licensetag.tests/e2e/docs-screenshots.spec.tsAGPL-3.0-or-laterEUPL-1.2tests/e2e/visual/_visual-helpers.tsAGPL-3.0-or-laterEUPL-1.2tests/e2e/visual/openbuild.visual.spec.tsAGPL-3.0-or-laterEUPL-1.2lib/Resources/template/appinfo/info.xml:40still says<licence>agpl</licence>.This is a real defect with real consequence: it is the app scaffold the exporter ships, so
every app generated by OpenBuild is born declaring AGPL in its
info.xmlwhile itscomposer.jsonandpackage.json(populated from the{{license}}placeholder, whichdefaults to
EUPL-1.2) say EUPL-1.2. The template's ownLICENSEfile is the EUPL-1.2text and its
<description>even reads "Vrij en open source onder de EUPL-1.2-licentie".I did not fix it here, for three reasons:
lib/Resources/template/is a vendored snapshot ofnextcloud-app-template.docs/releasing.mdsays, verbatim: "Do not scripted-edit individual files insidethe snapshot — copy the whole tree."
lib/Resources/template/.snapshot-meta.jsonrecords the exact upstream commit(
7ee06aae…, snapshotted 2026-05-11). Hand-editing one file desynchronises the treefrom its recorded source, and the next
rsync -a --deleterefresh silently reverts it.nextcloud-app-template/appinfo/info.xmlsays<licence>EUPL-1.2</licence>today. This is stale snapshot drift, not a wrongdeclaration needing a new decision.
The right fix is a snapshot refresh (whole-tree rsync +
.path-manifest.txt+.snapshot-meta.json+ minor version bump + CHANGELOG), which is its own change and outof scope for a licence-header normalisation sweep. Filing this for follow-up.
Other things deliberately NOT changed
LICENSE:177andlib/Resources/template/LICENSE:177— "GNU Affero General PublicLicense (AGPL) v. 3" is an entry in the EUPL-1.2's own Appendix of compatible
licences, not a declaration.
lib/Resources/template/README.md:246— a list of EUPL-compatible copyleft licences.src/dialogs/ExportDialog.vue:185—{ label: 'AGPL-3.0', value: 'AGPL-3.0' }is adropdown option offering the user a licence for the app they are generating. Not a
declaration on this file; removing it would remove a user choice.
.license-overrides.json— justifications for third-party dependency licences(
pako,sha.js)..claude/openspec/architecture/adr-014-licensing.md:2— states "appinfo/info.xml:MUST use
<licence>agpl</licence>— Nextcloud app store does not recognise EUPL."This ADR is stale (the repo's own
info.xmlnow says EUPL-1.2 and contradicts it),but amending an architectural decision is not a lint fix. Flagged for follow-up.
@copyright/SPDX-FileCopyrightTextlines.Verification
Run identically before and after (PHPUnit under PHP 8.5 in a container — host PHP is 8.2,
below this repo's
^8.3):npm run test:unit)Incidental finding (not touched)
src/services/manifestValidation/documentAttachments.js:136contains two literal NUL(0x00) bytes inside a template literal, used as a composite-key separator. That makes
fileclassify the file asdataand makes grep treat it as binary. It is a functionalcode path, so it is out of scope here — but it could be written as the
\0escape for thesame value and better tool compatibility. Repo owners' call.