Skip to content

chore(release): promote development to beta (round 12 board look, batch 8) - #1772

Merged
rubenvdlinde merged 53 commits into
betafrom
development
Oct 17, 2026
Merged

rubenvdlinde merged 53 commits into
betafrom
development

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

Promotes batch 8 (#1771: l10n merge driver, ordered list field, checklist-run widget with record modes and photo rule, one-section settings dialog, header pill resolve, matrix cell records, organisations entity source; schema 2.122.0) plus #1756, #1761 and #1765 merged since 2.97.0. The merge tree equals development's tree.

🤖 Generated with Claude Code

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
…and-heatmap

# Conflicts:
#	src/schemas/app-manifest-v2.schema.json
#	tests/schemas/app-manifest-v2.schema.hashes.json
#	tests/schemas/app-manifest-v2.schema.spec.js
CnChartWidget draws chartKind "bar-list" (label, track at its share of
barMax or the largest value, value, drilldown rows, footnote) and
"matrix" (a series per row, tinted cells, text cells through colorMap,
highlight outlines the record's cell), without ApexCharts. valueFormat
gains "number" with suffix; endpointSource gains rowsPath. In the board
look dashboard card heads draw no divider. Boards DqDashboard,
DqTermijnen, DqDoorlooptijd, DqProcesanalyse, DqHandhaving.

Assisted-by: ClaudeCode:claude-opus-5-5
Assisted-by: ClaudeCode:claude-opus-5-5
…and-heatmap

# Conflicts:
#	src/schemas/app-manifest-v2.schema.json
#	tests/schemas/app-manifest-v2.schema.hashes.json
#	tests/schemas/app-manifest-v2.schema.spec.js
Assisted-by: ClaudeCode:claude-opus-5-5
cellSource lists records that each hold one cell from a register (filter
tokens resolved, e.g. @object.matrixVersion) and lays them out by
rowField / columnField with valueField as the cell, with labels, order and
valueLabels. highlight matches the cell keys. Generic for any app that
keeps a matrix as data; board DqHandhaving.

Assisted-by: ClaudeCode:claude-opus-5-5
…nifest config

An organisation is not a register/schema object, so CnIndexPage and
CnDetailPage could not load one. `entitySource: "organisations"` now lists
the viewer's organisations on an index page, and the same name on a detail
page reads one organisation (GET /api/organisations/{uuid}) as the page's
record, so header, pills, widgets and @objectid / @object.* tokens work as
on an object page. Access stays OpenRegister's.

Assisted-by: ClaudeCode:claude-opus-5-5
…ema 2.123.0)

typePill / statusPill take resolve: { register, schema, labelField? }. The
pill's field value is looked up as a record of that schema with the
reference-label resolver the index tables use, and its label replaces the
id ("Woo-verzoek", not the case type uuid) and keys colorMap. The raw value
shows while the lookup runs and when it finds nothing.

Assisted-by: ClaudeCode:claude-opus-5-5
…ource

Assisted-by: ClaudeCode:claude-opus-5-5
…4.0)

With cellsPath, cellSource reads ONE record (filter, else fallbackFilter),
takes its cells array, narrows it by cellFilter (tokens allowed) and orders
the axes from rowOrderPath / columnOrderPath on that record. The
one-record-per-cell mode stays. Schema 2.124.0 types cellSource.

Assisted-by: ClaudeCode:claude-opus-5-5
…ions-entity-source

# Conflicts:
#	docs/components/_generated/CnFlowsPage.md
#	docs/components/_generated/CnIndexPage.md
#	docs/components/_generated/CnTasksWidget.md
#	docs/components/_generated/CnWidgetGrid.md
#	docs/components/_generated/reliance.json
#	docs/components/cn-index-page.md
#	src/schemas/app-manifest-v2.schema.json
#	tests/schemas/app-manifest-v2.schema.hashes.json
#	tests/schemas/app-manifest-v2.schema.spec.js
CnOrderedListField draws rows in order with move up, move down and remove
buttons, announces every change, and adds rows from a search-as-you-type
picker; the app supplies the choices and gets update:modelValue (board
DqPersoonlijkeInstellingen, "Zaaktypen in mijn menu").

Assisted-by: ClaudeCode:claude-opus-5-5
Assisted-by: ClaudeCode:claude-opus-5-5
…tion, and heading icons

Under the board look the user settings navigation can list Nextcloud's own
personal settings first, as links (userSettingsNextcloudLinks), then one
entry named after the app holding its sections, and a section's #icon also
stands before its heading (board DqPersoonlijkeInstellingen).

Assisted-by: ClaudeCode:claude-opus-5-5
Assisted-by: ClaudeCode:claude-opus-5-5
New `checklist-run` widget (CnChecklistRunWidget): questions listed from a
register with a token-resolved filter, shown pageSize at a time as
fieldsets with radio choices (yes_no, yes_no_na, choice) or a text field,
a note and photos. Answers are saved one record per question through the
object API under the reader's rights, or through an app saveAction;
photos go up through the answer object's own file upload. Focus and a
live region follow each page. Board DqInspectie; usable in device-frames.

Assisted-by: ClaudeCode:claude-opus-5-5
…ist-field

# Conflicts:
#	l10n/en.json
#	l10n/nl.json
questionsPath (with itemsKey groups, both sorted by orderField) reads the
questions off the open record; answersPath writes the changed answers of a
page into an array on it, keyed by answerKey, with one update through the
object API. typeMap and choiceValues map an app's type and value names
onto the kinds (yes_no, yes_no_na, choice, number, photo, text). Photos go
to the record's own files and their references into the answer. The
separate-schema mode stays.

Assisted-by: ClaudeCode:claude-opus-5-5
… by filter

fields.photoRequired with photoRequiredValues maps a question's rule onto
never / always / { whenAnswer }; such questions get their own photo
control and Next holds the page until the photo is attached. On a page
without a bound record, record: { register, schema, filter, sort } picks
the first matching record under the reader's rights, with emptyText when
nothing matches. Stacked on #1764.

Assisted-by: ClaudeCode:claude-opus-5-5
Under the board look the user settings dialog shows only the section of the
current navigation entry (board DqPersoonlijkeInstellingen); the others stay
mounted but hidden, so what was typed survives a switch, and switching moves
focus to the shown section's heading.

Assisted-by: ClaudeCode:claude-opus-5-5
rubenvdlinde and others added 22 commits October 17, 2026 12:33
…ist-field

# Conflicts:
#	l10n/en.json
#	l10n/nl.json
…ll-resolve

# Conflicts:
#	docs/components/_generated/CnDetailPage.md
#	docs/components/_generated/reliance.json
#	src/schemas/app-manifest-v2.schema.json
#	tests/schemas/app-manifest-v2.schema.hashes.json
#	tests/schemas/app-manifest-v2.schema.spec.js
…summaries (#1762)

* feat(roadmap): board.noticeLink turns a word in the notice into a link

The first occurrence of noticeLink.text in the translated notice opens
noticeLink.href in a new tab (board DqFunctionaliteiten: conduction.nl
opens dossiq's comparison). Only http(s) and site-relative hrefs link;
no match or any other href leaves the notice as plain text.

Assisted-by: ClaudeCode:claude-opus-5-5

* fix(roadmap): translate the group captions, and board.summaries hides row summaries

Category captions from config.categories now go through the app's
translate function like the notice, so a Dutch page reads Dutch. In the
rows layout board.summaries: false draws a feature as its title and
status only (board DqFunctionaliteiten).

Assisted-by: ClaudeCode:claude-opus-5-5
Every branch that adds a string appends to the same last lines of the
catalogues, so every merge of development conflicted there. A git merge
driver (scripts/merge-l10n.js, registered by prepare, named in
.gitattributes) merges l10n/*.json per key; only a key both sides
translated differently is a conflict.

Assisted-by: ClaudeCode:claude-opus-5-5
…tion, and heading icons (#1765)

* feat(app-root): Nextcloud's own settings in the board settings navigation, and heading icons

Under the board look the user settings navigation can list Nextcloud's own
personal settings first, as links (userSettingsNextcloudLinks), then one
entry named after the app holding its sections, and a section's #icon also
stands before its heading (board DqPersoonlijkeInstellingen).

Assisted-by: ClaudeCode:claude-opus-5-5

* docs(app-root): Nextcloud links in the board settings navigation

Assisted-by: ClaudeCode:claude-opus-5-5

* docs: regenerate the component partials

Assisted-by: ClaudeCode:claude-opus-5-5
…x source (#1756)

* feat(index): Nextcloud groups as folders and their members as an index source

folderSidebar.source: "groups" lists Nextcloud groups with their member
counts (folderSidebar.groups picks, orders and nests them). The named source
"users" lists the selected group's members with function (profile
headline), roles (profile role), e-mail and today: an out-of-office period
that runs now ("Absent until <date>", dav app, Nextcloud 28+), else the
user status message, else present or away.

Board DqAfdelingen.

Assisted-by: ClaudeCode:claude-opus-5-5

* docs(index): put the absence label example in a code span for MDX

Assisted-by: ClaudeCode:claude-opus-5-5

* chore(index): sort the users source imports after merging development

Assisted-by: ClaudeCode:claude-opus-5-5
…ings-one-section

# Conflicts:
#	docs/components/cn-app-root.md
#	src/components/CnUserSettingsDialog/CnUserSettingsDialog.vue
#	tests/a11y/CnUserSettingsDialog.a11y.spec.js
The built-in formatter "masked" shows all but the last characters as "*"
(formatterOptions.visible, default 4; at most five stars), the facts
widget's rule. It masks the display only: the value is still in the row,
and real hiding belongs in OpenRegister, which the docs say.

A column aggregate op: "max" with field shows, per row, the highest field
among the related objects (one _limit=1 request sorted descending), through
the column's formatter; none shows zeroLabel, else a dash.

Board DqOrganisaties (IBAN, Laatste contact).

Assisted-by: ClaudeCode:claude-opus-5-5
# Conflicts:
#	docs/components/_generated/CnDetailPage.md
#	docs/components/_generated/reliance.json
#1747 carried the pre-squash commits of #1734, which has since landed on
development with later fixes. The tree takes development's version of
#1734 and applies only #1747's own commits (6a3e15a, dde794a) on top.
Schema numbered 2.122.0 for the batch.

Assisted-by: ClaudeCode:claude-opus-5-5
Keeps development's endpoint, search and users sources next to the
organisations source, and the entitySource enum holds all seven values.
Schema numbered 2.122.0 for the batch.

Assisted-by: ClaudeCode:claude-opus-5-5
Assisted-by: ClaudeCode:claude-opus-5-5
Assisted-by: ClaudeCode:claude-opus-5-5
@rubenvdlinde
rubenvdlinde merged commit 18d7f46 into beta Oct 17, 2026
45 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/nextcloud-vue @ ade8de9

Check PHP Vue Security License Tests
lint ⏭️
phpcs ⏭️
phpmd ⏭️
psalm ⏭️
phpstan ⏭️
phpmetrics ⏭️
eslint ✅
stylelint ✅
build ✅
test ✅
check-build ✅
check-vue3-compile ✅
check-public-safe ✅
check-journey-vocabulary ✅
check-docs ✅
check-docs-mdx ✅
check-jsdoc ✅
check-integration-parity ✅
check-peers ✅
check-docs-fresh ✅
check-a11y ✅
check-smoke ✅
composer ✅ ✅
npm ✅ ✅ 643/643
app:check-code ⏭️
info.xml ⏭️
REUSE ✅
lockfile sync ✅
PHPUnit ⏭️
Newman ⏭️
Playwright ⏭️
Hydra gates ⏭️

Quality workflow — 2026-10-17 12:53 UTC

Download the full PDF report from the workflow artifacts.

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