Skip to content

refactor(dossiq): the subsidie case type ships as an on-request package - #3768

Merged
rubenvdlinde merged 57 commits into
developmentfrom
refactor/r1-package-subsidie
Oct 12, 2026
Merged

rubenvdlinde merged 57 commits into
developmentfrom
refactor/r1-package-subsidie

Conversation

@rubenvdlinde

@rubenvdlinde rubenvdlinde commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

Status, 12 October

The top of a stack of three: #3669, #3725, #3768. It also holds #3791 (vth), because the stack and #3791 delete seeders that the same sweep tests name. Merging this head lands the stack. Land #3791 first or in the same train.

  • Holds development with merge train 3 (train: land 18 ready PRs (12 Oct, c) #3809).
  • Resolved where the stack met refactor(vth): the VTH procedure is a case definition package, and its seeders are deleted #3791: every deleted seeder stays deleted; WorkflowGuardConformanceTest keeps the package filters and the draft flow sweep and no longer reads vth-templates/; the deadline coverage sweep reads the packages a fresh install installs, not the three installed on request.
  • For whoever owns deadlines: bezwaar, beroep, the three besluitvorming case types and subsidie declare a processing deadline and ship no deadline definition. The old seeds had the same gap; no sweep read them.
  • The subsidie statuses name the roles the case flow moves by.
  • composer check:strict ran once on 85347cf: lint, phpcs, phpmd, psalm and phpstan passed, PHPUnit had one failure, from this stack (the statuses without a role). After the fix the full PHPUnit suite ran again on efbd267: 8,304 tests, exit 0. After that: the tightened debt baseline, the merge of refactor(vth): the VTH procedure is a case definition package, and its seeders are deleted #3791's prettier fix, nothing in PHP.
  • Gate 119: .procedure-code-baseline.json is 187 on this head (206, less 8 for the stack, less 11 for refactor(vth): the VTH procedure is a case definition package, and its seeders are deleted #3791).
  • .debt-baseline.json: phpmd.suppressWarnings 187, phpunit.skips 5, psalm.inlineSuppressions 258.
  • CI, read once on this head: "Install packages on a clean instance" is green, for all three pull requests of the stack. Red in CI and not from this stack: check:debt-ratchet on eslint.inlineDisables (15 against a baseline of 14, the same on development) and the Quality Report that sums the jobs.
  • The journeys run in the live pass and nightly, not on this pull request (decision 214).

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

What

The generic subsidie case type becomes the case definition package subsidie, marked install: on-request (hydra ADR-118, decision 185). This is refactor lane R1. It is stacked on #3725 (besluitvorming), which is stacked on #3669 and #3654: merge those first. The journey needs #3725's package API.

  • Package. lib/Settings/packages/subsidie/ holds the case type (category "Subsidies"), 5 statuses, 3 roles and one published flow, all with fixed ids. scripts/packages/seed-to-package.py converted it once from the parked _caseTypes_disabled entry in the old bezwaar seed, read from Case definition package installer: install procedures from lib/Settings/packages (C19) #3654's head with --git-ref. Bezwaar and beroep become a case definition package (ADR-118, R1) #3669 deleted that seed, so until now no instance could install this case type.
  • beschiktBedrag. The flow's "Subsidie beschikken" transition has a requiredField guard on beschiktBedrag, so the package declares it as a property definition (number, at least 0).
  • Kept: Repair/MigrateSubsidieRegelingToCaseType. It moves instance data (subsidieRegeling rows into case types), not shipped configuration, and stays until its one-release window ends (coordinator decision). The per-scheme demo case types in register.d/50-subsidie.json are untouched.
  • Tests: a Newman collection tests/integration/packages/subsidie.postman_collection.json (9 reads, written by scripts/packages/package-to-newman.py) and a Playwright journey tests/e2e/packages/subsidie.spec.ts.
  • Spec: OpenSpec change subsidie-package (REQ-SUB-011 added to subsidieverlening-keten).

Verified locally

  • tests/Unit/Settings (299, including the package category, guard and payload sweeps): exit 0.
  • Control: with beschiktBedrag removed, WorkflowGuardConformanceTest::testEveryRequiredFieldGuardNamesAFieldACaseCanAnswer fails naming package:subsidie/flows/subsidie.json/transitions/1/guards/0: beschiktBedrag (r1-logs/r5-sub-guard-red.log). So the sweep does see this package.
  • Every shipped package validates with the real PackageValidator.
  • composer check:strict was not run: this PR changes no PHP, only package JSON, a TypeScript journey, a Postman collection and OpenSpec files. CI runs eslint on the journey.
  • Not run locally: the Newman collection and the Playwright journey. CI runs both. The PR stays draft until the journey is green (decision 185).

rubenvdlinde and others added 22 commits October 10, 2026 23:05
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
…, R1)

The three deprecated bvw bundles ship as lib/Settings/packages/besluitvorming,
install on-request (decision 190), converted once with fixed ids and
published flows. A generic package API (GET /api/packages, POST
/api/packages/{id}/install) replaces the besluitvorming activate route and
serves every on-request package. Instances where the old seeder ran get
their case types adopted by identifier, not duplicated.

Deleted: BesluitvormingTemplateService, Besluitvorming/TemplateBundleSeeder,
Besluitvorming/WorkflowReferenceResolver, SeedBesluitvormingTemplates,
BesluitvormingController and route, the bvw-*.json bundles and their unit
tests. Newman collection and Playwright journey added; package-to-newman.py
writes a package's read-back collection.
lib/Settings/packages/subsidie/ holds the generic subsidie case type
(category Subsidies), 5 statuses, 3 roles and a published flow, converted by
scripts/packages/seed-to-package.py from the parked entry in the old bezwaar
seed. It declares the property definition beschiktBedrag, which the
beschikking transition's requiredField guard names.

Adds the Newman read-back collection, the Playwright journey
tests/e2e/packages/subsidie.spec.ts and openspec change subsidie-package
(REQ-SUB-011). MigrateSubsidieRegelingToCaseType stays until its one-release
window ends.
…ists; the VTH seeders are deleted (unverified)
…ckage-bezwaar-beroep

# Conflicts:
#	appinfo/info.xml
#	lib/Repair/SeedBezwaarWorkflowDefinition.php
#	tests/Unit/Architecture/catch-return-null.allowlist.json
…ckage-besluitvorming

# Conflicts:
#	tests/Unit/Architecture/catch-return-null.allowlist.json
…ckage-vth

# Conflicts:
#	appinfo/info.xml
#	tests/Unit/Repair/Vth/VthCaseTypeChildSeederTest.php
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/dossiq @ eb07677

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.

…ision 208)

The drafts in lib/Settings/vth-templates/ become draft flows of the vth
package, and the directory goes. No case follows a draft until an
administrator publishes it. The workflow backfill no longer counts a
draft as a flow a case type has, so a case type that ships only a draft
keeps its basis flow. Unverified: the Settings, Repair and Architecture
suites are queued.
…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.
…ckage-besluitvorming

Development renamed the mandaat guard on the old mandaatbesluit template; the
template stays deleted and the package flow carries the new guard
(delegatedAuthorityGuard with actField mandaatCategorie). catch-return-null
ceiling 261.
…ckage-subsidie

# Conflicts:
#	appinfo/info.xml
#	appinfo/routes.php
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/dossiq @ fd6c4a8

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:39 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 @ 12bd49e

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:02 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