Meridian Release Notes
Component-split licensing
Meridian is now dual-licensed by component instead of as a single LGPL-3.0
project:
- User interface (
meridian/ui): LGPL-3.0-or-later, to align with Qt's own
licensing. - Model (
meridian/domain,meridian/application,meridian/infrastructure,
main.py,version.py, build scripts and tests): Apache-2.0, aligning with
the MMSP specification ecosystem.
The root LICENSE is now an overview and component map. The full texts live in
LICENSE-APACHE-2.0.txt (model) and LICENSE-LGPL-3.0.txt (UI);
LICENSE-GPL-3.0.txt is retained because the LGPL-3.0 incorporates it by
reference.
Two licence buttons in the header
The single "Licence" button has been replaced by two:
- UI Licence (scroll icon) opens a dialog showing the LGPL-3.0 text.
- Model Licence (scales icon) opens a separate dialog showing the Apache-2.0
text.
LicenceDialog.qml is now parameterized (licenceTitle and licenceBody) and
reused for both. main.py injects two context properties, uiLicenceText and
modelLicenceText, read from the two licence-text files. Both buttons are in the
keyboard focus ring with the amber focus ring, Enter/Space activation and
Left/Right lateral movement.
Contributor guidelines
Added CONTRIBUTING.md: the layer invariant, coding standards (no magic numbers,
frozen domain dataclasses, single composition root, 400-line module limit), the
100% branch-coverage gate, the per-layer test table and the design boundaries
(single-device, MMSP pull-only, HTTPS-only) that a contribution has to respect.
Packaging
The Windows (buildexe.py), macOS (builddmg.py) and Linux
(build_flatpak.sh) build scripts now bundle the three licence-text files so the
frozen app resolves both licence dialogs.