feat: Module Package v1 carries the module's own license (ADR 0051)
CI / verify (pull_request) Successful in 58s
CI / infrastructure-smoke (pull_request) Successful in 35s
CI / migration-smoke (pull_request) Successful in 1m53s
CI / image-build (pull_request) Successful in 30s
CI / deploy-smoke (same-origin) (pull_request) Successful in 50s
CI / deploy-smoke (split) (pull_request) Successful in 1m32s
CI / verify (pull_request) Successful in 58s
CI / infrastructure-smoke (pull_request) Successful in 35s
CI / migration-smoke (pull_request) Successful in 1m53s
CI / image-build (pull_request) Successful in 30s
CI / deploy-smoke (same-origin) (pull_request) Successful in 50s
CI / deploy-smoke (split) (pull_request) Successful in 1m32s
Every Module Package v1 now declares the module's license and carries its text. packageFormat stays 1; pre-ADR-0051 metadata fails closed. - Contracts: ekklesia.package.json requires an SPDX `license` expression, validated with spdx-expression-parse, with UNLICENSED and non-expressions refused. The `files` list must hold exactly one non-empty root LICENSE. The package contracts move to the @ekklesia/contracts/module-package subpath, so the SPDX parser and its data (spdx-exceptions and spdx-license-ids ship no licence files) never reach a module bundle through the SDK's re-export of the contracts root. - Packager: reads the source package.json's string SPDX declaration and never invents one. It requires an explicit --license-file (a non-empty regular file, no symlink, no parent search, no download) and copies its bytes unchanged to LICENSE, listed with size and SHA-256 and covered by the archive digest. THIRD_PARTY_NOTICES stays third-party only, and bundled Ekklesia code stays in `incorporates`. - Verifier: rejects missing or invalid license metadata, and a missing, unlisted, duplicated, or corrupted LICENSE, through the schema and the existing strict inventory. - Template: packaged as AGPL-3.0-or-later with the repository's canonical LICENSE, passed explicitly (Dockerfile, smoke, docs). Packing it twice gives byte-identical archives. Started by Codex; reviewed and completed in Claude Code (empty license-text refusal, schema non-empty LICENSE, symlink and empty-file tests). ADR 0051 is Accepted. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
30f61094e6
commit
85fae9e07e
@@ -65,6 +65,7 @@ bundles the backend into one deterministic Ekklesia Module Package (ADR 0049):
|
||||
|
||||
```bash
|
||||
pnpm modules:pack --module templates/module --target any --out <directory> \
|
||||
--license-file LICENSE \
|
||||
--source-revision "$(git rev-parse HEAD)"
|
||||
```
|
||||
|
||||
@@ -89,4 +90,9 @@ classification or approval.
|
||||
The template's `package.json` declares `"license": "AGPL-3.0-or-later"`, the license of Ekklesia
|
||||
and of official Ekklesia modules (see the repository [README](../../README.md#license) and
|
||||
[LICENSE](../../LICENSE)). A module started from the template begins with that declaration; an
|
||||
official Ekklesia module keeps it.
|
||||
official Ekklesia module keeps it. The packaging command explicitly supplies the repository's
|
||||
canonical `LICENSE`, avoiding a duplicate file in this nested template. Its exact bytes become the
|
||||
package-root `LICENSE`, while `ekklesia.package.json.license` receives the source declaration.
|
||||
Standalone modules should keep their own license file and pass its path explicitly. The packager
|
||||
does not infer or download license material, and `THIRD_PARTY_NOTICES` remains only for bundled
|
||||
third-party dependencies.
|
||||
|
||||
Reference in New Issue
Block a user