Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
dae7ade
feat(people): custom profile fields, expertise tags and a directory-w…
rubenvdlinde Sep 30, 2026
96ff176
feat(people): search the whole directory from the people widget, show…
rubenvdlinde Sep 30, 2026
bb8e04e
docs(openspec): archive widgets-people-expertise-and-fields, d-find-e…
rubenvdlinde Sep 30, 2026
a6548d8
fix(people): name each profile field action where it is checked, so t…
rubenvdlinde Sep 30, 2026
400d732
fix(people): clear the strict gate findings of the profile fields build
rubenvdlinde Sep 30, 2026
1f4584d
Merge branch 'feat/engagement-dashboard-reactions-bar' into feat/widg…
rubenvdlinde Sep 30, 2026
c439e09
chore(people): start the demo seeding comment with a capital, as phpc…
rubenvdlinde Sep 30, 2026
51e8a48
chore(sync): carry beta back into development
github-actions[bot] Oct 2, 2026
3e855a0
Merge pull request #771 from ConductionNL/sync/beta-to-development-20…
rubenvdlinde Oct 2, 2026
3836e6a
chore(sync): carry beta back into development
github-actions[bot] Oct 3, 2026
da72451
Merge pull request #774 from ConductionNL/sync/beta-to-development-20…
rubenvdlinde Oct 3, 2026
26a8b47
feat(templates): ship the Mijn werkdag start page as a template you c…
rubenvdlinde Oct 5, 2026
5288399
feat(attention): First today, one ranked list of what your apps say n…
rubenvdlinde Oct 5, 2026
bada6d6
Merge remote-tracking branch 'origin/development' into feat/widgets-p…
rubenvdlinde Oct 5, 2026
f7a7c86
test(people): cover the sync job, the listener, the personal section …
rubenvdlinde Oct 5, 2026
a65bde0
Merge pull request #743 from ConductionNL/feat/widgets-people-experti…
rubenvdlinde Oct 5, 2026
ceefed5
chore(nc35): declare Nextcloud 35 support
claude Oct 6, 2026
e95739d
docs(nc35): type migration table params as ITable|Table
claude Oct 6, 2026
314943e
fix(nc35): type migration table params as ITable only
claude Oct 6, 2026
4df126b
Merge pull request #793 from ConductionNL/chore/nc35-support
rubenvdlinde Oct 6, 2026
d1fa1b3
feat(templates): update an installed ready-made template in place, an…
rubenvdlinde Oct 6, 2026
d1540d1
feat(templates): Mijn werkdag version 3 with tickets and decisions wa…
rubenvdlinde Oct 6, 2026
3c86658
fix(workspace): a refused delete of a compulsory widget says why, and…
rubenvdlinde Oct 6, 2026
f47ed82
feat(shell): an admin option for a start page without the navigation …
rubenvdlinde Oct 6, 2026
ae28560
feat(setup): each example data card loads itself (#800)
rubenvdlinde Oct 7, 2026
205bd5e
feat(nav): Reports moves under Advanced in the navigation (#802)
rubenvdlinde Oct 7, 2026
f824400
feat(start): Mijn werkdag version 4 and the start page as LpStart dra…
rubenvdlinde Oct 7, 2026
d443633
docs(parity): link the five unbuilt capability rows to the changes th…
rubenvdlinde Oct 7, 2026
79bc298
docs(parity): link every built capability row to the spec or change t…
rubenvdlinde Oct 7, 2026
371eb26
docs(parity): add rows for four built capabilities that had a spec bu…
rubenvdlinde Oct 7, 2026
b36b3f3
Merge pull request #806 from ConductionNL/spec/capability-specs-and-l…
rubenvdlinde Oct 7, 2026
7317bb2
docs(openspec): competitor cells on spec-round rows read unknown, not…
rubenvdlinde Oct 7, 2026
b3d2835
Merge pull request #808 from ConductionNL/spec/unknown-not-unchecked
rubenvdlinde Oct 7, 2026
b5c34f9
docs(parity): re-rate build-keyboard from code, the move panel change…
rubenvdlinde Oct 7, 2026
6e62eed
docs(openspec): specs for the action matrix and the first-visit tour,…
rubenvdlinde Oct 7, 2026
dc43779
Merge pull request #810 from ConductionNL/spec/rerate-and-own-specs
rubenvdlinde Oct 7, 2026
208bd9c
docs(openspec): archive pass, changes the code has delivered
rubenvdlinde Oct 7, 2026
13ca7e9
Merge pull request #812 from ConductionNL/spec/archive-pass
rubenvdlinde Oct 7, 2026
97f56ea
chore(parity): one feature list, every capability under one feature
rubenvdlinde Oct 8, 2026
dbe21bf
Merge pull request #820 from ConductionNL/spec/feature-normalisation
rubenvdlinde Oct 8, 2026
4e74744
chore(parity): every spec under a feature, every capability on a screen
rubenvdlinde Oct 8, 2026
d6e6322
chore(parity): place dashboard-icons on its screens
rubenvdlinde Oct 8, 2026
27a0a2e
Merge pull request #822 from ConductionNL/spec/specs-and-screens
rubenvdlinde Oct 8, 2026
d493d7e
docs(grid-layout): new widgets append below the layout, the spec now …
rubenvdlinde Oct 9, 2026
024d622
docs(openspec): archive retire-groupfolder-storage-backend, the wizar…
rubenvdlinde Oct 9, 2026
f7b9192
test(e2e): read the dashboard from its singular route and the items e…
rubenvdlinde Oct 9, 2026
daa7a92
wip: saved by the coordinator after the 9 Oct afternoon session stop …
rubenvdlinde Oct 9, 2026
d640953
Merge remote-tracking branch 'origin/development' into build/openspecs-1
rubenvdlinde Oct 9, 2026
e9c6b01
feat(setup-wizard): the wizard has six steps, the storage step and it…
rubenvdlinde Oct 9, 2026
18b3b9b
feat(activity): LaunchPad events can reach the activity email digest,…
rubenvdlinde Oct 9, 2026
fd77a88
docs(openspec): archive fix-people-widget-unbounded-user-scan, alread…
rubenvdlinde Oct 9, 2026
7f5c681
docs(openspec): tick verified tasks of launchpad-manifest-tier-3 and …
rubenvdlinde Oct 9, 2026
5aa410c
test(activity): read info.xml as a string so the check also runs unde…
rubenvdlinde Oct 10, 2026
49b24d8
Merge pull request #826 from ConductionNL/build/openspecs-1
rubenvdlinde Oct 10, 2026
a9677d5
fix(start): no emoji row, no inner header scrollbar, page scrollbar a…
rubenvdlinde Oct 11, 2026
88f9704
fix(settings): personal settings move into the user settings dialog (…
rubenvdlinde Oct 11, 2026
b62a6a8
fix(workspace): dock the start page controls in the greeting row (#840)
rubenvdlinde Oct 12, 2026
f6d59ab
chore(gates): procedure-code baseline for gate 119 (decision 188) (#835)
rubenvdlinde Oct 12, 2026
e4b5ffb
chore(deps): bump @conduction/nextcloud-vue to ^2.81.0 (#843)
rubenvdlinde Oct 12, 2026
3139a0e
fix(settings): user settings dialog follows board LpPersoonlijk (#845)
rubenvdlinde Oct 12, 2026
d477945
fix(modals): a modal shows its title once (#847)
rubenvdlinde Oct 12, 2026
32c6435
fix(i18n): the manifest's strings are translated (#849)
rubenvdlinde Oct 13, 2026
32d1f84
feat(look): launchpad draws in the board look (#851)
rubenvdlinde Oct 13, 2026
4711136
fix(l10n): Dutch for the 253 strings that had none (#853)
rubenvdlinde Oct 13, 2026
b08bc5c
fix(dialogs): dashboard settings and versions open in the board dialo…
rubenvdlinde Oct 13, 2026
dcdafcb
fix(l10n): every Dutch key once, and a spec that keeps it so (#857)
rubenvdlinde Oct 13, 2026
469944c
fix(dialogs): dashboard settings in the board's three tabs (#859)
rubenvdlinde Oct 13, 2026
aba6820
fix(styles): launchpad loads the library stylesheet itself (#861)
rubenvdlinde Oct 13, 2026
e726f83
chore(deps): launchpad builds on nextcloud-vue 2.82.0 (#864)
rubenvdlinde Oct 13, 2026
6c3915d
fix(admin): the admin page draws in the library admin shell, board lo…
rubenvdlinde Oct 14, 2026
7b121a7
fix(deps): symfony/yaml 6.4.48 for CVE-2026-109413 (lock only) (#868)
rubenvdlinde Oct 15, 2026
b235cbd
chore(deps): nextcloud-vue 2.85.0, library catalogue on the admin pag…
rubenvdlinde Oct 16, 2026
c524188
feat(admin): the admin tabs are the library admin shell's underline s…
rubenvdlinde Oct 16, 2026
277c8ea
chore(deps): nextcloud-vue 2.89.2 (#874)
rubenvdlinde Oct 16, 2026
43eab8b
fix(reports): dashboard report tiles link to registered routes (#876)
rubenvdlinde Oct 16, 2026
c5a4490
feat(admin): nextcloud-vue 2.90.0, the admin shell mounts only the op…
rubenvdlinde Oct 16, 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
  •  
  •  
  •  
26 changes: 3 additions & 23 deletions .github/workflows/code-quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -154,29 +154,9 @@ jobs:
with:
app-name: launchpad
php-version: "8.3"
# Pinned, because the shared workflow's DEFAULT is '["stable31", "stable32"]'
# and stable31 CANNOT WORK here. `additional-apps` below installs
# openregister, which declares min-version="32" (its
# lib/ContextChat/ContentProvider.php implements
# OCP\ContextChat\IContentProvider, absent from core before NC32). On NC31
# `occ app:enable openregister` fails with
# App "Open Register" cannot be installed because it is not compatible
# with this version of the server.
# and the run continues anyway, because that failure is only a ::warning::.
# Every /apps/openregister/... call then returns Nextcloud's HTML 404 page.
#
# Order matters as much as membership: newman, playwright and
# journeydoc-capture all check out `fromJSON(nextcloud-test-refs)[0]` as
# their single server, so with the inherited default those three jobs ran
# entirely on the version openregister cannot load.
#
# THE LIST IS THE WHOLE DECLARED RANGE. This comment previously said
# "launchpad's own appinfo/info.xml floor stays at 29 … the NC32 constraint
# here is a property of the CI fixture, not of launchpad's code" — that is
# no longer true of the file it describes. info.xml on this branch declares
# <nextcloud min-version="32" max-version="34"/>, so 32 is the app's own
# floor, not a fixture artefact, and 32, 33 and 34 each get a leg.
nextcloud-test-refs: '["stable34", "stable32", "stable33"]'
# nextcloud-test-refs is deliberately not set: the shared quality.yml
# derives the Nextcloud matrix from appinfo/info.xml (min-version 32 to
# max-version 35), so the tested range follows the declared range.
enable-psalm: true
enable-phpstan: true
enable-phpmetrics: true
Expand Down
1 change: 1 addition & 0 deletions .procedure-code-baseline.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"count": 0}
16 changes: 14 additions & 2 deletions appinfo/info.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ Ideaal voor organisaties die consistente, samengestelde dashboards willen voor h

Vrij en open source onder de EUPL-1.2-licentie.
]]></description>
<version>1.1.6-beta.20261002211709</version>
<version>1.1.7-unstable.20261005190000</version>
<licence>EUPL-1.2</licence>
<author mail="info@conduction.nl" homepage="https://www.conduction.nl/">Conduction</author>
<namespace>LaunchPad</namespace>
Expand Down Expand Up @@ -80,7 +80,7 @@ Vrij en open source onder de EUPL-1.2-licentie.
dependency here. -->
<dependencies>
<php min-version="8.3"/>
<nextcloud min-version="32" max-version="34"/>
<nextcloud min-version="32" max-version="35"/>
</dependencies>

<!-- Surface dashboards, widget content, and metadata in NC unified search
Expand All @@ -95,6 +95,8 @@ Vrij en open source onder de EUPL-1.2-licentie.
<job>OCA\LaunchPad\BackgroundJob\OrphanedDataCleanupJob</job>
<!-- service-health-ping REQ-HPING-003: refresh due ping-enabled tiles. -->
<job>OCA\LaunchPad\BackgroundJob\HealthPingRefreshJob</job>
<!-- widgets-people-expertise-and-fields REQ-PEX-001/004: daily LDAP and profile mirror sync. -->
<job>OCA\LaunchPad\BackgroundJob\ProfileFieldsSyncJob</job>
</background-jobs>

<repair-steps>
Expand Down Expand Up @@ -162,6 +164,7 @@ Vrij en open source onder de EUPL-1.2-licentie.
<!-- REQ-DEMO-009: bundled demo showcase install / list. -->
<command>OCA\LaunchPad\Command\DemoShowcasesInstallCommand</command>
<command>OCA\LaunchPad\Command\DemoShowcasesListCommand</command>
<command>OCA\LaunchPad\Command\TemplateInstallCommand</command>
<!-- REQ-WIZ-010: setup wizard via `php occ launchpad:setup`. -->
<command>OCA\LaunchPad\Command\SetupCommand</command>
</commands>
Expand All @@ -172,6 +175,15 @@ Vrij en open source onder de EUPL-1.2-licentie.
</settings>

<activity>
<!-- REQ-DIGE-001: one setting per digest-worthy event, in the
"LaunchPad" group. Without a setting the activity app never
queues a LaunchPad event for the email digest. -->
<settings>
<setting>OCA\LaunchPad\Activity\Settings\DashboardSharedSetting</setting>
<setting>OCA\LaunchPad\Activity\Settings\DashboardPublishedSetting</setting>
<setting>OCA\LaunchPad\Activity\Settings\DashboardUpdatedSetting</setting>
<setting>OCA\LaunchPad\Activity\Settings\DashboardAcknowledgedSetting</setting>
</settings>
<!-- REQ-ACT-001: register the LaunchPad Activity provider that
surfaces the 13-event catalogue defined in
OCA\LaunchPad\Activity\Extension. The <provider> entry must be
Expand Down
23 changes: 22 additions & 1 deletion appinfo/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -402,6 +402,17 @@
['name' => 'template#gallery', 'url' => '/api/templates/gallery', 'verb' => 'GET'],

// Admin endpoints
// Templates LaunchPad ships with (REQ-TMPL-018). Registered BEFORE
// the `/api/admin/templates/{id}` wildcard routes so the literal
// `shipped` segment wins.
['name' => 'adminShippedTemplate#index', 'url' => '/api/admin/templates/shipped', 'verb' => 'GET'],
['name' => 'adminShippedTemplate#install',
'url' => '/api/admin/templates/shipped/{id}/install', 'verb' => 'POST',
'requirements' => ['id' => '[a-z0-9\\-]+']],
// Update an installed shipped template in place (REQ-TMPL-020).
['name' => 'adminShippedTemplate#update',
'url' => '/api/admin/templates/shipped/{id}/update', 'verb' => 'POST',
'requirements' => ['id' => '[a-z0-9\\-]+']],
['name' => 'admin#listTemplates', 'url' => '/api/admin/templates', 'verb' => 'GET'],
['name' => 'admin#createTemplate', 'url' => '/api/admin/templates', 'verb' => 'POST'],
// Preview-image upload — REQ-TMPL-017. Registered BEFORE the
Expand Down Expand Up @@ -455,14 +466,20 @@
// returns `{users, total, hasMore}` with offset-based pagination.
['name' => 'peopleWidget#getUsers', 'url' => '/api/people', 'verb' => 'GET'],

// Custom profile fields (REQ-PEX-001, REQ-PEX-002): own values for
// every signed-in person, definitions for administrators.
['name' => 'profileFields#getOwn', 'url' => '/api/profile-fields/me', 'verb' => 'GET'],
['name' => 'profileFields#saveOwn', 'url' => '/api/profile-fields/me', 'verb' => 'PUT'],
['name' => 'profileFields#getDefinitions', 'url' => '/api/profile-fields/definitions', 'verb' => 'GET'],
['name' => 'profileFields#saveDefinitions', 'url' => '/api/profile-fields/definitions', 'verb' => 'PUT'],

// Setup wizard endpoints (REQ-WIZ-008, REQ-WIZ-009, REQ-WIZ-003).
// Admin-only via runtime `IGroupManager::isAdmin` check inside the
// controller. The state endpoint also drives the "Run setup wizard"
// banner gate on the admin page; the storage endpoint persists the
// Step 2 choice immediately on `Next`.
['name' => 'admin#getWizardState', 'url' => '/api/admin/setup-wizard/state', 'verb' => 'GET'],
['name' => 'admin#completeWizard', 'url' => '/api/admin/setup-wizard/complete', 'verb' => 'POST'],
['name' => 'admin#setWizardStorage', 'url' => '/api/admin/setup-wizard/storage', 'verb' => 'POST'],

// Confluence HTML export importer (REQ-CFLI-001..012). Admin-only
// via runtime `IGroupManager::isAdmin` check inside the
Expand Down Expand Up @@ -580,6 +597,10 @@
'url' => '/api/admin/demo-showcases/{id}', 'verb' => 'DELETE',
'requirements' => ['id' => '[a-z0-9\-]+']],

// Attention feed: what the user's apps declare as needing attention
// (REQ-ATT-002). Declarations only; the widget runs the counts.
['name' => 'attention#sources', 'url' => '/api/attention/sources', 'verb' => 'GET'],

// Weather widget — cached reading for one placement (REQ-WEATHER-001).
// View-time ACL guarded in the controller; never returns the provider
// API key or raw provider URL.
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"conduction/hydra-gates": "^1.10.0",
"cyclonedx/cyclonedx-php-composer": "^6.2",
"edgedesign/phpqa": "^1.27",
"nextcloud/ocp": "^34.0",
"nextcloud/ocp": "^35.0",
"phpcsstandards/phpcsextra": "^1.4",
"phpmd/phpmd": "^2.15",
"phpmetrics/phpmetrics": "^2.8",
Expand Down
Loading
Loading