Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
226 commits
Select commit Hold shift + click to select a range
6d3a57f
chore(sync): carry main back into beta
github-actions[bot] Sep 6, 2026
e045779
Merge pull request #558 from ConductionNL/sync/main-to-beta-202609061…
rubenvdlinde Sep 6, 2026
34d8ee2
chore(sync): carry beta back into development
github-actions[bot] Sep 6, 2026
77044d8
Merge pull request #559 from ConductionNL/sync/beta-to-development-20…
rubenvdlinde Sep 6, 2026
757eca0
fix(deps): regenerate lockfile, patching fast-uri SSRF advisories
remko48 Sep 7, 2026
d6ff409
chore(deps): refresh the shared Conduction locks (#563)
rubenvdlinde Sep 7, 2026
7466a5a
fix(tests): cap PHPUnit memory and only boot an installed Nextcloud i…
rubenvdlinde Sep 8, 2026
c9dbb62
refactor: mark the mail template's container lookup as deliberate (#567)
rubenvdlinde Sep 8, 2026
7526fe9
fix(tests): a mid-boot Nextcloud failure warns, it does not abort the…
rubenvdlinde Sep 8, 2026
3570327
feat(token-sets): audit shipped sets against the nldesign vocabulary
remko48 Sep 8, 2026
95238c6
fix(css): restore stock Nextcloud geometry on themed pages
remko48 Sep 8, 2026
47f9c99
chore: gitignore the runtime custom-css.css file
remko48 Sep 8, 2026
0bc8f42
chore(deps-dev): Bump @playwright/test from 1.62.1 to 1.63.0 (#576)
dependabot[bot] Sep 9, 2026
7f94380
chore(deps-dev): Bump stylelint from 17.14.1 to 17.15.0 (#574)
dependabot[bot] Sep 9, 2026
811e3ed
chore(deps-dev): Bump conduction/hydra-gates from 1.16.0 to 1.16.1 (#…
dependabot[bot] Sep 9, 2026
fa2c35f
chore(deps-dev): Bump phpstan/phpstan from 2.2.10 to 2.2.13 (#571)
dependabot[bot] Sep 9, 2026
a98dd8f
chore(deps-dev): bump vitest, its coverage plugin and its ui together…
rubenvdlinde Sep 9, 2026
6cdeb41
fix(theming): repair themed header chrome, navigation and the preview
remko48 Sep 9, 2026
585ceb7
fix(theming): repair the token dialogs and the themed content panels
remko48 Sep 10, 2026
db469cd
feat(token-sets): convert NL Design System themes into token sets (in…
remko48 Sep 10, 2026
694ea39
chore(scripts): drop the OpenWOO-only logo script
remko48 Sep 10, 2026
77fb1cd
chore(release): 1.2.2-unstable.20260910104940 (#581)
rubenvdlinde Sep 10, 2026
053780a
chore: gitignore the makeover planning document
remko48 Sep 11, 2026
3390932
feat(theming): apply and upload token sets without a reload
remko48 Sep 11, 2026
6234fc3
Merge remote-tracking branch 'origin/development' into fix/frontend-c…
remko48 Sep 11, 2026
fa3a38d
fix(deps): realign the lockfile and drop legacy-peer-deps
remko48 Sep 11, 2026
3b085b7
style: apply Prettier to the files this branch added or changed
remko48 Sep 11, 2026
5800dfd
style(php): satisfy phpcs and psalm on the code this branch added
remko48 Sep 11, 2026
00b1f11
chore(phpstan): regenerate the baseline for this branch's code
remko48 Sep 11, 2026
e52fcc2
fix(tests): update the two suites left behind by new constructor sign…
remko48 Sep 11, 2026
55fd843
fix(token-sets): report no findings for a set the audit does not judge
remko48 Sep 11, 2026
b7cab61
chore(docs): regenerate the contrast report
remko48 Sep 11, 2026
843f5f5
docs: stop citing the working plan from code, tests and specs
remko48 Sep 11, 2026
c304a57
fix(deps): drop the Rotterdam and Zwolle design token packages
remko48 Sep 11, 2026
ab5ca2c
fix(upload): count what the admin uploaded, and refuse with the findings
remko48 Sep 11, 2026
b9af294
fix(theming): address the PR review — undo on delete, roll back a fai…
remko48 Sep 11, 2026
0d5e41b
ci: run the fast tier on pull requests (path filter, one PHPUnit leg)…
rubenvdlinde Sep 12, 2026
cb184f3
chore(release): sync main back into development
github-actions[bot] Sep 12, 2026
2948d47
chore(sync): carry main back into beta
github-actions[bot] Sep 12, 2026
3d836f9
Merge pull request #588 from ConductionNL/sync/main-to-beta-202609121…
rubenvdlinde Sep 12, 2026
4f603d1
chore(release): sync beta back into development
github-actions[bot] Sep 12, 2026
de21c37
chore(sync): carry beta back into development
github-actions[bot] Sep 12, 2026
8774664
Merge pull request #592 from ConductionNL/sync/beta-to-development-20…
rubenvdlinde Sep 12, 2026
a38b909
feat(e2e): refuse the shared instance unless the run names it (#594)
rubenvdlinde Sep 12, 2026
e1d6786
chore(release): 1.2.4-unstable.20260912203544
github-actions[bot] Sep 12, 2026
8397726
Merge pull request #561 from ConductionNL/development
rubenvdlinde Sep 13, 2026
0be90cd
Merge pull request #595 from ConductionNL/release/v1.2.4-unstable.202…
rubenvdlinde Sep 13, 2026
da0e477
Merge pull request #586 from ConductionNL/sync/main-to-development-1.2.2
rubenvdlinde Sep 13, 2026
45e2613
Merge pull request #591 from ConductionNL/sync/beta-to-development-1.…
rubenvdlinde Sep 13, 2026
9e433c1
chore(sync): carry beta back into development
github-actions[bot] Sep 13, 2026
7547a03
Merge pull request #600 from ConductionNL/sync/beta-to-development-20…
rubenvdlinde Sep 13, 2026
8e57d62
docs(openspec): write the requirements the @spec anchors point at
remko48 Sep 14, 2026
f034308
test(integration): assert what a built theme stylesheet now guarantees
remko48 Sep 14, 2026
b581b99
test(unit): cover the theming sync, the converter's asset path and th…
remko48 Sep 14, 2026
fe90354
test(e2e): assert the selectable dropdown, not the catalogue
remko48 Sep 14, 2026
f80c126
docs(openspec): land the vocabulary-audit delta instead of paraphrasi…
remko48 Sep 14, 2026
1827bfd
docs(openspec): say why the allow-list holds 39 and the baseline says 41
remko48 Sep 14, 2026
bfe6624
fix(upload): judge every emitted declaration's value, not only the ac…
remko48 Sep 14, 2026
698495b
docs(openspec): describe the gate that exists, and the backfill that …
remko48 Sep 14, 2026
23377e2
fix(admin): tell the admin to reload when the live swap rolled back
remko48 Sep 14, 2026
ed78037
test(e2e): guard the sub-AA contrast test the way its sibling already is
remko48 Sep 14, 2026
d920159
docs(openspec): stop three change folders from misleading whoever pic…
remko48 Sep 14, 2026
68635b8
fix(converter): the provenance comment cannot be closed from outside
remko48 Sep 14, 2026
c8ef71b
fix(admin): name the reload on every branch of the apply step, not one
remko48 Sep 14, 2026
757f2cc
docs(openspec): correct the route, the removal reason and the landed …
remko48 Sep 14, 2026
8dd2e85
fix(converter): strip the terminator's characters, not the terminator
remko48 Sep 14, 2026
9e9e169
Merge pull request #582 from ConductionNL/fix/frontend-changes
remko48 Sep 14, 2026
de0bc9d
docs(openspec): rewrite the playground change as an instrument, not a…
remko48 Sep 15, 2026
83f9d0d
feat(playground): publish the inventory, the reasons and the tokens a…
remko48 Sep 15, 2026
402fc5b
feat(playground): rebuild the token editor into selector, stage and t…
remko48 Sep 15, 2026
96454fa
test(playground): hold the inventory to the code, and cover what look…
remko48 Sep 15, 2026
4a8b4a2
fix(l10n): register the playground's strings in all 37 locales
remko48 Sep 15, 2026
7aa2172
feat(tokens): resolve the nextcloud set from the instance, not a snap…
remko48 Sep 15, 2026
9fe3cb3
feat(playground): give the specimens content, behaviour and an explan…
remko48 Sep 15, 2026
606c9d7
feat(playground): let Nextcloud's own stylesheets paint the specimens
remko48 Sep 15, 2026
b149c71
fix(playground): close the review's accessibility, i18n and sync gaps
remko48 Sep 16, 2026
9f4d8b4
fix(playground): clear the quality checks this branch turned red
remko48 Sep 16, 2026
edd26d3
perf(tokens): cache the resolved stock set across requests
remko48 Sep 16, 2026
4c5fc84
fix(playground): rename the guest keyframes instead of dropping them
remko48 Sep 16, 2026
781831e
feat(playground): publish which set the instrument is describing
remko48 Sep 16, 2026
29d0ca5
feat(l10n): register the specimens' own interface labels
remko48 Sep 16, 2026
715f44d
fix(playground): keep both overrides when two read one token
remko48 Sep 16, 2026
59fa9d1
docs(playground): record what this review round decided
remko48 Sep 16, 2026
d90d5d4
fix(tokens): resolve the stock set as the instance, not as the caller
remko48 Sep 16, 2026
a28a1f2
fix(l10n): translate the five specimen labels the pass missed
remko48 Sep 16, 2026
b3ccf9c
docs(tokens): record that the stock set resolves per instance
remko48 Sep 16, 2026
e1fced6
fix(e2e): offer shipped sets before driving the dropdown to them (#612)
rubenvdlinde Sep 16, 2026
7eb7c48
fix(e2e): wait for the apply dialog instead of asking once
rubenvdlinde Sep 16, 2026
601349c
fix(audit): compare two snapshots in the theming-sync entry
remko48 Sep 17, 2026
5fc1105
fix(tokens): map the six variables Nextcloud 34 added
remko48 Sep 17, 2026
c495c99
fix(theme): reach NcButton on 34, and stop painting menu rows as buttons
remko48 Sep 17, 2026
3315687
refactor(playground): drop the callout markers and draw real components
remko48 Sep 17, 2026
fde84f7
feat(audit): give the audit log a table that reads as one
remko48 Sep 17, 2026
204f710
chore(l10n): extract the strings the new panels use
remko48 Sep 17, 2026
67e4ff4
fix(playground): address review findings 1-4 on PR #604
remko48 Sep 17, 2026
6dcbbaf
fix(tokens): anchor the prefix strip in canonical()
remko48 Sep 17, 2026
ffaee07
chore(deps-dev): Bump vite from 8.2.2 to 8.3.0 (#610)
dependabot[bot] Sep 18, 2026
bd92e70
chore(deps-dev): Bump @conduction/nextcloud-vue from 2.40.0 to 2.52.0…
dependabot[bot] Sep 18, 2026
fac5d09
chore(deps-dev): Bump phpstan/phpstan from 2.2.13 to 2.2.14 (#607)
dependabot[bot] Sep 18, 2026
fb86ed9
chore(deps-dev): Bump conduction/hydra-gates from 1.16.1 to 1.18.0 (#…
dependabot[bot] Sep 18, 2026
ebd5ba6
chore(deps-dev): Bump nextcloud/ocp from 34.0.3 to 34.0.4 (#605)
dependabot[bot] Sep 18, 2026
8080ef3
chore(deps): Bump @gouvfr/dsfr from 1.15.2 to 1.15.3
dependabot[bot] Sep 18, 2026
67caeb8
fix(theme): keep the reduced-motion reset winning the cascade
remko48 Sep 18, 2026
2a6eace
style: settle the four files prettier rejects
remko48 Sep 18, 2026
a4bed57
fix(playground): give the drift guard teeth, and the trigger its state
remko48 Sep 18, 2026
d022751
fix(audit): keep the table a table, and show what changed
remko48 Sep 18, 2026
2469019
fix(l10n): finish the Dutch for the audit table and the menu
remko48 Sep 18, 2026
8421bc6
docs: bring the change artefacts back in step with the code
remko48 Sep 18, 2026
41378c9
fix(l10n): translate Changed, which the backfill left in English
remko48 Sep 18, 2026
23fc4c4
style: wrap the audit header list prettier rejects
remko48 Sep 18, 2026
f3086ee
feat(token-sets): make cunningham selectable
remko48 Sep 18, 2026
7b38d88
fix(audit): stop the changed list stretching the page
remko48 Sep 18, 2026
8e0a059
chore(l10n): extract the changed-list plural
remko48 Sep 18, 2026
ec62fa1
Merge pull request #604 from ConductionNL/fix/frontend-changes
remko48 Sep 18, 2026
631df6e
fix(quality): silence the theming-app container lookup for phpcs
remko48 Sep 18, 2026
ac2657b
fix(licensing): make the repo REUSE compliant and block on it
remko48 Sep 18, 2026
6aa51b7
Merge pull request #618 from ConductionNL/fix/frontend-changes
remko48 Sep 18, 2026
887e85e
Merge pull request #597 from ConductionNL/development
remko48 Sep 18, 2026
55d41b7
chore(sync): carry beta back into development
github-actions[bot] Sep 18, 2026
5b0915c
Merge pull request #630 from ConductionNL/sync/beta-to-development-20…
rubenvdlinde Sep 18, 2026
e6746e8
feat(playground): draw the Nextcloud 35 header
remko48 Sep 19, 2026
d7fd736
Merge pull request #633 from ConductionNL/fix/frontend-changes
remko48 Sep 19, 2026
5454324
Merge pull request #631 from ConductionNL/development
remko48 Sep 19, 2026
8e3603d
chore(sync): carry beta back into development
github-actions[bot] Sep 19, 2026
1a972f5
Merge pull request #637 from ConductionNL/sync/beta-to-development-20…
rubenvdlinde Sep 19, 2026
144e11a
Update info.xml
remko48 Sep 20, 2026
03143db
Merge pull request #640 from ConductionNL/remko48-patch-1
rjzondervan Sep 20, 2026
0f68e75
Merge pull request #638 from ConductionNL/development
remko48 Sep 20, 2026
a4e32e8
chore(sync): carry beta back into development
github-actions[bot] Sep 22, 2026
728d1ce
Merge pull request #641 from ConductionNL/sync/beta-to-development-20…
rubenvdlinde Sep 22, 2026
71a8f06
chore(deps-dev): Bump twig/twig from 3.28.0 to 3.29.0
dependabot[bot] Sep 22, 2026
fe2f145
chore(deps-dev): Bump nextcloud/ocp from 34.0.4 to 35.0.0
dependabot[bot] Sep 22, 2026
fe2e6b2
chore(deps-dev): Bump vitest from 5.0.0 to 5.0.1
dependabot[bot] Sep 22, 2026
1515d27
chore(deps-dev): Bump @vitest/coverage-v8 from 5.0.0 to 5.0.1
dependabot[bot] Sep 22, 2026
c7523e8
chore(deps-dev): Bump @conduction/nextcloud-vue from 2.52.0 to 2.55.1
dependabot[bot] Sep 22, 2026
af5953e
chore(deps-dev): Bump jsdom from 30.0.1 to 30.1.0
dependabot[bot] Sep 22, 2026
74b6236
Merge branch 'development' into fix/frontend-changes
remko48 Sep 23, 2026
1993b28
feat(tokens): add the component token mapping and its generator
remko48 Sep 23, 2026
f4028a0
feat(tokens): paint the nldesign layers from the component tokens
remko48 Sep 23, 2026
7bcb7e6
feat(tokens): serve the component layer and gate it behind a setting
remko48 Sep 23, 2026
7292fbb
feat(settings): group the editor by component and lock the driven rows
remko48 Sep 23, 2026
ca04a85
fix(playground): point every chip at its own component token
remko48 Sep 23, 2026
bd9d1ba
test(tokens): assert every chip token reaches the component it names
remko48 Sep 23, 2026
a4732c3
docs(openspec): record the component-scoped tokens change
remko48 Sep 23, 2026
f27344b
fix(audit): scroll the audit table sideways at every width
remko48 Sep 23, 2026
1e2c3d9
feat(compat): declare support for Nextcloud 35
remko48 Sep 23, 2026
bc28700
chore(tokens): regenerate the dark palettes that drifted from their s…
remko48 Sep 23, 2026
ad3b83e
style: run prettier over the three files it rewrites
remko48 Sep 23, 2026
bcb3d7e
fix(tokens): declare the global key the component layer carries
remko48 Sep 23, 2026
c30f78f
refactor(settings): read the panel's flags through one helper
remko48 Sep 23, 2026
65946d2
fix(tokens): emit component-scopes as a set layer, not beside them
remko48 Sep 23, 2026
b68d545
ci: run a stable35 leg for the version info.xml now declares
remko48 Sep 23, 2026
3acc7c3
docs(ci): say where MAX_SUPPORTED_NC actually lives
remko48 Sep 23, 2026
7eb0bd2
test: let the ISimpleFolder fakes load on Nextcloud 35
remko48 Sep 23, 2026
80df803
Merge pull request #653 from ConductionNL/fix/nc35-simplefolder-fakes
remko48 Sep 23, 2026
00c7030
Merge remote-tracking branch 'origin/development' into fix/frontend-c…
remko48 Sep 23, 2026
e1250c1
fix(settings): call the flag helper with named parameters
remko48 Sep 23, 2026
cbfebac
fix(playground): hold the search button still under reduced motion
remko48 Sep 23, 2026
ca939bc
test(tokens): cover the code the component layer adds
remko48 Sep 23, 2026
7ce453e
Merge pull request #652 from ConductionNL/fix/frontend-changes
remko48 Sep 23, 2026
cf1ce76
Merge branch 'development' into dependabot/composer/development/nextc…
remko48 Sep 23, 2026
12305be
Merge branch 'development' into dependabot/composer/development/twig/…
remko48 Sep 23, 2026
f8a7196
Merge branch 'development' into dependabot/npm_and_yarn/development/c…
remko48 Sep 23, 2026
8f414b1
Merge branch 'development' into dependabot/npm_and_yarn/development/g…
remko48 Sep 23, 2026
062b4eb
Merge branch 'development' into dependabot/npm_and_yarn/development/j…
remko48 Sep 23, 2026
60ab78a
Merge branch 'development' into dependabot/npm_and_yarn/development/v…
remko48 Sep 23, 2026
a54ab25
Merge branch 'development' into dependabot/npm_and_yarn/development/v…
remko48 Sep 23, 2026
f439b28
Merge pull request #645 from ConductionNL/dependabot/composer/develop…
remko48 Sep 23, 2026
6c0c372
Merge pull request #644 from ConductionNL/dependabot/composer/develop…
remko48 Sep 23, 2026
cce76f5
Merge pull request #608 from ConductionNL/dependabot/npm_and_yarn/dev…
remko48 Sep 23, 2026
459f9a5
Merge pull request #649 from ConductionNL/dependabot/npm_and_yarn/dev…
remko48 Sep 23, 2026
97e8ccb
Merge pull request #650 from ConductionNL/dependabot/npm_and_yarn/dev…
remko48 Sep 23, 2026
62d2935
Merge pull request #646 from ConductionNL/dependabot/npm_and_yarn/dev…
remko48 Sep 23, 2026
bdeca51
Merge pull request #647 from ConductionNL/dependabot/npm_and_yarn/dev…
remko48 Sep 23, 2026
c13f0c1
Merge remote-tracking branch 'origin/development' into fix/frontend-c…
remko48 Sep 24, 2026
fa7117c
chore(deps-dev): Bump prettier from 3.9.6 to 3.9.8 (#651)
dependabot[bot] Sep 25, 2026
352868e
fix(tokens): capture the globals on body, not :root
remko48 Sep 25, 2026
76efc80
feat(settings): save the running theme as a theme
remko48 Sep 25, 2026
0e356fd
docs(parity): start the capability matrix, systems, areas and 154 unr…
rubenvdlinde Sep 26, 2026
8c5d30d
docs(parity): first reader packs folded in (wip)
rubenvdlinde Sep 26, 2026
c80550e
docs(parity): reader-b pack folded in, two safety rows reworded to wh…
rubenvdlinde Sep 26, 2026
3ffae5e
docs(parity): reader-a pack folded in (wip)
rubenvdlinde Sep 26, 2026
992ca04
docs(parity): reader-d pack folded in (wip)
rubenvdlinde Sep 26, 2026
4e2bcc0
docs(parity): reader-c pack folded in, all code readings in (wip)
rubenvdlinde Sep 26, 2026
1398f51
docs(parity): microsoft 365 and liferay columns folded in, docs-only …
rubenvdlinde Sep 26, 2026
6202b4e
docs(parity): nextcloud theming column folded in, docs-only from sour…
rubenvdlinde Sep 26, 2026
9341ff5
docs(parity): capability matrix for thematiq, 154 rows against five c…
rubenvdlinde Sep 26, 2026
02dd87c
Merge pull request #658 from ConductionNL/feat/parity-capability-matrix
rubenvdlinde Sep 26, 2026
a964f70
fix(parity): rate thematiq's not-checked competitor cells unknown unl…
rubenvdlinde Sep 26, 2026
45935e0
Merge pull request #667 from ConductionNL/chore/parity-thematiq-not-c…
rubenvdlinde Sep 26, 2026
138fa42
docs(parity): nextcloud-theming and opendesk re-read from source, sou…
rubenvdlinde Sep 26, 2026
92d9311
docs(parity): nextcloud-theming rated on the mined rows (wip)
rubenvdlinde Sep 26, 2026
9959296
docs(parity): tokens-studio re-read from source at 2.12.1, its source…
rubenvdlinde Sep 26, 2026
fa1e3ce
docs(parity): ninth tokens-studio mined row, theme switching without …
rubenvdlinde Sep 26, 2026
6b595e9
docs(parity): opendesk and nextcloud-theming rated on the mined rows …
rubenvdlinde Sep 26, 2026
89c9e64
docs(parity): m365-branding re-read from public docs, its sources obj…
rubenvdlinde Sep 26, 2026
3420002
docs(parity): the eight m365-mined rows rated for nextcloud-theming, …
rubenvdlinde Sep 26, 2026
eeac943
docs(parity): liferay-dxp re-read from public docs, its sources objec…
rubenvdlinde Sep 26, 2026
fd9e662
Merge pull request #669 from ConductionNL/parity/wave5-source-reads
rubenvdlinde Sep 26, 2026
b4e7568
chore(deps): move @conduction/nextcloud-vue to 2.57.1 (Dexie loads on…
rubenvdlinde Sep 27, 2026
3f4c100
docs(openspec): OpenSpec pass part 1, 12 changes for 14 gap rows, dec…
rubenvdlinde Sep 27, 2026
fd992ea
docs(openspec): OpenSpec pass part 2, 5 authoring changes for 8 gap r…
rubenvdlinde Sep 27, 2026
551954e
docs(parity): corrections round 8, 4 rows re-read against their issue…
rubenvdlinde Sep 28, 2026
e7df182
fix(overrides): refuse a save that would drop tokens, and keep the fi…
rubenvdlinde Sep 28, 2026
19e4c49
fix(import): apply the sRGB transfer function to srgb-linear colours …
rubenvdlinde Sep 28, 2026
a85fc76
fix(contrast): measure translucent colours as they render, and keep a…
rubenvdlinde Sep 28, 2026
dc4d911
fix(theme): time the theme's transitions with the names the token edi…
rubenvdlinde Sep 28, 2026
64a0918
fix(overrides): give brand colour overrides the dark scopes, so every…
rubenvdlinde Sep 28, 2026
a59d207
fix(overrides): give a set on no design system an overrides file of i…
remko48 Sep 29, 2026
48a364e
feat(tokens): read and write r, g, b triplets for the -rgb tokens
remko48 Sep 29, 2026
5a9b18c
chore(tokens): name the stock set "Nextcloud (Base)"
remko48 Sep 29, 2026
8da9f2b
fix(tokens): make every component token reach what Nextcloud paints
remko48 Sep 29, 2026
d548f89
feat(themes): keep Nextcloud's branding with a theme when it is saved
remko48 Sep 29, 2026
44448ae
feat(editor): make the token editor and playground show and keep what…
remko48 Sep 29, 2026
6eebae2
Merge remote-tracking branch 'origin/development' into fix/frontend-c…
remko48 Sep 29, 2026
91bd26f
style: format frontend sources with prettier
remko48 Sep 29, 2026
34b5671
fix(l10n): add the new editor and playground strings to en.json
remko48 Sep 29, 2026
d246ab5
fix(css): stop emitting duplicate selectors and empty rules in the st…
remko48 Sep 29, 2026
7e98f9d
test(themes): cover the per-set overrides file and the branding capture
remko48 Sep 29, 2026
68e4329
chore(phpstan): regenerate the baseline for the branding-capture calls
remko48 Sep 29, 2026
57a25e7
refactor(themes): split upload, applyColors and getAvailableTokenSets…
remko48 Sep 29, 2026
3102dc6
docs(themes): link the branding capture methods to the theming-sync spec
remko48 Sep 29, 2026
20ca4d9
fix(a11y): mark the preview table's header cells as column headers
remko48 Sep 29, 2026
74a61d7
fix(gates): add @spec tags to the branding capture service, scope the…
remko48 Sep 29, 2026
2ddad41
Merge pull request #707 from ConductionNL/fix/frontend-changes
remko48 Sep 29, 2026
90a3c60
Merge pull request #642 from ConductionNL/development
remko48 Sep 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
51 changes: 44 additions & 7 deletions .github/workflows/code-quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ jobs:
# entirely on the version openregister cannot load.
#
# EVERY MAJOR IN THE DECLARED RANGE, NOT JUST ITS ENDS. appinfo/info.xml declares
# <nextcloud min-version="32" max-version="34"/>, and
# <nextcloud min-version="32" max-version="35"/>, and
# tests/Unit/ClaimAccuracyTest::testDeclaredNextcloudRangeMatchesTheTestedMatrix
# asserts that the lowest ref here EQUALS that floor. A matrix of stable34
# alone therefore advertises 32 and 33 to the app store while exercising
Expand All @@ -187,14 +187,20 @@ jobs:
# in the LOOSER direction, which this fleet does not take. The floor is still
# 32, so ClaimAccuracyTest's lowest-ref-equals-floor assertion is unaffected.
#
# stable34 is FIRST deliberately. Playwright is the job that reads [0], and
# stable35 is FIRST deliberately, and moved there when max-version rose to
# 35. Playwright is the job that reads [0], and
# tests/e2e/spec-coverage/selector-liveness.spec.ts is a cross-version
# stylesheet audit whose SINCE deferrals expire only once the survey
# reaches the newest supported major (MAX_SUPPORTED_NC). Surveying 32 would
# defer the NC33+ header selectors indefinitely; surveying 34 forces them
# to be proven live — which is how the eight dead NC 32/33-only selectors
# now recorded in that file's ALLOWED list were found.
nextcloud-test-refs: '["stable34", "stable32", "stable33"]'
# reaches the newest supported major (MAX_SUPPORTED_NC, a constant in that
# spec file that mirrors info.xml BY HAND — it still reads 34, so raising
# it is a separate decision: it expires that file's SINCE deferrals).
# Surveying 32 would defer the NC33+ header selectors
# indefinitely; surveying the newest major forces them to be proven live —
# which is how the eight dead NC 32/33-only selectors now recorded in that
# file's ALLOWED list were found. Leaving stable34 in front of a declared
# 35 would put the survey one major behind the claim and start that drift
# over again.
nextcloud-test-refs: '["stable35", "stable32", "stable33", "stable34"]'
# These three were `false`, and that is worse than it sounds. The shared
# workflow builds one matrix leg per tool unconditionally; a disabled leg
# prints "<tool> is disabled — skipping." and `exit 0`. The job therefore
Expand Down Expand Up @@ -299,6 +305,26 @@ jobs:
# recursively.
enable-newman: true

# ── Licensing ────────────────────────────────────────────────────────
# REUSE findings fail the build. The shared workflow defaults this OFF
# because most fleet apps ship no REUSE.toml or LICENSES/ directory;
# thematiq now ships both and lints at 3680/3680 with 0 missing, 0
# unused and 0 invalid expressions, compliant with version 3.3 of the
# REUSE specification.
#
# It stayed off while the repo was NOT compliant, deliberately: turning
# it on then would have failed every open PR for a debt none of them
# introduced. Now that the tree is clean, off is the worse default —
# non-blocking surfaces a regression only as REUSE ❌ in the Quality
# Report comment, which is easy to miss.
#
# The blanket `path = "**"` annotation in REUSE.toml makes every new file
# compliant on arrival, whatever its type, so ordinary work cannot trip
# this. Two regression modes remain: vendoring a file whose own SPDX
# header names a licence with no text in LICENSES/, and writing prose
# that QUOTES an SPDX tag outside a REUSE-IgnoreStart/End pair.
reuse-blocking: true

# ── Frontend Check legs ──────────────────────────────────────────────
# `frontend-checks` defaults to `[]`, and an empty list means the shared
# workflow emits NO "Frontend Check" job at all — so these two validators
Expand Down Expand Up @@ -397,3 +423,14 @@ jobs:
# construction — <= v1.4.0 passed over it (permanently green) and v1.5.0
# refused with exit 99 (permanently red). The scope is now
# `github.event.before...HEAD`, what the push actually changed.
# ── Cost controls (see ConductionNL/.github#596, #599) ───────────────
# Run PHPUnit and Playwright only when the diff could change their
# verdict. Fails safe TOWARDS running: an unreadable diff, a force-push,
# a branch creation or a dispatch all run everything, and a filtered
# skip is a declared state in the Quality Report, not a missing one.
enable-path-filtering: true
# PR-time PHPUnit runs the primary PHP against the newest declared
# Nextcloud; the full matrix still runs on every push to a default
# branch and on the release PR into beta. Breadth moves from
# per-commit to per-merge, it is not dropped.
reduce-pr-matrix: true
44 changes: 44 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,41 @@
# boot, so it must never be committed (a stray test value here restyles the
# whole instance the moment the app is activated).
/css/custom-overrides.css
# The same, per set, for every set on no design system: the stock Nextcloud
# theme (custom-overrides-nextcloud.css) and the themes saved off it. Only that
# set loads its file, so emptying the stock one (the reset) gives stock back.
/css/custom-overrides-*.css

# Runtime theme state — Nextcloud's own logos, favicon and background image,
# copied into a theme when it is saved from the editor (BrandingCaptureService)
# so applying the theme brings them back. They are an admin's uploads on one
# instance, never part of the app.
/img/logos/*-captured-*
/img/backgrounds/*-captured-*

# Runtime theme state — written by the freeform custom-CSS editor at runtime
# (CustomCssService::write(), atomic temp-file + rename). Unlike
# custom-overrides.css nothing recreates it on boot: CssInjectionService only
# emits the stylesheet when the feature is enabled AND the file has content, so
# its absence is the correct default state. It is admin-generated data, never
# source — a stray token dump committed here restyles every instance that
# enables the feature.
/css/custom-css.css

# Local presentation mock — a visual shell of screens that do not exist yet,
# drawn over the admin panel and loaded only with `?mock=1`. It is scaffolding
# for screenshots and demos, not product: nothing it draws persists, none of it
# is translated, and it must never reach an instance. Kept out of the repo but
# usable in a working tree, so js/admin-mock.js and css/admin-mock.css can sit
# here without ever being committed (js/admin-mock.js is already covered by the
# /js/* rule below — the point is that it is NOT un-ignored there).
/css/admin-mock.css

# Talking points for a slide deck that lives outside the repo, alongside the
# local presentation mock above. It names a .pptx on one machine's disk and
# nothing in the app refers to it, so it is personal working material rather
# than project documentation.
/PRESENTATION-SCRIPT.md

# Scratch input for scripts/build-icons.js's DSFR pack — the pre-fetched
# @gouvfr/dsfr dist/icons/**/*.svg tree (that package cannot be npm-installed:
Expand All @@ -40,6 +75,8 @@
!/js/admin.js
!/js/lib/
!/js/preview-banner.js
!/js/playground.js
!/js/playground/
/build/
/dist/

Expand Down Expand Up @@ -91,3 +128,10 @@ tests/e2e/.auth/
# facts about the LIVE docs.numerique.gouv.fr bundle, not app source. The
# authoritative, committed output is css/systems/lasuite/brand-override.css.
/.lasuite-src/


# Working plans. These are deleted once the work they describe has landed, so
# nothing that stays in the repository may cite one — not by filename and not by
# its stage numbering. Write the condition instead ("until the converter has
# regenerated them"), or cite the openspec change the plan produced.
/MAKEOVER-PLAN.md
25 changes: 9 additions & 16 deletions .npmrc
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,12 @@
min-release-age=2
min-release-age-exclude[]=@conduction/*

# Required to install at all under npm 11. `@gouvfr/dsfr-nexus` (transitive,
# via the DSFR toolchain) declares peer dependencies on `@gouvfr/dsfr-token`
# and `@gouvfr/dsfr-weave` — TWO PACKAGES THAT WERE NEVER PUBLISHED. Both
# answer 404 on the registry, in every version of dsfr-nexus from 1.2.12 to
# 1.2.17, so there is no upgrade out of it.
#
# npm 10 tolerated the dangling peers. npm 11's `npm ci` does not: it reports
# Missing: @gouvfr/dsfr-token@ from lock file
# and refuses to install, which would have made this repo's CI red the moment
# the fleet moved to npm 11. Verified: npm ci fails on the UNCHANGED committed
# lock under npm 11 and succeeds with this line, 944 packages.
#
# This makes peers advisory rather than blocking (npm 6 behaviour), the same
# remedy 8 other apps in the fleet already carry for the same class of
# upstream defect. Remove it if dsfr-nexus ever drops the phantom peers.
legacy-peer-deps=true
# NO legacy-peer-deps. It was here because `@gouvfr/dsfr-nexus` declared peer
# dependencies on `@gouvfr/dsfr-token` and `@gouvfr/dsfr-weave`, two packages
# that were never published, which npm 11's `npm ci` refuses to install around.
# That package is no longer in this tree — the lockfile resolves `@gouvfr/dsfr`
# alone — so the flag no longer buys anything, and a flag that makes peer
# conflicts advisory hides the next one instead of reporting it. Verified on
# npm 11.19: `npm install --package-lock-only` and a clean `npm ci` both exit 0
# without it. If a phantom peer returns, align the declared ranges until the
# tree resolves; do not reinstate the flag.
13 changes: 13 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,12 @@ css/tokens/
css/systems/lasuite/defaults.css
css/systems/lasuite/brand-override.css

# Same contract, different generator: emitted by scripts/generate-guest-css.mjs
# from the vendored core/css/guest.css and byte-compared against the committed
# copy by `npm run test:guest-css`. Its generator input lives under
# scripts/sources/, which is already ignored above.
css/playground-guest.css

# VENDORED UPSTREAM, AND GENERATOR INPUT. This is the deployed Cunningham token
# dump that generate-lasuite-tokens.mjs READS to produce brand-override.css.
# Reformatting the input changes the output, so the drift check would fail on a
Expand All @@ -46,3 +52,10 @@ scripts/sources/
# file — so the validation tests have something to reject. Formatting them
# would remove the very defect under test.
tests/integration/fixtures/

# Same contract again: both emitted by scripts/generate-component-scopes.mjs
# from scripts/mapping/component-tokens.json and byte-compared against the
# committed copies by `npm run test:component-scopes`. Prettier would rewrap
# the var() fallback chains and fail that check on a file nobody edited.
css/component-scopes.css
css/primary-lock.css
2 changes: 1 addition & 1 deletion AGREEMENT-MARIANNE.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ agrees that:
becomes inapplicable.
4. **No warranty from the licence itself.** Per the Etalab Open Licence
2.0's own liability clause (reproduced in
[`LICENSES/Etalab-2.0.txt`](LICENSES/Etalab-2.0.txt)), the font files are
[`LICENSES/etalab-2.0.txt`](LICENSES/etalab-2.0.txt)), the font files are
provided as-is; the French State ("le Concédant") gives no guarantee
beyond what that licence states.

Expand Down
Loading
Loading