Repository navigation
feat: round 12 board look, batch 8 - #1771
Merged
Merged
Conversation
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
…ions-entity-source
…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
Assisted-by: ClaudeCode:claude-opus-5-5
Assisted-by: ClaudeCode:claude-opus-5-5
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
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
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
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
requested review from
Rem-Dam,
SudoThijn,
WilcoLouwerse,
bbrands02,
remko48 and
rjzondervan
as code owners
October 17, 2026 12:04
This was referenced Oct 17, 2026
Closed
Contributor
Quality Report — ConductionNL/nextcloud-vue @
|
| 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.
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.
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
chore/l10n-merge-driver(0f89737): git merge driver that mergesl10n/*.jsonkey by key. Registered in this clone before the other merges, so the catalogues merged without conflicts.feat/ordered-list-field(b02eb06): newCnOrderedListField, an ordered list the user keeps with move up, move down and remove buttons, keyboard only, with live-region announcements.feat/checklist-run-widget(941cd23): newchecklist-runwidget, a checklist answered one page of questions at a time.feat/checklist-run-photo-rule(bf4157f): checklist photo rule, and picking the run by filter (stacked on feat(widgets): a checklist run, a page of questions at a time #1764).feat/user-settings-one-section(b001413): the board settings dialog shows one section at a time (its base feat(app-root): Nextcloud's own settings in the board settings navigation, and heading icons #1765 is already on development).feat/detail-pill-resolve(a86fcf8): a header pill can show a referenced record's label (headerPill.resolve).feat/matrix-cell-records(dde794a): a matrix chart can read its cells from records (cellSource).feat/organisations-entity-source(0b0c4cb): list and show OpenRegister organisations throughconfig.entitySource: "organisations", on index and detail pages.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:
src/schemas/app-manifest-v2.schema.jsonkeeps all three changes:headerPill.resolve, chartcellSource, andorganisationsinconfig.entitySource. The enum now holdsflows, flowRuns, tasks, endpoint, search, users, organisations, and its description keeps both development's text and the organisations sentence.2.122.0, written byscripts/record-manifest-schema-hash.js. The branch-only 2.123/2.124/2.125 entries are gone.2.122.0, and one comment line names all three changes.How the conflicts were resolved
look-board.css, chart docs and feat(chart): bar list and matrix kinds (schema 2.120.0) #1734 OpenSpec stay as they are, and feat(chart): a matrix can read its cells from records (schema 2.124.0, stacked on #1734) #1747 addscellSource,matrixCells.jsand its specs.endpoint,searchanduserssources (2.121.0).indexSources.jskeeps all three next toorganisationsSource, and the registry lists all seven.cn-index-page.mdkeeps development'sentitySourcerow and adds the organisations sentence to it.docs: regenerate the reference pages for batch 8).tests/schemas/app-manifest-v2.schema.spec.jshas 158it(titles, as development's side had. The only titles missing compared with the PR branches are their oldreads 2.124.0/reads 2.125.0version tests, which are now the onereads 2.122.0test.Gates (local, all through heavy.sh, head b64d0f0)
npm test(full jest)npm run check:a11ysrc/ eslint/ testing/ tests/ e2e/)_generated/matchesThe 5 failures in the full run were wait timeouts on first render (
locator.waitFor/toBeVisiblewith no element after 60 to 120 s). They were inpixel-gaps-3,screens-chrome-nav-parity,screens-chrome-parity,screens-dashboard-parityandtasks-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