Skip to content

Bezwaar and beroep become a case definition package (ADR-118, R1) - #3669

Merged
rubenvdlinde merged 13 commits into
developmentfrom
refactor/r1-package-bezwaar-beroep
Oct 12, 2026
Merged

rubenvdlinde merged 13 commits into
developmentfrom
refactor/r1-package-bezwaar-beroep

Conversation

@rubenvdlinde

@rubenvdlinde rubenvdlinde commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

Status, 12 October

The first of a stack of three: #3669, #3725, #3768. They land together by #3768's head. See #3768 for the checks on the stack.

  • Holds development with merge train 3 (train: land 18 ready PRs (12 Oct, c) #3809). lib/Settings/bezwaar_seed_data.json stays deleted; the test development added on it now checks that the package completes the seeded Bezwaar.
  • Development now seeds the Bezwaar case type itself, beside the Woo case type (register.d/84-woo-bezwaar-case-type.json). The package names Bezwaar and its ten statuses by the same uuids, so installing it completes that case type with roles and a flow and adds no second one. Beroep ships only in the package.
  • The shipped case flow moves a case by status role. The statuses of bezwaar, beroep, the three besluitvorming case types and subsidie had none, so the flow would have stopped at its first step. Each now names intake, in-progress and closed. The register fragment for Bezwaar got the same three.
  • The read-back collection reads the package's version record. On a clean instance the register writes Bezwaar first, the package finds it present and records no ledger row for it; that was the one red assertion in the packages job.
  • Gate 119: three procedure-named files are gone, .procedure-code-baseline.json goes from 206 to 203.
  • .debt-baseline.json: phpmd.suppressWarnings 188 to 187, phpunit.skips 6 to 5. catch-return-null ceiling 262.

Where a line below disagrees with this section, this section is the current one.

Stacked on #3654 (case definition package installer). Base it on development once #3654 lands; until then the diff includes #3654.

What

Bezwaar and beroep become the first real case definition package (hydra ADR-118, refactor lane R1).

  • lib/Settings/packages/bezwaar-beroep/, install: on-request: both case types, 19 status types, 10 role types, 9 property definitions, 2 published flows. Every row has a fixed UUID.
  • The setup action seed installs the package through PackageInstaller. Installed or already current records setup_seed_done; a refusal or failed write answers 422 with the installer's message. Before this, every call answered 422 Nothing to seed, because the seed data was parked.
  • scripts/packages/seed-to-package.py (outside lib/) did the conversion once, offline: status names resolved into fixed UUIDs, exactly as WorkflowReferenceResolver did at runtime, with one change. A * source status is honoured by no reader (CaseTypeReachability says so; I checked the transition code too), so the withdrawal and settlement transitions could never be taken. The script expands a wildcard into one transition per open status.
  • The flows guard on nine fields the case never declared (isTimely, dispositionType, dispositionDetails, hearingWaived, minutesSummary, advisoryReport, withdrawalReason, rulingOutcome, settlementDetails). WorkflowGuardConformanceTest::testTheBezwaarBundleIsStillParked existed to stop the bundle from being re-enabled before they were declared. They are now property definitions of their case type, and the guard sweep and the payload sweep walk every package.
  • Deleted: SeedDataService, SeedSummary, SeedBezwaarBeroepData, SeedBezwaarBeroepCommand (occ dossiq:bezwaar:seed, replaced by occ dossiq:package:install bezwaar-beroep), SeedBezwaarWorkflowDefinition (it looked for identifier objectionProceeding, which no seed writes, so it never ran), bezwaar_seed_data.json, ShippedSets::BEZWAAR_BEROEP, and their unit tests.
  • Newman: tests/integration/packages/bezwaar-beroep.postman_collection.json. The packages workflow installs with --all (on-request included) on a clean instance and reads back case types, statuses, roles, a guarded field, both flows (every transition between two statuses of its case type) and the ledger row.
  • Playwright journey: tests/e2e/packages/bezwaar-beroep.spec.ts. An administrator runs seed, opens both case types with their flow under Versions, and runs seed again to get current.
  • OpenSpec change bezwaar-beroep-package: REQ-CT-50 added; the seeder requirements in bezwaar-lifecycle and dossiq-app-scaffold removed; REQ-SETUP-PRO-001/002 modified to describe the action that ships.

Assumptions

  • Subsidie sat in the same parked seed and is not in this package. It moves with the subsidie package, converted from git history (--git-ref).
  • The wizard still offers no seed step. Offering the on-request package there is a product choice.
  • Q10 (install mode) stays on the recommended option (on-request for a parked seed).
  • An instance that ran the old seed holds ledger rows under set bezwaar-beroep at 1.0.0, so the installer reads it as current and writes nothing over it.

Verified

  • Unit, targeted, exit 0: tests/Unit/Architecture (96), Settings (298), Repair (387), Controller (1142), Command, Service/CaseDefinition, AppInfo, SeedDataOriginTest.
  • Control on the payload sweep: an unknown key planted in a package status and case type was reported, then reverted.
  • phpcs, phpmd, phpstan and psalm on the changed lib files: clean.
  • Package validated with the real PackageValidator; rows checked against the dossiq_register.json property types and enums.
  • check:strict: not run. The slot queue did not start my run in 10 minutes (four other lanes held or queued it), so per the lane brief I ran the targeted checks above instead. CI is the full check.
  • Not run locally: Newman and the Playwright journey (no instance with the installer; the browser service was down). They run in CI: the packages workflow and the quality Playwright job. Per decision 185 the unit tests above may only go once the journey has passed, so this PR merges after the journey is green in CI.

Inherited

No inherited findings touched. Stale prose that still names bezwaar_seed_data.json in src/manifest.d/50-subsidie.json, lib/Settings/seed/vth-workflow-templates/bezwaar.json and register.d/46-demo-cases-english.json is left for the subsidie and VTH package PRs.

The bezwaar and beroep case types ship as lib/Settings/packages/bezwaar-beroep/
(install: on-request), written by the package installer. The setup action
`seed` installs it; installed or already current records setup_seed_done, a
refusal or failed write answers 422 with the installer's message.

Converted once, offline, by scripts/packages/seed-to-package.py: status names
resolved into fixed UUIDs, a `*` source status (honoured by no reader) expanded
into one transition per open status, flows published. The nine fields the
flows guard on are declared as property definitions, so every guarded
transition can be taken; the guard sweep and the payload sweep now walk every
package.

Deleted: SeedDataService, SeedSummary, SeedBezwaarBeroepData,
SeedBezwaarBeroepCommand (occ dossiq:bezwaar:seed), SeedBezwaarWorkflowDefinition,
bezwaar_seed_data.json and their unit tests. Newman collection and Playwright
journey added (decision 185).
…-bezwaar-beroep

# Conflicts:
#	tests/Unit/Architecture/catch-return-null.allowlist.json
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/dossiq @ fc06343

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 ✅ ✅ 659/659
app:check-code ⏭️
info.xml ✅
REUSE ❌
lockfile sync ✅
PHPUnit 🚨 NO VERDICT — enabled but never ran
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-10 21:27 UTC

Download the full PDF report from the workflow artifacts.

@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/dossiq @ cebf4d9

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 ✅ ✅ 659/659
app:check-code ⏭️
info.xml ✅
REUSE ❌
lockfile sync ✅
PHPUnit 🚨 NO VERDICT — enabled but never ran
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-11 07:48 UTC

Download the full PDF report from the workflow artifacts.

…ckage-bezwaar-beroep

# Conflicts:
#	appinfo/info.xml
#	lib/Repair/SeedBezwaarWorkflowDefinition.php
#	tests/Unit/Architecture/catch-return-null.allowlist.json
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/dossiq @ 0299f31

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 ✅ ✅ 659/659
app:check-code ⏭️
info.xml ✅
REUSE ❌
lockfile sync ✅
PHPUnit 🚨 NO VERDICT — enabled but never ran
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-12 07:52 UTC

Download the full PDF report from the workflow artifacts.

…s as OpenRegister answers them

CI's packages job: OpenRegister answers the JSON text of a flow's
transitions as a list, and the collection parsed it as text. It takes
either now. The journey imports its type on its own line and is
formatted, which eslint and prettier asked for.
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/dossiq @ d1c21d6

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 ✅ ✅ 659/659
app:check-code ⏭️
info.xml ✅
REUSE ❌
lockfile sync ✅
PHPUnit 🚨 NO VERDICT — enabled but never ran
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-12 08:22 UTC

Download the full PDF report from the workflow artifacts.

…ckage-bezwaar-beroep

Development now seeds the Bezwaar case type with the Woo case type
(register.d/84) and read the old bezwaar seed in a test. The seed stays
deleted. The package names Bezwaar's statuses by the uuids the register seeds,
so installing it completes the seeded case type; the test that read the parked
seed now checks that. catch-return-null ceiling 262 (development's 263 minus
the deleted SeedDataService site).
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/dossiq @ 9792da5

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 ✅ ✅ 659/659
app:check-code ⏭️
info.xml ✅
REUSE ❌
lockfile sync ✅
PHPUnit 🚨 NO VERDICT — enabled but never ran
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-12 10:42 UTC

Download the full PDF report from the workflow artifacts.

…ow moves by; the read-back reads the version record

The shipped case flow moves a case by status role (intake, in-progress, closed).
The Bezwaar and Beroep statuses had none, in the package and in the register
fragment that seeds Bezwaar, so the flow would stop at its first step on a case
of either type. Both now name the three.

On a clean instance the register seeds the Bezwaar case type before the package
installs, so the package finds it present and writes no ledger row for it. The
collection now reads the package's version record, and the ledger row of the
Beroep case type, which the package does write.
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/dossiq @ 866b3df

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 ✅ ✅ 659/659
app:check-code ⏭️
info.xml ✅
REUSE ❌
lockfile sync ✅
PHPUnit 🚨 NO VERDICT — enabled but never ran
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-12 14:03 UTC

Download the full PDF report from the workflow artifacts.

@rubenvdlinde
rubenvdlinde marked this pull request as ready for review October 12, 2026 14:08
@rubenvdlinde
rubenvdlinde merged commit 941667a into development Oct 12, 2026
49 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