@nanobpm/nano-workforce 0.120.0 → 0.120.2

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.
Files changed (38) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/app/capabilityNeed.test.ts +4 -2
  3. package/app/capabilityNeed.ts +3 -1
  4. package/app/deliveryGraphCompiler.test.ts +72 -44
  5. package/app/deliveryGraphCompiler.ts +121 -19
  6. package/app/deliveryGraphRun.test.ts +2 -2
  7. package/app/deliveryRunner.test.ts +29 -17
  8. package/app/deliveryRunner.ts +31 -10
  9. package/app/feature.test.ts +3 -1
  10. package/app/feature.ts +9 -0
  11. package/app/featureReadiness.test.ts +7 -4
  12. package/app/featureReadiness.ts +8 -3
  13. package/app/plan.test.ts +1 -1
  14. package/app/plan.ts +9 -0
  15. package/app/planFanoutPreflight.test.ts +12 -12
  16. package/app/planLowering.test.ts +2 -0
  17. package/app/planLowering.ts +7 -2
  18. package/app/pollUserTasks.test.ts +49 -1
  19. package/app/readiness.test.ts +9 -0
  20. package/app/readiness.ts +25 -0
  21. package/app/service.ts +24 -6
  22. package/biome.json +24 -1
  23. package/e2e/delivery-graph.e2e.ts +2 -1
  24. package/e2e/feature-preflight.e2e.ts +2 -0
  25. package/e2e/inter-epic-dependency.e2e.ts +7 -1
  26. package/e2e/plan-fanout-preflight.e2e.ts +2 -0
  27. package/e2e/readiness-gate.e2e.ts +27 -11
  28. package/operations/compileDeliveryGraph.test.ts +3 -0
  29. package/operations/compileDeliveryGraph.ts +1 -1
  30. package/operations/dispatchDeliveryGraph.ts +1 -1
  31. package/operations/previewDeliveryGraph.ts +1 -1
  32. package/operations/startDeliveryGraph.ts +1 -1
  33. package/package.json +3 -2
  34. package/resources/processes/feature.bpmn +168 -52
  35. package/resources/processes/plan-fanout.bpmn +168 -52
  36. package/resources/processes/readiness-gate.bpmn +194 -84
  37. package/workers/readiness-probe/worker.test.ts +82 -238
  38. package/workers/readiness-probe/worker.ts +46 -128
@@ -132,23 +132,75 @@
132
132
  <bpmn:startEvent id="pf_start" name="Awaiting capability">
133
133
  <bpmn:outgoing>pf_toProbe</bpmn:outgoing>
134
134
  </bpmn:startEvent>
135
- <bpmn:serviceTask id="preflight-probe" name="Probe capability (poll)">
135
+ <bpmn:subProcess id="preflight-probe-loop" name="Probe capability loop">
136
136
  <bpmn:extensionElements>
137
- <zeebe:taskDefinition type="pr.readiness-probe" />
138
- <zeebe:properties>
139
- <zeebe:property name="io.nanobpm.dataEnvelope.in" value="ReadinessProbeIn" />
140
- <zeebe:property name="io.nanobpm.dataEnvelope.out" value="ReadinessProbeOut" />
141
- </zeebe:properties>
137
+ <zeebe:ioMapping>
138
+ <zeebe:output source="=ready" target="ready" />
139
+ <zeebe:output source="=if (is defined(detail)) then detail else null" target="detail" />
140
+ <zeebe:output source="=if (is defined(resolvedArtifact)) then resolvedArtifact else null" target="resolvedArtifact" />
141
+ <zeebe:output source="=if (is defined(mergedSha)) then mergedSha else null" target="mergedSha" />
142
+ </zeebe:ioMapping>
142
143
  </bpmn:extensionElements>
143
144
  <bpmn:incoming>pf_toProbe</bpmn:incoming>
144
145
  <bpmn:outgoing>pf_probed</bpmn:outgoing>
145
- </bpmn:serviceTask>
146
- <bpmn:boundaryEvent id="be_pf_probe_timeout" name="Probe timed out" attachedToRef="preflight-probe">
146
+ <bpmn:startEvent id="pf_loop_start" name="Start probe loop">
147
+ <bpmn:outgoing>pf_loop_toProbe</bpmn:outgoing>
148
+ </bpmn:startEvent>
149
+ <bpmn:serviceTask id="preflight-probe" name="Probe capability">
150
+ <bpmn:extensionElements>
151
+ <zeebe:taskDefinition type="pr.readiness-probe" />
152
+ <zeebe:properties>
153
+ <zeebe:property name="io.nanobpm.dataEnvelope.in" value="ReadinessProbeIn" />
154
+ <zeebe:property name="io.nanobpm.dataEnvelope.out" value="ReadinessProbeOut" />
155
+ </zeebe:properties>
156
+ </bpmn:extensionElements>
157
+ <bpmn:incoming>pf_loop_toProbe</bpmn:incoming>
158
+ <bpmn:incoming>pf_pollBack</bpmn:incoming>
159
+ <bpmn:outgoing>pf_loop_probed</bpmn:outgoing>
160
+ </bpmn:serviceTask>
161
+ <bpmn:exclusiveGateway id="pf_loop_gw" name="ready?" default="pf_notReady">
162
+ <bpmn:incoming>pf_loop_probed</bpmn:incoming>
163
+ <bpmn:outgoing>pf_loop_ready</bpmn:outgoing>
164
+ <bpmn:outgoing>pf_notReady</bpmn:outgoing>
165
+ </bpmn:exclusiveGateway>
166
+ <bpmn:intermediateCatchEvent id="pf_wait_poll" name="Wait poll interval">
167
+ <bpmn:incoming>pf_notReady</bpmn:incoming>
168
+ <bpmn:outgoing>pf_pollBack</bpmn:outgoing>
169
+ <bpmn:timerEventDefinition id="ted_pf_probe_poll">
170
+ <bpmn:timeDuration xsi:type="bpmn:tFormalExpression">=probePollEvery</bpmn:timeDuration>
171
+ </bpmn:timerEventDefinition>
172
+ </bpmn:intermediateCatchEvent>
173
+ <bpmn:endEvent id="pf_loop_end" name="Probe ready">
174
+ <bpmn:incoming>pf_loop_ready</bpmn:incoming>
175
+ </bpmn:endEvent>
176
+ <bpmn:sequenceFlow id="pf_loop_toProbe" sourceRef="pf_loop_start" targetRef="preflight-probe" />
177
+ <bpmn:sequenceFlow id="pf_loop_probed" sourceRef="preflight-probe" targetRef="pf_loop_gw" />
178
+ <bpmn:sequenceFlow id="pf_loop_ready" name="ready" sourceRef="pf_loop_gw" targetRef="pf_loop_end">
179
+ <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=ready = true</bpmn:conditionExpression>
180
+ </bpmn:sequenceFlow>
181
+ <bpmn:sequenceFlow id="pf_notReady" name="not ready" sourceRef="pf_loop_gw" targetRef="pf_wait_poll" />
182
+ <bpmn:sequenceFlow id="pf_pollBack" sourceRef="pf_wait_poll" targetRef="preflight-probe" />
183
+ </bpmn:subProcess>
184
+ <bpmn:boundaryEvent id="be_pf_probe_timeout" name="Probe timed out" attachedToRef="preflight-probe-loop">
147
185
  <bpmn:outgoing>pf_probeTimedOut</bpmn:outgoing>
148
186
  <bpmn:timerEventDefinition id="ted_pf_probe_timeout">
149
187
  <bpmn:timeDuration xsi:type="bpmn:tFormalExpression">=probeTimeout</bpmn:timeDuration>
150
188
  </bpmn:timerEventDefinition>
151
189
  </bpmn:boundaryEvent>
190
+ <bpmn:serviceTask id="preflight-probe-last-attempt" name="Probe capability (last attempt)">
191
+ <bpmn:extensionElements>
192
+ <zeebe:taskDefinition type="pr.readiness-probe" />
193
+ <zeebe:properties>
194
+ <zeebe:property name="io.nanobpm.dataEnvelope.in" value="ReadinessProbeIn" />
195
+ <zeebe:property name="io.nanobpm.dataEnvelope.out" value="ReadinessProbeOut" />
196
+ </zeebe:properties>
197
+ <zeebe:ioMapping>
198
+ <zeebe:input source="=true" target="lastAttempt" />
199
+ </zeebe:ioMapping>
200
+ </bpmn:extensionElements>
201
+ <bpmn:incoming>pf_probeTimedOut</bpmn:incoming>
202
+ <bpmn:outgoing>pf_lastAttemptDone</bpmn:outgoing>
203
+ </bpmn:serviceTask>
152
204
  <bpmn:exclusiveGateway id="pf_gw" name="capability ready?" default="pf_escalate">
153
205
  <bpmn:incoming>pf_probed</bpmn:incoming>
154
206
  <bpmn:outgoing>pf_ready</bpmn:outgoing>
@@ -161,7 +213,6 @@
161
213
  <zeebe:assignmentDefinition candidateGroups="operators" />
162
214
  </bpmn:extensionElements>
163
215
  <bpmn:incoming>pf_escalate</bpmn:incoming>
164
- <bpmn:incoming>pf_probeTimedOut</bpmn:incoming>
165
216
  <bpmn:outgoing>pf_toResolution</bpmn:outgoing>
166
217
  </bpmn:userTask>
167
218
  <bpmn:boundaryEvent id="be_pf_sla" name="SLA elapsed" attachedToRef="readiness-escalation-pf">
@@ -181,13 +232,14 @@
181
232
  <bpmn:incoming>pf_abandon</bpmn:incoming>
182
233
  <bpmn:incoming>pf_sla</bpmn:incoming>
183
234
  </bpmn:endEvent>
184
- <bpmn:sequenceFlow id="pf_toProbe" sourceRef="pf_start" targetRef="preflight-probe" />
185
- <bpmn:sequenceFlow id="pf_probed" sourceRef="preflight-probe" targetRef="pf_gw" />
235
+ <bpmn:sequenceFlow id="pf_toProbe" sourceRef="pf_start" targetRef="preflight-probe-loop" />
236
+ <bpmn:sequenceFlow id="pf_probed" sourceRef="preflight-probe-loop" targetRef="pf_gw" />
186
237
  <bpmn:sequenceFlow id="pf_ready" name="ready" sourceRef="pf_gw" targetRef="pf_end">
187
238
  <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=ready = true</bpmn:conditionExpression>
188
239
  </bpmn:sequenceFlow>
189
240
  <bpmn:sequenceFlow id="pf_escalate" name="stalled" sourceRef="pf_gw" targetRef="readiness-escalation-pf" />
190
- <bpmn:sequenceFlow id="pf_probeTimedOut" name="timed out" sourceRef="be_pf_probe_timeout" targetRef="readiness-escalation-pf" />
241
+ <bpmn:sequenceFlow id="pf_probeTimedOut" name="timed out" sourceRef="be_pf_probe_timeout" targetRef="preflight-probe-last-attempt" />
242
+ <bpmn:sequenceFlow id="pf_lastAttemptDone" sourceRef="preflight-probe-last-attempt" targetRef="pf_gw" />
191
243
  <bpmn:sequenceFlow id="pf_toResolution" sourceRef="readiness-escalation-pf" targetRef="pf_gw_res" />
192
244
  <bpmn:sequenceFlow id="pf_proceed" name="acknowledge" sourceRef="pf_gw_res" targetRef="pf_end" />
193
245
  <bpmn:sequenceFlow id="pf_abandon" name="abandon" sourceRef="pf_gw_res" targetRef="pf_end">
@@ -1126,40 +1178,43 @@
1126
1178
  <dc:Bounds x="61" y="143" width="74" height="28" />
1127
1179
  </bpmndi:BPMNLabel>
1128
1180
  </bpmndi:BPMNShape>
1129
- <bpmndi:BPMNShape id="BPMNShape_preflight-probe" bpmnElement="preflight-probe">
1181
+ <bpmndi:BPMNShape id="BPMNShape_preflight-probe-loop" bpmnElement="preflight-probe-loop">
1130
1182
  <dc:Bounds x="216" y="80" width="100" height="80" />
1131
1183
  </bpmndi:BPMNShape>
1184
+ <bpmndi:BPMNShape id="BPMNShape_preflight-probe-last-attempt" bpmnElement="preflight-probe-last-attempt">
1185
+ <dc:Bounds x="416" y="240" width="100" height="80" />
1186
+ </bpmndi:BPMNShape>
1132
1187
  <bpmndi:BPMNShape id="BPMNShape_pf_gw" bpmnElement="pf_gw" isMarkerVisible="true">
1133
- <dc:Bounds x="416" y="95" width="50" height="50" />
1188
+ <dc:Bounds x="616" y="95" width="50" height="50" />
1134
1189
  <bpmndi:BPMNLabel>
1135
- <dc:Bounds x="344" y="150" width="74" height="28" />
1190
+ <dc:Bounds x="604" y="62" width="74" height="28" />
1136
1191
  </bpmndi:BPMNLabel>
1137
1192
  </bpmndi:BPMNShape>
1138
1193
  <bpmndi:BPMNShape id="BPMNShape_readiness-escalation-pf" bpmnElement="readiness-escalation-pf">
1139
- <dc:Bounds x="566" y="80" width="100" height="80" />
1194
+ <dc:Bounds x="766" y="80" width="100" height="80" />
1140
1195
  </bpmndi:BPMNShape>
1141
1196
  <bpmndi:BPMNShape id="BPMNShape_pf_gw_res" bpmnElement="pf_gw_res" isMarkerVisible="true">
1142
- <dc:Bounds x="766" y="95" width="50" height="50" />
1197
+ <dc:Bounds x="966" y="95" width="50" height="50" />
1143
1198
  <bpmndi:BPMNLabel>
1144
- <dc:Bounds x="751" y="76" width="81" height="14" />
1199
+ <dc:Bounds x="951" y="76" width="81" height="14" />
1145
1200
  </bpmndi:BPMNLabel>
1146
1201
  </bpmndi:BPMNShape>
1147
1202
  <bpmndi:BPMNShape id="BPMNShape_pf_end" bpmnElement="pf_end">
1148
- <dc:Bounds x="916" y="102" width="36" height="36" />
1203
+ <dc:Bounds x="1116" y="102" width="36" height="36" />
1149
1204
  <bpmndi:BPMNLabel>
1150
- <dc:Bounds x="896" y="69" width="76" height="28" />
1205
+ <dc:Bounds x="1096" y="69" width="76" height="28" />
1151
1206
  </bpmndi:BPMNLabel>
1152
1207
  </bpmndi:BPMNShape>
1153
1208
  <bpmndi:BPMNShape id="BPMNShape_be_pf_probe_timeout" bpmnElement="be_pf_probe_timeout">
1154
1209
  <dc:Bounds x="248" y="142" width="36" height="36" />
1155
1210
  <bpmndi:BPMNLabel>
1156
- <dc:Bounds x="225" y="203" width="83" height="28" />
1211
+ <dc:Bounds x="165" y="183" width="83" height="28" />
1157
1212
  </bpmndi:BPMNLabel>
1158
1213
  </bpmndi:BPMNShape>
1159
1214
  <bpmndi:BPMNShape id="BPMNShape_be_pf_sla" bpmnElement="be_pf_sla">
1160
- <dc:Bounds x="598" y="142" width="36" height="36" />
1215
+ <dc:Bounds x="798" y="142" width="36" height="36" />
1161
1216
  <bpmndi:BPMNLabel>
1162
- <dc:Bounds x="574" y="223" width="84" height="14" />
1217
+ <dc:Bounds x="774" y="223" width="84" height="14" />
1163
1218
  </bpmndi:BPMNLabel>
1164
1219
  </bpmndi:BPMNShape>
1165
1220
  <bpmndi:BPMNEdge id="BPMNEdge_pf_toProbe" bpmnElement="pf_toProbe">
@@ -1168,63 +1223,124 @@
1168
1223
  </bpmndi:BPMNEdge>
1169
1224
  <bpmndi:BPMNEdge id="BPMNEdge_pf_probed" bpmnElement="pf_probed">
1170
1225
  <di:waypoint x="316" y="120" />
1171
- <di:waypoint x="416" y="120" />
1226
+ <di:waypoint x="616" y="120" />
1172
1227
  </bpmndi:BPMNEdge>
1173
1228
  <bpmndi:BPMNEdge id="BPMNEdge_pf_escalate" bpmnElement="pf_escalate">
1174
- <di:waypoint x="466" y="120" />
1175
- <di:waypoint x="566" y="120" />
1229
+ <di:waypoint x="666" y="120" />
1230
+ <di:waypoint x="766" y="120" />
1176
1231
  <bpmndi:BPMNLabel>
1177
- <dc:Bounds x="480" y="98" width="53" height="14" />
1232
+ <dc:Bounds x="690" y="98" width="53" height="14" />
1178
1233
  </bpmndi:BPMNLabel>
1179
1234
  </bpmndi:BPMNEdge>
1180
1235
  <bpmndi:BPMNEdge id="BPMNEdge_pf_toResolution" bpmnElement="pf_toResolution">
1181
- <di:waypoint x="666" y="120" />
1182
- <di:waypoint x="766" y="120" />
1236
+ <di:waypoint x="866" y="120" />
1237
+ <di:waypoint x="966" y="120" />
1183
1238
  </bpmndi:BPMNEdge>
1184
1239
  <bpmndi:BPMNEdge id="BPMNEdge_pf_proceed" bpmnElement="pf_proceed">
1185
- <di:waypoint x="816" y="120" />
1186
- <di:waypoint x="916" y="120" />
1240
+ <di:waypoint x="1016" y="120" />
1241
+ <di:waypoint x="1116" y="120" />
1187
1242
  <bpmndi:BPMNLabel>
1188
- <dc:Bounds x="824" y="128" width="84" height="14" />
1243
+ <dc:Bounds x="1024" y="128" width="84" height="14" />
1189
1244
  </bpmndi:BPMNLabel>
1190
1245
  </bpmndi:BPMNEdge>
1191
1246
  <bpmndi:BPMNEdge id="BPMNEdge_pf_ready" bpmnElement="pf_ready">
1192
- <di:waypoint x="441" y="145" />
1193
- <di:waypoint x="441" y="200" />
1194
- <di:waypoint x="934" y="200" />
1195
- <di:waypoint x="934" y="138" />
1247
+ <di:waypoint x="641" y="145" />
1248
+ <di:waypoint x="641" y="200" />
1249
+ <di:waypoint x="1134" y="200" />
1250
+ <di:waypoint x="1134" y="138" />
1196
1251
  <bpmndi:BPMNLabel>
1197
- <dc:Bounds x="668" y="178" width="39" height="14" />
1252
+ <dc:Bounds x="868" y="178" width="39" height="14" />
1198
1253
  </bpmndi:BPMNLabel>
1199
1254
  </bpmndi:BPMNEdge>
1255
+ <bpmndi:BPMNEdge id="BPMNEdge_pf_lastAttemptDone" bpmnElement="pf_lastAttemptDone">
1256
+ <di:waypoint x="466" y="240" />
1257
+ <di:waypoint x="466" y="120" />
1258
+ <di:waypoint x="616" y="120" />
1259
+ </bpmndi:BPMNEdge>
1200
1260
  <bpmndi:BPMNEdge id="BPMNEdge_pf_abandon" bpmnElement="pf_abandon">
1201
- <di:waypoint x="816" y="120" />
1202
- <di:waypoint x="916" y="120" />
1261
+ <di:waypoint x="1016" y="120" />
1262
+ <di:waypoint x="1116" y="120" />
1203
1263
  <bpmndi:BPMNLabel>
1204
- <dc:Bounds x="840" y="158" width="53" height="14" />
1264
+ <dc:Bounds x="1040" y="158" width="53" height="14" />
1205
1265
  </bpmndi:BPMNLabel>
1206
1266
  </bpmndi:BPMNEdge>
1207
1267
  <bpmndi:BPMNEdge id="BPMNEdge_pf_probeTimedOut" bpmnElement="pf_probeTimedOut">
1208
1268
  <di:waypoint x="266" y="178" />
1209
- <di:waypoint x="266" y="198" />
1210
- <di:waypoint x="336" y="198" />
1211
- <di:waypoint x="336" y="82" />
1212
- <di:waypoint x="546" y="82" />
1213
- <di:waypoint x="546" y="120" />
1214
- <di:waypoint x="566" y="120" />
1269
+ <di:waypoint x="266" y="280" />
1270
+ <di:waypoint x="416" y="280" />
1215
1271
  <bpmndi:BPMNLabel>
1216
- <dc:Bounds x="341" y="93" width="67" height="14" />
1272
+ <dc:Bounds x="271" y="222" width="67" height="14" />
1217
1273
  </bpmndi:BPMNLabel>
1218
1274
  </bpmndi:BPMNEdge>
1219
1275
  <bpmndi:BPMNEdge id="BPMNEdge_pf_sla" bpmnElement="pf_sla">
1220
- <di:waypoint x="616" y="178" />
1221
- <di:waypoint x="616" y="198" />
1222
- <di:waypoint x="934" y="198" />
1223
- <di:waypoint x="934" y="138" />
1276
+ <di:waypoint x="816" y="178" />
1277
+ <di:waypoint x="816" y="198" />
1278
+ <di:waypoint x="1134" y="198" />
1279
+ <di:waypoint x="1134" y="138" />
1224
1280
  <bpmndi:BPMNLabel>
1225
- <dc:Bounds x="731" y="165" width="88" height="28" />
1281
+ <dc:Bounds x="931" y="165" width="88" height="28" />
1226
1282
  </bpmndi:BPMNLabel>
1227
1283
  </bpmndi:BPMNEdge>
1228
1284
  </bpmndi:BPMNPlane>
1229
1285
  </bpmndi:BPMNDiagram>
1286
+ <bpmndi:BPMNDiagram id="BPMNDiagram_preflight-probe-loop">
1287
+ <bpmndi:BPMNPlane id="BPMNPlane_preflight-probe-loop" bpmnElement="preflight-probe-loop">
1288
+ <bpmndi:BPMNShape id="BPMNShape_pf_loop_start" bpmnElement="pf_loop_start">
1289
+ <dc:Bounds x="80" y="102" width="36" height="36" />
1290
+ <bpmndi:BPMNLabel>
1291
+ <dc:Bounds x="58" y="143" width="80" height="28" />
1292
+ </bpmndi:BPMNLabel>
1293
+ </bpmndi:BPMNShape>
1294
+ <bpmndi:BPMNShape id="BPMNShape_preflight-probe" bpmnElement="preflight-probe">
1295
+ <dc:Bounds x="216" y="80" width="100" height="80" />
1296
+ </bpmndi:BPMNShape>
1297
+ <bpmndi:BPMNShape id="BPMNShape_pf_loop_gw" bpmnElement="pf_loop_gw" isMarkerVisible="true">
1298
+ <dc:Bounds x="416" y="95" width="50" height="50" />
1299
+ <bpmndi:BPMNLabel>
1300
+ <dc:Bounds x="418" y="76" width="46" height="14" />
1301
+ </bpmndi:BPMNLabel>
1302
+ </bpmndi:BPMNShape>
1303
+ <bpmndi:BPMNShape id="BPMNShape_pf_wait_poll" bpmnElement="pf_wait_poll">
1304
+ <dc:Bounds x="566" y="262" width="36" height="36" />
1305
+ <bpmndi:BPMNLabel>
1306
+ <dc:Bounds x="550" y="229" width="68" height="28" />
1307
+ </bpmndi:BPMNLabel>
1308
+ </bpmndi:BPMNShape>
1309
+ <bpmndi:BPMNShape id="BPMNShape_pf_loop_end" bpmnElement="pf_loop_end">
1310
+ <dc:Bounds x="566" y="102" width="36" height="36" />
1311
+ <bpmndi:BPMNLabel>
1312
+ <dc:Bounds x="544" y="143" width="80" height="14" />
1313
+ </bpmndi:BPMNLabel>
1314
+ </bpmndi:BPMNShape>
1315
+ <bpmndi:BPMNEdge id="BPMNEdge_pf_loop_toProbe" bpmnElement="pf_loop_toProbe">
1316
+ <di:waypoint x="116" y="120" />
1317
+ <di:waypoint x="216" y="120" />
1318
+ </bpmndi:BPMNEdge>
1319
+ <bpmndi:BPMNEdge id="BPMNEdge_pf_loop_probed" bpmnElement="pf_loop_probed">
1320
+ <di:waypoint x="316" y="120" />
1321
+ <di:waypoint x="416" y="120" />
1322
+ </bpmndi:BPMNEdge>
1323
+ <bpmndi:BPMNEdge id="BPMNEdge_pf_loop_ready" bpmnElement="pf_loop_ready">
1324
+ <di:waypoint x="466" y="120" />
1325
+ <di:waypoint x="566" y="120" />
1326
+ <bpmndi:BPMNLabel>
1327
+ <dc:Bounds x="497" y="98" width="39" height="14" />
1328
+ </bpmndi:BPMNLabel>
1329
+ </bpmndi:BPMNEdge>
1330
+ <bpmndi:BPMNEdge id="BPMNEdge_pf_notReady" bpmnElement="pf_notReady">
1331
+ <di:waypoint x="441" y="145" />
1332
+ <di:waypoint x="441" y="280" />
1333
+ <di:waypoint x="566" y="280" />
1334
+ <bpmndi:BPMNLabel>
1335
+ <dc:Bounds x="446" y="206" width="64" height="14" />
1336
+ </bpmndi:BPMNLabel>
1337
+ </bpmndi:BPMNEdge>
1338
+ <bpmndi:BPMNEdge id="BPMNEdge_pf_pollBack" bpmnElement="pf_pollBack">
1339
+ <di:waypoint x="584" y="298" />
1340
+ <di:waypoint x="584" y="318" />
1341
+ <di:waypoint x="266" y="318" />
1342
+ <di:waypoint x="266" y="160" />
1343
+ </bpmndi:BPMNEdge>
1344
+ </bpmndi:BPMNPlane>
1345
+ </bpmndi:BPMNDiagram>
1230
1346
  </bpmn:definitions>