Commit 1799478
authored
feat(flow): automatic actions become OpenRegister flows, and the dead surface goes (#1343)
* refactor(flow)!: move the node ids from procest.* to dossiq.*
The app-id rename (#1329) rewrote 1765 files and did not reach this directory,
because these fifteen nodes landed after it. So an OpenRegister node catalogue
served `procest.action.sendEmail` under an app named Dossiq — the flow-node id
is one more channel the rename inventory has to cover, alongside the ones
info.xml already documents.
BREAKING, deliberately and with the tradeoff named. A node id is a runtime
lookup: an OR flow referencing `procest.sendEmail` now resolves to nothing, and
a missing node is silent — no error, the step simply has no node. Registering
both ids with the old one deprecated was the alternative and was declined: these
nodes are days old, field usage is effectively nil, and a permanent alias buys
compatibility nobody needs at the price of a catalogue that shows every action
twice forever.
The class names move with the ids (ProcestActionNode -> DossiqActionNode, and so
on for all nineteen files) — a class called Procest* inside namespace OCA\Dossiq
is the same half-finished rename read from the other side.
BOTH ID SPACES STAY DISTINCT. `dossiq.*` is the live transition vocabulary the
dispatcher fires; `dossiq.action.*` is the configured-action catalogue. Both
still ship a sendEmail, so SideEffectDispatcherTest::testItResolvesTheLiveIdSpace
keeps proving the dispatcher resolves the live space and not the catalogue —
crossing them would run a different class with different config keys.
Also renamed the personal-settings mount id (`procest-personal-settings` ->
`dossiq-`): template and mount call are one pair, no stored data, nothing else
reads it.
LEFT ALONE, on purpose: `procest.tenant.*` / `procest.parafering.*` audit action
keys and the `Open Registers/Procest` register folder are values already written
into stored rows and on disk — info.xml calls them frozen and they are. Likewise
the historical issue refs, archived @SPEC paths, MigrateUserPreferences' OLD_APP_ID,
and `procestermijn`, which is a Dutch word and not the app.
LIVE-VERIFIED: GET /api/flow/node-catalog returns 45 nodes, 15 dossiq.*, zero
procest.*. Suite 2406 green, phpcs 0 errors, phpmd 0, phpstan [OK].
* feat(flow): automatic actions become OpenRegister flows, and the dead surface goes
`automaticAction` objects have never executed. `SideEffectDispatcher` runs the
SEPARATE `Service\Transitions` vocabulary keyed on an inline `type`; nothing has
ever read these objects at run time. So `/settings/automatic-actions` was an
admin surface over a capability with no runtime behind it — the same shape as
the AVG page C1 retired.
MIGRATION (`occ dossiq:actions:migrate-to-flows --user=<uid> [--dry-run]`).
Each action becomes a flow whose single action node is the `dossiq.action.*`
node this app already contributes, wrapped in a manual trigger and an end so
OpenRegister will actually run it. That is what makes the configuration
executable for the first time.
IT IS A COMMAND, NOT A REPAIR STEP, AND THAT WAS FORCED. `FlowService` refuses
to create a flow without a signed-in owner AND an active organisation — it
throws rather than store an orphan that could never be seen, run or edited
again. An upgrade runs as nobody, and `runAsSystem()` elevates RBAC while
leaving both null, so an upgrade-time migration could only ever have thrown.
`--user` is required and has no default: the flows inherit that identity
permanently, so a guessed owner would be permanent too.
THE FLOWS LAND ENABLED, which the user chose with the consequence stated: these
are configured emails, webhooks and document generation that have never fired,
and enabling them means they start. `--dry-run` exists for exactly that reason
and the description says so.
An action type NO node implements is SKIPPED, not wrapped. Writing a flow around
an unresolvable node would rebuild the defect the previous commit just fixed in
the VTH catalog — stored config naming a handler nothing answers to, reporting
success and doing nothing. Idempotency comes from a `dossiq:automaticAction:
<tenantId>:<slug>` marker stored on the flow itself, so a re-run rediscovers the
link from the flow rather than from a ledger that can be lost; the marker is
built from two schema-REQUIRED fields read WITHOUT defaults, because defaulting
either would collapse several actions onto one marker and each migration would
overwrite the last one's flow.
RETIRED: both `/settings/automatic-actions` pages, and `ActionRegistry` +
`ActionHandlerLocator` (556 lines, zero consumers — grepped across lib, src,
tests and routes). The menu entry becomes a deeplink to
`/apps/openregister/#/flows`, hash-routed, which is the trap C1 hit. The six
handler classes STAY: the flow nodes are built on them, so they are now live
code for the first time rather than dead code.
TWO SCHEMA DESCRIPTIONS WERE LYING and are corrected in place rather than
deleted, because the lie is the useful part of the history: `automaticAction`
claimed its slug was "resolved at dispatch time by ActionRegistry", and
`isPublished` claimed "only published actions are dispatched by
SideEffectDispatcher". Neither was ever true. A reader who trusted them would
conclude the objects worked.
Also fixed: the Configuration menu link still pointed at `/settings/admin/procest`
after the rename, so it 404'd.
Tests (6): the create path asserts trigger+action+end and the decoded config;
the skip path proves an unimplemented type writes nothing; the update path
proves a re-run touches the existing flow instead of making a second; an
unidentifiable action fails rather than sharing a marker; a dry run writes
nothing; and one throwing action does not abort the rest.
Suite 2412 green, vitest 343 green, phpcs 0 errors, phpmd 0, phpstan [OK],
webpack builds.
* refactor(besluitvorming)!: retire the agenda compiler — decidiq owns meetings (D1)
decidiq owns agenda-building and meetings, and already surfaces them on a dossiq
case through the `decidesk-decisions` integration leaf. The two pages here were
the second implementation of the same thing.
THE BLOCKER WAS REAL AND IS NOW GONE, VERIFIED AT RUNTIME. This retirement was
held back because dossiq's leaf showed a "Besluitvorming unavailable" fallback
until decidiq shipped its init-script wiring. That wiring is on decidiq
`development` and deployed. Checked in the browser on a dossiq page rather than
by reading decidiq's source: `OCA.OpenRegister.integrations.list()` returns 28
leaves including `decidesk-decisions` (label "Besluitvorming") carrying tab,
widget, widgetCompact, widgetExpanded and widgetEntity surfaces.
1 parent 8550cd8 commit 1799478
97 files changed
Lines changed: 4753 additions & 6634 deletions
File tree
- appinfo
- docs
- static/screenshots/tutorials/admin
- user-guide/admin
- lib
- AppInfo/Registrar
- Command
- Controller
- Flow
- Repair
- Service
- Actions
- Bezwaar
- Parafering
- Subsidie
- Transitions
- Settings
- openspec/changes
- consume-decidesk-besluitvorming-leaf
- page-topology-cleanup
- src
- components/besluitvorming
- dialogs
- manifest.d
- services
- views
- besluitvorming
- voorstellen
- templates/settings
- tests
- Stubs
- Decidiq/Event
- Flow
- Unit
- AppInfo
- Controller
- Flow
- Listener
- Repair
- Service
- Actions
- Transitions
- e2e
- spec-coverage
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
314 | 314 | | |
315 | 315 | | |
316 | 316 | | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
317 | 326 | | |
318 | 327 | | |
319 | 328 | | |
| |||
401 | 410 | | |
402 | 411 | | |
403 | 412 | | |
| 413 | + | |
404 | 414 | | |
405 | 415 | | |
406 | 416 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
105 | 105 | | |
106 | 106 | | |
107 | 107 | | |
108 | | - | |
109 | | - | |
110 | | - | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
111 | 115 | | |
112 | 116 | | |
113 | 117 | | |
| |||
258 | 262 | | |
259 | 263 | | |
260 | 264 | | |
261 | | - | |
262 | | - | |
263 | | - | |
264 | | - | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
265 | 285 | | |
266 | 286 | | |
267 | 287 | | |
268 | 288 | | |
269 | | - | |
| 289 | + | |
| 290 | + | |
270 | 291 | | |
271 | 292 | | |
272 | 293 | | |
| |||
324 | 345 | | |
325 | 346 | | |
326 | 347 | | |
327 | | - | |
| 348 | + | |
| 349 | + | |
328 | 350 | | |
329 | 351 | | |
330 | 352 | | |
| |||
577 | 599 | | |
578 | 600 | | |
579 | 601 | | |
580 | | - | |
581 | | - | |
| 602 | + | |
| 603 | + | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
582 | 607 | | |
583 | 608 | | |
584 | 609 | | |
| |||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | | - | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
10 | 19 | | |
11 | 20 | | |
12 | 21 | | |
13 | | - | |
| 22 | + | |
14 | 23 | | |
15 | 24 | | |
16 | 25 | | |
17 | | - | |
18 | | - | |
19 | | - | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
20 | 31 | | |
21 | | - | |
| 32 | + | |
22 | 33 | | |
23 | | - | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
24 | 37 | | |
25 | | - | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
26 | 47 | | |
27 | | - | |
| 48 | + | |
28 | 49 | | |
29 | | - | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
30 | 53 | | |
31 | | - | |
| 54 | + | |
32 | 55 | | |
33 | | - | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
34 | 59 | | |
35 | | - | |
| 60 | + | |
36 | 61 | | |
37 | | - | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
38 | 68 | | |
39 | | - | |
| 69 | + | |
40 | 70 | | |
41 | | - | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
42 | 75 | | |
43 | 76 | | |
44 | 77 | | |
45 | | - | |
| 78 | + | |
46 | 79 | | |
47 | 80 | | |
48 | 81 | | |
49 | 82 | | |
50 | 83 | | |
51 | | - | |
52 | | - | |
53 | | - | |
54 | | - | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
55 | 89 | | |
56 | 90 | | |
57 | 91 | | |
58 | | - | |
59 | | - | |
| 92 | + | |
| 93 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
60 | 60 | | |
61 | 61 | | |
62 | 62 | | |
63 | | - | |
| 63 | + | |
64 | 64 | | |
65 | 65 | | |
66 | 66 | | |
| |||
71 | 71 | | |
72 | 72 | | |
73 | 73 | | |
74 | | - | |
| 74 | + | |
75 | 75 | | |
76 | 76 | | |
77 | 77 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
41 | 41 | | |
42 | 42 | | |
43 | 43 | | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
44 | 60 | | |
45 | 61 | | |
46 | 62 | | |
| |||
94 | 110 | | |
95 | 111 | | |
96 | 112 | | |
97 | | - | |
98 | | - | |
99 | | - | |
100 | | - | |
101 | | - | |
102 | | - | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
103 | 126 | | |
104 | | - | |
105 | | - | |
106 | | - | |
107 | | - | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
108 | 134 | | |
109 | 135 | | |
0 commit comments