Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
281 commits
Select commit Hold shift + click to select a range
6949ec5
added reduced motion for dashboard switcher
SudoThijn Jun 29, 2026
11cb64d
added fallback values for launchpad container height
SudoThijn Jun 29, 2026
cbe23cf
fixed frontend papering over a backend serialization bug
SudoThijn Jun 29, 2026
9c7bc30
ensured key stability for widget renderer
SudoThijn Jun 29, 2026
851a157
lock fork process so no duplicate slugs can be made
SudoThijn Jun 29, 2026
258ec05
validate menu content on placement update path
SudoThijn Jun 29, 2026
abaea19
reverted CSP image change
SudoThijn Jun 30, 2026
15b04f7
Merge pull request 'fix: dashboard rendering, fork naming, and showca…
Jun 30, 2026
8a5d840
Merge branch 'development' into feature/icon-browser
SudoThijn Jun 30, 2026
8d31ef1
chore(deps): bump @conduction/nextcloud-vue to 1.0.0-beta.143
SudoThijn Jun 30, 2026
7cc68bd
docs: add launchpad CLAUDE.md to scope agent instructions to this repo
SudoThijn Jun 30, 2026
ddeb2ed
fix(a11y): associate icon picker label with CnIconBrowser control
SudoThijn Jun 30, 2026
afb74a0
fix(org-nav): render legacy free-text icon names
SudoThijn Jun 30, 2026
4dd0841
fix(tiles): show existing icon when editing a tile
SudoThijn Jun 30, 2026
f87461c
fix(a11y): give the org-nav row icon picker an accessible name
SudoThijn Jun 30, 2026
51443a0
fix(a11y): use CnIconBrowser :label instead of a bare <label>
SudoThijn Jun 30, 2026
8b164f1
test(icons): cover ICON_CATALOGUE, onIcon/isUrlIcon, SVG-path render
SudoThijn Jun 30, 2026
4974890
Merge pull request 'feature/icon-browser' (#123) from feature/icon-br…
Jun 30, 2026
4ffe6b0
fix(dashboard): resolve default tile logos via IURLGenerator
rubenvdlinde Jul 2, 2026
066ee5b
ci: adopt canonical pre-merge-check-strict (node fix + consolidation)
rubenvdlinde Jul 5, 2026
c3f30f6
style: phpcbf + manual phpcs fixes to pass strict quality-gates
Jul 6, 2026
2cf5383
fix(manifest): migrate bundled manifest stub to v2 (gate-22 green)
rubenvdlinde Jul 6, 2026
6d6f908
Merge pull request 'fix(manifest): migrate bundled manifest stub to v…
Jul 6, 2026
138d743
chore: bump @conduction/nextcloud-vue to 1.0.0-beta.155 (audit item 21)
rubenvdlinde Jul 6, 2026
9093d10
Merge pull request 'chore: bump @conduction/nextcloud-vue to 1.0.0-be…
Jul 7, 2026
500c23f
openspec: propose dashboard-acknowledgements
juanclaude-conduction Jul 7, 2026
0692df8
openspec: propose align-source-license-headers-to-eupl
juanclaude-conduction Jul 7, 2026
5f9c906
chore(appstore): codeberg links + wire real screenshots
infoconductionnl Jul 7, 2026
a65a8ef
chore(license): reconcile source SPDX headers + README badge to EUPL-1.2
rubenvdlinde Jul 7, 2026
b406ecb
fix(auth): group-dashboard admin endpoints use AuthorizedAdminSetting…
juanclaude-conduction Jul 7, 2026
1308f21
fix(activity): DebounceHelper distributed-cache fallback (apply harde…
juanclaude-conduction Jul 7, 2026
388c729
perf(people-widget): bounded directory pagination (apply fix-people-w…
juanclaude-conduction Jul 7, 2026
006fa4f
fix(i18n): align t() calls to launchpad domain + lint guard (apply fi…
juanclaude-conduction Jul 7, 2026
a0247c4
feat(a11y): keyboard-accessible widget move/resize panel (apply keybo…
juanclaude-conduction Jul 7, 2026
bf9194b
Merge pull request 'LaunchPad: Codeberg store links and real screensh…
Jul 7, 2026
e8b025e
test(sharing): real e2e coverage + accurate @e2e annotations (apply a…
juanclaude-conduction Jul 7, 2026
3326b86
chore(licence): declare EUPL-1.2 in info.xml (fleet standard; matches…
rubenvdlinde Jul 7, 2026
4b77074
feat(dashboard): mandatory-read acknowledgements + read receipts on c…
rubenvdlinde Jul 7, 2026
b25536e
Merge remote-tracking branch 'origin/development' into HEAD
rubenvdlinde Jul 7, 2026
9018138
docs: architecture/migration/widgets + info.xml
rubenvdlinde Jul 9, 2026
3c346d6
fix(launchpad): route menu to launchpad app id; finish mydash→launchp…
rubenvdlinde Jul 9, 2026
8a1d43f
fix(build): set webpack public path so lazy chunks load from the serv…
rubenvdlinde Jul 9, 2026
9fc6ec0
Merge remote-tracking branch 'origin/development' into HEAD
rubenvdlinde Jul 9, 2026
d99d265
Merge pull request 'fix(dashboard): resolve default tile logos via IU…
Jul 9, 2026
9082e17
Merge branch 'development' into feat/widget-library-consumption
Jul 9, 2026
3b57b1e
Merge pull request 'feat: widget-library consumption + /features over…
Jul 9, 2026
9c05740
Merge remote-tracking branch 'origin/development' into HEAD
rubenvdlinde Jul 9, 2026
ed65c16
Merge pull request 'chore(deps): bump @conduction/nextcloud-vue to 1.…
Jul 9, 2026
bda9e89
Merge remote-tracking branch 'origin/development' into HEAD
rubenvdlinde Jul 9, 2026
954daff
Merge remote-tracking branch 'origin/development' into HEAD
rubenvdlinde Jul 9, 2026
eba642c
Merge pull request 'ci(launchpad): adopt canonical test workflow — no…
Jul 9, 2026
dc32712
Merge pull request 'fix(build): set webpack public path so lazy chunk…
Jul 9, 2026
b15d9d0
fix(icons): source the NL Design pack from nc-vue's bundled NL_DESIGN…
rubenvdlinde Jul 10, 2026
327ec0a
fix(widgets): register the nc-widget proxy renderer so native NC widg…
rubenvdlinde Jul 10, 2026
83162b2
fix(roles): rename legacy role tables + drop dead icon files
rubenvdlinde Jul 10, 2026
724c00c
feat(public-share): create/manage links in the UI + render the /s/{to…
rubenvdlinde Jul 10, 2026
481108f
docs(tutorials): align user tutorials with actual behaviour
rubenvdlinde Jul 10, 2026
f7b8d5e
Merge pull request 'feat: NL icons w/o nldesign, nc-widget render, ro…
Jul 10, 2026
635c9eb
feat(tiles): source NL Design icons from nc-vue grouped catalogues
rubenvdlinde Jul 10, 2026
49910c8
chore(deps): bump @conduction/nextcloud-vue to beta.166 for bundled N…
rubenvdlinde Jul 10, 2026
19c9f1e
Merge pull request 'feat(tiles): NL Design icons from nc-vue grouped …
Jul 10, 2026
bb52b23
test(icons): align NL-icon stub + spec with the grouped catalogues
rubenvdlinde Jul 10, 2026
a4cd79c
Merge pull request 'test(icons): align NL-icon stub + spec with group…
Jul 10, 2026
c30f6ca
fix(deps): sync package-lock to @conduction/nextcloud-vue beta.168
rubenvdlinde Jul 10, 2026
8a993a4
Merge pull request 'fix(deps): sync package-lock to nc-vue beta.168 (…
Jul 10, 2026
7d22c7f
docs(openspec): preserve authored-but-uncommitted spec changes (2026-…
rubenvdlinde Jul 10, 2026
4a907cf
Merge fix/appstore-metadata (consolidation 2026-07-10)
rubenvdlinde Jul 10, 2026
007e5ac
Merge specs/authored-2026-07-10 (consolidation 2026-07-10)
rubenvdlinde Jul 10, 2026
e0c9eca
Merge agent-launchpad-apply-changes (consolidation 2026-07-10)
rubenvdlinde Jul 10, 2026
727c7d6
fix(icon): carry the white fill on the <svg> element, not inner nodes
rubenvdlinde Jul 10, 2026
4f42c2d
Merge pull request 'fix(img): make the LaunchPad icon recolorable in …
Jul 10, 2026
2d483ba
fix(grid): define rectsOverlap — keyboard widget nudge threw on any c…
rubenvdlinde Jul 12, 2026
17fc7e1
refactor(icons): drop the eager NL Design pack — CnIconBrowser ships …
rubenvdlinde Jul 12, 2026
b73363b
chore(deps): nc-vue beta.193; drop the now-unreachable nlDesignIcons …
rubenvdlinde Jul 12, 2026
4c64c24
Merge pull request 'fix(grid): keyboard widget nudge threw on any col…
Jul 12, 2026
205668d
fix(composer): never autoload the nextcloud/ocp stubs into the served…
rubenvdlinde Jul 12, 2026
88a223a
Merge pull request 'fix(composer): never autoload the nextcloud/ocp s…
Jul 12, 2026
70e046e
Merge branch 'development' into feature/bug-fixes
SudoThijn Jul 15, 2026
4898ed1
chore(deps): bump @conduction/nextcloud-vue to ^1.0.0-beta.212
rubenvdlinde Jul 15, 2026
4338fdf
import and use registerDashboardWidgets to fix no custom widgets bein…
SudoThijn Jul 15, 2026
69db525
Merge pull request 'chore(deps): move nextcloud-vue dependency up to …
Jul 15, 2026
32c6f0d
added extra comment
SudoThijn Jul 15, 2026
066714a
chore(deps): step nextcloud-vue up to beta.213
rubenvdlinde Jul 16, 2026
926357f
Merge pull request 'chore(deps): home screen widget stack routine ref…
Jul 16, 2026
433840a
Merge branch 'development' into feature/bug-fixes
SudoThijn Jul 16, 2026
8b23ccd
added logic for uploading files as non-base64
SudoThijn Jul 16, 2026
6d20859
change requests
SudoThijn Jul 16, 2026
b6f691c
Merge pull request 'Image widget: real file upload endpoint (no base6…
Jul 16, 2026
ef2da76
emit a preview image url for files widget
SudoThijn Jul 17, 2026
f76129f
accept images from tile.openstreetmap.org so that the map widget works
SudoThijn Jul 20, 2026
dbc5396
Merge pull request #1 from ConductionNL/feature/bug-fixes
rubenvdlinde Jul 23, 2026
d540945
docs(openspec): market-gap spec wave — 8 ff changes + market-position…
rubenvdlinde Jul 23, 2026
3206a45
Merge pull request #3 from ConductionNL/wip/lp-market-gap-specs-2026-…
rubenvdlinde Jul 23, 2026
892391a
feat(widgets): clock + weather ambient widgets (clock-weather-widgets)
rubenvdlinde Jul 23, 2026
b1cae80
docs(openspec): mark clock-weather-widgets tasks actually completed
rubenvdlinde Jul 23, 2026
53ca9bd
Merge pull request #4 from ConductionNL/wip/build-clock-weather-2026-…
rubenvdlinde Jul 23, 2026
491c664
test(weather): PHPUnit coverage + authoring docs; archive clock-weath…
rubenvdlinde Jul 23, 2026
e4a4cd0
Merge pull request #6 from ConductionNL/wip/finish-clock-weather-2026…
rubenvdlinde Jul 23, 2026
5c110d1
feat(live-data-tile): add livetile dashboard widget (backend + frontend)
rubenvdlinde Jul 23, 2026
b7a1870
docs(live-data-tile): add @spec tags to frontend methods (gate-16)
rubenvdlinde Jul 23, 2026
43708dd
docs(live-data-tile): authoring guide; archive change
rubenvdlinde Jul 23, 2026
b14912c
Merge pull request #7 from ConductionNL/wip/build-live-data-tile-2026…
rubenvdlinde Jul 23, 2026
7caa227
feat(conditional-visibility-editor): rule builder UI + preview-as-aud…
rubenvdlinde Jul 23, 2026
494a392
docs(conditional-visibility-editor): fix @spec anchors + add frontend…
rubenvdlinde Jul 23, 2026
2fdbbb6
chore(openspec): archive conditional-visibility-editor
rubenvdlinde Jul 23, 2026
519f5bb
Merge pull request #8 from ConductionNL/wip/build-conditional-vis-202…
rubenvdlinde Jul 23, 2026
3f4e989
feat(tile-usage-analytics): add per-tile click analytics extending da…
rubenvdlinde Jul 23, 2026
a0d7891
fix(tile-analytics): renumber migration to Version002007, retarget @s…
rubenvdlinde Jul 23, 2026
5a4cfbc
Merge pull request #9 from ConductionNL/wip/build-tile-analytics-2026…
rubenvdlinde Jul 23, 2026
bd18887
feat(tile-quick-search): on-dashboard quick-search / launcher bar
rubenvdlinde Jul 23, 2026
c837555
fix(quick-search): retarget @spec to canonical spec path; archive change
rubenvdlinde Jul 23, 2026
fe84779
Merge pull request #10 from ConductionNL/wip/build-quick-search-2026-…
rubenvdlinde Jul 23, 2026
7ea67e1
feat(admin-templates): add admin template re-sync (REQ-RESYNC-001..005)
rubenvdlinde Jul 23, 2026
b0dfbd3
docs(template-resync): retarget @spec to canonical spec + add missing…
rubenvdlinde Jul 23, 2026
964da61
docs(template-resync): admin guide; archive change
rubenvdlinde Jul 23, 2026
8ed9c40
Merge pull request #11 from ConductionNL/wip/build-template-resync-20…
rubenvdlinde Jul 23, 2026
f767ccb
fix(openspec): retarget @spec tags of archived changes to canonical s…
rubenvdlinde Jul 23, 2026
312741c
Merge pull request #12 from ConductionNL/wip/spec-anchor-cleanup-2026…
rubenvdlinde Jul 23, 2026
51bfa28
feat(iframe-embed-widget): sandboxed external-URL embed widget with f…
rubenvdlinde Jul 23, 2026
16339e7
chore(openspec): archive iframe-embed-widget
rubenvdlinde Jul 23, 2026
2dc514f
Merge pull request #14 from ConductionNL/wip/build-iframe-embed-2026-…
rubenvdlinde Jul 23, 2026
38ea139
feat(service-health-ping): server-side online/offline/degraded tile h…
rubenvdlinde Jul 23, 2026
15e0454
chore(openspec): archive service-health-ping
rubenvdlinde Jul 23, 2026
468d7ce
Merge pull request #15 from ConductionNL/wip/build-health-ping-2026-0…
rubenvdlinde Jul 23, 2026
5753063
fix(iframe-embed): server-side framable check so the XFO-DENY fallbac…
rubenvdlinde Jul 26, 2026
f6e4470
Merge pull request #16 from ConductionNL/fix/iframe-framable-server-c…
rubenvdlinde Jul 26, 2026
9281bee
fix(iframe-embed): gate iframe render on the framable check so XFO-DE…
rubenvdlinde Jul 26, 2026
b4396f2
Merge pull request #17 from ConductionNL/fix/iframe-render-gate
rubenvdlinde Jul 26, 2026
012e729
feat(vue3): migrate Launchpad to Vue 3
rubenvdlinde Jul 27, 2026
757af0c
test(vue3): run the Launchpad unit suite under Vue 3
rubenvdlinde Jul 27, 2026
bb7c24b
fix(vue3): bump l10n + password-confirmation to the Vue-3 line
rubenvdlinde Jul 27, 2026
cd7b8e0
fix(vue3): migrate <draggable> to the vuedraggable v4 API
rubenvdlinde Jul 27, 2026
23b8532
fix(vue3): restore the sidebar v-model, `.sync` bindings and the v9 f…
rubenvdlinde Jul 28, 2026
2aca038
fix(vue3): revive dead @input listeners on NcSelect + repair stale e2…
rubenvdlinde Jul 28, 2026
af5c9cb
fix(e2e): nc-widget renderer is .cn-nc-widget-widget, not .nc-dashboa…
rubenvdlinde Jul 28, 2026
3c31d1f
build(vue3): consume the published @conduction/nextcloud-vue@2.1.0-vu…
rubenvdlinde Jul 28, 2026
0b6b096
fix(vue3): key the <template v-for> fragment, not its children
rubenvdlinde Jul 28, 2026
d82dc2b
test(vue3): repair the unit suite against Vue 3 + VTU v2 semantics
rubenvdlinde Jul 28, 2026
6b6abd8
fix(lint): correct the Vue-2-pinned rule set and clear all 17 errors
rubenvdlinde Jul 28, 2026
7ba990e
feat(a11y): wire the keyboard move/resize seam and stop the grid eati…
rubenvdlinde Jul 28, 2026
02c64c3
docs(lint): document the API surface and de-duplicate shadowed docblocks
rubenvdlinde Jul 28, 2026
7a2c4dd
docs(lint): finish the JSDoc sweep and repair the initial-state guard
rubenvdlinde Jul 28, 2026
b464f30
test(news): pin summary truncation as a security property
rubenvdlinde Jul 28, 2026
d438e17
build(deps): consume @conduction/nextcloud-vue@2.1.0-vue3.3
rubenvdlinde Jul 28, 2026
12d7d22
docs(test): record what the nextcloud-vue stub alias costs in coverage
rubenvdlinde Jul 28, 2026
6013308
fix(e2e): context-menu clamp sizing, deploy script bind-mount bug, ac…
rubenvdlinde Jul 29, 2026
b31be8d
fix(e2e): wire nc-widget picker + label overflow + context-menu scrol…
rubenvdlinde Jul 29, 2026
d41e3f3
fix(deploy): stop resolving the deploy target by substring match
rubenvdlinde Jul 29, 2026
c8fd257
build(deps): consume @conduction/nextcloud-vue@2.1.0-vue3.5
rubenvdlinde Jul 29, 2026
228ff8f
build(deps): consume @conduction/nextcloud-vue@2.1.0-vue3.6
rubenvdlinde Jul 29, 2026
db29714
fix(e2e): resolve context-menu flake, enable 2 skips, bump nc-vue to …
rubenvdlinde Jul 30, 2026
b56d27d
Merge pull request #18 from ConductionNL/feat/vue-3-migration
rubenvdlinde Jul 30, 2026
419c6f8
fix(sharing,rbac): resolve dashboards shared with a user; ship a non-…
rubenvdlinde Jul 30, 2026
18723f2
test(sharing,rbac): vitest coverage for the shared-with-you section a…
rubenvdlinde Jul 30, 2026
da32e51
fix(sharing): carry shared rows through the store and un-skip the rec…
rubenvdlinde Jul 30, 2026
0ad9a3d
chore(release): bump to 1.0.5-unstable.15 so ApplyActionBaseline actu…
rubenvdlinde Jul 30, 2026
ebe8eda
test(e2e): make the recipient empty-state assertion non-vacuous
rubenvdlinde Jul 30, 2026
c379280
fix(sharing): a shared DRAFT must stay visible to its recipient
rubenvdlinde Jul 30, 2026
6e24419
test(e2e): fix a spec that authenticated as ADMIN while claiming to t…
rubenvdlinde Jul 30, 2026
f717632
Merge pull request #19 from ConductionNL/fix/sharing-resolution-and-r…
rubenvdlinde Jul 31, 2026
c6b8424
ci: fix broken shared-workflow references and adopt fleet standard
remko48 Jul 31, 2026
781abec
ci: restore CI — reusable-workflow refs pointed at a non-existent org…
rubenvdlinde Aug 1, 2026
26e4768
chore(deps): pin @conduction/nextcloud-vue to 2.1.0-vue3.16 (#23)
rubenvdlinde Aug 2, 2026
862378b
feat(manifest): shared dashboards actually appear, via OpenRegister o…
Aug 2, 2026
76f4a1d
fix(manifest): the manifest was ALWAYS empty — metadata filters must …
Aug 2, 2026
29f96cf
fix(quality): my own phpcs errors and the complexity I added
Aug 2, 2026
407131b
chore(quality): make launchpad's Code Quality gate green — 5 phpmd vi…
Aug 2, 2026
826f579
fix(migration)!: launchpad could not be installed on a fresh Nextcloud
Aug 3, 2026
16e446b
fix(observability): one `extends` made EVERY launchpad route return 500
Aug 3, 2026
4a8a73b
ci(newman): install OpenRegister — the integration suite was testing …
Aug 3, 2026
77ac928
test(e2e): enable the Playwright gate, and pin the grant round-trip t…
Aug 3, 2026
c7b83d5
revert(deps): restore package-lock.json — my npm install rewrote it d…
Aug 3, 2026
055efc6
fix(provisioning): nothing ever created the launchpad register — the …
Aug 3, 2026
e99d83c
fix(register): a union type silently killed the whole Dashboard schema
Aug 3, 2026
eed40c5
fix(e2e): never default the suite to the shared :8080 dev container (…
rubenvdlinde Aug 3, 2026
5266deb
Merge pull request #24 from ConductionNL/feat/dashboard-object-grants
rubenvdlinde Aug 3, 2026
39a53de
fix(quality): drop the file-presence guards masking a missing psalm /…
Aug 3, 2026
007716b
ci(quality): fix unresolvable org reference, add concurrency and perm…
remko48 Aug 3, 2026
972f8cf
chore(security): refresh roave/security-advisories guard (2026-04-28 …
rubenvdlinde Aug 3, 2026
0156cfd
Merge pull request #27 from ConductionNL/fix/drop-presence-guards
rubenvdlinde Aug 3, 2026
e073da6
ci(quality): add explicit permission ceiling and concurrency group
remko48 Aug 3, 2026
19a0c8b
ci: regenerate docs/features.json from openspec/specs/ [skip ci]
github-actions[bot] Aug 3, 2026
cdcae3b
test(newman): fix the two stale array assertions on the dashboards lists
Aug 3, 2026
b727c86
Merge pull request #29 from ConductionNL/fix/newman-drift
rubenvdlinde Aug 3, 2026
b037bca
ci: bound every unbounded CI job with timeout-minutes (#31)
rubenvdlinde Aug 3, 2026
3b3b8f9
build: regenerate docs/features.json at commit time via committed git…
remko48 Aug 3, 2026
82cc383
Merge remote-tracking branch 'origin/feature/workflow-update' into fe…
remko48 Aug 3, 2026
bec4d32
Merge remote-tracking branch 'origin/development' into feature/workfl…
remko48 Aug 3, 2026
ab6d43d
test(newman): drop the Comments folder — the feature does not exist
Aug 3, 2026
c1e737b
Merge pull request #32 from ConductionNL/fix/newman-local
rubenvdlinde Aug 3, 2026
621d8a5
test(newman): drop the Feeds folder, and give the 403 assertion a rea…
Aug 3, 2026
458a19a
Merge pull request #34 from ConductionNL/fix/newman-feeds
rubenvdlinde Aug 3, 2026
b06410b
test(newman): make the 403 assertion report what it actually received
Aug 3, 2026
5b80643
test(newman): the 403 request runs as ADMIN — assert what is real, an…
Aug 3, 2026
170933f
Merge pull request #36 from ConductionNL/fix/newman-403-diag
rubenvdlinde Aug 3, 2026
ff88757
test(newman): make the non-admin 403 request actually non-admin
Aug 3, 2026
0ae2c9c
Merge pull request #20 from ConductionNL/feature/workflow-update
remko48 Aug 3, 2026
49ba7f4
test(newman): the translations folder was passing vacuously — make it…
rubenvdlinde Aug 3, 2026
2c18f4e
test(newman): declare regularUser/regularPassword as collection varia…
Aug 3, 2026
0381450
Merge pull request #39 from ConductionNL/fix/newman-403-real-nonadmin
rubenvdlinde Aug 3, 2026
0ed8d51
chore(deps): upgrade @conduction/nextcloud-vue to 3.0.0-vue3.4 (#40)
rubenvdlinde Aug 3, 2026
1b3a266
fix(versions): restore never restored anything — method_exists() is f…
rubenvdlinde Aug 4, 2026
fb4e675
ci: drop the OpenSpec Sync caller — it has never once produced a job …
rubenvdlinde Aug 4, 2026
b3d3838
fix(composer): make test:unit a real gate instead of a silent skip (#45)
rubenvdlinde Aug 4, 2026
627b891
chore(deps): @conduction/nextcloud-vue 3.0.0-vue3.6
Aug 4, 2026
10111ef
Merge pull request #46 from ConductionNL/chore/ncvue-vue3.6
rubenvdlinde Aug 4, 2026
66b319f
ci(quality): enable the Code Quality gates this repo was silently ski…
rubenvdlinde Aug 4, 2026
78b6999
fix(phpmd): scope the Migration exclusion to UnusedFormalParameter on…
rubenvdlinde Aug 5, 2026
d086d16
chore(phpmd): burn down MissingImport + ShortVariable; triage the 443…
rubenvdlinde Aug 5, 2026
0d33996
chore(phpmd): retire all 93 method-level complexity findings; shrink …
rubenvdlinde Aug 5, 2026
04d7ab0
chore(phpmd): adjudicate every @SuppressWarnings — 48 removed, reason…
rubenvdlinde Aug 5, 2026
9d85560
fix(license): put the SPDX identifier first in 14 @license docblocks
rubenvdlinde Aug 5, 2026
45811b0
chore(deps): repin @conduction/nextcloud-vue to 2.2.0-vue3.3 (#52)
rubenvdlinde Aug 5, 2026
8b6d270
ci(quality): move hydra-gates-ref v1.0.1 -> v1.3.0, which is what is …
rubenvdlinde Aug 5, 2026
a6aaaad
chore(license): normalise every licence declaration to EUPL-1.2 (#56)
rubenvdlinde Aug 5, 2026
a5cb800
Merge branch 'development' into chore/phpmd-complexity-burndown
rubenvdlinde Aug 5, 2026
53774f1
docs(openspec): stop six context briefs instructing a re-drift to AGP…
rubenvdlinde Aug 5, 2026
8dca467
ci(quality): give main/development push runs their own concurrency la…
rubenvdlinde Aug 6, 2026
627ff95
fix(ci): compare the coverage ratchet against the measured merge base…
rubenvdlinde Aug 6, 2026
b342683
fix(security): bump php_codesniffer to 3.13.6 for CVE-2026-67434
rubenvdlinde Aug 6, 2026
051d99b
fix(ci): remove the hydra-gates-ref pin so the gates stop expiring
rubenvdlinde Aug 6, 2026
a10f7c6
Merge pull request #63 from ConductionNL/fix/phpcs-cve-2026-67434
rubenvdlinde Aug 6, 2026
977af5d
ci: drop the stable31 leg — openregister cannot install there (#66)
rubenvdlinde Aug 7, 2026
70420eb
chore: raise the Nextcloud floor to 32 (#67)
rubenvdlinde Aug 7, 2026
c20f30e
Merge remote-tracking branch 'origin/development' into lp51-refresh
rubenvdlinde Aug 8, 2026
064945d
docs(adr): write the ADR-023 adoption record 27 @spec tags already po…
rubenvdlinde Aug 8, 2026
5aa6d9c
Merge pull request #51 from ConductionNL/chore/phpmd-complexity-burndown
rubenvdlinde Aug 8, 2026
1e606eb
Merge remote-tracking branch 'origin/development' into lp53-refresh
rubenvdlinde Aug 8, 2026
ade03d4
fix(a11y): give every column header a scope, so screen readers can as…
rubenvdlinde Aug 8, 2026
0f83688
Merge pull request #53 from ConductionNL/chore/phpmd-suppression-adju…
rubenvdlinde Aug 8, 2026
b3ed9c5
Merge pull request #68 from ConductionNL/chore/adr-023-adoption-record
rubenvdlinde Aug 8, 2026
4f8ad26
Merge pull request #69 from ConductionNL/chore/table-headers-scope
rubenvdlinde Aug 8, 2026
69e9a77
fix(phpcs): stop the SpecTagSniff instructing the pattern gate-46 rej…
rubenvdlinde Aug 8, 2026
23206f5
fix(e2e): retain-on-failure traces + a globalTimeout under the 45m CI…
rubenvdlinde Aug 8, 2026
5749883
Merge pull request #71 from ConductionNL/fix/spec-tag-sniff-canonical…
rubenvdlinde Aug 8, 2026
f4eab69
chore: gitignore .mcp.json — it carries API keys and reached 37 branc…
rubenvdlinde Aug 8, 2026
4cfe24b
fix(a11y): give five mouse-only surfaces a keyboard and a screen read…
rubenvdlinde Aug 9, 2026
1c26310
fix(manifest): register the icons the menu names, and point it at a p…
rubenvdlinde Aug 9, 2026
5274596
fix(e2e): make the seed able to fail, and stop waiting for an idle th…
rubenvdlinde Aug 9, 2026
218fe8d
fix(tiles): delete the write path under a permanently-Gone endpoint (…
rubenvdlinde Aug 9, 2026
a024f36
test(e2e): cover the anonymous public-share page (#81)
rubenvdlinde Aug 9, 2026
895bfce
chore(deps): pin @conduction/nextcloud-vue to 2.2.0-vue3.9 (#84)
rubenvdlinde Aug 10, 2026
19939f5
test(e2e): make CI run the suite it claims, and cover 20 more public-…
rubenvdlinde Aug 10, 2026
b2000b4
fix(fe): gate-13 — move eight modal components into src/modals & src/…
rubenvdlinde Aug 10, 2026
984e491
test(e2e): close gate-19 e2e-coverage findings — real tests where obs…
rubenvdlinde Aug 11, 2026
8bb1884
test: close gate-25 (15 endpoints) and gate-26 (1 page) with real tes…
rubenvdlinde Aug 11, 2026
66957c1
test(e2e): gate-19 round 2 — 176 → 151, twelve real tests each with a…
rubenvdlinde Aug 11, 2026
e24334b
test(e2e): gate-19 round 3 — 143 → 128 with 14 real tests and zero ex…
rubenvdlinde Aug 11, 2026
19e9b49
fix(gates): gate-57 1→0 (retire groupfolder storage, closes #87), gat…
rubenvdlinde Aug 11, 2026
aa1966c
test(feed): name the failure test after the status it actually exerci…
rubenvdlinde Aug 12, 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
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .coverage-baseline
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
49.47
77 changes: 33 additions & 44 deletions .forgejo/workflows/pre-merge-check-strict.yaml
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
# Pre-merge quality gate — runs composer check:strict + all 19 Hydra gates on every PR.
# Configured as a required status check in branch protection on `development`
# to keep the merge button disabled until this workflow passes.
# Pre-merge quality gate — enforced lint + phpcs + all Hydra gates on every PR.
# Required status check on protected branches.
#
# Diff-scoped per ADR-020 so legacy debt never blocks a PR — only new failures fail.
# Runner/container mirror the proven release-semrel workflow: codeberg-medium +
# official php:8.3-cli + a base-tooling step. The old code.forgejo.org/oci/ci-php:8.3
# image 404s ("manifest unknown"), which fast-failed every run at container-pull.
#
# The gate runs `composer lint` + `composer phpcs` directly: check:strict's
# psalm/phpstan/phpmd/test:all are wrapped in `|| echo skipping` so they never
# affect pass/fail (ADR-022 parks static analysis), and running them on the medium
# runner OOMs it. lint+phpcs is the identical enforced gate, fast and deterministic.

name: pre-merge-check-strict

Expand All @@ -15,67 +21,50 @@ on:

jobs:
quality-gates:
runs-on: codeberg-small
runs-on: codeberg-medium
container:
# Docker Hub php:8.3-cli (Debian, ships bash) is reliably pullable on the
# Codeberg runner; the previous code.forgejo.org/oci/ci-php:8.3 image could
# not be pulled, so this job failed at setup on every PR and never ran.
image: php:8.3-cli
timeout-minutes: 15
steps:
- name: Install toolchain (git, unzip, composer, php-ext, node, python3)
- name: Install base tooling
run: |
set -eu
apt-get update
# nodejs is required by the JS-based actions/checkout that runs next;
# php:8.3-cli ships no node, so without this the checkout step exits 127.
apt-get install -y --no-install-recommends git unzip python3 nodejs curl ca-certificates
# Precompiled PHP extensions (seconds) instead of docker-php-ext-install,
# which compiles from source (~1m) and overran the tiny runner's time limit.
# ext-xsl is required by the edgedesign/phpqa dev dependency in composer.lock.
curl -sSLf -o /usr/local/bin/install-php-extensions \
https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions
chmod +x /usr/local/bin/install-php-extensions
install-php-extensions zip mbstring xsl
apt-get install -y --no-install-recommends \
git curl ca-certificates gnupg jq unzip zip \
libzip-dev libpng-dev python3
# Node is required by actions/checkout@v4 (a JS action) which runs
# inside this php:8.3-cli container; the stock image ships no node.
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt-get install -y --no-install-recommends nodejs
docker-php-ext-install -j"$(nproc)" zip gd
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
composer --version
php -v | head -1
node --version

- name: Checkout PR
uses: https://code.forgejo.org/actions/checkout@v4
uses: https://github.com/actions/checkout@v4
with:
fetch-depth: 0

- name: Install composer deps
run: composer install --no-interaction --no-progress --prefer-dist
run: composer install --no-interaction --no-progress --prefer-dist --ignore-platform-reqs

- name: Run composer check:strict
run: composer check:strict
- name: Run lint + phpcs (the enforced gate)
run: |
composer lint
composer phpcs

- name: Clone Hydra (for gate runner)
uses: https://code.forgejo.org/actions/checkout@v4
uses: https://github.com/actions/checkout@v4
with:
repository: Conduction/hydra
ref: development
path: .hydra

- name: Run all 19 Hydra gates (diff-scoped per ADR-020)
env:
BASE_REF: ${{ github.base_ref }}
- name: Run all Hydra gates (diff-scoped per ADR-020)
run: |
git fetch origin "$BASE_REF":"$BASE_REF" || true
bash .hydra/scripts/run-hydra-gates.sh --scope-to-diff --base "origin/$BASE_REF" .
git fetch origin ${{ github.base_ref }}:${{ github.base_ref }} || true
bash .hydra/scripts/run-hydra-gates.sh --scope-to-diff --base origin/${{ github.base_ref }} .

- name: Gate-19 e2e coverage report (informational)
if: always()
run: |
python3 .hydra/scripts/lib/check_e2e_coverage.py . --mode report || true

js-lint:
runs-on: codeberg-small
container:
image: node:20-alpine
steps:
- name: Checkout PR
uses: https://code.forgejo.org/actions/checkout@v4

- name: Run initial-state JS lint guard (REQ-INIT-003)
run: node ./scripts/lint-initial-state.js
38 changes: 38 additions & 0 deletions .githooks/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/bin/sh
# Committed pre-commit hook (activated via `git config core.hooksPath .githooks`,
# which `npm install` / `composer install` set automatically — see package.json
# "prepare" and composer.json "post-install-cmd").
#
# Regenerates docs/features.json whenever staged changes touch openspec/specs/
# or the features overlay, so the commercial capability list can never go
# stale. CI (features-check / features-extract) only VERIFIES — generation
# happens here, before the commit, never in the pipeline.
#
# Best-effort by design: any failure only warns and never blocks the commit —
# the CI gate is the enforcement backstop.

if git diff --cached --name-only | grep -qE "^openspec/(specs/|features\.overlay\.json)"; then
CACHE=".git/extract-features.py"
# Fetch the canonical script (single source of truth in ConductionNL/.github);
# fall back to a previously cached copy when offline.
curl -sf --max-time 10 \
https://raw.githubusercontent.com/ConductionNL/.github/main/scripts/extract-features.py \
-o "$CACHE" 2>/dev/null || true

if [ -f "$CACHE" ]; then
if command -v python3 >/dev/null 2>&1; then PY="python3";
elif command -v py >/dev/null 2>&1; then PY="py -3";
else PY="python"; fi

if $PY "$CACHE" --app-root . >/dev/null 2>&1; then
git add docs/features.json
echo "pre-commit: docs/features.json regenerated from openspec/specs/."
else
echo "pre-commit: WARNING — could not regenerate docs/features.json (python or pyyaml missing?). CI features-check will verify." >&2
fi
else
echo "pre-commit: WARNING — could not fetch extract-features.py (offline?). CI features-check will verify." >&2
fi
fi

exit 0
2 changes: 2 additions & 0 deletions .github/workflows/branch-policy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ jobs:
check-source-branch:
name: Branch Policy Check
runs-on: ubuntu-latest
# Observed over 31 runs: max 0.1 min.
timeout-minutes: 10
steps:
- name: Verify source branch
run: |
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/branch-protection.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ name: Branch Protection

on:
pull_request:
branches:
- main
- beta
branches: [main, beta]

permissions: {}

jobs:
check:
uses: Conduction/.github/.github/workflows/branch-protection.yml@main
branch-protection:
uses: ConductionNL/.github/.github/workflows/branch-protection.yml@main
Loading
Loading