@@ -40,7 +40,7 @@ Open Register drijft apps zoals OpenCatalogi, Procest, Pipelinq en Software Cata
4040
4141Vrij en open source onder de EUPL-licentie.
4242 ]]> </description >
43- <version >2.0.12 </version >
43+ <version >2.0.15-unstable.20260905143606 </version >
4444 <licence >EUPL-1.2</licence >
4545 <author mail =" info@conduction.nl" homepage =" https://www.conduction.nl/" >Conduction</author >
4646 <namespace >OpenRegister</namespace >
@@ -129,27 +129,26 @@ Vrij en open source onder de EUPL-licentie.
129129 <job >OCA\OpenRegister\BackgroundJob\TransferCheckJob</job >
130130 <job >OCA\OpenRegister\BackgroundJob\SyncConfigurationsJob</job >
131131 <job >OCA\OpenRegister\BackgroundJob\SyncDataJob</job >
132- <job >OCA\OpenRegister\BackgroundJob\ScheduledWorkflowJob</job >
133132 <job >OCA\OpenRegister\BackgroundJob\ScheduledNotificationJob</job >
134- <job >OCA\OpenRegister\BackgroundJob\ActionScheduleJob</job >
135133 <job >OCA\OpenRegister\BackgroundJob\TenantDeprovisionJob</job >
136134 <job >OCA\OpenRegister\BackgroundJob\TenantPurgeJob</job >
137135 <job >OCA\OpenRegister\BackgroundJob\TenantUsageSyncJob</job >
138- <job >OCA\OpenRegister\BackgroundJob\ExecutionHistoryCleanupJob</job >
139136 <job >OCA\OpenRegister\BackgroundJob\FlowRunRetentionJob</job >
140137 <job >OCA\OpenRegister\BackgroundJob\AuditSealJob</job >
141138 <job >OCA\OpenRegister\BackgroundJob\AvgRetentionJob</job >
142139 <job >OCA\OpenRegister\BackgroundJob\DsarRetentionSweepJob</job >
143140 <job >OCA\OpenRegister\BackgroundJob\ReportRenderJob</job >
144141 <job >OCA\OpenRegister\BackgroundJob\NotificationQueueFlushJob</job >
142+ <job >OCA\OpenRegister\BackgroundJob\TaskScheduledNotificationJob</job >
145143 <job >OCA\OpenRegister\BackgroundJob\ArchivalRetentionTask</job >
146144 <job >OCA\OpenRegister\BackgroundJob\FlowRunWorker</job >
147145 <job >OCA\OpenRegister\BackgroundJob\FlowScheduleWorker</job >
146+ <job >OCA\OpenRegister\BackgroundJob\FlowTimerWorker</job >
148147 <job >OCA\OpenRegister\BackgroundJob\HandoffQueueDrainJob</job >
149148 <job >OCA\OpenRegister\BackgroundJob\TemporalCalculationSweepJob</job >
150149 <job >OCA\OpenRegister\BackgroundJob\DsarDpiaDetectionJob</job >
151- <job >OCA\OpenRegister\BackgroundJob\ScheduleReconcilerJob</job >
152150 <job >OCA\OpenRegister\BackgroundJob\DbalIntrospectionJob</job >
151+ <job >OCA\OpenRegister\BackgroundJob\OAuth2TokenRefreshJob</job >
153152 <job >OCA\OpenRegister\BackgroundJob\ScheduledReportJob</job >
154153 <job >OCA\OpenRegister\BackgroundJob\GroupReconcilerJob</job >
155154 </background-jobs >
@@ -219,6 +218,27 @@ Vrij en open source onder de EUPL-licentie.
219218 Copies the register-authored ones across, disabled, leaving the
220219 register rows in place so the step stays reversible. -->
221220 <step >OCA\OpenRegister\Repair\MigrateRegisterFlowsToTable</step >
221+ <!-- CLEANS UP AFTER THE VERSION OF THE STEP ABOVE THAT DID NOT SCOPE
222+ ITS READ. It asked findAll() for register `flows` / schema `flow`
223+ at the TOP LEVEL of the config; ObjectService reads that pair
224+ from `filters` and nowhere else, so both keys were inert and the
225+ read ran against whatever register/schema the SHARED service was
226+ still carrying. saveObject() sets that context and never restores
227+ it, and ImportCredentialBrokerRegister saves two example objects
228+ through it four steps earlier — so the migration copied both
229+ `brokeredcredential` examples into openregister_flows: no nodes,
230+ no edges, no trigger, owner `__system__`.
231+
232+ Post-migration ONLY. A fresh install runs the fixed migration,
233+ which cannot produce these rows, so listing this under <install>
234+ would be a guaranteed no-op.
235+
236+ Removes a row ONLY on the full conjunction: openregister-owned,
237+ disabled, no nodes, no edges, no trigger/cron, never dispatched
238+ (lastRun* null AND zero run rows), AND its uuid still resolves to
239+ a register object whose schema is not `flow`. Anything ambiguous
240+ is REPORTED by uuid, not deleted. Idempotent. -->
241+ <step >OCA\OpenRegister\Repair\PurgePhantomMigratedFlows</step >
222242 <step >OCA\OpenRegister\Repair\ImportTrustConfigurationRegister</step >
223243 <step >OCA\OpenRegister\Repair\SeedVocabularyRegister</step >
224244 <step >OCA\OpenRegister\Repair\RegisterOpenRegisterWithDoriath</step >
@@ -240,6 +260,42 @@ Vrij en open source onder de EUPL-licentie.
240260 Post-migration, because it needs the flow_* columns the schema
241261 migration adds. -->
242262 <step >OCA\OpenRegister\Repair\RechainAuditTrailForFlowAttribution</step >
263+ <!-- Task fixtures (flow-task-entity, ADR-001): the five seed
264+ groups from the change's design.md, idempotent on uuid.
265+ OPT-IN: runs only when app config openregister/seed_demo_tasks
266+ is true, so a production instance never receives demo rows;
267+ a demo instance and the test environment switch it on.
268+ Post-migration because the step needs the openregister_tasks
269+ tables its own change's migration creates. -->
270+ <step >OCA\OpenRegister\Repair\SeedTaskFixtures</step >
271+ <!-- Business timers (flow-business-timers, ADR-001): the flow-timers
272+ register with its working-calendar and escalation-ladder schemas
273+ and seeded defaults (nl-national, nl-termijn-default), idempotent
274+ with force: false so administrator edits survive. Then the
275+ invariant check, which COUNTS orphaned or inconsistent timers and
276+ reports them rather than cancelling them. Post-migration because
277+ both need the openregister_flow_timers tables. -->
278+ <step >OCA\OpenRegister\Repair\SeedFlowTimerRegister</step >
279+ <step >OCA\OpenRegister\Repair\CheckFlowTimerInvariants</step >
280+ <!-- Approval consolidation (flow-approval-consolidation): moves
281+ every approval chain, step set and in-flight decision onto
282+ task sequences, verifies the reconciliation and FAILS LOUDLY
283+ on any mismatch. Idempotent on the reconciliation columns.
284+ Post-migration because it needs openregister_task_sequences
285+ and the sequence columns on openregister_tasks. The legacy
286+ tables are kept; rollback is the
287+ openregister:approval:rollback-to-steps command. -->
288+ <step >OCA\OpenRegister\Repair\MigrateApprovalChainsToTasks</step >
289+ <step >OCA\OpenRegister\Repair\SeedCaseFixtures</step >
290+ <!-- Business timers (flow-business-timers, ADR-001): the flow-timers
291+ register with its working-calendar and escalation-ladder schemas
292+ and seeded defaults (nl-national, nl-termijn-default), idempotent
293+ with force: false so administrator edits survive. Then the
294+ invariant check, which COUNTS orphaned or inconsistent timers and
295+ reports them rather than cancelling them. Post-migration because
296+ both need the openregister_flow_timers tables. -->
297+ <step >OCA\OpenRegister\Repair\SeedFlowTimerRegister</step >
298+ <step >OCA\OpenRegister\Repair\CheckFlowTimerInvariants</step >
243299 </post-migration >
244300 <install >
245301 <step >OCA\OpenRegister\Repair\ReconcileDeclaredBackgroundJobs</step >
@@ -281,6 +337,7 @@ Vrij en open source onder de EUPL-licentie.
281337 <step >OCA\OpenRegister\Repair\SeedVocabularyRegister</step >
282338 <step >OCA\OpenRegister\Repair\RegisterOpenRegisterWithDoriath</step >
283339 <step >OCA\OpenRegister\Repair\SeedZgwZakenMigrationPack</step >
340+ <step >OCA\OpenRegister\Repair\SeedFlowTimerRegister</step >
284341 </install >
285342 </repair-steps >
286343
@@ -295,6 +352,9 @@ Vrij en open source onder de EUPL-licentie.
295352 <!-- App-rename repair: re-points registers and schemas at a new owning
296353 app id. Only a DB connection, so the DI graph stays light. -->
297354 <command >OCA\OpenRegister\Command\MigrateSchemaApplicationCommand</command >
355+ <!-- The approval consolidation's reverse repair: an operator-run
356+ rollback tool, deliberately NOT a repair step. -->
357+ <command >OCA\OpenRegister\Command\RollbackApprovalMigrationCommand</command >
298358 <command >OCA\OpenRegister\Command\RechainAuditTrailCommand</command >
299359 <!-- Read-only report: which RBAC groups this instance declares, and whether
300360 anyone belongs to them. Provisioning guarantees a declared group EXISTS;
@@ -310,8 +370,14 @@ Vrij en open source onder de EUPL-licentie.
310370 <!-- field-level-object-encryption: encrypt existing plaintext values of a newly-flagged property. -->
311371 <command >OCA\OpenRegister\Command\EncryptFieldCommand</command >
312372 <command >OCA\OpenRegister\Command\DedupeRegistersCommand</command >
373+ <command >OCA\OpenRegister\Command\AdoptLeafOrganisationsCommand</command >
374+ <command >OCA\OpenRegister\Command\PruneRetiredSchemasCommand</command >
313375 <command >OCA\OpenRegister\Command\RelinkRegisterSchemasCommand</command >
314376 <command >OCA\OpenRegister\Command\ReconcileMagicTablesCommand</command >
377+ <!-- The sanctioned administrative purge. Every HTTP delete route refuses an
378+ archival record; this is the one path that can still destroy one, and it
379+ needs shell access plus an explicit force flag. -->
380+ <command >OCA\OpenRegister\Command\PurgeObjectCommand</command >
315381 <command >OCA\OpenRegister\Command\DedupeConfigurationsCommand</command >
316382 <command >OCA\OpenRegister\Command\ResolverListCommand</command >
317383 <command >OCA\OpenRegister\Command\TimeReconcileCommand</command >
@@ -363,4 +429,14 @@ Vrij en open source onder de EUPL-licentie.
363429 <contactsmenu >
364430 <provider >OCA\OpenRegister\Contacts\ContactsMenuProvider</provider >
365431 </contactsmenu >
432+ <!-- The in-band write-back hook for projected task VTODOs
433+ (flow-task-inbox-projections, design D-6). apps/dav's PluginManager
434+ loads it into the Sabre server; it acts only on VTODOs carrying
435+ X-OPENREGISTER-TASK and refuses an unauthorized edit with a DAV 403
436+ before the client records it. -->
437+ <sabre >
438+ <plugins >
439+ <plugin >OCA\OpenRegister\Dav\TaskVtodoWriteBackPlugin</plugin >
440+ </plugins >
441+ </sabre >
366442</info >
0 commit comments