Skip to content

Integrate dossiq batch b46: r31-r36 lines on nc-vue 24t2b - #4676

Merged
rubenvdlinde merged 66 commits into
developmentfrom
integrate/dq-b46
Oct 26, 2026
Merged

rubenvdlinde merged 66 commits into
developmentfrom
integrate/dq-b46

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

Dossiq batch b46: the "b46 candidates" lines from DQ-L1, L2, L3b, L4, L6, L7, L8, L9 and L10, the DQ-DATA/DQ-DATA3 example-data rounds, and INT-OR's payment-state projection as system. It builds on development 400beab (#4674).

Needs nextcloud-vue 24t2b. Many lines use 24t2b features: L2 Flows/Werkinstructie, L8 options and titles, L10 duplicate warning, L4 checklist note. This PR is tested against the 24t2b integration branch at 5fb6f85bf2, built and packed locally and unpacked into node_modules. It should merge after 24t2b; the bump to the 24t2b npm release follows in b47.

Heads (merge order, --no-ff)

  • DQ-L8 r31/field-titles-and-option-codes d3206ab
  • DQ-L8 r31/rules-card-starts-under-title e79d9b2
  • DQ-L8 r31/field-rights-matrix-head-controls a1e2695
  • DQ-L2 r31/case-deadline-calculation-is-a-fallback 99117f7
  • DQ-L6 r31/search-status-column-takes-the-rest f89adea
  • DQ-L1 r25/termijnen-audit-case-link 7bed530
  • DQ-L2 r31/term-card-board-order f7db61b
  • DQ-L9 fix/r31-settings-advanced-board 1a97d24
  • DQ-L10 r30/lhs-classification-codes 5050822
  • DQ-L10 r31/lhs-history-events 3f5453c
  • DQ-L1 r25/doorlooptijd-breakdown-per-type-and-board-rows 0045b53
  • DQ-DATA3 r31/exset-data-round 9a45c12
  • DQ-L8 r31/field-rights-matrix-names c5df931
  • DQ-L8 r31/rule-summary-names c8f145e
  • DQ-L8 r31/rights-summary-data-table 98325cf
  • DQ-L8 r31/case-type-side-cards 60725c0
  • DQ-L2 r31/flows-and-term-board 12f5b8a
  • DQ-L7 r31/social-history-people-and-files 21ba9be
  • INT-OR fix/payment-state-projection-as-system d07b25e
  • DQ-L4 r35/checklist-note-on-no 86b5ece
  • DQ-L4 r36/ai-log-board-table 3d05c5d
  • DQ-L10 r31/duplicate-warning-board 664f685
  • DQ-DATA3 r31/exset-data-round 9a45c12
  • DQ-L3b r26/share-dialog-partner-orgs 2848bbb
  • DQ-DATA3 r31/exset-regulier-v4-board-details 120533a
  • DQ-L10 r31/case-dedup-threshold 4820cb6
  • DQ-L10 r31/result-retention-permanent 25e5140
  • DQ-DATA r31/exset-queue-round b6b0c33

Integration changes

  • Left out, for b47 / 24t2c:
    • DQ-L4 a86d1a0 (superseded).
    • DQ-L10 r31/lhs-advice-words 8905119: needs nc-vue 7d178c444d, not in 24t2b.
    • DQ-L4 r38/inspection-day-question-count 09eb8f6: needs nc-vue ba6d3485b, not in 24t2b.
    • fix/rematerialise-calculation-an-app-may-override and feat/checklist-note-when are not dossiq branches.
  • Version register:
    • case 1.56.0 is case-deadline-calculation-is-a-fallback's. r31/case-dedup-threshold, which also took 1.56.0, moves to 1.57.0.
    • The base register's caseType goes from 1.24.0 to 1.44.0. 1.24.0 is 98-case-type-side-cards' (and 1.23.0 is 96-case-type-list-presentation's), so every caseType version is now declared once, and the merged caseType moves past 1.43.0.
    • propertyDefinition 1.9.0. Register 0.20.76. Digests recorded with php tools/schema-version-digests.php after the bumps.
  • Example data:
    • r31/exset-data-round and r31/exset-queue-round at their tips 9a45c12 and b6b0c33 (the latter supersedes 29868c2; OR #4920 is merged).
    • The zuiddrecht.json conflicts were resolved by a keyed 3-way merge. That merge first appended the new rows at the end, and then inspectierapport-molenweg-4 came after lhs-advies-molenweg-4, which refers to it (ZuiddrechtFragmentInstalls). The new rows now sit where their branch places them.
  • Catalogue keys for the field title and option code schema texts. The browser catalogues are rebuilt.
  • caseTypeFieldsColumns follows the fieldTitle formatter on the Field column.

Verified locally

  • validate-manifest PASS against 24t2b 5fb6f85bf2 (schema 2.157.0). check-l10n OK, check:schema-l10n 0 uncovered. PHPUnit Settings 700 OK, including ZuiddrechtFragmentInstalls.
  • Full vitest against 24t2b: 606/607 files, 4286/4287 tests. The one red, caseTypeFieldsColumns, is fixed (5/5). Only example data changed after that run.
  • COMPOSER_PROCESS_TIMEOUT=0 composer check:strict, run alone: ALL CHECKS PASSED, exit 0. PHPUnit: 9924 tests, 0 errors, 0 failures.

Prepared by a dossiq integration lane (AI-assisted, Claude Code); the coordinator merges.

DqHandhaving Classificatie (coordinator decision 26 Oct, the board is
canon): behaviour as the matrix row (1-4), consequence as its column
(A-D, zeer ernstig included) and "Vak C2 van 16", the cell they meet
in, joined from the same two values. Config only: facts row parts with
a map and a constant part. The matrix version stays as a muted line
under them, so no fact is lost.

Rendered with the real CnFactsWidget against this card's content:
"Gedrag 2 / Gevolg C / Vak C2 van 16 / Matrixversie 2". The side card
Dutch check skips one-character codes, which read the same in every
language.

Assisted-by: ClaudeCode:claude-opus-5-5
Once a case has a statutory term, CaseDeadlineFollowsTermListener owns its
deadline; declaring the calculation a fallback stops rematerialise counting
those cases as failures (23 of 75 after REFRESH-7).

Assisted-by: ClaudeCode:claude-opus-5-5
…60px

DqZoekresultaten r31: header and first cell text at 81.6 where the board
has 76. Every column had a fixed width, so the table spread the spare
width over all of them, the checkbox column too (65.6px). Status has no
fixed width any more and takes the rest, as the board draws it.

Assisted-by: ClaudeCode:claude-opus-5-5
DqTermijnen draws the dwangsom audit's case numbers as links ("2026-0018"),
as it draws the notices of default; live wrote them as plain text (r31
cell colour ink vs link). The column uses the built-in link widget to the
case; the row still opens the case.

Assisted-by: ClaudeCode:claude-opus-5-5
…the board names it

Assisted-by: ClaudeCode:claude-opus-5-5
DqInspectie draws a note field under the question answered Nee and none
under Ja; live drew one under every question (r31 'Werken de
noodverlichting' inset and structure). The checklist run sets noteWhen
to the stored no value; needs nextcloud-vue feat/checklist-note-when,
before it every question keeps its note.

Assisted-by: ClaudeCode:claude-opus-5-5
…ned it

r31 DqHandhaving Historie (structure flag): the side card listed every
"read" of the advice (Pieter Jansen opening the page five times),
where the board lists what happened to it ("Advies berekend",
Systeem · 3 okt 15:02). The card leaves read events out
(excludeActions), names create and update in words, and puts who and
when under the action (stacked rows, as DqTaak). Config and l10n only.

Assisted-by: ClaudeCode:claude-opus-5-5
…itles in text ink; light success fills

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

Assisted-by: ClaudeCode:claude-opus-5-5
"Prestaties per zaaktype" listed every version of a case type as its own
row (2x Woo-verzoek, 5x Omgevingsvergunning regulier). The breakdown adds
the versions of one case type together, by the identifier they share,
under the version with the most completed cases; each record still counts
against its own version's target. The board draws three cases at risk and
four case types: the risk table shows three with "View all" to the open
cases by deadline, the breakdown pages by four, so no row is lost.

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

Assisted-by: ClaudeCode:claude-opus-5-5
r31 DqZaaktypeVelden: the matrix head read "zuiddrecht-vergunningen,
[object Object], ...": status names are language maps and a column was
labelled with the Nextcloud group id. Status names are now read in the
reader's language, and a group's column is labelled with the case type's
role types on that group ("Intaker / Vergunningverlener, ontvangen").

Assisted-by: ClaudeCode:claude-opus-5-5
…ttons, status in words

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

r31 DqZaaktypeOverzicht Regels read "Als status {status} wordt": a status
name is a language map, and handed to the translation as an object it
left the placeholder standing. The rule choices now read a name or
title as text in the reader's language.

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

r31 DqZaaktypeOverzicht Rechten: the card drew a compact table (13px
heads, no inset, 25px rows) where the board draws the card data table
with sort and filter heads, and "Behandelen" read "Array": a status name
is a language map, cast to a string. The summary reads status names in
the reader's language, and the card table takes `tableLook: data` with
sortable and filterable heads.

Assisted-by: ClaudeCode:claude-opus-5-5
r31 DqZaaktype Historie: each entry drew its moment beside the action,
where the board draws the action with "who · when" under it. The side
history card takes the audit trail's `stacked` layout.

Assisted-by: ClaudeCode:claude-opus-5-5
…Weeks and caseType

Assisted-by: ClaudeCode:claude-opus-5-5
… system operation

paymentState and paymentStateCheckedAt are readOnly, and OpenRegister
refuses a readOnly change on update outside a SystemOperationContext.
The service account alone does not enter one, so every patch was
refused, logged as a warning, and every case stayed null. The patch now
runs through ObjectService::runAsSystem().

Needs openregister's readonly-is-stamped-by-system-operations fix.

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

DqSociaalDomein's Historie lists people's actions (a document viewed,
consent recorded); on :8080 it showed System jobs' "Zaak gewijzigd". The
card leaves the System actor out and labels a document view "Inzage
{file}" from the download audit row (needs nextcloud-vue
feat/audit-card-exclude-actors and openregister
feat/file-download-audit-names-the-file).

Assisted-by: ClaudeCode:claude-opus-5-5
DqZaakAssistent "Wat de assistent op deze zaak deed": the moment column
read as a 15px/600 title, the user as its id, and the head had no sort
or filter (r31: cells 15/600 vs 14/400, head 37.5 vs 42.5). The list
sets rowTitle text, sortable and filterable, and reads decidedBy through
the userName formatter (format user is not one).

Assisted-by: ClaudeCode:claude-opus-5-5
The Woo case type names "Woo en informatie/Hoe we Woo-verzoeken
behandelen" as its work instruction. The set now writes that page
through OpenRegister's collectivesPages part, in the collective "Woo en
informatie" that the Woo team's group can read. The Werkinstructie card
then opens a page that exists.

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

Coordinator call after r31: DqZaaktypeVelden lists fields by what a
person reads (Bouwkosten), not their name (bouwkosten), and draws the
choice list as framed options with a code (Woning WON).
- propertyDefinition 1.9.0 (fragment 69-field-title-and-option-codes):
  `title` (translatable) and `enumCodes` (option value to code).
- The Fields tab's Field column reads the title in the reader's
  language, else the name (formatter fieldTitle).
- The choice list card takes nextcloud-vue's field-list `options`
  variant with its codes from `enumCodes`.

Needs nextcloud-vue feat/field-list-options-look (24t2b).

Assisted-by: ClaudeCode:claude-opus-5-5
r31 DqZaaktypeOverzicht Regels gapBelowTitle 27.2 vs 29.5 (probed: rows
16.2 under the title against the board's 18.5). The card content takes
0.15em off for a first line of body text; the rule rows set their own
padding, so a board card that opens on them pads 12px.

Assisted-by: ClaudeCode:claude-opus-5-5
…per role

r31 DqZaaktypeVelden matrix gapBelowTitle 41 vs 43.8 came from its heads
(probed): the board draws a chevron on Veld and a 22px funnel on each
role, live drew plain heads. The Field head now sorts by field, each
role head filters its column on the states it holds (Verplicht,
Bewerken, Alleen lezen, Verborgen), with the boards' 22px funnel.

Assisted-by: ClaudeCode:claude-opus-5-5
…g names each match

DqNieuweZaakDubbel (Woo-verzoek v2, duplicatePolicy block, coordinator
may override):
- No reason field: duplicatePolicyFor normalised the intake declaration a
  second time, read `duplicatePolicy` (by then the string 'block') as the
  raw `{ policy }` block and answered warn with no override. Every block
  became a warning anyone could pass without a reason. It now uses the
  declaration fetchIntakeRequirements already normalised.
- Each match names its number, case type, requester and receipt date
  ("2026-4867 · Woo-verzoek · Henk Visser · ontvangen 25 okt"): the cases
  are read with their case type inline (`_extend=caseType`) and the meta
  line falls back to the number when a part is missing.
- The board's eyebrow, "Gevonden op Aanvrager en Onderwerp (65%)", the
  reason hint and the footnote, through CnDuplicateWarning's new props
  (nc-vue feat/duplicate-warning-board-parts); without that release they
  are ignored and only the reason field and the meta line change.

Assisted-by: ClaudeCode:claude-opus-5-5
"Keuzelijst: {name}" showed the field's name (soortBouwwerk). The title
token now runs the fieldTitle formatter, as the Field column does:
the title in the reader's language, else the name.

Needs nextcloud-vue fix/following-card-title-uses-app-formatters (24t2b).

Assisted-by: ClaudeCode:claude-opus-5-5
The organisations index lists only the user's own memberships, and a partner
is somebody else's organisation, so the share select was always empty
(DqZaakSamenwerken). Partners come from the organisations search endpoint,
through one helper the dialog and the sharing tab share.

Assisted-by: ClaudeCode:claude-opus-5-5
…owser catalogues rebuilt

Assisted-by: ClaudeCode:claude-opus-5-5
Coordinator decision 26 Oct (overrulable by Ruben), DqNieuweZaakDubbel:
the board shows one match where live showed three, because Henk Visser's
two other open requests matched on the requester alone (0.37 against a
0.3 cut-off).

The case dedup rules now weigh the permit application reference 0.6
(a DSO re-delivery is still proof on its own), the requester 0.2 and the
title 0.05 exact plus 0.15 spelling, with the cut-off at 0.6. With
OpenRegister leaving out a rule neither case holds (openregister
fix/dedup-skip-rules-both-sides-lack), a Woo request scores the
requester with an unrelated title about 0.56, with a similar title about
0.64 and with the same title 1.0. case moves to 1.56.0 so an existing
instance re-imports the schema.

Before the OpenRegister change lands, the permit rule still counts on
every case, so a case without a permit reference cannot reach 0.6 and
no Woo duplicate is flagged: land the two together.

Assisted-by: ClaudeCode:claude-opus-5-5
DqZaaktypeStatussen draws the decision type "Weigering omgevingsvergunning"
of Omgevingsvergunning regulier v4 without publication. The set declared
that it was published.

Assisted-by: ClaudeCode:claude-opus-5-5
decision-letter-source moved the base register's caseType from 1.23.0
to 1.24.0, a number 98-case-type-side-cards already holds (and 1.23.0
is 96-case-type-list-presentation's). The base takes the next free
number, 1.44.0, so every caseType version is declared once and the
merged schema moves past 1.43.0. Digest recorded.

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

DqHandhaving's Zaak card has an Inspectie row, and its violation card
reads from the inspection. The advice had none. The set now writes
Jamal's inspection report on Molenweg 4 (a building put up without a
permit, not conform, follow-up required) before the advice, and the
advice names it.

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

DqZaaktypeStatussen Resultaten: "Verleend · Bewaren" stood with an empty
Bewaartermijn where the board reads "Permanent". The column names what an
empty period means by the archival action (CnDataTable emptyValueBy,
nc-vue feat/data-table-empty-value-by): kept or kept permanently reads
"Permanent", a destroyed result without a period stays empty. Config and
l10n only; without the library change the cell stays empty as before.

Assisted-by: ClaudeCode:claude-opus-5-5
case 1.56.0 is case-deadline-calculation-is-a-fallback's (merged first in
b46), so the dedup threshold fragment takes 1.57.0; digest recorded.

Assisted-by: ClaudeCode:claude-opus-5-5
The Historie card on DqSociaalDomein leaves out rows by System. The
board draws two rows by Fatma Kaya: the consent she recorded on the day
of receipt ("Toestemming vastgelegd") and the medical report she opened
three days later ("Inzage medisch verslag"). The set now writes both
through OpenRegister's auditEntries part.

Assisted-by: ClaudeCode:claude-opus-5-5
DqAfdelingen names a team's lead under its name ("teamleider Marleen
Postma"). No team carried one. Team Vergunningen now names Marleen
Postma and Woo en informatie names Anouk Bakker.

Assisted-by: ClaudeCode:claude-opus-5-5
field-titles-and-option-codes gives the Field column the fieldTitle
formatter (the title in the reader's language, else the name).

Assisted-by: ClaudeCode:claude-opus-5-5
# Conflicts:
#	lib/Settings/example-sets/zuiddrecht.json
…dvice that names it

The keyed merge of exset-queue-round appended its new rows at the end of
the lists; inspectierapport-molenweg-4 must be written before
lhs-advies-molenweg-4 refers to it (ZuiddrechtFragmentInstalls). The new
rows now sit where exset-queue-round places them.

Assisted-by: ClaudeCode:claude-opus-5-5
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/dossiq @ b2647c3

Check PHP Vue Security License Tests
lint ✅
phpcs ✅
phpmd ✅
psalm ✅
phpstan ✅
phpmetrics ✅
eslint ❌
stylelint ✅
build ✅
check-manifest ✅
check-vue3-compile ✅
test-l10n ✅
format ❌
check-schema-l10n ✅
check-l10n-js ✅
check-debt-ratchet ❌
check-types-e2e ✅
composer ✅ ✅ 109/109
npm ❌ ✅ 658/658
app:check-code ⏭️
info.xml ✅
REUSE ❌
lockfile sync ✅
PHPUnit ❌
Newman ⏭️
Playwright ⏭️ deferred: E2E runs locally and on the promotion path only. This pull request targets development, so the suite is asked once per promotion into beta and main rather than once per push per open pull request. Run it locally with npx playwright test, or from the Actions tab on a branch with no open pull request into development.
Hydra gates ❌

Quality workflow — 2026-10-26 15:34 UTC

Download the full PDF report from the workflow artifacts.

@rubenvdlinde
rubenvdlinde merged commit 2a1f85f into development Oct 26, 2026
43 of 51 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