Repository navigation
Release: merge development into beta - #772
Open
github-actions[bot] wants to merge 315 commits into
Open
github-actions[bot] wants to merge 315 commits into
github-actions[bot] wants to merge 315 commits into
Conversation
rubenvdlinde
requested review from
Rem-Dam,
SudoThijn,
WilcoLouwerse,
bbrands02,
remko48,
rjzondervan and
rubenvdlinde
as code owners
October 5, 2026 16:36
nl.json carried Flows, Reports and Store twice, nl.js fifteen keys. In nl.js the last copy won, so Set as default read "Instellen als standaard" and View mode "Weergave" while nl.json says "Als standaard instellen" and "Weergavemodus". The nl.json values stay.
Details, Talen and Delen with a share count, as board LpDashboardInstellingen draws them. The default switch and the detail fields move under Details; nothing is removed. A caller that still asks for the old default tab lands on Details.
main.js, public.js and admin.js never imported @conduction/nextcloud-vue/css/index.css. The board look, widget and dialog styles only arrived when another app's bundle on the page carried them, which is why the Flows toolbar centred its buttons. pipelinq, dossiq and shillinq import it the same way.
The library stylesheet check holds on the new dist: cn-store-page is in the CSS and library-style.js stamps data-cn-library. No app workaround needed removing; the app already imports the library stylesheet (#861).
…ok, opening on Algemeen (#862) * fix(admin): the admin page opens on Algemeen, in the board's cards and tabs The setup banner, the defaults, group-shared dashboards and the default-app note sat above the tab strip on every tab. They now form the first tab, Algemeen, as cards in two columns (board LpBeheerAlgemeen), and the page opens there. The tab strip takes the board's 44px tabs with a 3px underline, and four tab names follow the board: Bediening, Versies en analyse, Organisatiemenu, Demogegevens. * fix(admin): the admin page uses the full width, as the board * Revert "fix(admin): the admin page uses the full width, as the board" This reverts commit c0829bf. * chore(deps): launchpad builds on nextcloud-vue 2.82.0 The library stylesheet check holds on the new dist: cn-store-page is in the CSS and library-style.js stamps data-cn-library. No app workaround needed removing; the app already imports the library stylesheet (#861). * fix(admin): the admin page draws in the library admin shell, board look CnAdminSettingsShell with look="board" draws the h1 that names the open tab, the path line (Beheerinstellingen / Launchpad / <tab>, with "geldt voor de hele organisatie" on Algemeen) and the Documentatie button. No version card: the board has none. The tab strip is a plain child of the shell, so it spans the grid without a card or heading. On Algemeen the defaults, group-shared dashboards and the default-app note are CnSettingsSection cards in the shell's two columns. The app's own card and grid CSS goes: the library draws both. l10n: two strings. nl carries the board's Dutch; the other required locales carry the English text. * fix(admin): switches as the board draws them, no strip under the banner The three on/off defaults are switches. The tab panel takes its tab's height and draws no white surface below the setup banner. The spec keeps the router's other exports and lint is clean.
#870) * chore(deps): bump @conduction/nextcloud-vue to ^2.85.0 Assisted-by: ClaudeCode:claude-opus-5-5 * fix(admin): register the library catalogue on the admin page The admin page is its own webpack entry and never registered the nextcloud-vue catalogue, so library text on the admin shell fell back to English. Assisted-by: ClaudeCode:claude-opus-5-5
…trip (#872) The admin page drew its own tab strip (BeheerTabs). It now hands its twelve tabs to CnAdminSettingsShell (`tabs`, `tabsVariant: "underline"`), as board LpBeheerAlgemeen draws them. The shell opens the tab named by `?tab=`, else the one remembered under `launchpad.admin.activeTab` (the key BeheerTabs used, so a stored tab carries over), else General, and reports it with `tab-change`, which drives the title, the path line and the General-only cards. A tab's content still mounts only while it is open. BeheerTabs and its tests are retired; the e2e specs find a tab by its id through a small helper. Bumps @conduction/nextcloud-vue to ^2.89.0 (tabStorageKey and the mount-time tab-change, #1673). Assisted-by: ClaudeCode:claude-opus-5-5
Patch line on top of 2.89.0: dashboard form submitLabel reads the app's translation (#1677), filtered menu counts follow changed objects (#1674), a size-to-content dashboard cell that grows after load no longer recurses into a stack overflow (#1680).
The DashboardsReport stat tiles and the recent list's view-all link resolved the route names "dashboards" and "admin-templates", which no page registers, so vue-router threw MATCHER_NOT_FOUND on every render. They now use Workspace and admin-templates-index, the names the menu already uses. A spec checks every named route in the manifest against the routes routesFromManifest builds. Assisted-by: ClaudeCode:claude-opus-5-5
…en tab (#878) Bump @conduction/nextcloud-vue to ^2.90.0 and adopt CnAdminSettingsShell's lazyTabs on the admin page, replacing the per-panel v-if on activeTab. Deep links (?tab=<id>), the remembered tab, the tab-change breadcrumb and the sharing tab behave as before. Assisted-by: ClaudeCode:claude-opus-5-5
The demo instance had no group dashboard but the default one, so the LpIntranet board was measured against a dashboard that is not its own and LpManagement had nothing to open. Two organisation showcases ship them: "Intranet Zuiddrecht" (announcement, a word from the town clerk, quick links, meeting calendar, colleagues), which colleagues may add widgets to as the board says, and "Managementinformatie" (counts of cases, customer contacts, decisions and meetings), view only. REQ-DEMO-001 now lets a shared-intranet showcase be add_only; every other showcase stays view_only. Assisted-by: ClaudeCode:claude-opus-5-5
…tranet-and-management feat(showcases): the Zuiddrecht intranet and management dashboards
…places a tile GET /api/tiles/discover answers the caller's own Nextcloud app menu, minus LaunchPad, behind the new tile.discover action. The widget picker gets a Discovered on this server section, searchable, marking the apps already on the dashboard; a click places a tile through the normal tile path. First section of board LpTegelToevoegen. Assisted-by: ClaudeCode:claude-opus-5-5
feat(tiles): discover the apps this server runs and place one as a tile (LpTegelToevoegen, part 1)
…akes from Nextcloud (#887) Adds change platform-baseline (REQ-PLB-001 to 007) for p-sso, p-own-servers, p-theme, p-languages, d-idp-groups, d-pwa and d-dark-mode, with screens.md, and cites each requirement on its row in openspec/parity/capabilities.json.
…cs (#888) - widgets: scenario that chart, stat and table pass through to nextcloud-vue (w-charts) - conditional-visibility: REQ-VIS-012, synced from the archived IA change (t-overview) - iframe-embed-widget: Power BI scenario (w-bi-embed) and a real Purpose - admin-settings: drop the duplicate REQ-ASET-012..014 block - capabilities.json: built.spec and built.requirement on the 10 hand-read rows and w-charts
…nce (#889) d-notes is nextcloud-vue's CnNotepadWidget (notepad type, in the pinned @conduction/nextcloud-vue 2.90.0); d-work-queue is dossiq's MyOpenWorkWidget placed as an nc-widget. Both cite their provider requirement.
…n LpVandaag (#890) Regenerates screens.md for 131 change and spec dirs from the coverage matrix, capabilities.json and the design-system boards, replacing #834. Decision 264: w-calendar, int-tasks, d-work-queue and w-attention and the start-page spec links move from werkplek/LpStart to launchpad/LpVandaag.
…d spend-analytics change (#891) zuiddrecht-showcases (4 of 4 tasks ticked) merges into demo-data-showcases; its MODIFIED block now carries the scenarios the main spec still has, so the archive keeps them. add-launchpad-discovered-and-spend-analytics was archived on 2026-06-14 and came back as a copy in the mydash rename; the copy goes and the archived change gets its screens.md.
…ther provider row (#897) The row cited dossiq/changes/archive/2026-10-10-..., a path form no other provider citation uses, so the coverage measure read it as a missing change. dossiq/widgets-my-open-cases-on-the-start-page resolves to the same archived change. Assisted-by: ClaudeCode:claude-opus-5-5
Merges the delta spec into openspec/specs with openspec archive and moves the change to changes/archive. platform-baseline is a new capability and keeps the Purpose its delta wrote. Assisted-by: ClaudeCode:claude-opus-5-5
# Conflicts: # lib/Service/DashboardShareService.php
…tention endpoints, recorded on development Assisted-by: ClaudeCode:claude-opus-5-5
… the session through RequestGuard RequestGuard::sessionUser() answers the signed-in user or the 401. The settings endpoints keep their 403 Access denied and the cleanup endpoints keep answering 403 to anonymous callers, as before. Assisted-by: ClaudeCode:claude-opus-5-5
…uctor into RequestGuard The seed coverage test checks both directions over requireAction() and RequestGuard::actionRefusal(), so a key passed through the guard is still held against actions.seed.json. Assisted-by: ClaudeCode:claude-opus-5-5
Assisted-by: ClaudeCode:claude-opus-5-5
Assisted-by: ClaudeCode:claude-opus-5-5
RespondsWithErrors replaces ResponseHelper::failure, errorCode and badRequest at the 110 call sites in 26 controllers, so they carry no static access and no constructor parameter. The 12 class-level PHPMD.StaticAccess suppressions are gone, and ResponseHelper is back to its development shape. Assisted-by: ClaudeCode:claude-opus-5-5
…nswered The share is already written and a retry sends nothing, so add and replace now answer their success, log the failure and carry on to the other recipients. That also covers the notification layer's InvalidArgumentException subclasses, which answered 400 with raw text. ShareNotifier takes the announcing out of DashboardShareService (constructor 6 -> 4). revokeForRecipient answers a neutral 500 on an unexpected failure. Assisted-by: ClaudeCode:claude-opus-5-5
…on endpoints The services are asserted to run for the session user with a forged request, and an anonymous caller with an invalid language is refused first. getOrgNavigation reads its user through sessionUser(), and AttentionController loses an unused import. Assisted-by: ClaudeCode:claude-opus-5-5
create, index and destroy returned the raw exception message on an unexpected failure, which can carry database text. They now log the exception and answer `Internal error`, as the share API does. Assisted-by: ClaudeCode:claude-opus-5-5
development now meets: php unit_interfacing >4.
… refactor/admin-guard
Assisted-by: ClaudeCode:claude-opus-5-5
… fix/share-write-errors
chore(sig): raise the SIG score floor
refactor: remove PHP duplication through shared response, query and reader helpers
Assisted-by: ClaudeCode:claude-opus-5-5
Assisted-by: ClaudeCode:claude-opus-5-5
Assisted-by: ClaudeCode:claude-opus-5-5
Assisted-by: ClaudeCode:claude-opus-5-5
Assisted-by: ClaudeCode:claude-opus-5-5
chore(quality): take the canonical coverage-guard
refactor(guards): check administrators and granted actions through one RequestGuard
fix(sharing): a failed share write answers a neutral 500, a non-string share field a 400
refactor(widgets): check iframe and live tile URLs through one shared helper
fix(sharing): the public share owner endpoints answer a neutral 500
Flows is an index over the flows source without a rowRoute, so a row click opened nothing. It now names FlowDetail. Assisted-by: ClaudeCode:claude-opus-5-5
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Automated PR to sync development changes to beta for beta release.
Merging this PR will trigger the beta release workflow.