Skip to content

train: land 19 ready PRs (12 Oct, d) - #3845

Merged
rubenvdlinde merged 86 commits into
developmentfrom
train/2026-10-12-d
Oct 12, 2026
Merged

rubenvdlinde merged 86 commits into
developmentfrom
train/2026-10-12-d

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

Train 4 of 12 Oct (19 PRs counting the stacked ones): one branch, git merge --no-ff of each PR's real head, shared files resolved once, the full suite once. GitHub should mark the included PRs merged when this lands.

Included (head merged)

Excluded

Conflicts and shared files

Housekeeping commits

  • Removed the stray empty --help file.
  • StubApiDriftTest: the OpenRegister DecisionChangeRequestedEvent and DecisionVisibilityRequestedEvent stubs now carry Decision and ReviewPolicy (new declaration-only stubs); the only caller, CaseDecisionAccessListenerTest, updated.
  • Three tests got the @uses that CI's risky check wants; PartialSaveGuardTest allows StoredDecisionTables::save() (the row is a whole object).

Exit codes (final head, one run each)

composer lint, phpcs, phpmd, phpstan, psalm: 0. Full PHPUnit --no-coverage (8,514 tests): 0. pcov run in a throwaway php:8.3 container with pcov.directory set: no risky tests; its one failure is RefusalGroundsSnapshotTest, which needs a writable checkout and passes on the host. vitest --maxWorkers=2 (3,356): 0. npm run lint, format, check:schema-l10n, test:l10n, check:l10n-js: 0. debt-ratchet: 1 only on inherited eslint.inlineDisables 15 against 14 (no disable added by the train). Gate 119: 206 against 206.

Admin steps

Inherited

Hydra gates 16, 22, 43, 51, 53, 55, 101, 104, 107 and eslint.inlineDisables 15 against 14 are inherited and not fixed here.

…ype; case schema carries the confirmation markers (decision 179, 181)
…rtal requests into cases (decision 181, Q8, Q10)
…tart, and its start date follows the term (decision 181, Q11)
# Conflicts:
#	lib/Listener/DeadlineCaseCreatedListener.php
Money\PayoutRequester raises a payout in shillinq with PayableRaisedEvent
and withdraws one with PayableCancelRequestedEvent. DwangsomUitbetalingService
becomes Money\PayoutService: preparePayout raises before it writes (a refusal
writes nothing) and keeps payableId; a new PayoutController route lets a
caseworker with mutation access prepare one. An objection withdraws the
payout from finance before it goes on hold, and resolving it raises the new
amount under a new reference.

DwangsomPaymentCallbackController becomes PayoutCallbackController over
Money\SignedPayoutCallback: the same URL accepts X-Shillinq-Signature beside
the frozen X-Procest-Signature and maps approved/paid/rejected onto the
stored statuses. NoticeOfDefaultService/Controller become
Money\AccrualNoticeService and AccrualNoticeController; URLs do not move.
dwangsomUitbetaling 1.1.0 adds payableId (ADR-118 C16 part 2).
…yout-handoff

# Conflicts:
#	appinfo/info.xml
The moved AccrualNoticeServiceTest imports its calendar fakes, the date
audit names the moved files, the catch allowlist ceiling equals its entries
again (256), and TermijnTimerFiredListener drops the SettingsService it only
used for the retired accrual sync (phpstan property.onlyWritten).
Rate band fields carry a title and a description, with catalogue keys.
The shillinq event stubs cite dossiq's payout spec, not shillinq's.
The two body readers carry a spec tag. Two inline psalm suppressions
that psalm.xml already covers are gone. PayoutServiceTest names the
fragment merger it runs.
…egriq, as the service account (decision 206)

Integriq authenticates the sender and maps the StUF message onto a generic
operation. ConnectedSystemCaseWriter carries it out as the background service
account with the access rules on. A stufEndpoint opts in with acceptsWrites.
Dossiq has no StUF write route of its own.
…y move

Characterisation for termijnbewaking-op-engine-timers 4.2, green on the
code as it stands: the throughput dashboard's days left and throughput
(CaseEnricher had no test of its own) and the exact days overdue of a
stalled milestone, late and early.
A reviewerAccess.records entry takes a readers rule: all (the default),
assignee, or own with the field that names the record's reviewer or the
reviewer row it belongs to. CaseRecordReaders computes the readers of one
record and CaseReviewerAccess::reconcile() asks it per record, so a
narrower rule revokes the grants that no longer hold (REQ-CRA-008).

Configured for the Woo case type: a review batch is read by the assignee
and its own reviewer, a triage rule by the assignee only. Register
0.20.38, Woo case type object 1.4.4.
termijnbewaking-op-engine-timers 4.2, part 1 of 4 (REQ-TOT-007).

Service/Termijn/DayCount names the two questions a caller can ask:
between() for a span and signed() for days left or days overdue.
WorkingDayRoll::daysBetween() uses it for calendar mode. The deadline
countdowns outside the calculation classes now ask it: the complaint
alert window, the throughput dashboard's days left and throughput, and
the days overdue of a stalled milestone. No count changes; the
characterisation tests of the previous commit stay green.

DayCountIsTheOnlyDiffTest refuses a new ->diff( under lib/ and lists the
23 files still to move, each with its reason.
…h a sentence

The review schemas follow the closed register, and OpenRegister keeps the
schema as the ceiling of a grant. A reviewer outside dossiq-medewerkers
would get a task and read nothing. CaseReviewerAccess::admitsReader()
answers who a grant can reach (REQ-CRA-009) and ReviewBatches::create()
refuses anybody else before it writes, naming the group.
Development landed the receipt and start dates on the same listener
(receipt-and-start-dates-are-set-at-creation, D-7). The decision 179
behaviour is re-expressed on that listener instead of beside it:

- a draft case is skipped on both create events; the save that sends it
  is its receipt (decision 180)
- the start date follows a later term start (decision 181, Q11), in
  CaseReceiptDates; REQ-TERM-042 amended
- the duplicate bezwaar-behandeling seed is dropped for the shipped
  bezwaar case type; one setting portal_filing_case_types maps a portal
  action to its case type (decision 182)
- register 0.20.38, case schema 1.44.0
termijnbewaking-op-engine-timers 4.2, part 2 of 4 (REQ-TOT-007). The
advice, objection archive, DSO deadline and milestone stall timers count
the days from their anchor to their end through DayCount. No armed SLA
changes: the timers' own tests pin it to the day and were mutation-checked
on the old code first. Allowlist 23 to 19.
…uf-writes-through-integriq

The integriq event stubs cite dossiq's own StUF requirements (gate 46), as
train 3 did for the stubs it took. Register version 0.20.38 for the
stufEndpoint 1.2.0 fragment and the case origin fields.
…yout-handoff

# Conflicts:
#	appinfo/info.xml
#	tests/Unit/Architecture/catch-return-null.allowlist.json
…sion-tables' into train/2026-10-12-c"

This reverts commit c9cfb5d.
…gue identifier

The listener read caseType.slug, which the shipped caseType schema does not
declare, so a mapping keyed on anything but the uuid named no zaaktype on a
real instance. It now reads identifier, which is what the stufEndpoint schema
says the mapping is keyed on and what the write side resolves. The test
double's case type row is validated against the shipped schema.
…s one) and tighten psalm.inlineSuppressions to 265
Characterisation for termijnbewaking-op-engine-timers 4.2, part 4, green
on the code as it stands. Six counts had no test that a wrong number
turned red: average complaint resolution days, the two average term
durations of the deadline report, the days an imported extension adds,
the sign of a KPI duration and the days left in a deletion window.
termijnbewaking-op-engine-timers 4.2, part 4 of 4 (REQ-TOT-007). Nine
classes that count elapsed days for a report, an age or a window ask
DayCount. No count changes.

KpiAggregationService and WorkQueueService stay on the allowlist: both
sit at the PHPMD coupling limit. The sweep ends at 26 of 31 sites moved;
the allowlist holds 5 files, 14 to 5 in this part.
… name outside the Termijn path (gate 119)"

This reverts commit 1813ecd.
All four tasks are built and on development: the your-teams-queue preset
and the My team view filter on @mygroups, the Team column uses the group
cell, and nextcloud-vue is past the release that carries #1424. Three
requirements move into the main specs (dashboard, my-work-landing,
role-routing-via-or-rbac). No code cites the change path.
@rubenvdlinde
rubenvdlinde merged commit 831ca55 into development Oct 12, 2026
6 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/dossiq @ 5e4f85c

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 ✅ 8510/8510 · 4 skipped
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 16:37 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