@open-mercato/core 0.6.5-develop.4639.1.0416d895fa → 0.6.5-develop.4670.1.afe50dfd5c

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AGENTS.md CHANGED
@@ -518,6 +518,7 @@ MikroORM's identity-map and subscriber infrastructure can silently discard pendi
518
518
  - Enable `{ transaction: true }` when atomicity matters (all-or-nothing semantics).
519
519
  - Keep `emitCrudSideEffects` / `emitCrudUndoSideEffects` calls **OUTSIDE** `withAtomicFlush`
520
520
  — side effects should only fire after the DB changes are committed.
521
+ - Cache invalidation follows the same rule as side effects: invalidate **after** the DB write commits, never inside the `withAtomicFlush` block. For the opt-in always-consistent read-projection tail (`OM_CACHE_SAFETY_ALWAYS_CONSISTENT`, default OFF) see `.ai/specs/2026-06-05-cache-safety-always-consistent.md`.
521
522
  - This applies to **both** `execute` methods (update commands) and `undo` handlers.
522
523
 
523
524
  ### Commit-boundary guarantee (defense in depth)
@@ -1,23 +1,108 @@
1
1
  const moduleId = "workflows";
2
2
  const features = [
3
3
  { id: "workflows.view", title: "View workflows", module: moduleId },
4
- { id: "workflows.manage", title: "Manage workflows", module: moduleId },
5
- { id: "workflows.view_logs", title: "View workflow logs", module: moduleId },
6
- { id: "workflows.view_tasks", title: "View workflow tasks", module: moduleId },
7
- { id: "workflows.definitions.view", title: "View workflow definitions", module: moduleId },
8
- { id: "workflows.definitions.create", title: "Create workflow definitions", module: moduleId },
9
- { id: "workflows.definitions.edit", title: "Edit workflow definitions", module: moduleId },
10
- { id: "workflows.definitions.delete", title: "Delete workflow definitions", module: moduleId },
11
- { id: "workflows.instances.view", title: "View workflow instances", module: moduleId },
12
- { id: "workflows.instances.create", title: "Start workflow instances", module: moduleId },
13
- { id: "workflows.instances.cancel", title: "Cancel workflow instances", module: moduleId },
14
- { id: "workflows.instances.retry", title: "Retry workflow instances", module: moduleId },
15
- { id: "workflows.instances.signal", title: "Signal workflow instances", module: moduleId },
16
- { id: "workflows.tasks.view", title: "View user tasks", module: moduleId },
17
- { id: "workflows.tasks.claim", title: "Claim workflow tasks", module: moduleId },
18
- { id: "workflows.tasks.complete", title: "Complete workflow tasks", module: moduleId },
19
- { id: "workflows.signals.send", title: "Send workflow signals", module: moduleId },
20
- { id: "workflows.events.view", title: "View workflow events", module: moduleId }
4
+ {
5
+ id: "workflows.manage",
6
+ title: "Manage workflows",
7
+ module: moduleId,
8
+ dependsOn: ["workflows.view"]
9
+ },
10
+ {
11
+ id: "workflows.view_logs",
12
+ title: "View workflow logs",
13
+ module: moduleId,
14
+ dependsOn: ["workflows.view"]
15
+ },
16
+ {
17
+ id: "workflows.view_tasks",
18
+ title: "View workflow tasks",
19
+ module: moduleId,
20
+ dependsOn: ["workflows.view"]
21
+ },
22
+ {
23
+ id: "workflows.definitions.view",
24
+ title: "View workflow definitions",
25
+ module: moduleId,
26
+ dependsOn: ["workflows.view"]
27
+ },
28
+ {
29
+ id: "workflows.definitions.create",
30
+ title: "Create workflow definitions",
31
+ module: moduleId,
32
+ dependsOn: ["workflows.definitions.view"]
33
+ },
34
+ {
35
+ id: "workflows.definitions.edit",
36
+ title: "Edit workflow definitions",
37
+ module: moduleId,
38
+ dependsOn: ["workflows.definitions.view"]
39
+ },
40
+ {
41
+ id: "workflows.definitions.delete",
42
+ title: "Delete workflow definitions",
43
+ module: moduleId,
44
+ dependsOn: ["workflows.definitions.view"]
45
+ },
46
+ {
47
+ id: "workflows.instances.view",
48
+ title: "View workflow instances",
49
+ module: moduleId,
50
+ dependsOn: ["workflows.view"]
51
+ },
52
+ {
53
+ id: "workflows.instances.create",
54
+ title: "Start workflow instances",
55
+ module: moduleId,
56
+ dependsOn: ["workflows.instances.view", "workflows.definitions.view"]
57
+ },
58
+ {
59
+ id: "workflows.instances.cancel",
60
+ title: "Cancel workflow instances",
61
+ module: moduleId,
62
+ dependsOn: ["workflows.instances.view"]
63
+ },
64
+ {
65
+ id: "workflows.instances.retry",
66
+ title: "Retry workflow instances",
67
+ module: moduleId,
68
+ dependsOn: ["workflows.instances.view"]
69
+ },
70
+ {
71
+ id: "workflows.instances.signal",
72
+ title: "Signal workflow instances",
73
+ module: moduleId,
74
+ dependsOn: ["workflows.instances.view"]
75
+ },
76
+ {
77
+ id: "workflows.tasks.view",
78
+ title: "View user tasks",
79
+ module: moduleId,
80
+ dependsOn: ["workflows.view"]
81
+ },
82
+ {
83
+ id: "workflows.tasks.claim",
84
+ title: "Claim workflow tasks",
85
+ module: moduleId,
86
+ dependsOn: ["workflows.tasks.view"]
87
+ },
88
+ {
89
+ id: "workflows.tasks.complete",
90
+ title: "Complete workflow tasks",
91
+ module: moduleId,
92
+ dependsOn: ["workflows.tasks.view"]
93
+ },
94
+ {
95
+ id: "workflows.signals.send",
96
+ title: "Send workflow signals",
97
+ module: moduleId,
98
+ dependsOn: ["workflows.view"]
99
+ },
100
+ {
101
+ id: "workflows.events.view",
102
+ title: "View workflow events",
103
+ module: moduleId,
104
+ dependsOn: ["workflows.view"]
105
+ }
21
106
  // Note: Event triggers are now embedded in workflow definitions.
22
107
  // Trigger management permissions are covered by workflows.definitions.edit
23
108
  ];
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/modules/workflows/acl.ts"],
4
- "sourcesContent": ["const moduleId = 'workflows'\n\nexport const features = [\n { id: 'workflows.view', title: 'View workflows', module: moduleId },\n { id: 'workflows.manage', title: 'Manage workflows', module: moduleId },\n { id: 'workflows.view_logs', title: 'View workflow logs', module: moduleId },\n { id: 'workflows.view_tasks', title: 'View workflow tasks', module: moduleId },\n { id: 'workflows.definitions.view', title: 'View workflow definitions', module: moduleId },\n { id: 'workflows.definitions.create', title: 'Create workflow definitions', module: moduleId },\n { id: 'workflows.definitions.edit', title: 'Edit workflow definitions', module: moduleId },\n { id: 'workflows.definitions.delete', title: 'Delete workflow definitions', module: moduleId },\n { id: 'workflows.instances.view', title: 'View workflow instances', module: moduleId },\n { id: 'workflows.instances.create', title: 'Start workflow instances', module: moduleId },\n { id: 'workflows.instances.cancel', title: 'Cancel workflow instances', module: moduleId },\n { id: 'workflows.instances.retry', title: 'Retry workflow instances', module: moduleId },\n { id: 'workflows.instances.signal', title: 'Signal workflow instances', module: moduleId },\n { id: 'workflows.tasks.view', title: 'View user tasks', module: moduleId },\n { id: 'workflows.tasks.claim', title: 'Claim workflow tasks', module: moduleId },\n { id: 'workflows.tasks.complete', title: 'Complete workflow tasks', module: moduleId },\n { id: 'workflows.signals.send', title: 'Send workflow signals', module: moduleId },\n { id: 'workflows.events.view', title: 'View workflow events', module: moduleId },\n // Note: Event triggers are now embedded in workflow definitions.\n // Trigger management permissions are covered by workflows.definitions.edit\n]\n\nexport default features\n"],
5
- "mappings": "AAAA,MAAM,WAAW;AAEV,MAAM,WAAW;AAAA,EACtB,EAAE,IAAI,kBAAkB,OAAO,kBAAkB,QAAQ,SAAS;AAAA,EAClE,EAAE,IAAI,oBAAoB,OAAO,oBAAoB,QAAQ,SAAS;AAAA,EACtE,EAAE,IAAI,uBAAuB,OAAO,sBAAsB,QAAQ,SAAS;AAAA,EAC3E,EAAE,IAAI,wBAAwB,OAAO,uBAAuB,QAAQ,SAAS;AAAA,EAC7E,EAAE,IAAI,8BAA8B,OAAO,6BAA6B,QAAQ,SAAS;AAAA,EACzF,EAAE,IAAI,gCAAgC,OAAO,+BAA+B,QAAQ,SAAS;AAAA,EAC7F,EAAE,IAAI,8BAA8B,OAAO,6BAA6B,QAAQ,SAAS;AAAA,EACzF,EAAE,IAAI,gCAAgC,OAAO,+BAA+B,QAAQ,SAAS;AAAA,EAC7F,EAAE,IAAI,4BAA4B,OAAO,2BAA2B,QAAQ,SAAS;AAAA,EACrF,EAAE,IAAI,8BAA8B,OAAO,4BAA4B,QAAQ,SAAS;AAAA,EACxF,EAAE,IAAI,8BAA8B,OAAO,6BAA6B,QAAQ,SAAS;AAAA,EACzF,EAAE,IAAI,6BAA6B,OAAO,4BAA4B,QAAQ,SAAS;AAAA,EACvF,EAAE,IAAI,8BAA8B,OAAO,6BAA6B,QAAQ,SAAS;AAAA,EACzF,EAAE,IAAI,wBAAwB,OAAO,mBAAmB,QAAQ,SAAS;AAAA,EACzE,EAAE,IAAI,yBAAyB,OAAO,wBAAwB,QAAQ,SAAS;AAAA,EAC/E,EAAE,IAAI,4BAA4B,OAAO,2BAA2B,QAAQ,SAAS;AAAA,EACrF,EAAE,IAAI,0BAA0B,OAAO,yBAAyB,QAAQ,SAAS;AAAA,EACjF,EAAE,IAAI,yBAAyB,OAAO,wBAAwB,QAAQ,SAAS;AAAA;AAAA;AAGjF;AAEA,IAAO,cAAQ;",
4
+ "sourcesContent": ["const moduleId = 'workflows'\n\nexport const features = [\n { id: 'workflows.view', title: 'View workflows', module: moduleId },\n {\n id: 'workflows.manage',\n title: 'Manage workflows',\n module: moduleId,\n dependsOn: ['workflows.view'],\n },\n {\n id: 'workflows.view_logs',\n title: 'View workflow logs',\n module: moduleId,\n dependsOn: ['workflows.view'],\n },\n {\n id: 'workflows.view_tasks',\n title: 'View workflow tasks',\n module: moduleId,\n dependsOn: ['workflows.view'],\n },\n {\n id: 'workflows.definitions.view',\n title: 'View workflow definitions',\n module: moduleId,\n dependsOn: ['workflows.view'],\n },\n {\n id: 'workflows.definitions.create',\n title: 'Create workflow definitions',\n module: moduleId,\n dependsOn: ['workflows.definitions.view'],\n },\n {\n id: 'workflows.definitions.edit',\n title: 'Edit workflow definitions',\n module: moduleId,\n dependsOn: ['workflows.definitions.view'],\n },\n {\n id: 'workflows.definitions.delete',\n title: 'Delete workflow definitions',\n module: moduleId,\n dependsOn: ['workflows.definitions.view'],\n },\n {\n id: 'workflows.instances.view',\n title: 'View workflow instances',\n module: moduleId,\n dependsOn: ['workflows.view'],\n },\n {\n id: 'workflows.instances.create',\n title: 'Start workflow instances',\n module: moduleId,\n dependsOn: ['workflows.instances.view', 'workflows.definitions.view'],\n },\n {\n id: 'workflows.instances.cancel',\n title: 'Cancel workflow instances',\n module: moduleId,\n dependsOn: ['workflows.instances.view'],\n },\n {\n id: 'workflows.instances.retry',\n title: 'Retry workflow instances',\n module: moduleId,\n dependsOn: ['workflows.instances.view'],\n },\n {\n id: 'workflows.instances.signal',\n title: 'Signal workflow instances',\n module: moduleId,\n dependsOn: ['workflows.instances.view'],\n },\n {\n id: 'workflows.tasks.view',\n title: 'View user tasks',\n module: moduleId,\n dependsOn: ['workflows.view'],\n },\n {\n id: 'workflows.tasks.claim',\n title: 'Claim workflow tasks',\n module: moduleId,\n dependsOn: ['workflows.tasks.view'],\n },\n {\n id: 'workflows.tasks.complete',\n title: 'Complete workflow tasks',\n module: moduleId,\n dependsOn: ['workflows.tasks.view'],\n },\n {\n id: 'workflows.signals.send',\n title: 'Send workflow signals',\n module: moduleId,\n dependsOn: ['workflows.view'],\n },\n {\n id: 'workflows.events.view',\n title: 'View workflow events',\n module: moduleId,\n dependsOn: ['workflows.view'],\n },\n // Note: Event triggers are now embedded in workflow definitions.\n // Trigger management permissions are covered by workflows.definitions.edit\n]\n\nexport default features\n"],
5
+ "mappings": "AAAA,MAAM,WAAW;AAEV,MAAM,WAAW;AAAA,EACtB,EAAE,IAAI,kBAAkB,OAAO,kBAAkB,QAAQ,SAAS;AAAA,EAClE;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW,CAAC,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW,CAAC,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW,CAAC,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW,CAAC,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW,CAAC,4BAA4B;AAAA,EAC1C;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW,CAAC,4BAA4B;AAAA,EAC1C;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW,CAAC,4BAA4B;AAAA,EAC1C;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW,CAAC,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW,CAAC,4BAA4B,4BAA4B;AAAA,EACtE;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW,CAAC,0BAA0B;AAAA,EACxC;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW,CAAC,0BAA0B;AAAA,EACxC;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW,CAAC,0BAA0B;AAAA,EACxC;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW,CAAC,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW,CAAC,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW,CAAC,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW,CAAC,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW,CAAC,gBAAgB;AAAA,EAC9B;AAAA;AAAA;AAGF;AAEA,IAAO,cAAQ;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-mercato/core",
3
- "version": "0.6.5-develop.4639.1.0416d895fa",
3
+ "version": "0.6.5-develop.4670.1.afe50dfd5c",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "scripts": {
@@ -245,16 +245,16 @@
245
245
  "zod": "^4.4.3"
246
246
  },
247
247
  "peerDependencies": {
248
- "@open-mercato/ai-assistant": "0.6.5-develop.4639.1.0416d895fa",
249
- "@open-mercato/shared": "0.6.5-develop.4639.1.0416d895fa",
250
- "@open-mercato/ui": "0.6.5-develop.4639.1.0416d895fa",
248
+ "@open-mercato/ai-assistant": "0.6.5-develop.4670.1.afe50dfd5c",
249
+ "@open-mercato/shared": "0.6.5-develop.4670.1.afe50dfd5c",
250
+ "@open-mercato/ui": "0.6.5-develop.4670.1.afe50dfd5c",
251
251
  "react": "^19.0.0",
252
252
  "react-dom": "^19.0.0"
253
253
  },
254
254
  "devDependencies": {
255
- "@open-mercato/ai-assistant": "0.6.5-develop.4639.1.0416d895fa",
256
- "@open-mercato/shared": "0.6.5-develop.4639.1.0416d895fa",
257
- "@open-mercato/ui": "0.6.5-develop.4639.1.0416d895fa",
255
+ "@open-mercato/ai-assistant": "0.6.5-develop.4670.1.afe50dfd5c",
256
+ "@open-mercato/shared": "0.6.5-develop.4670.1.afe50dfd5c",
257
+ "@open-mercato/ui": "0.6.5-develop.4670.1.afe50dfd5c",
258
258
  "@testing-library/dom": "^10.4.1",
259
259
  "@testing-library/jest-dom": "^6.9.1",
260
260
  "@testing-library/react": "^16.3.1",
@@ -88,6 +88,11 @@ Commands (`commands/people.ts`) demonstrate:
88
88
  4. Side effects with `emitCrudSideEffects` and `emitCrudUndoSideEffects`
89
89
  5. Include `indexer: { entityType, cacheAliases }` in both directions
90
90
 
91
+ ## Transaction Safety
92
+
93
+ - Multi-phase scalar + relation mutations (e.g. update commands that also sync tags) use `withAtomicFlush(em, phases, { transaction: true })` from `@open-mercato/shared/lib/commands/flush` — never interleave `em.find`/`em.findOne` between a scalar mutation and `em.flush()`.
94
+ - Side effects (`emitCrudSideEffects`) and cache invalidation fire **after** commit, outside the `withAtomicFlush` block. See `packages/core/AGENTS.md` → "Entity Update Safety — `withAtomicFlush`" and `.ai/specs/2026-06-05-cache-safety-always-consistent.md`.
95
+
91
96
  ## Custom Field Integration
92
97
 
93
98
  Use `collectCustomFieldValues()` from `@open-mercato/ui/backend/utils/customFieldValues`:
@@ -135,4 +135,4 @@ await withAtomicFlush(em, [
135
135
  await emitCrudSideEffects({ ... })
136
136
  ```
137
137
 
138
- Never run `em.find`/`em.findOne` between scalar mutations and `em.flush()` without `withAtomicFlush` — changes will be silently lost.
138
+ Never run `em.find`/`em.findOne` between scalar mutations and `em.flush()` without `withAtomicFlush` — changes will be silently lost. Cache invalidation must also stay outside `withAtomicFlush` and fire after commit, so the opt-in `OM_CACHE_SAFETY_ALWAYS_CONSISTENT` mode (default OFF) never serves stale or partially-committed reads.
@@ -2,23 +2,108 @@ const moduleId = 'workflows'
2
2
 
3
3
  export const features = [
4
4
  { id: 'workflows.view', title: 'View workflows', module: moduleId },
5
- { id: 'workflows.manage', title: 'Manage workflows', module: moduleId },
6
- { id: 'workflows.view_logs', title: 'View workflow logs', module: moduleId },
7
- { id: 'workflows.view_tasks', title: 'View workflow tasks', module: moduleId },
8
- { id: 'workflows.definitions.view', title: 'View workflow definitions', module: moduleId },
9
- { id: 'workflows.definitions.create', title: 'Create workflow definitions', module: moduleId },
10
- { id: 'workflows.definitions.edit', title: 'Edit workflow definitions', module: moduleId },
11
- { id: 'workflows.definitions.delete', title: 'Delete workflow definitions', module: moduleId },
12
- { id: 'workflows.instances.view', title: 'View workflow instances', module: moduleId },
13
- { id: 'workflows.instances.create', title: 'Start workflow instances', module: moduleId },
14
- { id: 'workflows.instances.cancel', title: 'Cancel workflow instances', module: moduleId },
15
- { id: 'workflows.instances.retry', title: 'Retry workflow instances', module: moduleId },
16
- { id: 'workflows.instances.signal', title: 'Signal workflow instances', module: moduleId },
17
- { id: 'workflows.tasks.view', title: 'View user tasks', module: moduleId },
18
- { id: 'workflows.tasks.claim', title: 'Claim workflow tasks', module: moduleId },
19
- { id: 'workflows.tasks.complete', title: 'Complete workflow tasks', module: moduleId },
20
- { id: 'workflows.signals.send', title: 'Send workflow signals', module: moduleId },
21
- { id: 'workflows.events.view', title: 'View workflow events', module: moduleId },
5
+ {
6
+ id: 'workflows.manage',
7
+ title: 'Manage workflows',
8
+ module: moduleId,
9
+ dependsOn: ['workflows.view'],
10
+ },
11
+ {
12
+ id: 'workflows.view_logs',
13
+ title: 'View workflow logs',
14
+ module: moduleId,
15
+ dependsOn: ['workflows.view'],
16
+ },
17
+ {
18
+ id: 'workflows.view_tasks',
19
+ title: 'View workflow tasks',
20
+ module: moduleId,
21
+ dependsOn: ['workflows.view'],
22
+ },
23
+ {
24
+ id: 'workflows.definitions.view',
25
+ title: 'View workflow definitions',
26
+ module: moduleId,
27
+ dependsOn: ['workflows.view'],
28
+ },
29
+ {
30
+ id: 'workflows.definitions.create',
31
+ title: 'Create workflow definitions',
32
+ module: moduleId,
33
+ dependsOn: ['workflows.definitions.view'],
34
+ },
35
+ {
36
+ id: 'workflows.definitions.edit',
37
+ title: 'Edit workflow definitions',
38
+ module: moduleId,
39
+ dependsOn: ['workflows.definitions.view'],
40
+ },
41
+ {
42
+ id: 'workflows.definitions.delete',
43
+ title: 'Delete workflow definitions',
44
+ module: moduleId,
45
+ dependsOn: ['workflows.definitions.view'],
46
+ },
47
+ {
48
+ id: 'workflows.instances.view',
49
+ title: 'View workflow instances',
50
+ module: moduleId,
51
+ dependsOn: ['workflows.view'],
52
+ },
53
+ {
54
+ id: 'workflows.instances.create',
55
+ title: 'Start workflow instances',
56
+ module: moduleId,
57
+ dependsOn: ['workflows.instances.view', 'workflows.definitions.view'],
58
+ },
59
+ {
60
+ id: 'workflows.instances.cancel',
61
+ title: 'Cancel workflow instances',
62
+ module: moduleId,
63
+ dependsOn: ['workflows.instances.view'],
64
+ },
65
+ {
66
+ id: 'workflows.instances.retry',
67
+ title: 'Retry workflow instances',
68
+ module: moduleId,
69
+ dependsOn: ['workflows.instances.view'],
70
+ },
71
+ {
72
+ id: 'workflows.instances.signal',
73
+ title: 'Signal workflow instances',
74
+ module: moduleId,
75
+ dependsOn: ['workflows.instances.view'],
76
+ },
77
+ {
78
+ id: 'workflows.tasks.view',
79
+ title: 'View user tasks',
80
+ module: moduleId,
81
+ dependsOn: ['workflows.view'],
82
+ },
83
+ {
84
+ id: 'workflows.tasks.claim',
85
+ title: 'Claim workflow tasks',
86
+ module: moduleId,
87
+ dependsOn: ['workflows.tasks.view'],
88
+ },
89
+ {
90
+ id: 'workflows.tasks.complete',
91
+ title: 'Complete workflow tasks',
92
+ module: moduleId,
93
+ dependsOn: ['workflows.tasks.view'],
94
+ },
95
+ {
96
+ id: 'workflows.signals.send',
97
+ title: 'Send workflow signals',
98
+ module: moduleId,
99
+ dependsOn: ['workflows.view'],
100
+ },
101
+ {
102
+ id: 'workflows.events.view',
103
+ title: 'View workflow events',
104
+ module: moduleId,
105
+ dependsOn: ['workflows.view'],
106
+ },
22
107
  // Note: Event triggers are now embedded in workflow definitions.
23
108
  // Trigger management permissions are covered by workflows.definitions.edit
24
109
  ]