Release: merge development into beta#45
Conversation
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (7 total)
PHPUnit Tests
Code coverage: 0% (0 / 24 statements) Integration Tests (Newman)Newman integration tests were not enabled for this run. Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (7 total)
PHPUnit Tests
Code coverage: 0% (0 / 24 statements) Integration Tests (Newman)Newman integration tests were not enabled for this run. Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (7 total)
PHPUnit Tests
Code coverage: 0% (0 / 24 statements) Integration Tests (Newman)Newman integration tests were not enabled for this run. Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (7 total)
PHPUnit Tests
Code coverage: 0% (0 / 24 statements) Integration Tests (Newman)Newman integration tests were not enabled for this run. E2E Tests (Playwright)Playwright E2E tests were not enabled for this run. Generated automatically by the Quality workflow.
|
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/24 statements)
Quality workflow — 2026-05-01 11:51 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/24 statements)
Quality workflow — 2026-05-07 20:51 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/24 statements)
Quality workflow — 2026-05-07 21:25 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ❌ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/24 statements)
Quality workflow — 2026-05-12 22:09 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/24 statements)
Quality workflow — 2026-05-12 22:29 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/24 statements)
Quality workflow — 2026-05-13 09:26 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/24 statements)
Quality workflow — 2026-05-17 07:45 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/24 statements)
Quality workflow — 2026-05-18 18:09 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/24 statements)
Quality workflow — 2026-05-18 18:54 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/24 statements)
Quality workflow — 2026-05-18 19:16 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/24 statements)
Quality workflow — 2026-05-18 20:47 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/24 statements)
Quality workflow — 2026-05-18 20:59 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/24 statements)
Quality workflow — 2026-05-18 21:17 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/24 statements)
Quality workflow — 2026-05-19 02:56 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/24 statements)
Quality workflow — 2026-05-19 03:08 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ⏭️ | ||||
| phpcs | ⏭️ | ||||
| phpmd | ⏭️ | ||||
| psalm | ⏭️ | ||||
| phpstan | ⏭️ | ||||
| phpmetrics | ⏭️ | ||||
| eslint | ⏭️ | ||||
| stylelint | ⏭️ | ||||
| composer | ⏭️ | ⏭️ | |||
| npm | ⏭️ | ⏭️ | |||
| PHPUnit | ❌ | ||||
| Newman | ❌ | ||||
| Playwright | ❌ |
Quality workflow — 2026-05-19 05:05 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/24 statements)
Quality workflow — 2026-05-19 05:07 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ❌ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-05-19 05:21 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/24 statements)
Quality workflow — 2026-05-19 05:24 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/24 statements)
Quality workflow — 2026-05-19 07:42 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/24 statements)
Quality workflow — 2026-05-19 08:13 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/24 statements)
Quality workflow — 2026-05-19 08:23 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/24 statements)
Quality workflow — 2026-05-19 08:35 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ❌ | ✅ 100/100 | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-05-21 20:32 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ❌ | ||||
| phpcs | ❌ | ||||
| phpmd | ❌ | ||||
| psalm | ❌ | ||||
| phpstan | ❌ | ||||
| phpmetrics | ❌ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ❌ | ❌ | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-05-22 07:13 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ❌ | ||||
| phpcs | ❌ | ||||
| phpmd | ❌ | ||||
| psalm | ❌ | ||||
| phpstan | ❌ | ||||
| phpmetrics | ❌ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ❌ | ❌ | |||
| npm | ✅ | ✅ 7/7 | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-05-23 07:26 UTC
Download the full PDF report from the workflow artifacts.
…-completeness docs(openspec): archive lasuite-token-completeness
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ❌ | ||||
| stylelint | ❌ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ❌ | ❌ | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-07-25 08:33 UTC
Download the full PDF report from the workflow artifacts.
…dpoints Adds nldesign's side of the app-token-set-selection contract: a read-only, non-admin token-set catalogue for a leaf app's own picker, a shared WCAG contrast-evaluation endpoint generalising ContrastService beyond its two fixed pairs, and the published (not implemented) scoped-application contract a shared nextcloud-vue applier will target. - GET /api/token-sets (#[NoAdminRequired]) - TokenSetService::getPublicCatalogue() projects getAvailableTokenSets() to a closed 5-field shape; wcagLevel reuses ShippedTokenSetAuditService::auditSet() via a new computeCachedWcagLevel() helper, sharing Capabilities' own nldesign_wcag_level ICache namespace. - POST /api/contrast/evaluate (#[NoAdminRequired]) - ContrastService::evaluate() generalises check() to arbitrary candidate/role pairs against a caller background; never returns a blocked/allowed/verdict field. - Regression test (TokenCssShapeTest) proving every shipped css/tokens/*.css (excluding dark/) is flat :root-only - the invariant the scoped applier contract depends on. - Cross-referenced the resulting warn-only selection policy from custom-token-sets and token-set-contrast-audit specs. - Docs: docs/reference/app-token-scope-contract.md. Capabilities.php is unchanged; TokenSetService/ContrastService gain new methods only, existing behaviour (check(), getAvailableTokenSets()) is untouched.
…set-selection # Conflicts: # openspec/specs/app-token-set-selection/spec.md
feat(token-sets): non-admin catalogue + shared contrast evaluation endpoints
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ❌ | ||||
| stylelint | ❌ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ❌ | ❌ | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-07-25 08:51 UTC
Download the full PDF report from the workflow artifacts.
…cknowledgement Marianne is the official typeface of the French State, reserved for French State administrations. This bundles the 8 DSFR Marianne woff2 weights self-hosted under css/systems/lasuite/fonts/marianne/ (Etalab-2.0), but keeps them inert by default: the real @font-face declarations live in a separate css/systems/lasuite/marianne.css, emitted by CssInjectionService only when the lasuite design system is active AND an admin has ticked the "our organisation is a French State agency" acknowledgement gate (marianne_enabled app config, default '0'). With the gate off, no Marianne byte is ever requested and the lasuite set renders Inter. Adds the admin settings toggle + unmissable restriction notice (translated en/nl/fr), MARIANNE-LICENCE.md, AGREEMENT-MARIANNE.md, LICENSES/Etalab-2.0.txt, and .license-overrides.json attribution, and updates the lasuite-stack and claim-accuracy specs/tests that previously asserted Marianne was never bundled. Tests: 475 PHPUnit (via nextcloud:34 container, excl. pre-existing OC\Mail\EMailTemplate harness gap), 60 vitest, composer check:strict green.
feat(lasuite): bundle Marianne font gated behind admin French-state acknowledgement
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ❌ | ||||
| stylelint | ❌ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ❌ | ❌ | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-07-25 09:11 UTC
Download the full PDF report from the workflow artifacts.
Built (#187), merged, live-verified: gate default-OFF injects no marianne.css (zero Marianne bytes fetched, Inter renders); enabling it (admin affirming French-state eligibility) + lasuite injects the self-hosted woff2. 8 DSFR Marianne woff2 (Etalab-2.0), repo user agreement + licence + unmissable notice. 505 PHPUnit green, check:strict green.
docs(openspec): archive marianne-font-restricted
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ❌ | ||||
| stylelint | ❌ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ❌ | ❌ | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-07-25 09:20 UTC
Download the full PDF report from the workflow artifacts.
…ack resolver
Adds an optional icon_pack field to design-systems.json (nldesign -> the
existing rvo/open-gemeenten/den-haag packs, lasuite -> dsfr), materializes
the French-government DSFR icon set (1038 SVGs, Etalab-2.0, via
@gouvfr/dsfr) into img/icons/dsfr/, and adds a DesignSystemService
resolver (getIconPacks/resolveActiveIconPacks/resolveIconPath) so the
bundled icon pack an app resolves through nldesign travels with the
active design system instead of being hardcoded. Resolution honors an
appconfig icon_pack admin override and is exposed on the public
capability as iconPacks; a read-only admin indicator surfaces the
active pack and its source. Existing Dutch icon URLs and the
imagePath('nldesign', 'icons/{set}/{key}.svg') contract are unchanged
(purely additive).
Tests: 478 PHPUnit tests / 3546 assertions green (in-container run,
excluding the pre-existing OC\Mail\EMailTemplate harness limitation);
55 vitest tests green; composer check:strict green.
…chable-iconography # Conflicts: # .license-overrides.json # README.md # js/admin.js # l10n/be.json # l10n/bg.json # l10n/bs.json # l10n/ca.json # l10n/cs.json # l10n/da.json # l10n/de.json # l10n/el.json # l10n/en.json # l10n/es.json # l10n/et.json # l10n/fi.json # l10n/fr.json # l10n/ga.json # l10n/hr.json # l10n/hu.json # l10n/is.json # l10n/it.json # l10n/lb.json # l10n/lt.json # l10n/lv.json # l10n/mk.json # l10n/mt.json # l10n/nb.json # l10n/nl.json # l10n/pl.json # l10n/pt.json # l10n/rm.json # l10n/ro.json # l10n/ru.json # l10n/sk.json # l10n/sl.json # l10n/sq.json # l10n/sr.json # l10n/sv.json # l10n/tr.json # l10n/uk.json # templates/settings/admin.php
…raphy feat: theme-switchable iconography — DSFR pack + design-system icon-pack resolver
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ❌ | ||||
| stylelint | ❌ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ❌ | ❌ | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-07-25 09:42 UTC
Download the full PDF report from the workflow artifacts.
Live verification caught it: rijkshuisstijl (and the ~33 Dutch municipality sets) omit design_system in token-sets.json — they carry id/name/description/ theming and rely on the app-wide 'nldesign' default that getAvailableTokenSets()/Capabilities apply. resolveActiveIconPacks() did NOT apply that default, so every Dutch-government set resolved to NO icon pack — silently breaking the 'Dutch government → Dutch icons' promise this wave is about. Fix distinguishes a KNOWN set that omits the field (→ nldesign default → Dutch packs) from an UNKNOWN token set id (empty meta → no pack). The existing 'NldesignDefault' test set design_system explicitly so it never exercised the real omitted-field case; added a regression test with a set that omits it. Verified live: rijkshuisstijl→[rvo,open-gemeenten,den-haag], lasuite→[dsfr], summer-breeze→[], unknown→[]. 527 PHPUnit, check:strict green.
…n-system fix(icons): Dutch-government sets resolve Dutch icons (default missing design_system)
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ❌ | ||||
| stylelint | ❌ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ❌ | ❌ | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-07-25 10:25 UTC
Download the full PDF report from the workflow artifacts.
Built (#189), merged, live-verified per-government icon resolution: lasuite→[dsfr] (French gov icons), rijkshuisstijl→[rvo,open-gemeenten, den-haag] (Dutch), summer-breeze→[] (non-gov), unknown→[]. 1038 DSFR icons (Etalab-2.0) materialized; capability exposes iconPacks. Includes the missing-design_system default fix (#190). Archive header aligned to the canonical 'nc-vue Icon Packs' name (broadened to cover the DSFR pack).
docs(openspec): archive theme-switchable-iconography
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ❌ | ||||
| stylelint | ❌ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ❌ | ❌ | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-07-25 10:28 UTC
Download the full PDF report from the workflow artifacts.
… hover, brand-050 text A local computed-style comparison of the lasuite theme against La Suite's own shipped Cunningham CSS (the authentic violet :root build) exposed that our primary button filled brand-650 (#4844ad) at rest — which is La Suite's HOVER step, one shade too dark. La Suite's .c__button--brand--primary fills brand-550 (#5e5cd0) at REST and brand-650 on hover, with brand-050 (#eef1fa) text, not pure white. - element-overrides.css: primary fill/border brand-650→brand-550 (rest), hover brand-750→brand-650, text gray-000→brand-050; color selector made symmetric with the fill selector (button[class*="primary"]). - bridge.css: --color-primary-element→brand-550, -hover→brand-650, -element-text→brand-050. - generate-lasuite-tokens.mjs: emit the --lasuite-color-brand-550 short alias the bridge now consumes; defaults.css regenerated (drift guard green). - lasuite-parity.spec.ts: assert the corrected button reference values. Verified: primary button now an exact match (bg #5e5cd0, text #eef1fa, radius 4px) on both La Suite and the nldesign lasuite theme.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ❌ | ||||
| stylelint | ❌ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ❌ | ❌ | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-07-26 07:38 UTC
Download the full PDF report from the workflow artifacts.
…onfig) (#192) * feat(config): NL Design theme as a shareable config type (federated-config) Contributes NL Design's theme configuration to OpenRegister's federated-config engine, so a theme can be published to and installed from GitHub over the fleet's one sharing mechanism — the proof that the standard is storage-agnostic, since NL Design config lives in Nextcloud's IConfig, not in OpenRegister objects. - NlDesignThemeShareableConfigType implements OCA\OpenRegister\Service\Config\ IShareableConfigType, wrapping the existing ConfigBundleService export()/import() as the (de)serialiser. serialise() ignores its selection (a theme is the instance's one theme config); no secrets (theming carries none). - ShareableConfigTypeListener registers it on RegisterShareableConfigTypesEvent, guarded on the event class existing (boots fine without OpenRegister). - Application::register() now include_once's the app's composer autoloader so the cross-app listener is resolvable process-wide — the same mechanism hermiq uses to contribute flow nodes to OpenRegister. Follows the identical cross-app contribution pattern hermiq uses (guarded event listener + vendor-autoload include). OpenRegister-side, the federated-config standard and its first two consumers (flows, registers/schemas) are merged and e2e-verified (openregister#2134, #2135). Live round-trip verification of this theme type on the shared dev instance is pending a clean deploy — the listener is correct but its cross-app autoload did not activate on that instance; opened for review rather than merged unverified. * fix(config): correct namespace case + lazy bundle service — theme type now registers The shareable theme type was written under OCA\NlDesign\ but this app's PSR-4 prefix is OCA\NLDesign\ (capital NL). PHP namespaces are case-sensitive, so the server container's PSR-4 autoloader could not find the listener/type when OpenRegister's dispatcher constructed them cross-app — the classmap could (why a manual require worked), which masked it. Corrected the namespace to OCA\NLDesign\ throughout and regenerated the autoloader. Also resolve ConfigBundleService lazily (via the container) instead of injecting it: the type is constructed on every shareable-type catalogue read, but the bundle service's deep theming chain is only needed when a theme is actually serialised/installed. Live-verified on 8080 end to end: nldesign.theme now appears in OpenRegister's /api/federated-config/types cross-app over HTTP; bundling exports the real theme config (token set, footer, overrides); installing it back returns installed=["nldesign-theme"]. The storage-agnostic claim holds — theme config lives in IConfig, shared over the same mechanism as flows and registers. --------- Co-authored-by: Conduction Release Bot <release-bot@conduction.nl>
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ❌ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ❌ | ||||
| stylelint | ❌ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ❌ | ❌ | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-07-26 09:05 UTC
Download the full PDF report from the workflow artifacts.
The lasuite theme matched La Suite only on the brand ramp. A computed-style comparison against La Suite's own deployed Cunningham build showed the whole rest of the colour system was off: our neutrals were the plain npm base greys while La Suite tints its gray/white/black ramps violet, and our semantic palettes were the npm defaults while La Suite ships its own vivid hues (success true-green, warning orange, info brighter blue). 539 of 593 :root tokens differed. Rather than change defaults.css — which is SHARED with the `cunningham` design system and must stay on the published blue base — this expands the lasuite-only brand-override.css from a hand-authored brand+logo layer into the full deployed colour delta, generated reproducibly: - Vendor La Suite's deployed violet Cunningham build (suitenumerique/docs @61c2183, MIT) as scripts/sources/lasuite-deployed-cunningham-tokens.css. - generate-lasuite-tokens.mjs --override diffs that deployed :root against the blue npm base and emits brand-override.css: 331 colour tokens (brand ramp + violet-tinted neutrals + La Suite's semantic palettes + logo). Scope is globals--colors + text-differing contextuals; structural globals (spacing/font/breakpoints) and unconsumed Cunningham components--* are excluded so the delta never moves layout. New drift guard: npm run test:lasuite-override. - element-overrides.css: style NC secondary buttons from La Suite's brand-secondary contextuals (pale brand-100 fill, brand-600 text, no border), which our theme previously left as NC's default grey. defaults.css is byte-unchanged except its header (regenerated); the cunningham theme stays blue. Verified: a local computed-style comparison now matches La Suite exactly on heading text, brand, logo, primary + secondary buttons, input border and the tinted neutrals (only the Inter-Variable font-stack notation differs — same rendered face). La Suite's deployed semantic -550 fills all meet WCAG AA on white (5.35–5.38:1). Guards: test:lasuite-tokens + test:lasuite-override drift, bridge-coverage, stylelint, 73 vitest (incl 32 generator unit tests), phpcs, and LasuiteDesignStackTest (22 tests) all green.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ❌ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ❌ | ||||
| stylelint | ❌ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ❌ | ❌ | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-07-26 10:04 UTC
Download the full PDF report from the workflow artifacts.
…ntract stubs The NL Design theme shareable-config type (#192) references OpenRegister's IShareableConfigType interface and RegisterShareableConfigTypesEvent — a SOFT runtime dependency (registered behind a class_exists guard, so the instance boots without OpenRegister). During static analysis OpenRegister is absent, so phpstan and psalm could not resolve the contract, producing 4 phpstan + 3 psalm errors (implements/extends unknown interface, unknown class, InvalidTemplateParam on the listener's IEventListener<Event> generic, and a knock-on registerEventListener type error in Application.php). "implements unknown interface" is a category phpstan refuses to ignoreErrors, so a baseline entry was rejected outright. Fix at the root with declaration-only analysis stubs of the two contract classes (stubs/openregister-config.php, signatures mirrored verbatim from openregister/lib/Service/Config/), wired into phpstan.neon `scanDirectories` and psalm.xml `<stubs>`. Never autoloaded at runtime (PSR-4 maps only OCA\NLDesign\ → lib/, and the file sits outside the test suite), so the real OpenRegister classes are used whenever it is enabled — the "share the contract" pattern, not a blanket excludePaths. Also drops the now-dead, non-ignorable `implements unknown interface` ignoreErrors line, and suppresses the interface-mandated unused $selection param (PHPMD, same convention as UpstreamFreshnessJob). In-container (PHP 8.4): phpstan/psalm/phpmd/phpcs all clean, phpunit 527/527.
Quality Report — ConductionNL/nldesign @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ❌ | ||||
| stylelint | ❌ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ❌ | ❌ | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-07-26 19:13 UTC
Download the full PDF report from the workflow artifacts.
Automated PR to sync development changes to beta for beta release.
Merging this PR will trigger the beta release workflow.