Skip to content

Release: merge development into beta - #45

Merged
rubenvdlinde merged 476 commits into
betafrom
development
Aug 20, 2026
Merged

Release: merge development into beta#45
rubenvdlinde merged 476 commits into
betafrom
development

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Automated PR to sync development changes to beta for beta release.

Merging this PR will trigger the beta release workflow.

Reminder: Add a major, minor, or patch label to this PR to control the version bump. Default is patch.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report

Repository ConductionNL/nldesign
Commit 796c4ee
Branch 45/merge
Event pull_request
Generated 2026-03-19 19:05 UTC
Workflow Run https://github.com/ConductionNL/nldesign/actions/runs/23312024709

Summary

Group Result
PHP Quality PASS
Vue Quality PASS
Security PASS
License PASS
PHPUnit PASS
Newman SKIP

PHP Quality

Tool Result
lint PASS
phpcs PASS
phpmd PASS
psalm PASS
phpstan PASS
phpmetrics PASS

Vue Quality

Tool Result
eslint PASS
stylelint PASS

Security

Ecosystem Result
composer PASS
npm PASS

License Compliance

Ecosystem Result
composer PASS
npm PASS

composer dependencies (100 total)

Metric Count
Approved (allowlist) 100
Approved (override) 0
Denied 0

npm dependencies (7 total)

Metric Count
Approved (allowlist) 5
Approved (override) 2
Denied 0

PHPUnit Tests

PHP Nextcloud Result
Overall PASS

Code coverage: 0% (0 / 24 statements)

Integration Tests (Newman)

Newman integration tests were not enabled for this run.


Generated automatically by the Quality workflow.

Download the full PDF report from the workflow artifacts.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report

Repository ConductionNL/nldesign
Commit 452ede8
Branch 45/merge
Event pull_request
Generated 2026-03-19 21:37 UTC
Workflow Run https://github.com/ConductionNL/nldesign/actions/runs/23318045149

Summary

Group Result
PHP Quality PASS
Vue Quality PASS
Security PASS
License PASS
PHPUnit PASS
Newman SKIP

PHP Quality

Tool Result
lint PASS
phpcs PASS
phpmd PASS
psalm PASS
phpstan PASS
phpmetrics PASS

Vue Quality

Tool Result
eslint PASS
stylelint PASS

Security

Ecosystem Result
composer PASS
npm PASS

License Compliance

Ecosystem Result
composer PASS
npm PASS

composer dependencies (100 total)

Metric Count
Approved (allowlist) 100
Approved (override) 0
Denied 0

npm dependencies (7 total)

Metric Count
Approved (allowlist) 5
Approved (override) 2
Denied 0

PHPUnit Tests

PHP Nextcloud Result
Overall PASS

Code coverage: 0% (0 / 24 statements)

Integration Tests (Newman)

Newman integration tests were not enabled for this run.


Generated automatically by the Quality workflow.

Download the full PDF report from the workflow artifacts.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report

Repository ConductionNL/nldesign
Commit 1652e7f
Branch 45/merge
Event pull_request
Generated 2026-03-23 21:38 UTC
Workflow Run https://github.com/ConductionNL/nldesign/actions/runs/23461372774

Summary

Group Result
PHP Quality PASS
Vue Quality PASS
Security PASS
License PASS
PHPUnit PASS
Newman SKIP

PHP Quality

Tool Result
lint PASS
phpcs PASS
phpmd PASS
psalm PASS
phpstan PASS
phpmetrics PASS

Vue Quality

Tool Result
eslint PASS
stylelint PASS

Security

Ecosystem Result
composer PASS
npm PASS

License Compliance

Ecosystem Result
composer PASS
npm PASS

composer dependencies (100 total)

Metric Count
Approved (allowlist) 100
Approved (override) 0
Denied 0

npm dependencies (7 total)

Metric Count
Approved (allowlist) 5
Approved (override) 2
Denied 0

PHPUnit Tests

PHP Nextcloud Result
Overall PASS

Code coverage: 0% (0 / 24 statements)

Integration Tests (Newman)

Newman integration tests were not enabled for this run.


Generated automatically by the Quality workflow.

Download the full PDF report from the workflow artifacts.

@github-actions

github-actions Bot commented Apr 9, 2026

Copy link
Copy Markdown
Contributor Author

Quality Report

Repository ConductionNL/nldesign
Commit acbb095
Branch 45/merge
Event pull_request
Generated 2026-04-09 09:48 UTC
Workflow Run https://github.com/ConductionNL/nldesign/actions/runs/24183659733

Summary

Group Result
PHP Quality PASS
Vue Quality PASS
Security PASS
License PASS
PHPUnit PASS
Newman SKIP
Playwright SKIP

PHP Quality

Tool Result
lint PASS
phpcs PASS
phpmd PASS
psalm PASS
phpstan PASS
phpmetrics PASS

Vue Quality

Tool Result
eslint PASS
stylelint PASS

Security

Ecosystem Result
composer PASS
npm PASS

License Compliance

Ecosystem Result
composer PASS
npm PASS

composer dependencies (100 total)

Metric Count
Approved (allowlist) 100
Approved (override) 0
Denied 0

npm dependencies (7 total)

Metric Count
Approved (allowlist) 5
Approved (override) 2
Denied 0

PHPUnit Tests

PHP Nextcloud Result
Overall PASS

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.

Download the full PDF report from the workflow artifacts.

@github-actions

github-actions Bot commented May 1, 2026

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ e0b6c18

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.

@github-actions

github-actions Bot commented May 7, 2026

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ 33bfd61

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.

@github-actions

github-actions Bot commented May 7, 2026

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ e5323e2

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.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ 13c6474

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.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ b568281

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.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ 6622f07

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.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ 9aca552

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.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ f546205

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.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ 772217c

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.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ b606ba3

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.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ b935b19

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.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ 8ccab3a

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.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ 7cc0b80

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.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ 6caa0b5

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.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ ec8228b

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.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ 6d9de7e

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.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ 9d39dfa

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.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ d0a0f90

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.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ e4f5c54

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.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ 0d0d51a

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.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ fd9e665

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.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ c4f612c

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.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ e222d87

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.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ f369153

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.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ 503fc89

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.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ 84a13c0

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.

Conduction Release Bot and others added 8 commits August 18, 2026 16:11
… and Frankendesk sets

Two things, both source-side.

🔴 **The dark-variant logo URL was one directory too deep.** The generator
emitted `../../../../img/logos/...` on the reasoning that shipped
`tokens/{set}.css` files use three `..` — but nldesign is served from a
custom_apps URL prefix in this fleet's standard deployment, where no
`/apps/nldesign/` alias exists. From `css/tokens/{set}.css`, two levels under
the app root, three `..` is correct and four resolves above it. Verified live
against a running custom-app install: the old value 404'd, the new one loads.

Plus new token sets — Conduction and Frankendesk — with their fonts (Figtree
variable, IBM Plex Mono), the Frankendesk logo, and `public-bridge.css`.

⚠️ nldesign has no `vendor/` in this checkout, so its PHPUnit suite could not be
run here; CI runs it. The change to `DarkPaletteServiceTest` is the assertion
for the corrected depth.
…heme

45 dark-variant files, adding `--nldesign-component-*` tokens (badge, button,
and the rest) so a component has a dark appearance rather than inheriting one.

🔴 **THE GENERATOR THAT PRODUCED THESE IS NOT IN THIS REPOSITORY. DO NOT
REGENERATE UNTIL IT IS.**

Every file is stamped `DarkPaletteService v2`. `DarkPaletteService::GENERATOR_VERSION`
in this tree is **1**, and that class contains **zero** occurrences of the string
"component" while each generated file contains **100** `--nldesign-component-*`
declarations. Both numbers were counted, not inferred.

So `occ nldesign:generate-dark-variants` as it stands would rewrite all 45 files
back to the v1 shape and **silently strip component theming from every
municipal theme** — Amsterdam, Den Haag, Rotterdam, Utrecht, the lot. The loss
would show up as a styling regression with no code change to blame it on, which
is the worst kind to diagnose.

Committed rather than discarded because the output is real work and throwing it
away loses it; committed loudly rather than quietly because generator output the
committed generator cannot reproduce is otherwise indistinguishable from output
it can. The v2 generator needs to be located and landed before anyone runs the
command again.

⚠️ Not verified by regeneration, and that is stated deliberately: running
`occ nldesign:generate-dark-variants` returned "There are no commands defined in
the nldesign namespace" — the command is not registered on this instance. The
files were unchanged afterwards, which looks exactly like a passing check and is
not one. What IS measured is the v1-vs-v2 stamp and the 0-vs-100 component-token
count.
…onent-tokens-and-logo-paths

# Conflicts:
#	css/tokens/dark/amsterdam.css
#	css/tokens/dark/denhaag.css
#	css/tokens/dark/drechterland.css
#	css/tokens/dark/epe.css
#	css/tokens/dark/hoorn.css
#	css/tokens/dark/leiden.css
#	css/tokens/dark/nijmegen.css
#	css/tokens/dark/noordwijk.css
#	css/tokens/dark/provincie-zuid-holland.css
#	css/tokens/dark/rijkshuisstijl.css
#	css/tokens/dark/rotterdam.css
#	css/tokens/dark/tilburg.css
#	css/tokens/dark/utrecht.css
#	css/tokens/dark/vng.css
#	css/tokens/dark/xxllnc.css
Resolving the merge conflict let CI run this branch for the first time, and it
found five failures — none of them caused by the merge, all of them real.

🔴 **The conflict itself was the important one.** Every `css/tokens/dark/*.css`
file conflicted on its generator stamp: this branch had regenerated them with
**v1**, `development` carried **v2**. Measured before resolving, on all 15 files:

    ours (v1): 12 component tokens     theirs (v2): 100

So "take ours" would have stripped ~88 `--nldesign-component-*` declarations
from every affected theme — the exact harm the missing-v2-generator note warns
about. Resolved as THEIRS for all 15; the branch's own logo-URL work is
untouched.

**The token-file shape (TokenCssShapeTest).** `frankendesk.css` carried a
`#header .logo` rule, so it had two selector blocks. A shipped token file is
exactly one flat `:root { }` block and the scoped-application contract depends
on that shape, so an element rule there broke the invariant for every consumer
in order to style one header. Moved to `css/token-overrides/frankendesk.css`,
emitted by a new `injectTokenSetOverrides()` directly after the set's token
file — so it still wins over the shared `element-overrides.css`, and still only
for the set that has one. The two-tone Frankendesk mark keeps its unmasked
rendering.

**Counts that had drifted.** The merge brought 46 token sets and 24 logos while
README/project.md/ICONS.md still claimed 44 and 23. Updated, and the contrast
report regenerated from the current token files (it had not seen
`conduction-new`).

**stylelint:** an empty spacer comment in the frankendesk header.

Local: 592 tests pass, stylelint clean.
…e2e failure

`dark-mode-scope` failed on 'the OS switch must be pure CSS — no nldesign
request may be issued', and the request it caught was:

    http://localhost:8080/apps/nldesign/css/img/nederland-logo.svg

The switch really was pure CSS. What issued the request was a BROKEN image:
`rijkshuisstijl.css` still pointed at `../../img/nederland-logo.svg`, which did
not resolve from the served stylesheet, and a 404 gets RE-REQUESTED on every
recompute — including on an OS dark/light flip. So a missing asset presented
itself as 'the dark-mode implementation is not pure CSS'.

Pointed at `img/logos/rijkshuisstijl.svg`, the same convention the other
sets use and the copy `docs/reference/brand-identity.md` already documents as
existing 'for consistency with the theming sync system'.

Swept the rest rather than fixing the one that failed: all 17 `url('../../img/…')`
declarations across `css/tokens/*.css` now point into `img/logos/`, and every
target was verified to exist on disk.

Local: 592 tests pass, stylelint clean.
…overrides

`injectTokenSetOverrides()` shipped with no test, and the coverage ratchet was
one statement short.

Order is the whole point: the override exists to beat the design system's shared
`element-overrides.css`, and it can only do that by being emitted later. Both
positions are asserted — after the shared stylesheet AND after its own tokens,
whose values it reads.

The second test is the control: without it, the first would pass on an
implementation that emitted a `token-overrides/` stylesheet for EVERY set,
including the ~45 that have no such file — 45 new 404s, and the test would not
have noticed.
…site

🔴 The logo 404'd no matter which relative path the token file declared, and
this is why: a relative `url()` inside a CSS custom property is resolved
against the stylesheet that USES the property, not the one that declares it.

The token files sit in `css/tokens/` and declared `../../img/logos/<set>.svg`,
which is correct from there. But the property is consumed in
`css/systems/nldesign/theme.css` and in `css/token-overrides/*.css` — two
DIFFERENT depths. No single relative path can be right for both, so one of them
was always going to 404, and the e2e failure moved with the path rather than
disappearing:

    ../../img/nederland-logo.svg      -> /css/img/nederland-logo.svg        404
    ../../img/logos/rijkshuisstijl.svg -> /css/img/logos/rijkshuisstijl.svg  404

PHP now re-declares the property with an ABSOLUTE url after the token file.
`linkTo()` resolves the install root, so it is right under `custom_apps` and
under `apps` without either being hard-coded.

⚠️ UNQUOTED, and that is not cosmetic: `Util::addHeader()` HTML-escapes its
text, so `url("…")` reached the page as `url(&quot;…&quot;)` and the whole
declaration was invalid. Measured in the browser, then re-measured after the
fix — the property now reads
`url(/custom_apps/nldesign/img/logos/rijkshuisstijl.svg)` and that URL returns
**200**.

Local: 594 tests pass, phpcs clean.
…and-logo-paths

fix(tokens): logo URLs resolve under custom_apps + regenerated dark component tokens
@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ a0c105a

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
test-l10n
format
composer ✅ 104/104
npm ✅ 2/2
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman
Playwright
Hydra gates

Quality workflow — 2026-08-19 08:28 UTC

Download the full PDF report from the workflow artifacts.

Conduction Release Bot and others added 2 commits August 19, 2026 15:54
…component tokens each

Regenerated output that was sitting uncommitted after #358. `conduction`,
`conduction-new` and `frankendesk` carried only **12** `--nldesign-component-*`
tokens where every other theme carries 100, so those three had no dark-mode
values for buttons, badges, cards and the rest — they fell back to their light
values in dark mode.

    conduction       332 -> 924 token names
    conduction-new   158 -> 518
    frankendesk      130 -> 218
    the other 15     unchanged

⚠️ **Verified that NOTHING was lost, per file, by name.** The diff shows 108
deleted lines, which reads like removal — it is not. A per-file census of every
`--token:` name before and after reports **0 lost across all 18 files**; the
deleted lines are value and ordering changes, plus three files whose header
moves from `DarkPaletteService v1` to `v2`. `--conduction-primary-top-nav-color`
is the example that makes the point: it appears as a `-` line and is still
present twice afterwards.

🔴 The hazard this does NOT fix, recorded so nobody trips it: there are TWO
generators, and only one knows about component tokens.

    scripts/generate-tokens.mjs        emits --nldesign-component-*  (needs an
                                       nl-design-system/themes clone)
    occ nldesign:generate-dark-variants  contains ZERO occurrences of
                                       "component"

The light sources carry no component tokens at all (`css/tokens/amsterdam.css`
greps 0 while its dark variant has 100), so the PHP command cannot re-derive
them. Running it would strip component theming from every theme. That is
separate work — it needs the mjs generator's behaviour folded into the command,
or the command retired.
…three-themes

fix(tokens): regenerate dark variants — three themes were missing 88 component tokens each
@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ ec6af16

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
test-l10n
format
composer ✅ 104/104
npm ✅ 2/2
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman
Playwright
Hydra gates

Quality workflow — 2026-08-19 16:51 UTC

Download the full PDF report from the workflow artifacts.

…n) (#360)

Green on the live run 32275687077: 36 jobs, 32 success, 0 failures.

The PR also carries a FAILURE row for 'quality / Quality Report' from run 32275680508 — a run started 4 seconds earlier on the same commit and cancelled by concurrency. Its E2E, PHPUnit and Hydra Gates jobs were all cancelled, and the report correctly refused to pass on absent verdicts rather than guessing. That is the aggregator working, not a defect in this change; the row is a stale artefact of the superseded run.

Precondition for ConductionNL/.github#483. Measured with a control: before, A TOTAL OF 1 ERROR AND 0 WARNINGS; after, phpcs exits 0 having scanned 63/63 files.
@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ 8259fb8

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
test-l10n
format
composer ✅ 104/104
npm ✅ 2/2
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman
Playwright
Hydra gates

Quality workflow — 2026-08-19 17:19 UTC

Download the full PDF report from the workflow artifacts.

rubenvdlinde and others added 2 commits August 19, 2026 19:54
docs: public portals are a second consumer, and they behave differently
…n-2026-tokens

# Conflicts:
#	css/tokens/frankendesk.css
@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ 0b02a8b

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
test-l10n
format
composer ✅ 104/104
npm ✅ 2/2
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman
Playwright
Hydra gates

Quality workflow — 2026-08-19 22:09 UTC

Download the full PDF report from the workflow artifacts.

juanclaude-conduction and others added 4 commits August 20, 2026 07:10
…oken

v1.8.0 shipped an ObjectServiceInterface WITHOUT patchObject() and with
updateObject() still summarised as "Apply a partial update" — the wording
that sent a consumer down the erasing path. The correction landed on main
two days after the tag; every app has been pinned to the broken copy since.

It is not confined to this repo: hydra-gates claims OCA\OpenRegister\Contract\
in its composer autoload, a LONGER psr-4 prefix than openregister's own
OCA\OpenRegister\ -> lib/, so the gate package wins. Nine repos vendor it, so
under OC_App::loadApps() whichever app registers first defines the contract
for the whole instance. Measured on a running instance, softwarecatalog's
vendor directory was supplying openregister's interface, and updating
openregister ALONE did not change the winner — which is why this lands
across the fleet rather than in one repo.
feat(tokens): Conduction 2026, built from identity.conduction.nl and nothing else
The Rotterdam set defined 90 lines of --nldesign-* colour and nothing else.
NL Design System components read --utrecht-* / --ams-* tokens, so every
button, textbox, card and pagination control on a Rotterdam-themed page
rendered in the upstream default with one green accent over the top. Four of
this repo's 48 sets defined the component vocabulary; 44 did not.

rotterdam.css is now composed from three sources, in precedence order:

  A. the RODS palette, verbatim from @gemeente-rotterdam/design-tokens@1.1.0
  B. Rotterdam's OWN component mapping, verbatim from that package's
     dist/theme.css — 1,990 tokens Rotterdam authored, never overwritten
  C. the shared role layer (css/tokens/vng.css) filling only what B omits,
     with the colour ramp re-pointed at RODS — 801 component tokens
  E. 15 card tokens neither source defines
  D. the --nldesign-* semantic layer

3,169 tokens, up from 47. Every colour traces to a RODS token in
scripts/brands/rotterdam.json; the three that do not say DERIVED and why.

Links are black and turn green on hover, because that is what RODS says
(interactive-default resolves to base-black). A blue link would have been the
generic default wearing Rotterdam's palette, which is the failure this fixes.

scripts/generate-brand-set.mjs makes the composition repeatable — css/tokens/
conduction.css already documented being "GENERATED from the shared role
layer", but the generator was never committed. It reports coverage and names
every literal the ramp could not account for, so a colour that stays VNG blue
is printed rather than shipped quietly.

Also fixed, both found by running the above:

- generate-dark-variants.php died at class-declaration time: its IAppManager
  stub was missing getAppNamespace/getAppFromNamespace (@SInCE NC 34) and
  declared getAppInfo without the interface's `: ?array`. The fatal read as
  "dark variants are broken" rather than "a stub drifted".
- --utrecht-card-* is consumed by the bundled CSS and defined by 1 of 48
  sets. Cards are what a search results list is made of, so the most repeated
  element on the page was the one no theme reached.

tests/vitest/rotterdamBrandSet.spec.js asserts what distinguishes a set that
themes from one that does not: named component tokens (not a count), AA
contrast on text and 3:1 on the control border, and that Rotterdam resolves
DIFFERENTLY from the role layer it came from — the last catches "the
generator ran and substituted nothing", a state every other assertion
survives. The contrast helper is shown to reject a known-bad pair first, so
a green run means the check ran. Verified by reverting one token: 2 tests go
red.

The structural checks exist because the first generated file was invalid: the
value parser ended declarations at the first `;`, which truncated
url('data:image/svg+xml;base64,...') and left the block unparseable from line
2,988 of 3,197 — correct-looking everywhere a reader would look.
chore(deps): take hydra-gates v1.8.1 — the contract v1.8.0 shipped broken
@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ 7d0bb22

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
test-l10n
format
composer ✅ 104/104
npm ✅ 2/2
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman
Playwright
Hydra gates

Quality workflow — 2026-08-20 06:00 UTC

Download the full PDF report from the workflow artifacts.

@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ 1612a86

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
test-l10n
format
composer ✅ 104/104
npm ✅ 2/2
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman
Playwright
Hydra gates

Quality workflow — 2026-08-20 06:39 UTC

Download the full PDF report from the workflow artifacts.

Conduction Release Bot and others added 3 commits August 20, 2026 11:06
Measured in the browser on the demo rig: .utrecht-paragraph resolved to
"Bolder, ArialforRotterdam, Arial" and .utrecht-heading-2 resolved to
"IBM Plex Sans". Rotterdam's own upstream theme.css ships the shared `basis`
layer's placeholder default, and 26 tokens route through it — every heading,
form control, blockquote and pagination control on the page.

That is a generic default rather than a brand decision, so one token is
corrected and the other 25 follow.

`upstreamOverrides` is a separate mechanism from `componentOverrides` on
purpose. The latter may only FILL GAPS and the generator drops any entry that
shadows something already defined; this one deliberately BEATS the brand's own
mapping, so every entry states a reason, the generator prints it on each run,
and an entry matching nothing upstream is reported and dropped rather than
promoted to a new token — the reason it carried no longer applies.

Applied IN PLACE rather than appended: appending wins by cascade order and
leaves two declarations of one custom property in the same block, which
stylelint rejects and which leaves a reader looking up the token finding the
upstream value first with no reason to keep scrolling.
…ildout

Rotterdam token set that actually reaches the components
Two user-visible defects are fixed by this bump.

TWO AI-COMPANION HEXES ON EVERY PAGE. The companion singleton landed in
2.7.0. Below that the host app's own companion never stands down, so any
page of this app rendered a second hex 8px from hermiq's — measured on a
running instance: openconnector (2.7.1) showed ONE, openbuild (2.6.3)
showed TWO, both visible at 52x60, from two separate mounts.

THE DETAIL PAGE RECLOSED ITS SIDEBAR WHILE HYDRATING. CnDetailPage set
sidebarSeeded and never read it, so 'open' was re-applied on every sync
and each reactive change during hydration reset it to the prop default.
Fixed in nextcloud-vue#711; that is the cause behind openbuild#268 and,
on the evidence, #188.

Lockfile only — the existing caret already allowed this. Three-line diff
(version, resolved, integrity).
@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ 3fbaa06

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
test-l10n
format
composer ✅ 104/104
npm ✅ 2/2
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman
Playwright
Hydra gates

Quality workflow — 2026-08-20 10:48 UTC

Download the full PDF report from the workflow artifacts.

chore(deps): take @conduction/nextcloud-vue 2.8.2 (was 2.3.0)
@github-actions

Copy link
Copy Markdown
Contributor Author

Quality Report — ConductionNL/nldesign @ d31b5b2

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
test-l10n
format
composer ✅ 104/104
npm ✅ 2/2
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman
Playwright
Hydra gates

Quality workflow — 2026-08-20 11:50 UTC

Download the full PDF report from the workflow artifacts.

@rubenvdlinde
rubenvdlinde merged commit 3141c58 into beta Aug 20, 2026
82 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants