Skip to content

feat: round 12 board look, batch 8 - #1771

Merged
rubenvdlinde merged 48 commits into
developmentfrom
integration/batch-8
Oct 17, 2026
Merged

rubenvdlinde merged 48 commits into
developmentfrom
integration/batch-8

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

Round 12 library changes as one batch (batch 8). Each PR's head was merged in with --no-ff (no rebase), #1770 first, then the non-schema PRs, then the schema PRs.

Included

Left out: #1727 and the parked pipelinq PRs (#1712, #1714, #1718, #1720, #1726, #1728). No PR was dropped for failing.

Schema renumbering

The batch takes one new manifest schema version: 2.122.0 (development was on 2.121.0). The branch numbers are dropped:

PR Branch version In batch 8
#1746 2.123.0 2.122.0
#1747 2.124.0 2.122.0
#1743 2.125.0 2.122.0
  • src/schemas/app-manifest-v2.schema.json keeps all three changes: headerPill.resolve, chart cellSource, and organisations in config.entitySource. The enum now holds flows, flowRuns, tasks, endpoint, search, users, organisations, and its description keeps both development's text and the organisations sentence.
  • The hash ledger keeps development's entries and adds exactly one entry, 2.122.0, written by scripts/record-manifest-schema-hash.js. The branch-only 2.123/2.124/2.125 entries are gone.
  • The version test asserts 2.122.0, and one comment line names all three changes.
  • The feat(chart): a matrix can read its cells from records (schema 2.124.0, stacked on #1734) #1747 OpenSpec proposal now says 2.122.0.

How the conflicts were resolved

Gates (local, all through heavy.sh, head b64d0f0)

Gate Result
npm test (full jest) 1379/1379 suites, 14548/14548 tests, 3 snapshots, exit 0
npm run check:a11y 24/24 suites, 135/135 tests, exit 0
eslint (src/ eslint/ testing/ tests/ e2e/) exit 0, 0 errors, 73 warnings
stylelint exit 0
check:jsdoc exit 0
check:docs exit 0
check:docs-mdx exit 0
check:docs-fresh (after regenerating) exit 0, _generated/ matches
tests/css part of the full jest run above
Playwright e2e (455 tests, 4 workers) 433 passed, 5 failed, 2 skipped, 15 did not run, exit 1
Playwright rerun of the 5 failing files (2 workers) 40/40 passed, exit 0

The 5 failures in the full run were wait timeouts on first render (locator.waitFor / toBeVisible with no element after 60 to 120 s). They were in pixel-gaps-3, screens-chrome-nav-parity, screens-chrome-parity, screens-dashboard-parity and tasks-widget, and the run used 4 workers on a loaded machine. The same five files pass completely at 2 workers on the same head, so I treat these as load timeouts, not regressions. Playwright ran against the repo's Vite harness on its own port, with Chromium 1228 installed for this run.

Not run locally: the build (check:build), the Vue 3 compile sweep and check:smoke. CI covers those.

AI disclosure: this batch was put together with Claude Code (claude-opus-5-5). The coordinator reviews and merges it.

🤖 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
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
…ings-one-section

# Conflicts:
#	docs/components/cn-app-root.md
#	src/components/CnUserSettingsDialog/CnUserSettingsDialog.vue
#	tests/a11y/CnUserSettingsDialog.a11y.spec.js
# 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
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/nextcloud-vue @ 45c665d

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:10 UTC

Download the full PDF report from the workflow artifacts.

@rubenvdlinde
rubenvdlinde merged commit 161f228 into development Oct 17, 2026
44 checks passed
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