Repository navigation
train: land 19 ready PRs (12 Oct, d) - #3845
Merged
Merged
Conversation
… draft is not received (decision 179, 180)
…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)
…configured case types, contestedCase)
…tered with the intake listeners
# 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.
…uf-writes-through-integriq
…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.
…ended, on any case type
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.
…d, before it is stored
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.
…nd ReviewPolicy types
…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.
…tside the Termijn path (gate 119)
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.
…GuardTest allows its save()
…searched, attachments stays silent
rubenvdlinde
requested review from
Rem-Dam,
SudoThijn,
WilcoLouwerse,
bbrands02,
remko48 and
rjzondervan
as code owners
October 12, 2026 16:06
Contributor
Quality Report — ConductionNL/dossiq @
|
| 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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Train 4 of 12 Oct (19 PRs counting the stacked ones): one branch,
git merge --no-ffof 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
appinfo/info.xml: one conflict (feat(access): a case type says per record who on the case may update it #3825 vs development), took the higher version.info.version0.20.37 to 0.20.40 (highest seen 0.20.39, feat(access): a case type says per record who on the case may update it #3825, plus one). Digests regenerated twice, last after refactor(money): payouts go through the finance app, on generic names (C16 part 2) #3769.81-woo-verzoek1.4.3 to 1.4.5 (two PRs, one step each).60-termijnbewaking1.0.1 to 1.1.0 (refactor(money): payouts go through the finance app, on generic names (C16 part 2) #3769).psalm.inlineSuppressions266 to 263..procedure-code-baseline.jsonstays 206 (measured withcheck_procedure_code.py --ref HEAD).DayCountended up inlib/Service/Term/(the lane moved it itself). An earlier move of mine toService/Time/was reverted in favour of L7's.tests/vitest/caseSearchDeclarations.spec.jsand39-search-declarations.json: feat(intake): a request form opens the case at once (decision 179) #3655 added four case properties; three declare a search,attachmentsis silent.firstTodayBanner.spec.jscame in unformatted, prettier fixed.Housekeeping commits
--helpfile.DecisionChangeRequestedEventandDecisionVisibilityRequestedEventstubs now carryDecisionandReviewPolicy(new declaration-only stubs); the only caller,CaseDecisionAccessListenerTest, updated.@usesthat CI's risky check wants;PartialSaveGuardTestallowsStoredDecisionTables::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 withpcov.directoryset: no risky tests; its one failure isRefusalGroundsSnapshotTest, 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 inheritedeslint.inlineDisables15 against 14 (no disable added by the train). Gate 119: 206 against 206.Admin steps
POST /api/cases/reviewer-access/reconcileonce (feat(access): a case type says per record who on the case reads it #3814, feat(review): a batch reviewer outside the staff group is refused with a sentence #3815, feat(access): a case type says per record who on the case may update it #3825). Until then new assignees read batches and rules but cannot change them.dossiq-background-service); on thestufEndpointsetacceptsWrites,zaaktypeMappingsanddocumentTypeMappings; on the integriq source setacceptsProviderRequestsand a WS-Security UsernameToken; point the zaaksysteem's kennisgevingen at/apps/integriq/api/stuf-zkn/provider/{sourceId}/cases.MoveDecisionTablesToOpenRegisterrepair step copies existing decision tables into OpenRegister on upgrade.Inherited
Hydra gates 16, 22, 43, 51, 53, 55, 101, 104, 107 and
eslint.inlineDisables15 against 14 are inherited and not fixed here.