Skip to content

Integrate dossiq batch b42: e-mail opt-in, status phase, r30/r31 lines - #4665

Merged
rubenvdlinde merged 30 commits into
developmentfrom
integrate/dq-b42
Oct 26, 2026
Merged

rubenvdlinde merged 30 commits into
developmentfrom
integrate/dq-b42

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

Dossiq batch b42. It starts with DQ-DATA's Pieter exports. Then the e-mail opt-in for notifications (needs 24t1y's notification matrix), the status-type phase (register 0.20.73), the field-origin pill, the at-risk plural, and the r30/r31 lines of DQ-L2, L4, L7, L9 and L10. Lines that need nextcloud-vue 24t1y stay in as manifest config; :8080 builds against the 24t1y branch. It builds on development 05b4acd (#4659).

Heads (merge order, --no-ff)

  • DQ-DATA r26/exset-pieter-exports eec16e6
  • DQ-L9 fix/r29-notification-email-opt-in 8ef105c
  • DQ-L8 r30/case-type-field-origin-pill eb66117
  • DQ-L1 r25/at-risk-remaining-plural 422fad0
  • DQ-L1 r25/status-type-phase 1b1f57c
  • DQ-L9 fix/r30-settings-advanced-rows f1a60ce
  • DQ-L4 r31/location-layers-specificity 46e8e78
  • DQ-L4 r31/custody-rule-above 2afbff4
  • DQ-L7 r30/contact-birth-longdate-social-history-stacked c9857cc
  • DQ-L10 r30/rules-rows-and-blueprint-facts 51c61ba
  • DQ-L10 r30/lhs-advice-layout 65e5cbf
  • DQ-L2 r30/lifecycle-acts-dialog-padding 43568a3

Integration changes

  • All heads merged cleanly. The e-mail opt-in is taken from the line just above the b42 header; Pieter's exports at their tip eec16e6. fix/ruled-list-under-subtitle, which custody-rule-above names, is the nextcloud-vue partner and not a dossiq branch.
  • Schema versions for the opt-in: notification-email-opt-in declares optInChannels on the notifications in the schemas' configuration, which OpenRegister's importer reads only when the version moves. The case schema goes to 1.52.0, past every fragment's version (1.51.0 is the rules variant), so the merged schema re-imports. The mock register follows (case 1.13.0, substitution 1.1.0). Digests recorded with php tools/schema-version-digests.php after the bumps.
  • ManifestColumnBinding: the field-origin pill reads origin, a value the blueprint rows that readOnlyRows adds carry (its where filters on it); an own field shows the column's emptyValue. The test now counts such a column as bound to those rows, not to the propertyDefinition schema.
  • caseTypeFieldsColumns and caseTypeFieldsTabTexts follow the origin pill and its new subtitle.
  • A catalogue key for the status phase description. The browser catalogues are rebuilt.
  • Register 0.20.73 as status-type-phase sets it.

Verified locally

  • validate-manifest PASS. check-l10n OK, l10n js up to date, check:schema-l10n 0 uncovered. PHPUnit Settings 649 OK, including SchemaVersionFloor and ManifestColumnBinding.
  • Full vitest once: 595/597 files, 4251/4253 tests. The 2 reds were the Velden specs, fixed above (7/7).
  • COMPOSER_PROCESS_TIMEOUT=0 composer check:strict, run alone: ALL CHECKS PASSED, exit 0. PHPUnit: 9852 tests, 0 errors, 0 failures.

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

A small workbook (zaken-verlichting.xlsx) and a CSV file (woo-2026-q3.csv),
each written to his Exports folder with the export run that names it, made
yesterday and last week (openregister feat/exset-export-runs).

Assisted-by: ClaudeCode:claude-opus-5-5
…e settings column per channel

Assisted-by: ClaudeCode:claude-opus-5-5
DqDoorlooptijd "Wettelijke Woo-termijnen" read "1 dagen te laat": the
remaining-time label filled {days} into a plural sentence. The labels are
plural forms now ("1 dag te laat", "13 dagen resterend"); the late label
uses the existing "%n day late" catalogue entry, the remaining one a new
pair (en + nl).

Assisted-by: ClaudeCode:claude-opus-5-5
…e phase

DqProcesanalyse "Dagen per fase" draws five generic phases across case
types; live drew one column per status name (21 columns over 13 case
types). A status type gets an optional, translatable `phase` (statusType
1.8.0, register 0.20.73). The matrix puts a status under its phase, adding
the days of one phase's statuses together, falls back to the status name
where none is set, and leaves a phased case type's final statuses out. The
seeded status types (register, register.d, packages) name the five phases
Ontvangst, Beoordeling, Advies, Besluit and Verzending; follow-up states
such as Invordering keep their own name. Coordinator decision 25 Oct.

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

DqZaaktypeVelden draws Herkomst as a pill on every field, "Eigen veld"
grey and "Geërfd van Omgevingsvergunning" purple, under a subtitle that
says so; live drew plain text. The Origin column now reads `origin` as
a badge with `emptyValue: "own"` (own fields carry none), coloured own
default, shared info, inherited purple, and the subtitle names the drag
order and the purple parent fields.

Assisted-by: ClaudeCode:claude-opus-5-5
…, shipped configuration picker, present badge)

Assisted-by: ClaudeCode:claude-opus-5-5
The board dialog sheet sets padding-inline 0 and gap 10px on every
dialog checkbox with a more specific selector, so the map layers kept
13px in and 10px to the label on :8080 (r30 DqZaakLocatie Kaartlagen
13 vs 17). Probed with the longer selector, no !important: 17.

Assisted-by: ClaudeCode:claude-opus-5-5
The panel opens on a ruled list, so its root opts in to nextcloud-vue's
cn-rule-above card start, and the unit name sits on a 1.2 line
(r30 DqZaakArchivering Bewaring 46.8 vs 41; probed 40.8). Inert until
nextcloud-vue fix/ruled-list-under-subtitle lands, apart from the line.

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

r30: DqContact read "14 mrt 1988" (board "14 maart 1988"), so the Contact
card uses longdate; DqSociaalDomein's side Historie drew one-line audit
rows, so it uses the stacked layout as DqTaak's does.

Assisted-by: ClaudeCode:claude-opus-5-5
…w them

r30 DqZaaktypeRegels: a rule row was 62px (14px/600 title on the body's
22.5px leading) where the board draws 56 (15px/500 title and its 13px
line 2px apart on their natural leading), and the add button sat 8px
above the rows where the board leaves 12, 8px under the subtitle.

r30 DqZaaktypeStatussen "Statussen, resultaten en kenmerken": Nextcloud
pads every dt and dd 12px, so each fact stood 45px tall and the facts
53px apart (gapBelowTitle 45.8 vs 31); the board draws them 17px tall
and 8px apart.

Probed on :8080 with the rules injected (nc-vue panel heading fix
alongside): title 283, subtitle 306, button 331, first row 377 / 56,
facts 25px apart, as the boards.

Assisted-by: ClaudeCode:claude-opus-5-5
The acts list padded itself 8px above and 16px below inside the dialog
body, which made DqVolgendeStap 30px taller than its board (r30).

Assisted-by: ClaudeCode:claude-opus-5-5
r30 DqHandhaving:
- The header pill read finalIntervention ("Waarschuwing" after the
  deviation); the board's pill names the advice ("Last onder
  dwangsom", missing on live). It reads recommendedIntervention; the
  applied intervention stays in Wat nu? and Override & final.
- Override & final is a 256px side card with long labels, so the
  values stood a few letters wide. `columns: 1` stacks each label above
  its value, as the board.
- The violation card stood under a 116px band (matrix fit cell on 80px
  rows, the violation pinned on row 7) and was 400px tall for its
  content. `gridFloat: false` with both cards size-to-content closes it
  up.

Needs nc-vue feat/detail-page-grid-float (gridFloat on a detail page)
and feat/facts-stacked-column (facts columns 1); without them the page
renders as before.

Assisted-by: ClaudeCode:claude-opus-5-5
…pt-in notifications

notification-email-opt-in declares optInChannels on the notifications in
the schemas' configuration, which OpenRegister's importer reads only on a
version move. The case schema moves past every fragment's version (1.51.0
is the rules variant), so the merged schema re-imports; digests recorded.

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

case-type-field-origin-pill shows origin as a badge; the value comes from
the blueprint rows readOnlyRows adds (their where filters on it) and an
own field shows emptyValue. ManifestColumnBinding read origin as an
undeclared propertyDefinition property.

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

Assisted-by: ClaudeCode:claude-opus-5-5
case-type-field-origin-pill reads origin as a badge (own when empty) and
subtitles the card with the drag order and the purple parent fields.

Assisted-by: ClaudeCode:claude-opus-5-5
@rubenvdlinde
rubenvdlinde merged commit 05095a1 into development Oct 26, 2026
35 of 41 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/dossiq @ 2c85a07

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 05:50 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