Skip to content

Release: merge development into beta - #772

Open
github-actions[bot] wants to merge 315 commits into
betafrom
development
Open

github-actions[bot] wants to merge 315 commits into
betafrom
development

Conversation

@github-actions

@github-actions github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

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

Merging this PR will trigger the beta release workflow.

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

rubenvdlinde and others added 23 commits October 13, 2026 19:11
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
)

The two backend rows carried a Dutch line the coverage matrix does not read
as a no-screen reason. They now use the '- No screen:' form.

Assisted-by: ClaudeCode:claude-opus-5-5
rubenvdlinde and others added 30 commits November 3, 2026 21:43
# 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
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: 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant