Files
Adam Daley 937360f171 Lock module manifests to spec v1 (#4619)
* Lock module manifests to spec v1

Backfill all module manifests to the locked v1 format:
manifest_version/type/id/name/version/description/author/license/
homepage_url/icon_url/requires. Versions align to the release
version, stamped at build time in the release-tree stage alongside
Version::VERSION and verified by the release workflow.

Brand mirrors FOSSBilling/modules byte-identically; adds a
vendored manifest validator (tools/manifest) run in CI on every
module manifest, and aligns content.sql seed versions with the
manifest versions.

Module manifest v1 (summary):
- manifest_version: 1, type: module
- requires as composer/semver ranges (fossbilling, php, modules)
- SPDX license expressions
- author as {name, url}

* Drop redundant recast flagged by Rector

* Format manifest validator to repo style

* Address manifest PR review: normalize v1 author/project_url, harden validator

* Enforce v1 manifest requires constraints at install time

Check requires.fossbilling (skipped on preview builds where the
running version is a placeholder), requires.php, and
requires.modules (presence plus installed version) in
installModule() before any install hook runs. Manifests without a
requires object pass through unchanged. Promotes composer/semver
to a production dependency and adds activate() unit coverage for
satisfied, unmet, missing-dependency, and invalid-constraint cases.

* Use spellcheck-clean fixture names and wording

* Review validator feedback: placeholder message style, guard non-array requires.modules

* Update job name to 'Validate Manifests'

* Resolve review: missing constraint placeholder, name-only author link

* Review follow-ups: nameless author fallback, core dependency version test

* Use spellcheck-clean fixture name

* Use neutral author fallback for nameless v1 authors

* Point requires enforcement at ExtensionType after enum merge

* Sync legacy seeded module versions on update

* Guard version sync on partial schemas, bump seeded patch level

* Allow version-sync SQL in strict patcher test doubles

* Address review: strict requires, preview parsing, manifest versions, drift-path sync

* Remove duplicated requires tests

* Use spellcheck-clean wording in docblock

* Address review: strict requires, preview parsing, manifest versions, drift sync

* Reject unversioned dependencies at install time

* Spellcheck-clean fixture name

* Block deactivation of modules with installed dependents

* Strict prerelease validation; seeded-sync integration test

* Address review: strict requires, preview parsing, manifest-gated sync, semver inputs

* Review followups: spellcheck-clean fixtures, integration test mock scope

* Deslop: clarify deactivate guard scope, merge duplicate version checks

* Address review: strict requires, manifest-gated sync, semver inputs, deactivate guard

* Fail closed on undeclared or non-string dependency versions

* Skip seeded-version updates that would rewrite the same value

* Real-method hasDeclaredVersion tests; honest stub comment

* Spellcheck-clean fixture name
2026-11-02 01:05:51 +00:00
..