Repository navigation
feat: library batch 10 - #1777
Merged
Merged
Conversation
…as fields, on a shared CnSettingsField Assisted-by: ClaudeCode:claude-opus-5-5
…n image field uploads at once Assisted-by: ClaudeCode:claude-opus-5-5
…under a theme The active entry painted its primary-light wash on the link as well as the entry, so a theme that tints the entry (thematiq's accent wash, as DqZijbalk draws it) was covered by the link. The wash now sits on the entry only. The red attention count wrote its number in --color-error-text, which is the error colour for text on a light ground (#8A0000 under thematiq), so the number was dark red on red. It is white now. Assisted-by: ClaudeCode:claude-opus-5-5
…r nc-vue's mix NcAppNavigationItem paints an active entry with a 16% (22% hovered) primary mix at `!important`. Moving the board wash from the link to the entry left it below that rule, so the open entry showed the mix instead of --color-primary-element-light (screens-chrome-nav-parity e2e). The entry now carries the tonal primary at `!important`, hovered too, scoped to the board look, and the link carries the same ground again. Outside the board look nothing changes. Assisted-by: ClaudeCode:claude-opus-5-5
… board look DqZijbalk draws the "Mijn zaaktypen" pencil at the end of the caption line, a 28px round muted button with a 16px icon that adds no height. Under thematiq's Zuiddrecht sheet the caption is `display: block` at id strength, so the pencil wrapped onto a 39px line of its own. In the board look the pencil is now placed absolutely at the caption's end, 4px in. Assisted-by: ClaudeCode:claude-opus-5-5
…itten, for every target Assisted-by: ClaudeCode:claude-opus-5-5
NcNoteCard type="info" drew a dark edge bar and, under thematiq, the body ink on the info ground. The boards draw an info note as a light-blue rounded box: no bar, 12px 14px of padding, radius 8, an 18px icon 10px before 14px text in the deep primary ink, and a bold heading line (DqBesluit and 13 other boards). The board look now does. NcNoteCard sets its ground and ink with `!important` and thematiq forces the ink and weight of every p, so the ground, the ink and the heading weight carry `!important`, scoped to the board look. Assisted-by: ClaudeCode:claude-opus-5-5
…fields-section # Conflicts: # docs/components/cn-settings-fields-section.md # l10n/en.json # l10n/nl.json # src/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue # tests/components/CnSettingsFieldsSection.spec.js
…argets get the OCS-APIRequest header Assisted-by: ClaudeCode:claude-opus-5-5
…tion
A record list reading an endpoint that answers ["…", "…"] reads each row
as { value }: templates reach it as {value}, and without a title a row shows
the value. presentation: "notice" draws the rows as sentences in one box
toned by variant, after an optional lead with {total} (board
DqZaaktypeOverzicht, Controle). No schema change.
Assisted-by: ClaudeCode:claude-opus-5-5
A Nextcloud text field in a board dialog floated its label inside the border and drew that border as NcInputField's 65%-transparent shadow, which on the white dialog read as an empty band (PlanItemDialog). In a board dialog a text field or text area now takes the board's field: its own label above the control at 14px/600, the control 40px with a solid 1px grey border and radius 8. A field with `labelOutside` keeps the app's label and gets the same control. Assisted-by: ClaudeCode:claude-opus-5-5
…board choice step's intro and footnote
From an admin page the setup wizard read "Set up this app" with an English
eyebrow, and its step copy stayed in the manifest's source language:
CnAdminSettingsShell passed no `appName`, and no CnAppRoot wraps an admin
page to provide `cnTranslate`. The shell now passes its `appName` ("Dossiq
instellen, stap 1 van 3") and, when no ancestor provides one, hands down the
app's own catalog as `cnTranslate`. CnWizardDialog's default button labels,
success text and title were English literals; they now go through the
library catalog ("Wizard" added, nl "Assistent").
A choice step in the board look sets its `body` as a plain paragraph above
the options (the Nextcloud look keeps the info note), and a new `note` (or
`footnote`) draws a muted line under them, translated like the body
(DqInstellen). Manifest schema 2.123.0 adds the step's `note` and
`footnote`.
Assisted-by: ClaudeCode:claude-opus-5-5
… its count line for it
DqContracten reads "38 contracten bij 21 leveranciers" after the breadcrumb;
headerMeta could only count its own list. A page can now name other lists
in `headerMetaCounts` ({ name: { register, schema, filter? } }), each read as
one list total and filled in for `{count:<name>}`. While a count loads, or
when it fails, the note is left out rather than shown with a gap.
In the board look, when the note after the breadcrumb already carries a
count ({shown}, {total} or {count:...}) the page no longer adds its own
"{shown} of {total}" line under the title (DqPrivacy, DqContracten); a page
that sets countText keeps it.
Needs schema key: config.headerMetaCounts (added here; the schema version
and hash bump are left to the batch integration).
Assisted-by: ClaudeCode:claude-opus-5-5
…only DqContracten's "Portaalaccounts" tab belongs to an administrator. A manifest page tab can now carry `adminOnly` (drawn only for an instance admin, from Nextcloud's current user) or `permission` (drawn only for a user who holds it; with no permissions known it shows, as a menu entry does). This hides the tab and nothing more. It is not access control: the page a hidden tab points to must still refuse the user on the server, since anyone can type its address. The docs row says so. A hidden tab does not shift the counts of the tabs after it. Assisted-by: ClaudeCode:claude-opus-5-5
A record list's header note could only say `{total}`; a checklist card says
"5 van 7 stappen klaar". `headerNote` (and the header link's label) now
fills `{count:<field>=<value>}` with the number of loaded rows whose field
reads that value. It counts the rows the list loaded, so it is exact when
`limit` covers the list; the docs say so.
Assisted-by: ClaudeCode:claude-opus-5-5
DqFlow's header has "Testen met een zaak". With `testSubject` ({ register,
schema, labelField?, label? }, manifest `config.testSubject` on a
flow-detail page) the board header draws that button. It opens a dialog
with a record picker on that register and schema, and runs the saved flow
once with the picked record as its subject; the run shows on the canvas as
any run does. An unsaved flow cannot be tested. `label` goes through the
app's catalogue; without it the button reads "Test with a record" (nl
"Testen met een record").
Assisted-by: ClaudeCode:claude-opus-5-5
…in the card
DqBezwaar's advice card has "Advies ontvangen" as a pill beside its title
and a light note band under its facts. A facts widget can now declare
`headerPill` ({ path?, text?, map?, variant?, variantMap?, colorMap? }),
read from the record like a `pill` entry and reported through its `header`
event, which the detail host draws beside the card title; nothing shows
while the value is empty. `notice` ({ text, variant? }) draws a note band
inside the card under the facts, info by default.
Assisted-by: ClaudeCode:claude-opus-5-5
…s, tag admin entries
DqZaakMeer's Actions menu has no "Markeren als ongelezen" and no "Zijbalk
openen", and each admin-only entry ends in a muted "beheerder" tag. A page
can now drop the two built-ins with `actionsMenu.showMarkUnread: false` and
`actionsMenu.showOpenSidebar: false`; omitted, both stay as before. In the
board look every entry in the admin group carries the tag ("admin", nl
"beheerder"), drawn from an attribute because the menu renders entry text
as plain text and opens outside the page.
Needs schema keys: actionsMenu.showMarkUnread and actionsMenu.showOpenSidebar
(added here; the version and hash bump are left to the batch integration).
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
Assisted-by: ClaudeCode:claude-opus-5-5
Assisted-by: ClaudeCode:claude-opus-5-5 # Conflicts: # src/components/CnRecordListWidget/CnRecordListWidget.vue
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
One bump for the batch: the setup step's note and footnote, config.headerMetaCounts, and actionsMenu.showMarkUnread / showOpenSidebar. The hash is recorded over all three; the branch-level 2.123.0 entry is replaced. 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 18, 2026 10:10
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-18 10:16 UTC
Download the full PDF report from the workflow artifacts.
This was referenced Oct 18, 2026
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.
Batch 10 of the library changes. Each branch was merged at its newest origin head with
--no-ff(no rebase), onto development 3a209df (batch 9, 2.99.0). Every head matched the coordinator's list, and none was behind development.Included (11)
comp/CnAppNav(b121509): the active wash scoped to the board look, and the caption pencil inline.feat/settings-fields-section(eff3298): L31's follow-up to feat: round 12 board look, batch 9 #1774: dotted keys,saveParams, and the OCS header.comp/NcNoteCard(eb1561c)comp/CnDialog(261f010)comp/CnRecordListWidget(5822cae): a{count:<field>=<value>}token in the header note.comp/record-list-string-rows(df2176e): rows that are plain strings, andpresentation: "notice".comp/CnFlowBoard(05fba1a)comp/CnFactsWidget(8bdd47f)comp/CnIndexPage(01ca41c):headerMetacounts another list (config.headerMetaCounts), and a page tab can be drawn for admins only or for one permission only.comp/CnDetailPage(3e72100):actionsMenu.showMarkUnread/showOpenSidebar, and admin entries tagged.comp/CnSetupWizard(d9c3ca2): the app's name and catalog from an admin page, and a choice step'snote/footnote.Dropped (2): each one breaks a gate on its own branch
comp/CnChoiceCards(8f773a6):check:docsexits 1. The branch adds areadonlyprop toCnChoiceCards.vue, butsrc/components/CnChoiceCards/CnChoiceCards.mddoes not mention it ("propreadonly(readonly) not mentioned in doc").comp/CnGroupedCardsWidget(34484a4): eslint exits 1. Itssrc/index.jsputsCnGroupedCardsWidgetbetweenCnDeviceFramesWidgetandCnDialog(perfectionist/sort-named-exports: "Expected "CnDialog" to come before "CnGroupedCardsWidget""). The same error appears when linting the branch's ownsrc/index.js, not only after the merge.Both were dropped rather than fixed here. The branch was rebuilt without them before the push, and the final tree differs from the full merge by exactly those two branches' files.
Merge notes
CnRecordListWidget/record-list-string-rows: the only conflict was thecontentprop's JSDoc block. Both descriptions are kept (the{count:…}token, then string rows andnotice). Neither feature's code conflicted, and all nineCnRecordListWidget*specs pass.Schema: one bump, 2.123.0
Development was at 2.122.0. The batch takes 2.123.0 and collects every new manifest key:
setup.steps[].noteandfootnote(choice step), from CnSetupWizardconfig.headerMetaCounts(index page), from CnIndexPageactionsMenu.showMarkUnreadandactionsMenu.showOpenSidebar, from CnDetailPageCnSetupWizard's branch-level 2.123.0 hash covered only its own keys. It is replaced by one entry recorded over the full batch schema with
scripts/record-manifest-schema-hash.js, and the version test's comment names all three. No other branch adds a typed manifest key: CnIndexPage'sadminOnly/permissionlive onconfig.pageTabs, which the schema does not type, and the record-listpresentation/variant/leadkeys are widgetcontent, which is untyped. The compiled validator is regenerated bypretestand is not committed.Gates (local, all through heavy.sh, on the final tree c3f1790)
npm test(full jest)npm run check:a11ysrc/ eslint/ testing/ tests/ e2e/)The one full-run failure was
e2e/l16-spawned-wizard.e2e.js: after the close click, the dialog was still counted once within the default assertion window. It passes on the rerun, so this is the close transition running long under load, not a regression. Playwright ran against the repo's Vite harness on its own port, with the browser installed under this lane's ownPLAYWRIGHT_BROWSERS_PATH.Not run locally: the 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. Commits carry
Assisted-by: ClaudeCode:claude-opus-5-5.🤖 Generated with Claude Code