@nanobpm/nano-workforce 0.56.0 → 0.58.0

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 (90) hide show
  1. package/.github/workflows/ci.yml +7 -0
  2. package/AGENTS.md +83 -1
  3. package/CHANGELOG.md +14 -0
  4. package/README.md +10 -2
  5. package/SPEC.md +27 -24
  6. package/app/agentCompletion.test.ts +337 -0
  7. package/app/agentCompletion.ts +219 -0
  8. package/app/agentGuide.ts +1 -1
  9. package/app/answer-escalation.test.ts +106 -0
  10. package/app/answerEscalation.test.ts +67 -0
  11. package/app/baseGuard.test.ts +9 -1
  12. package/app/baseGuard.ts +11 -0
  13. package/app/escalationSla.test.ts +39 -0
  14. package/app/escalationSla.ts +28 -0
  15. package/app/escalationTaxonomy.test.ts +115 -0
  16. package/app/escalationTaxonomy.ts +115 -0
  17. package/app/feature.test.ts +161 -0
  18. package/app/feature.ts +173 -0
  19. package/app/github.test.ts +179 -1
  20. package/app/github.ts +132 -0
  21. package/app/mergeProtocol.test.ts +15 -0
  22. package/app/mergeProtocol.ts +10 -0
  23. package/app/persist-escalation.test.ts +34 -36
  24. package/app/plan.test.ts +267 -313
  25. package/app/plan.ts +173 -231
  26. package/app/reviewWait.ts +12 -4
  27. package/app/roundResultDefault.test.ts +111 -2
  28. package/app/roundResultDefault.ts +35 -0
  29. package/app/service.test.ts +6 -7
  30. package/app/service.ts +52 -35
  31. package/db/migrations/026_agent_completion.sql +36 -0
  32. package/db/migrations/027_retire_escalation_subsystem.sql +43 -0
  33. package/db/migrations/028_feature_runs.sql +28 -0
  34. package/e2e/agent-answerable.e2e.ts +185 -0
  35. package/e2e/convergence-escalation.e2e.ts +180 -0
  36. package/e2e/convergence-loop.e2e.ts +1 -1
  37. package/e2e/feature-run.e2e.ts +231 -0
  38. package/e2e/plan-fanout-sla.e2e.ts +238 -0
  39. package/e2e/plan-fanout.e2e.ts +303 -0
  40. package/e2e/retire-escalation-subsystem.e2e.ts +223 -0
  41. package/e2e/support/github-admit.ts +99 -0
  42. package/e2e/user-task-spine.e2e.ts +155 -0
  43. package/nano.app.json +41 -11
  44. package/openapi.yaml +237 -84
  45. package/operations/agentCompleteEscalation.ts +53 -0
  46. package/operations/listActivePrs.test.ts +39 -6
  47. package/operations/postMessage.ts +10 -41
  48. package/operations/revertEscalationCompletion.ts +44 -0
  49. package/operations/startAndMessage.test.ts +62 -60
  50. package/operations/startFeature.ts +127 -0
  51. package/operations/startPlanFanout.admission.integration.test.ts +263 -0
  52. package/operations/startPlanFanout.ts +70 -11
  53. package/package.json +4 -1
  54. package/pages/cockpit.page.json +1 -0
  55. package/pages/epic-detail.page.json +11 -37
  56. package/pages/epic.page.json +5 -2
  57. package/pages/feature.page.json +82 -0
  58. package/pages/home.page.json +6 -18
  59. package/resources/agent-guide.md +90 -26
  60. package/resources/forms/feature-escalation.form +27 -0
  61. package/resources/forms/plan-review-decision.form +27 -0
  62. package/resources/forms/pr-escalation.form +23 -0
  63. package/resources/forms/spine-demo.form +15 -0
  64. package/resources/forms/trial-merge-decision.form +25 -0
  65. package/resources/processes/convergence-loop.bpmn +127 -75
  66. package/resources/processes/feature.bpmn +240 -0
  67. package/resources/processes/plan-fanout.bpmn +322 -222
  68. package/resources/processes/spine-demo.bpmn +72 -0
  69. package/scripts/check-migrations.ts +68 -0
  70. package/workers/answer-escalation/worker.ts +78 -0
  71. package/workers/converge-feature/worker.ts +51 -0
  72. package/workers/ensure-base-branch/head-task.integration.test.ts +126 -0
  73. package/workers/ensure-base-branch/worker.test.ts +104 -0
  74. package/workers/ensure-base-branch/worker.ts +31 -0
  75. package/workers/finalize/worker.ts +0 -2
  76. package/workers/mark-merged/worker.ts +0 -2
  77. package/workers/merge/worker.ts +6 -5
  78. package/workers/persist-escalation/worker.ts +28 -32
  79. package/workers/record-feature/worker.ts +61 -0
  80. package/workers/record-plan-review/worker.test.ts +9 -10
  81. package/workers/record-plan-review/worker.ts +15 -5
  82. package/workers/resolve-trial-attention/worker.test.ts +77 -0
  83. package/workers/resolve-trial-attention/worker.ts +43 -0
  84. package/operations/answerFeatureEscalation.test.ts +0 -112
  85. package/operations/answerFeatureEscalation.ts +0 -58
  86. package/operations/answerPlanEscalation.test.ts +0 -115
  87. package/operations/answerPlanEscalation.ts +0 -41
  88. package/workers/persist-plan-escalation/worker.test.ts +0 -80
  89. package/workers/persist-plan-escalation/worker.ts +0 -73
  90. package/workers/persist-task-escalation/worker.ts +0 -120
@@ -1,15 +1,5 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:zeebe="http://camunda.org/schema/zeebe/1.0" id="Definitions_nano_workforce_plan" targetNamespace="http://nanobpm.io/nano-workforce">
3
- <bpmn:message id="Message_featureEscalationAnswered" name="feature-escalation-answered">
4
- <bpmn:extensionElements>
5
- <zeebe:subscription correlationKey="=escalationCorrKey" />
6
- </bpmn:extensionElements>
7
- </bpmn:message>
8
- <bpmn:message id="Message_planEscalationAnswered" name="plan-escalation-answered">
9
- <bpmn:extensionElements>
10
- <zeebe:subscription correlationKey="=planKey" />
11
- </bpmn:extensionElements>
12
- </bpmn:message>
13
3
  <bpmn:message id="Message_waveMerged" name="wave-merged">
14
4
  <bpmn:extensionElements>
15
5
  <zeebe:subscription correlationKey="=planKey" />
@@ -17,8 +7,19 @@
17
7
  </bpmn:message>
18
8
  <bpmn:process id="plan-fanout" name="Agent Fleet — plan &#38; implement" isExecutable="true">
19
9
  <bpmn:startEvent id="Start" name="Issue submitted">
20
- <bpmn:outgoing>f_toPlan</bpmn:outgoing>
10
+ <bpmn:outgoing>f_toEnsureBase</bpmn:outgoing>
21
11
  </bpmn:startEvent>
12
+ <bpmn:serviceTask id="ensure-base-branch" name="Ensure base branch">
13
+ <bpmn:extensionElements>
14
+ <zeebe:taskDefinition type="pr.ensure-base-branch" />
15
+ <zeebe:ioMapping>
16
+ <zeebe:input source="=repo" target="repo" />
17
+ <zeebe:input source="=baseBranch" target="baseBranch" />
18
+ </zeebe:ioMapping>
19
+ </bpmn:extensionElements>
20
+ <bpmn:incoming>f_toEnsureBase</bpmn:incoming>
21
+ <bpmn:outgoing>f_toPlan</bpmn:outgoing>
22
+ </bpmn:serviceTask>
22
23
  <bpmn:serviceTask id="plan" name="Plan (agent)">
23
24
  <bpmn:extensionElements>
24
25
  <zeebe:taskDefinition type="senior:plan" />
@@ -32,6 +33,7 @@
32
33
  <bpmn:incoming>f_toPlan</bpmn:incoming>
33
34
  <bpmn:incoming>f_plan_revise</bpmn:incoming>
34
35
  <bpmn:incoming>f_plan_answer_revise</bpmn:incoming>
36
+ <bpmn:incoming>f_plan_sla</bpmn:incoming>
35
37
  <bpmn:outgoing>f_toRecordPlan</bpmn:outgoing>
36
38
  </bpmn:serviceTask>
37
39
  <bpmn:serviceTask id="record-plan" name="Record plan &#38; levelize">
@@ -64,18 +66,25 @@
64
66
  <bpmn:outgoing>f_plan_escalate</bpmn:outgoing>
65
67
  <bpmn:outgoing>f_plan_revise</bpmn:outgoing>
66
68
  </bpmn:exclusiveGateway>
67
- <bpmn:serviceTask id="persist-plan-escalation" name="Record plan escalation">
69
+ <bpmn:userTask id="plan-review-decision" name="Plan-review decision (human)">
68
70
  <bpmn:extensionElements>
69
- <zeebe:taskDefinition type="pr.persist-plan-escalation" />
71
+ <zeebe:formDefinition formId="plan-review-decision" />
72
+ <zeebe:userTask />
73
+ <zeebe:assignmentDefinition candidateGroups="operators" assignee="=escalationAssignee" />
74
+ <zeebe:ioMapping>
75
+ <zeebe:output source="=(if planReviewEpoch = null then 0 else planReviewEpoch) + 1" target="planReviewEpoch" />
76
+ <zeebe:output source="=(if planFindings = null then &#34;&#34; else planFindings) + (if (notes = null or notes = &#34;&#34;) then &#34;&#34; else &#34;&#10;&#10;Human guidance:&#10;&#34; + notes)" target="planFindings" />
77
+ </zeebe:ioMapping>
70
78
  </bpmn:extensionElements>
71
79
  <bpmn:incoming>f_plan_escalate</bpmn:incoming>
72
- <bpmn:outgoing>f_toWaitPlanAnswer</bpmn:outgoing>
73
- </bpmn:serviceTask>
74
- <bpmn:intermediateCatchEvent id="wait-plan-answer" name="Wait: plan answer">
75
- <bpmn:incoming>f_toWaitPlanAnswer</bpmn:incoming>
76
80
  <bpmn:outgoing>f_toGwPlanAnswer</bpmn:outgoing>
77
- <bpmn:messageEventDefinition id="med_planAnswered" messageRef="Message_planEscalationAnswered" />
78
- </bpmn:intermediateCatchEvent>
81
+ </bpmn:userTask>
82
+ <bpmn:boundaryEvent id="be_plan_sla" name="SLA elapsed" attachedToRef="plan-review-decision">
83
+ <bpmn:outgoing>f_plan_sla</bpmn:outgoing>
84
+ <bpmn:timerEventDefinition id="ted_plan_sla">
85
+ <bpmn:timeDuration xsi:type="bpmn:tFormalExpression">=escalationSlaTimeout</bpmn:timeDuration>
86
+ </bpmn:timerEventDefinition>
87
+ </bpmn:boundaryEvent>
79
88
  <bpmn:exclusiveGateway id="gw-plan-answer" name="proceed override?" default="f_plan_answer_revise">
80
89
  <bpmn:incoming>f_toGwPlanAnswer</bpmn:incoming>
81
90
  <bpmn:outgoing>f_plan_answer_proceed</bpmn:outgoing>
@@ -94,10 +103,8 @@
94
103
  <bpmn:extensionElements>
95
104
  <zeebe:ioMapping>
96
105
  <zeebe:input source="=null" target="answer" />
97
- <zeebe:input source="=null" target="status" />
98
106
  <zeebe:input source="=null" target="summary" />
99
107
  <zeebe:input source="=null" target="pr" />
100
- <zeebe:input source="=null" target="question" />
101
108
  <zeebe:input source="=null" target="delta" />
102
109
  </zeebe:ioMapping>
103
110
  </bpmn:extensionElements>
@@ -119,6 +126,8 @@
119
126
  </zeebe:taskHeaders>
120
127
  <zeebe:ioMapping>
121
128
  <zeebe:input source="=&#34;&#10;&#10;---&#10;&#10;&#34; + task.prompt + (if (blackboardBrief = null) then &#34;&#34; else blackboardBrief) + (if (baseBranchBrief = null) then &#34;&#34; else baseBranchBrief)" target="appendPrompt" />
129
+ <zeebe:output source="=status" target="status" />
130
+ <zeebe:output source="=question" target="question" />
122
131
  </zeebe:ioMapping>
123
132
  </bpmn:extensionElements>
124
133
  <bpmn:incoming>w_toImpl</bpmn:incoming>
@@ -130,29 +139,43 @@
130
139
  <bpmn:outgoing>w_escalate</bpmn:outgoing>
131
140
  <bpmn:outgoing>w_done</bpmn:outgoing>
132
141
  </bpmn:exclusiveGateway>
133
- <bpmn:serviceTask id="persist-task-escalation" name="Record task escalation">
142
+ <bpmn:userTask id="feature-escalation" name="Task escalation (human)">
134
143
  <bpmn:extensionElements>
135
- <zeebe:taskDefinition type="pr.persist-task-escalation" />
144
+ <zeebe:formDefinition formId="feature-escalation" />
145
+ <zeebe:userTask />
146
+ <zeebe:assignmentDefinition candidateGroups="operators" assignee="=escalationAssignee" />
136
147
  </bpmn:extensionElements>
137
148
  <bpmn:incoming>w_escalate</bpmn:incoming>
138
- <bpmn:outgoing>w_toWait</bpmn:outgoing>
139
- </bpmn:serviceTask>
140
- <bpmn:intermediateCatchEvent id="wait-feature-answer" name="Wait: human answer">
141
- <bpmn:incoming>w_toWait</bpmn:incoming>
149
+ <bpmn:outgoing>w_toAnswerGw</bpmn:outgoing>
150
+ </bpmn:userTask>
151
+ <bpmn:boundaryEvent id="be_feature_sla" name="SLA elapsed" attachedToRef="feature-escalation">
152
+ <bpmn:outgoing>w_sla</bpmn:outgoing>
153
+ <bpmn:timerEventDefinition id="ted_feature_sla">
154
+ <bpmn:timeDuration xsi:type="bpmn:tFormalExpression">=escalationSlaTimeout</bpmn:timeDuration>
155
+ </bpmn:timerEventDefinition>
156
+ </bpmn:boundaryEvent>
157
+ <bpmn:exclusiveGateway id="w_gw_answer" name="answer?" default="w_abandon">
158
+ <bpmn:incoming>w_toAnswerGw</bpmn:incoming>
142
159
  <bpmn:outgoing>w_answerLoop</bpmn:outgoing>
143
- <bpmn:messageEventDefinition id="med_featureAnswered" messageRef="Message_featureEscalationAnswered" />
144
- </bpmn:intermediateCatchEvent>
160
+ <bpmn:outgoing>w_abandon</bpmn:outgoing>
161
+ </bpmn:exclusiveGateway>
145
162
  <bpmn:endEvent id="w_end" name="Task done">
146
163
  <bpmn:incoming>w_done</bpmn:incoming>
164
+ <bpmn:incoming>w_abandon</bpmn:incoming>
165
+ <bpmn:incoming>w_sla</bpmn:incoming>
147
166
  </bpmn:endEvent>
148
167
  <bpmn:sequenceFlow id="w_toImpl" sourceRef="w_start" targetRef="implement-task" />
149
168
  <bpmn:sequenceFlow id="w_toGw" sourceRef="implement-task" targetRef="w_gw" />
150
- <bpmn:sequenceFlow id="w_escalate" name="escalated" sourceRef="w_gw" targetRef="persist-task-escalation">
151
- <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=status = "escalated"</bpmn:conditionExpression>
169
+ <bpmn:sequenceFlow id="w_escalate" name="escalated" sourceRef="w_gw" targetRef="feature-escalation">
170
+ <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=status = "escalated" and question != null and trim(question) != ""</bpmn:conditionExpression>
152
171
  </bpmn:sequenceFlow>
153
172
  <bpmn:sequenceFlow id="w_done" name="done" sourceRef="w_gw" targetRef="w_end" />
154
- <bpmn:sequenceFlow id="w_toWait" sourceRef="persist-task-escalation" targetRef="wait-feature-answer" />
155
- <bpmn:sequenceFlow id="w_answerLoop" sourceRef="wait-feature-answer" targetRef="implement-task" />
173
+ <bpmn:sequenceFlow id="w_toAnswerGw" sourceRef="feature-escalation" targetRef="w_gw_answer" />
174
+ <bpmn:sequenceFlow id="w_answerLoop" name="answer" sourceRef="w_gw_answer" targetRef="implement-task">
175
+ <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=resolution = "answer"</bpmn:conditionExpression>
176
+ </bpmn:sequenceFlow>
177
+ <bpmn:sequenceFlow id="w_abandon" name="abandon" sourceRef="w_gw_answer" targetRef="w_end" />
178
+ <bpmn:sequenceFlow id="w_sla" name="SLA auto-abandon" sourceRef="be_feature_sla" targetRef="w_end" />
156
179
  </bpmn:subProcess>
157
180
  <bpmn:serviceTask id="record-wave" name="Record wave &#38; hand off">
158
181
  <bpmn:extensionElements>
@@ -182,6 +205,7 @@
182
205
  </bpmn:extensionElements>
183
206
  <bpmn:incoming>f_runTrialMerge</bpmn:incoming>
184
207
  <bpmn:incoming>f_trialAnswerRerun</bpmn:incoming>
208
+ <bpmn:incoming>f_trial_sla</bpmn:incoming>
185
209
  <bpmn:outgoing>f_toRecordTrialMerge</bpmn:outgoing>
186
210
  </bpmn:serviceTask>
187
211
  <bpmn:serviceTask id="record-trial-merge" name="Record trial merge">
@@ -196,21 +220,32 @@
196
220
  <bpmn:outgoing>f_trialEscalate</bpmn:outgoing>
197
221
  <bpmn:outgoing>f_trialProceed</bpmn:outgoing>
198
222
  </bpmn:exclusiveGateway>
199
- <bpmn:serviceTask id="persist-trial-escalation" name="Record trial escalation">
223
+ <bpmn:userTask id="trial-merge-decision" name="Trial-merge decision (human)">
200
224
  <bpmn:extensionElements>
201
- <zeebe:taskDefinition type="pr.persist-task-escalation" />
225
+ <zeebe:formDefinition formId="trial-merge-decision" />
226
+ <zeebe:userTask />
227
+ <zeebe:assignmentDefinition candidateGroups="operators" assignee="=escalationAssignee" />
202
228
  </bpmn:extensionElements>
203
229
  <bpmn:incoming>f_trialEscalate</bpmn:incoming>
204
- <bpmn:outgoing>f_toWaitTrial</bpmn:outgoing>
205
- </bpmn:serviceTask>
206
- <bpmn:intermediateCatchEvent id="wait-trial-answer" name="Wait: trial answer">
207
- <bpmn:incoming>f_toWaitTrial</bpmn:incoming>
208
230
  <bpmn:outgoing>f_toGwTrialAnswer</bpmn:outgoing>
209
- <bpmn:messageEventDefinition id="med_trialAnswered" messageRef="Message_featureEscalationAnswered" />
210
- </bpmn:intermediateCatchEvent>
211
- <bpmn:exclusiveGateway id="gw-trial-answer" name="proceed override?" default="f_trialAnswerRerun">
231
+ </bpmn:userTask>
232
+ <bpmn:boundaryEvent id="be_trial_sla" name="SLA elapsed" attachedToRef="trial-merge-decision">
233
+ <bpmn:outgoing>f_trial_sla</bpmn:outgoing>
234
+ <bpmn:timerEventDefinition id="ted_trial_sla">
235
+ <bpmn:timeDuration xsi:type="bpmn:tFormalExpression">=escalationSlaTimeout</bpmn:timeDuration>
236
+ </bpmn:timerEventDefinition>
237
+ </bpmn:boundaryEvent>
238
+ <bpmn:serviceTask id="resolve-trial-attention" name="Clear trial attention">
239
+ <bpmn:extensionElements>
240
+ <zeebe:taskDefinition type="pr.resolve-trial-attention" />
241
+ </bpmn:extensionElements>
212
242
  <bpmn:incoming>f_toGwTrialAnswer</bpmn:incoming>
243
+ <bpmn:outgoing>f_resolveToTrialAnswer</bpmn:outgoing>
244
+ </bpmn:serviceTask>
245
+ <bpmn:exclusiveGateway id="gw-trial-answer" name="action?" default="f_trialAnswerRerun">
246
+ <bpmn:incoming>f_resolveToTrialAnswer</bpmn:incoming>
213
247
  <bpmn:outgoing>f_trialAnswerProceed</bpmn:outgoing>
248
+ <bpmn:outgoing>f_trialAnswerAbandon</bpmn:outgoing>
214
249
  <bpmn:outgoing>f_trialAnswerRerun</bpmn:outgoing>
215
250
  </bpmn:exclusiveGateway>
216
251
  <bpmn:exclusiveGateway id="gw-more" name="more waves?" default="f_done">
@@ -230,12 +265,14 @@
230
265
  <zeebe:taskDefinition type="pr.record-results" />
231
266
  </bpmn:extensionElements>
232
267
  <bpmn:incoming>f_done</bpmn:incoming>
268
+ <bpmn:incoming>f_trialAnswerAbandon</bpmn:incoming>
233
269
  <bpmn:outgoing>f_toEnd</bpmn:outgoing>
234
270
  </bpmn:serviceTask>
235
271
  <bpmn:endEvent id="End" name="Fleet dispatched">
236
272
  <bpmn:incoming>f_toEnd</bpmn:incoming>
237
273
  </bpmn:endEvent>
238
- <bpmn:sequenceFlow id="f_toPlan" sourceRef="Start" targetRef="plan" />
274
+ <bpmn:sequenceFlow id="f_toEnsureBase" sourceRef="Start" targetRef="ensure-base-branch" />
275
+ <bpmn:sequenceFlow id="f_toPlan" sourceRef="ensure-base-branch" targetRef="plan" />
239
276
  <bpmn:sequenceFlow id="f_toRecordPlan" sourceRef="plan" targetRef="record-plan" />
240
277
  <bpmn:sequenceFlow id="f_toReviewPlan" sourceRef="record-plan" targetRef="review-plan" />
241
278
  <bpmn:sequenceFlow id="f_toRecordPlanReview" sourceRef="review-plan" targetRef="record-plan-review" />
@@ -243,14 +280,14 @@
243
280
  <bpmn:sequenceFlow id="f_plan_proceed" name="approved" sourceRef="gw-plan-review" targetRef="select-wave">
244
281
  <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=planApproved</bpmn:conditionExpression>
245
282
  </bpmn:sequenceFlow>
246
- <bpmn:sequenceFlow id="f_plan_escalate" name="escalated" sourceRef="gw-plan-review" targetRef="persist-plan-escalation">
283
+ <bpmn:sequenceFlow id="f_plan_escalate" name="escalated" sourceRef="gw-plan-review" targetRef="plan-review-decision">
247
284
  <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=planEscalated</bpmn:conditionExpression>
248
285
  </bpmn:sequenceFlow>
249
286
  <bpmn:sequenceFlow id="f_plan_revise" name="revise" sourceRef="gw-plan-review" targetRef="plan" />
250
- <bpmn:sequenceFlow id="f_toWaitPlanAnswer" sourceRef="persist-plan-escalation" targetRef="wait-plan-answer" />
251
- <bpmn:sequenceFlow id="f_toGwPlanAnswer" sourceRef="wait-plan-answer" targetRef="gw-plan-answer" />
287
+ <bpmn:sequenceFlow id="f_plan_sla" name="SLA auto-revise" sourceRef="be_plan_sla" targetRef="plan" />
288
+ <bpmn:sequenceFlow id="f_toGwPlanAnswer" sourceRef="plan-review-decision" targetRef="gw-plan-answer" />
252
289
  <bpmn:sequenceFlow id="f_plan_answer_proceed" name="proceed" sourceRef="gw-plan-answer" targetRef="select-wave">
253
- <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=planEscalationDirective = "proceed"</bpmn:conditionExpression>
290
+ <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=directive = "proceed"</bpmn:conditionExpression>
254
291
  </bpmn:sequenceFlow>
255
292
  <bpmn:sequenceFlow id="f_plan_answer_revise" name="revise" sourceRef="gw-plan-answer" targetRef="plan" />
256
293
  <bpmn:sequenceFlow id="f_toImplement" sourceRef="select-wave" targetRef="implement" />
@@ -262,16 +299,20 @@
262
299
  <bpmn:sequenceFlow id="f_skipTrialMerge" name="skip" sourceRef="gw-trial-needed" targetRef="gw-more" />
263
300
  <bpmn:sequenceFlow id="f_toRecordTrialMerge" sourceRef="trial-merge" targetRef="record-trial-merge" />
264
301
  <bpmn:sequenceFlow id="f_toGwTrial" sourceRef="record-trial-merge" targetRef="gw-trial" />
265
- <bpmn:sequenceFlow id="f_trialEscalate" name="suite failed" sourceRef="gw-trial" targetRef="persist-trial-escalation">
302
+ <bpmn:sequenceFlow id="f_trialEscalate" name="suite failed" sourceRef="gw-trial" targetRef="trial-merge-decision">
266
303
  <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=trialMergeRed</bpmn:conditionExpression>
267
304
  </bpmn:sequenceFlow>
268
305
  <bpmn:sequenceFlow id="f_trialProceed" name="proceed" sourceRef="gw-trial" targetRef="gw-more" />
269
- <bpmn:sequenceFlow id="f_toWaitTrial" sourceRef="persist-trial-escalation" targetRef="wait-trial-answer" />
270
- <bpmn:sequenceFlow id="f_toGwTrialAnswer" sourceRef="wait-trial-answer" targetRef="gw-trial-answer" />
306
+ <bpmn:sequenceFlow id="f_toGwTrialAnswer" sourceRef="trial-merge-decision" targetRef="resolve-trial-attention" />
307
+ <bpmn:sequenceFlow id="f_resolveToTrialAnswer" sourceRef="resolve-trial-attention" targetRef="gw-trial-answer" />
271
308
  <bpmn:sequenceFlow id="f_trialAnswerProceed" name="proceed" sourceRef="gw-trial-answer" targetRef="gw-more">
272
- <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=answer = "proceed"</bpmn:conditionExpression>
309
+ <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=action = "proceed"</bpmn:conditionExpression>
273
310
  </bpmn:sequenceFlow>
274
- <bpmn:sequenceFlow id="f_trialAnswerRerun" name="rerun" sourceRef="gw-trial-answer" targetRef="trial-merge" />
311
+ <bpmn:sequenceFlow id="f_trialAnswerAbandon" name="abandon" sourceRef="gw-trial-answer" targetRef="record-results">
312
+ <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=action = "abandon"</bpmn:conditionExpression>
313
+ </bpmn:sequenceFlow>
314
+ <bpmn:sequenceFlow id="f_trialAnswerRerun" name="rebase" sourceRef="gw-trial-answer" targetRef="trial-merge" />
315
+ <bpmn:sequenceFlow id="f_trial_sla" name="SLA auto-rerun" sourceRef="be_trial_sla" targetRef="trial-merge" />
275
316
  <bpmn:sequenceFlow id="f_moreWaves" name="more" sourceRef="gw-more" targetRef="wait-wave-merged">
276
317
  <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=hasMoreWaves</bpmn:conditionExpression>
277
318
  </bpmn:sequenceFlow>
@@ -282,346 +323,405 @@
282
323
  <bpmndi:BPMNDiagram id="BPMNDiagram_plan-fanout">
283
324
  <bpmndi:BPMNPlane id="BPMNPlane_plan-fanout" bpmnElement="plan-fanout">
284
325
  <bpmndi:BPMNShape id="BPMNShape_Start" bpmnElement="Start">
285
- <dc:Bounds x="80" y="222" width="36" height="36" />
326
+ <dc:Bounds x="80" y="231" width="36" height="36" />
286
327
  <bpmndi:BPMNLabel>
287
- <dc:Bounds x="63" y="263" width="70" height="28" />
328
+ <dc:Bounds x="63" y="272" width="70" height="28" />
288
329
  </bpmndi:BPMNLabel>
289
330
  </bpmndi:BPMNShape>
331
+ <bpmndi:BPMNShape id="BPMNShape_ensure-base-branch" bpmnElement="ensure-base-branch">
332
+ <dc:Bounds x="216" y="209" width="100" height="80" />
333
+ </bpmndi:BPMNShape>
290
334
  <bpmndi:BPMNShape id="BPMNShape_plan" bpmnElement="plan">
291
- <dc:Bounds x="216" y="200" width="100" height="80" />
335
+ <dc:Bounds x="416" y="209" width="100" height="80" />
292
336
  </bpmndi:BPMNShape>
293
337
  <bpmndi:BPMNShape id="BPMNShape_record-plan" bpmnElement="record-plan">
294
- <dc:Bounds x="416" y="200" width="100" height="80" />
338
+ <dc:Bounds x="616" y="209" width="100" height="80" />
295
339
  </bpmndi:BPMNShape>
296
340
  <bpmndi:BPMNShape id="BPMNShape_review-plan" bpmnElement="review-plan">
297
- <dc:Bounds x="616" y="200" width="100" height="80" />
341
+ <dc:Bounds x="816" y="209" width="100" height="80" />
298
342
  </bpmndi:BPMNShape>
299
343
  <bpmndi:BPMNShape id="BPMNShape_record-plan-review" bpmnElement="record-plan-review">
300
- <dc:Bounds x="816" y="200" width="100" height="80" />
344
+ <dc:Bounds x="1016" y="209" width="100" height="80" />
301
345
  </bpmndi:BPMNShape>
302
346
  <bpmndi:BPMNShape id="BPMNShape_gw-plan-review" bpmnElement="gw-plan-review" isMarkerVisible="true">
303
- <dc:Bounds x="1016" y="215" width="50" height="50" />
347
+ <dc:Bounds x="1216" y="224" width="50" height="50" />
304
348
  <bpmndi:BPMNLabel>
305
- <dc:Bounds x="968" y="270" width="67" height="28" />
349
+ <dc:Bounds x="1168" y="279" width="67" height="28" />
306
350
  </bpmndi:BPMNLabel>
307
351
  </bpmndi:BPMNShape>
308
- <bpmndi:BPMNShape id="BPMNShape_persist-plan-escalation" bpmnElement="persist-plan-escalation">
309
- <dc:Bounds x="1166" y="360" width="100" height="80" />
310
- </bpmndi:BPMNShape>
311
- <bpmndi:BPMNShape id="BPMNShape_wait-plan-answer" bpmnElement="wait-plan-answer">
312
- <dc:Bounds x="1366" y="382" width="36" height="36" />
313
- <bpmndi:BPMNLabel>
314
- <dc:Bounds x="1347" y="423" width="75" height="28" />
315
- </bpmndi:BPMNLabel>
352
+ <bpmndi:BPMNShape id="BPMNShape_plan-review-decision" bpmnElement="plan-review-decision">
353
+ <dc:Bounds x="1366" y="369" width="100" height="80" />
316
354
  </bpmndi:BPMNShape>
317
355
  <bpmndi:BPMNShape id="BPMNShape_gw-plan-answer" bpmnElement="gw-plan-answer" isMarkerVisible="true">
318
- <dc:Bounds x="1502" y="375" width="50" height="50" />
356
+ <dc:Bounds x="1566" y="384" width="50" height="50" />
319
357
  <bpmndi:BPMNLabel>
320
- <dc:Bounds x="1557" y="386" width="67" height="28" />
358
+ <dc:Bounds x="1621" y="395" width="67" height="28" />
321
359
  </bpmndi:BPMNLabel>
322
360
  </bpmndi:BPMNShape>
323
361
  <bpmndi:BPMNShape id="BPMNShape_select-wave" bpmnElement="select-wave">
324
- <dc:Bounds x="1652" y="200" width="100" height="80" />
362
+ <dc:Bounds x="1716" y="209" width="100" height="80" />
325
363
  </bpmndi:BPMNShape>
326
364
  <bpmndi:BPMNShape id="BPMNShape_implement" bpmnElement="implement" isExpanded="true">
327
- <dc:Bounds x="1852" y="80" width="802" height="320" />
365
+ <dc:Bounds x="1916" y="80" width="952" height="338" />
328
366
  </bpmndi:BPMNShape>
329
367
  <bpmndi:BPMNShape id="BPMNShape_record-wave" bpmnElement="record-wave">
330
- <dc:Bounds x="2754" y="200" width="100" height="80" />
368
+ <dc:Bounds x="2968" y="209" width="100" height="80" />
331
369
  </bpmndi:BPMNShape>
332
370
  <bpmndi:BPMNShape id="BPMNShape_gw-trial-needed" bpmnElement="gw-trial-needed" isMarkerVisible="true">
333
- <dc:Bounds x="2954" y="215" width="50" height="50" />
371
+ <dc:Bounds x="3168" y="224" width="50" height="50" />
334
372
  <bpmndi:BPMNLabel>
335
- <dc:Bounds x="2935" y="196" width="88" height="14" />
373
+ <dc:Bounds x="3149" y="205" width="88" height="14" />
336
374
  </bpmndi:BPMNLabel>
337
375
  </bpmndi:BPMNShape>
338
376
  <bpmndi:BPMNShape id="BPMNShape_trial-merge" bpmnElement="trial-merge">
339
- <dc:Bounds x="3104" y="360" width="100" height="80" />
377
+ <dc:Bounds x="3318" y="849" width="100" height="80" />
340
378
  </bpmndi:BPMNShape>
341
379
  <bpmndi:BPMNShape id="BPMNShape_record-trial-merge" bpmnElement="record-trial-merge">
342
- <dc:Bounds x="3304" y="360" width="100" height="80" />
380
+ <dc:Bounds x="3518" y="849" width="100" height="80" />
343
381
  </bpmndi:BPMNShape>
344
382
  <bpmndi:BPMNShape id="BPMNShape_gw-trial" bpmnElement="gw-trial" isMarkerVisible="true">
345
- <dc:Bounds x="3504" y="375" width="50" height="50" />
383
+ <dc:Bounds x="3718" y="864" width="50" height="50" />
346
384
  <bpmndi:BPMNLabel>
347
- <dc:Bounds x="3559" y="393" width="71" height="14" />
385
+ <dc:Bounds x="3708" y="919" width="71" height="14" />
348
386
  </bpmndi:BPMNLabel>
349
387
  </bpmndi:BPMNShape>
350
- <bpmndi:BPMNShape id="BPMNShape_persist-trial-escalation" bpmnElement="persist-trial-escalation">
351
- <dc:Bounds x="3654" y="520" width="100" height="80" />
388
+ <bpmndi:BPMNShape id="BPMNShape_trial-merge-decision" bpmnElement="trial-merge-decision">
389
+ <dc:Bounds x="3868" y="369" width="100" height="80" />
352
390
  </bpmndi:BPMNShape>
353
- <bpmndi:BPMNShape id="BPMNShape_wait-trial-answer" bpmnElement="wait-trial-answer">
354
- <dc:Bounds x="3854" y="542" width="36" height="36" />
355
- <bpmndi:BPMNLabel>
356
- <dc:Bounds x="3831" y="583" width="82" height="28" />
357
- </bpmndi:BPMNLabel>
391
+ <bpmndi:BPMNShape id="BPMNShape_resolve-trial-attention" bpmnElement="resolve-trial-attention">
392
+ <dc:Bounds x="4068" y="369" width="100" height="80" />
358
393
  </bpmndi:BPMNShape>
359
394
  <bpmndi:BPMNShape id="BPMNShape_gw-trial-answer" bpmnElement="gw-trial-answer" isMarkerVisible="true">
360
- <dc:Bounds x="3990" y="535" width="50" height="50" />
395
+ <dc:Bounds x="4268" y="384" width="50" height="50" />
361
396
  <bpmndi:BPMNLabel>
362
- <dc:Bounds x="4045" y="546" width="67" height="28" />
397
+ <dc:Bounds x="4267" y="439" width="53" height="14" />
363
398
  </bpmndi:BPMNLabel>
364
399
  </bpmndi:BPMNShape>
365
400
  <bpmndi:BPMNShape id="BPMNShape_gw-more" bpmnElement="gw-more" isMarkerVisible="true">
366
- <dc:Bounds x="4140" y="215" width="50" height="50" />
401
+ <dc:Bounds x="4418" y="224" width="50" height="50" />
367
402
  <bpmndi:BPMNLabel>
368
- <dc:Bounds x="4123" y="196" width="84" height="14" />
403
+ <dc:Bounds x="4341" y="279" width="84" height="14" />
369
404
  </bpmndi:BPMNLabel>
370
405
  </bpmndi:BPMNShape>
371
406
  <bpmndi:BPMNShape id="BPMNShape_wait-wave-merged" bpmnElement="wait-wave-merged">
372
- <dc:Bounds x="4322" y="382" width="36" height="36" />
407
+ <dc:Bounds x="4600" y="391" width="36" height="36" />
373
408
  <bpmndi:BPMNLabel>
374
- <dc:Bounds x="4301" y="349" width="78" height="28" />
409
+ <dc:Bounds x="4579" y="358" width="78" height="28" />
375
410
  </bpmndi:BPMNLabel>
376
411
  </bpmndi:BPMNShape>
377
412
  <bpmndi:BPMNShape id="BPMNShape_record-results" bpmnElement="record-results">
378
- <dc:Bounds x="4290" y="200" width="100" height="80" />
413
+ <dc:Bounds x="4568" y="209" width="100" height="80" />
379
414
  </bpmndi:BPMNShape>
380
415
  <bpmndi:BPMNShape id="BPMNShape_End" bpmnElement="End">
381
- <dc:Bounds x="4490" y="222" width="36" height="36" />
416
+ <dc:Bounds x="4768" y="231" width="36" height="36" />
417
+ <bpmndi:BPMNLabel>
418
+ <dc:Bounds x="4749" y="272" width="74" height="28" />
419
+ </bpmndi:BPMNLabel>
420
+ </bpmndi:BPMNShape>
421
+ <bpmndi:BPMNShape id="BPMNShape_be_plan_sla" bpmnElement="be_plan_sla">
422
+ <dc:Bounds x="1398" y="431" width="36" height="36" />
423
+ <bpmndi:BPMNLabel>
424
+ <dc:Bounds x="1374" y="512" width="84" height="14" />
425
+ </bpmndi:BPMNLabel>
426
+ </bpmndi:BPMNShape>
427
+ <bpmndi:BPMNShape id="BPMNShape_be_trial_sla" bpmnElement="be_trial_sla">
428
+ <dc:Bounds x="3900" y="431" width="36" height="36" />
382
429
  <bpmndi:BPMNLabel>
383
- <dc:Bounds x="4471" y="263" width="74" height="28" />
430
+ <dc:Bounds x="3816" y="512" width="84" height="14" />
384
431
  </bpmndi:BPMNLabel>
385
432
  </bpmndi:BPMNShape>
433
+ <bpmndi:BPMNEdge id="BPMNEdge_f_toEnsureBase" bpmnElement="f_toEnsureBase">
434
+ <di:waypoint x="116" y="249" />
435
+ <di:waypoint x="216" y="249" />
436
+ </bpmndi:BPMNEdge>
386
437
  <bpmndi:BPMNEdge id="BPMNEdge_f_toPlan" bpmnElement="f_toPlan">
387
- <di:waypoint x="116" y="240" />
388
- <di:waypoint x="216" y="240" />
438
+ <di:waypoint x="316" y="249" />
439
+ <di:waypoint x="416" y="249" />
389
440
  </bpmndi:BPMNEdge>
390
441
  <bpmndi:BPMNEdge id="BPMNEdge_f_toRecordPlan" bpmnElement="f_toRecordPlan">
391
- <di:waypoint x="316" y="240" />
392
- <di:waypoint x="416" y="240" />
442
+ <di:waypoint x="516" y="249" />
443
+ <di:waypoint x="616" y="249" />
393
444
  </bpmndi:BPMNEdge>
394
445
  <bpmndi:BPMNEdge id="BPMNEdge_f_toReviewPlan" bpmnElement="f_toReviewPlan">
395
- <di:waypoint x="516" y="240" />
396
- <di:waypoint x="616" y="240" />
446
+ <di:waypoint x="716" y="249" />
447
+ <di:waypoint x="816" y="249" />
397
448
  </bpmndi:BPMNEdge>
398
449
  <bpmndi:BPMNEdge id="BPMNEdge_f_toRecordPlanReview" bpmnElement="f_toRecordPlanReview">
399
- <di:waypoint x="716" y="240" />
400
- <di:waypoint x="816" y="240" />
450
+ <di:waypoint x="916" y="249" />
451
+ <di:waypoint x="1016" y="249" />
401
452
  </bpmndi:BPMNEdge>
402
453
  <bpmndi:BPMNEdge id="BPMNEdge_f_toGwPlanReview" bpmnElement="f_toGwPlanReview">
403
- <di:waypoint x="916" y="240" />
404
- <di:waypoint x="1016" y="240" />
454
+ <di:waypoint x="1116" y="249" />
455
+ <di:waypoint x="1216" y="249" />
405
456
  </bpmndi:BPMNEdge>
406
457
  <bpmndi:BPMNEdge id="BPMNEdge_f_plan_proceed" bpmnElement="f_plan_proceed">
407
- <di:waypoint x="1066" y="240" />
408
- <di:waypoint x="1652" y="240" />
458
+ <di:waypoint x="1266" y="249" />
459
+ <di:waypoint x="1716" y="249" />
409
460
  <bpmndi:BPMNLabel>
410
- <dc:Bounds x="1267" y="218" width="60" height="14" />
461
+ <dc:Bounds x="1399" y="227" width="60" height="14" />
411
462
  </bpmndi:BPMNLabel>
412
463
  </bpmndi:BPMNEdge>
413
464
  <bpmndi:BPMNEdge id="BPMNEdge_f_toImplement" bpmnElement="f_toImplement">
414
- <di:waypoint x="1752" y="240" />
415
- <di:waypoint x="1852" y="240" />
465
+ <di:waypoint x="1816" y="249" />
466
+ <di:waypoint x="1916" y="249" />
416
467
  </bpmndi:BPMNEdge>
417
468
  <bpmndi:BPMNEdge id="BPMNEdge_f_toRecordWave" bpmnElement="f_toRecordWave">
418
- <di:waypoint x="2654" y="240" />
419
- <di:waypoint x="2754" y="240" />
469
+ <di:waypoint x="2868" y="249" />
470
+ <di:waypoint x="2968" y="249" />
420
471
  </bpmndi:BPMNEdge>
421
472
  <bpmndi:BPMNEdge id="BPMNEdge_f_toTrialNeeded" bpmnElement="f_toTrialNeeded">
422
- <di:waypoint x="2854" y="240" />
423
- <di:waypoint x="2954" y="240" />
473
+ <di:waypoint x="3068" y="249" />
474
+ <di:waypoint x="3168" y="249" />
424
475
  </bpmndi:BPMNEdge>
425
476
  <bpmndi:BPMNEdge id="BPMNEdge_f_skipTrialMerge" bpmnElement="f_skipTrialMerge">
426
- <di:waypoint x="3004" y="240" />
427
- <di:waypoint x="4140" y="240" />
477
+ <di:waypoint x="3218" y="249" />
478
+ <di:waypoint x="4418" y="249" />
428
479
  <bpmndi:BPMNLabel>
429
- <dc:Bounds x="3251" y="218" width="32" height="14" />
480
+ <dc:Bounds x="3740" y="227" width="32" height="14" />
430
481
  </bpmndi:BPMNLabel>
431
482
  </bpmndi:BPMNEdge>
432
483
  <bpmndi:BPMNEdge id="BPMNEdge_f_done" bpmnElement="f_done">
433
- <di:waypoint x="4190" y="240" />
434
- <di:waypoint x="4290" y="240" />
484
+ <di:waypoint x="4468" y="249" />
485
+ <di:waypoint x="4568" y="249" />
435
486
  <bpmndi:BPMNLabel>
436
- <dc:Bounds x="4234" y="218" width="32" height="14" />
487
+ <dc:Bounds x="4502" y="227" width="32" height="14" />
437
488
  </bpmndi:BPMNLabel>
438
489
  </bpmndi:BPMNEdge>
439
490
  <bpmndi:BPMNEdge id="BPMNEdge_f_toEnd" bpmnElement="f_toEnd">
440
- <di:waypoint x="4390" y="240" />
441
- <di:waypoint x="4490" y="240" />
491
+ <di:waypoint x="4668" y="249" />
492
+ <di:waypoint x="4768" y="249" />
442
493
  </bpmndi:BPMNEdge>
443
494
  <bpmndi:BPMNEdge id="BPMNEdge_f_plan_answer_revise" bpmnElement="f_plan_answer_revise">
444
- <di:waypoint x="1527" y="425" />
445
- <di:waypoint x="1527" y="460" />
446
- <di:waypoint x="266" y="460" />
447
- <di:waypoint x="266" y="280" />
495
+ <di:waypoint x="1591" y="434" />
496
+ <di:waypoint x="1591" y="489" />
497
+ <di:waypoint x="466" y="489" />
498
+ <di:waypoint x="466" y="289" />
448
499
  <bpmndi:BPMNLabel>
449
- <dc:Bounds x="874" y="438" width="46" height="14" />
500
+ <dc:Bounds x="1006" y="467" width="46" height="14" />
450
501
  </bpmndi:BPMNLabel>
451
502
  </bpmndi:BPMNEdge>
452
503
  <bpmndi:BPMNEdge id="BPMNEdge_f_toRecordTrialMerge" bpmnElement="f_toRecordTrialMerge">
453
- <di:waypoint x="3204" y="400" />
454
- <di:waypoint x="3304" y="400" />
504
+ <di:waypoint x="3418" y="889" />
505
+ <di:waypoint x="3518" y="889" />
455
506
  </bpmndi:BPMNEdge>
456
507
  <bpmndi:BPMNEdge id="BPMNEdge_f_toGwTrial" bpmnElement="f_toGwTrial">
457
- <di:waypoint x="3404" y="400" />
458
- <di:waypoint x="3504" y="400" />
508
+ <di:waypoint x="3618" y="889" />
509
+ <di:waypoint x="3718" y="889" />
459
510
  </bpmndi:BPMNEdge>
460
511
  <bpmndi:BPMNEdge id="BPMNEdge_f_trialProceed" bpmnElement="f_trialProceed">
461
- <di:waypoint x="3529" y="375" />
462
- <di:waypoint x="3529" y="240" />
463
- <di:waypoint x="4140" y="240" />
512
+ <di:waypoint x="3768" y="889" />
513
+ <di:waypoint x="4443" y="889" />
514
+ <di:waypoint x="4443" y="274" />
464
515
  <bpmndi:BPMNLabel>
465
- <dc:Bounds x="3534" y="301" width="53" height="14" />
516
+ <dc:Bounds x="4079" y="867" width="53" height="14" />
466
517
  </bpmndi:BPMNLabel>
467
518
  </bpmndi:BPMNEdge>
468
519
  <bpmndi:BPMNEdge id="BPMNEdge_f_trialAnswerRerun" bpmnElement="f_trialAnswerRerun">
469
- <di:waypoint x="4015" y="585" />
470
- <di:waypoint x="4015" y="620" />
471
- <di:waypoint x="3154" y="620" />
472
- <di:waypoint x="3154" y="440" />
520
+ <di:waypoint x="4293" y="384" />
521
+ <di:waypoint x="4293" y="349" />
522
+ <di:waypoint x="3368" y="349" />
523
+ <di:waypoint x="3368" y="849" />
473
524
  <bpmndi:BPMNLabel>
474
- <dc:Bounds x="3565" y="598" width="39" height="14" />
525
+ <dc:Bounds x="3808" y="327" width="46" height="14" />
475
526
  </bpmndi:BPMNLabel>
476
527
  </bpmndi:BPMNEdge>
477
528
  <bpmndi:BPMNEdge id="BPMNEdge_f_plan_escalate" bpmnElement="f_plan_escalate">
478
- <di:waypoint x="1041" y="265" />
479
- <di:waypoint x="1041" y="400" />
480
- <di:waypoint x="1166" y="400" />
529
+ <di:waypoint x="1241" y="274" />
530
+ <di:waypoint x="1241" y="409" />
531
+ <di:waypoint x="1366" y="409" />
481
532
  <bpmndi:BPMNLabel>
482
- <dc:Bounds x="1046" y="326" width="67" height="14" />
533
+ <dc:Bounds x="1246" y="335" width="67" height="14" />
483
534
  </bpmndi:BPMNLabel>
484
535
  </bpmndi:BPMNEdge>
485
536
  <bpmndi:BPMNEdge id="BPMNEdge_f_plan_answer_proceed" bpmnElement="f_plan_answer_proceed">
486
- <di:waypoint x="1527" y="375" />
487
- <di:waypoint x="1527" y="240" />
488
- <di:waypoint x="1652" y="240" />
537
+ <di:waypoint x="1591" y="384" />
538
+ <di:waypoint x="1591" y="249" />
539
+ <di:waypoint x="1716" y="249" />
489
540
  <bpmndi:BPMNLabel>
490
- <dc:Bounds x="1532" y="301" width="53" height="14" />
541
+ <dc:Bounds x="1596" y="310" width="53" height="14" />
491
542
  </bpmndi:BPMNLabel>
492
543
  </bpmndi:BPMNEdge>
493
544
  <bpmndi:BPMNEdge id="BPMNEdge_f_runTrialMerge" bpmnElement="f_runTrialMerge">
494
- <di:waypoint x="2979" y="265" />
495
- <di:waypoint x="2979" y="400" />
496
- <di:waypoint x="3104" y="400" />
545
+ <di:waypoint x="3193" y="274" />
546
+ <di:waypoint x="3193" y="889" />
547
+ <di:waypoint x="3318" y="889" />
497
548
  <bpmndi:BPMNLabel>
498
- <dc:Bounds x="2984" y="326" width="25" height="14" />
549
+ <dc:Bounds x="3198" y="575" width="25" height="14" />
499
550
  </bpmndi:BPMNLabel>
500
551
  </bpmndi:BPMNEdge>
501
552
  <bpmndi:BPMNEdge id="BPMNEdge_f_trialEscalate" bpmnElement="f_trialEscalate">
502
- <di:waypoint x="3529" y="425" />
503
- <di:waypoint x="3529" y="560" />
504
- <di:waypoint x="3654" y="560" />
553
+ <di:waypoint x="3743" y="864" />
554
+ <di:waypoint x="3743" y="409" />
555
+ <di:waypoint x="3868" y="409" />
505
556
  <bpmndi:BPMNLabel>
506
- <dc:Bounds x="3534" y="486" width="85" height="14" />
557
+ <dc:Bounds x="3748" y="630" width="85" height="14" />
507
558
  </bpmndi:BPMNLabel>
508
559
  </bpmndi:BPMNEdge>
509
560
  <bpmndi:BPMNEdge id="BPMNEdge_f_trialAnswerProceed" bpmnElement="f_trialAnswerProceed">
510
- <di:waypoint x="4015" y="535" />
511
- <di:waypoint x="4015" y="385" />
512
- <di:waypoint x="4165" y="385" />
513
- <di:waypoint x="4165" y="265" />
561
+ <di:waypoint x="4293" y="384" />
562
+ <di:waypoint x="4293" y="249" />
563
+ <di:waypoint x="4418" y="249" />
514
564
  <bpmndi:BPMNLabel>
515
- <dc:Bounds x="4064" y="363" width="53" height="14" />
565
+ <dc:Bounds x="4298" y="310" width="53" height="14" />
516
566
  </bpmndi:BPMNLabel>
517
567
  </bpmndi:BPMNEdge>
518
- <bpmndi:BPMNEdge id="BPMNEdge_f_moreWaves" bpmnElement="f_moreWaves">
519
- <di:waypoint x="4190" y="240" />
520
- <di:waypoint x="4210" y="240" />
521
- <di:waypoint x="4210" y="265" />
522
- <di:waypoint x="4244" y="265" />
523
- <di:waypoint x="4244" y="420" />
524
- <di:waypoint x="4322" y="420" />
525
- <di:waypoint x="4322" y="438" />
526
- <di:waypoint x="4340" y="438" />
527
- <di:waypoint x="4340" y="418" />
568
+ <bpmndi:BPMNEdge id="BPMNEdge_f_trialAnswerAbandon" bpmnElement="f_trialAnswerAbandon">
569
+ <di:waypoint x="4293" y="384" />
570
+ <di:waypoint x="4293" y="220" />
571
+ <di:waypoint x="4548" y="220" />
572
+ <di:waypoint x="4548" y="249" />
573
+ <di:waypoint x="4568" y="249" />
528
574
  <bpmndi:BPMNLabel>
529
- <dc:Bounds x="4249" y="336" width="35" height="14" />
575
+ <dc:Bounds x="4394" y="198" width="53" height="14" />
530
576
  </bpmndi:BPMNLabel>
531
577
  </bpmndi:BPMNEdge>
532
- <bpmndi:BPMNEdge id="BPMNEdge_f_toWaitPlanAnswer" bpmnElement="f_toWaitPlanAnswer">
533
- <di:waypoint x="1266" y="400" />
534
- <di:waypoint x="1366" y="400" />
578
+ <bpmndi:BPMNEdge id="BPMNEdge_f_moreWaves" bpmnElement="f_moreWaves">
579
+ <di:waypoint x="4468" y="249" />
580
+ <di:waypoint x="4488" y="249" />
581
+ <di:waypoint x="4488" y="274" />
582
+ <di:waypoint x="4522" y="274" />
583
+ <di:waypoint x="4522" y="429" />
584
+ <di:waypoint x="4600" y="429" />
585
+ <di:waypoint x="4600" y="447" />
586
+ <di:waypoint x="4618" y="447" />
587
+ <di:waypoint x="4618" y="427" />
588
+ <bpmndi:BPMNLabel>
589
+ <dc:Bounds x="4527" y="345" width="35" height="14" />
590
+ </bpmndi:BPMNLabel>
535
591
  </bpmndi:BPMNEdge>
536
592
  <bpmndi:BPMNEdge id="BPMNEdge_f_toGwPlanAnswer" bpmnElement="f_toGwPlanAnswer">
537
- <di:waypoint x="1402" y="400" />
538
- <di:waypoint x="1502" y="400" />
539
- </bpmndi:BPMNEdge>
540
- <bpmndi:BPMNEdge id="BPMNEdge_f_toWaitTrial" bpmnElement="f_toWaitTrial">
541
- <di:waypoint x="3754" y="560" />
542
- <di:waypoint x="3854" y="560" />
593
+ <di:waypoint x="1466" y="409" />
594
+ <di:waypoint x="1566" y="409" />
543
595
  </bpmndi:BPMNEdge>
544
596
  <bpmndi:BPMNEdge id="BPMNEdge_f_toGwTrialAnswer" bpmnElement="f_toGwTrialAnswer">
545
- <di:waypoint x="3890" y="560" />
546
- <di:waypoint x="3990" y="560" />
597
+ <di:waypoint x="3968" y="409" />
598
+ <di:waypoint x="4068" y="409" />
599
+ </bpmndi:BPMNEdge>
600
+ <bpmndi:BPMNEdge id="BPMNEdge_f_resolveToTrialAnswer" bpmnElement="f_resolveToTrialAnswer">
601
+ <di:waypoint x="4168" y="409" />
602
+ <di:waypoint x="4268" y="409" />
547
603
  </bpmndi:BPMNEdge>
548
604
  <bpmndi:BPMNEdge id="BPMNEdge_f_plan_revise" bpmnElement="f_plan_revise">
549
- <di:waypoint x="1041" y="215" />
550
- <di:waypoint x="1041" y="180" />
551
- <di:waypoint x="266" y="180" />
552
- <di:waypoint x="266" y="200" />
605
+ <di:waypoint x="1241" y="224" />
606
+ <di:waypoint x="1241" y="189" />
607
+ <di:waypoint x="466" y="189" />
608
+ <di:waypoint x="466" y="209" />
553
609
  <bpmndi:BPMNLabel>
554
- <dc:Bounds x="631" y="158" width="46" height="14" />
610
+ <dc:Bounds x="831" y="167" width="46" height="14" />
555
611
  </bpmndi:BPMNLabel>
556
612
  </bpmndi:BPMNEdge>
557
613
  <bpmndi:BPMNEdge id="BPMNEdge_f_waveMerged" bpmnElement="f_waveMerged">
558
- <di:waypoint x="4340" y="418" />
559
- <di:waypoint x="4340" y="640" />
560
- <di:waypoint x="1702" y="640" />
561
- <di:waypoint x="1702" y="280" />
614
+ <di:waypoint x="4618" y="427" />
615
+ <di:waypoint x="4618" y="489" />
616
+ <di:waypoint x="1766" y="489" />
617
+ <di:waypoint x="1766" y="289" />
618
+ </bpmndi:BPMNEdge>
619
+ <bpmndi:BPMNEdge id="BPMNEdge_f_plan_sla" bpmnElement="f_plan_sla">
620
+ <di:waypoint x="1416" y="467" />
621
+ <di:waypoint x="1416" y="487" />
622
+ <di:waypoint x="466" y="487" />
623
+ <di:waypoint x="466" y="289" />
624
+ <bpmndi:BPMNLabel>
625
+ <dc:Bounds x="901" y="454" width="81" height="28" />
626
+ </bpmndi:BPMNLabel>
627
+ </bpmndi:BPMNEdge>
628
+ <bpmndi:BPMNEdge id="BPMNEdge_f_trial_sla" bpmnElement="f_trial_sla">
629
+ <di:waypoint x="3918" y="467" />
630
+ <di:waypoint x="3918" y="829" />
631
+ <di:waypoint x="3368" y="829" />
632
+ <di:waypoint x="3368" y="849" />
633
+ <bpmndi:BPMNLabel>
634
+ <dc:Bounds x="3606" y="796" width="74" height="28" />
635
+ </bpmndi:BPMNLabel>
562
636
  </bpmndi:BPMNEdge>
563
637
  <bpmndi:BPMNShape id="BPMNShape_w_start" bpmnElement="w_start">
564
- <dc:Bounds x="1892" y="142" width="36" height="36" />
638
+ <dc:Bounds x="1956" y="142" width="36" height="36" />
565
639
  <bpmndi:BPMNLabel>
566
- <dc:Bounds x="1893" y="183" width="34" height="14" />
640
+ <dc:Bounds x="1957" y="183" width="34" height="14" />
567
641
  </bpmndi:BPMNLabel>
568
642
  </bpmndi:BPMNShape>
569
643
  <bpmndi:BPMNShape id="BPMNShape_implement-task" bpmnElement="implement-task">
570
- <dc:Bounds x="2028" y="120" width="100" height="80" />
644
+ <dc:Bounds x="2092" y="120" width="100" height="80" />
571
645
  </bpmndi:BPMNShape>
572
646
  <bpmndi:BPMNShape id="BPMNShape_w_gw" bpmnElement="w_gw" isMarkerVisible="true">
573
- <dc:Bounds x="2228" y="135" width="50" height="50" />
647
+ <dc:Bounds x="2292" y="135" width="50" height="50" />
574
648
  <bpmndi:BPMNLabel>
575
- <dc:Bounds x="2216" y="116" width="74" height="14" />
649
+ <dc:Bounds x="2280" y="116" width="74" height="14" />
576
650
  </bpmndi:BPMNLabel>
577
651
  </bpmndi:BPMNShape>
578
- <bpmndi:BPMNShape id="BPMNShape_persist-task-escalation" bpmnElement="persist-task-escalation">
579
- <dc:Bounds x="2378" y="280" width="100" height="80" />
652
+ <bpmndi:BPMNShape id="BPMNShape_feature-escalation" bpmnElement="feature-escalation">
653
+ <dc:Bounds x="2442" y="280" width="100" height="80" />
580
654
  </bpmndi:BPMNShape>
581
- <bpmndi:BPMNShape id="BPMNShape_wait-feature-answer" bpmnElement="wait-feature-answer">
582
- <dc:Bounds x="2578" y="302" width="36" height="36" />
655
+ <bpmndi:BPMNShape id="BPMNShape_w_gw_answer" bpmnElement="w_gw_answer" isMarkerVisible="true">
656
+ <dc:Bounds x="2642" y="295" width="50" height="50" />
583
657
  <bpmndi:BPMNLabel>
584
- <dc:Bounds x="2554" y="269" width="85" height="28" />
658
+ <dc:Bounds x="2639" y="276" width="56" height="14" />
585
659
  </bpmndi:BPMNLabel>
586
660
  </bpmndi:BPMNShape>
587
661
  <bpmndi:BPMNShape id="BPMNShape_w_end" bpmnElement="w_end">
588
- <dc:Bounds x="2410" y="142" width="36" height="36" />
662
+ <dc:Bounds x="2792" y="142" width="36" height="36" />
589
663
  <bpmndi:BPMNLabel>
590
- <dc:Bounds x="2395" y="183" width="66" height="14" />
664
+ <dc:Bounds x="2777" y="123" width="66" height="14" />
665
+ </bpmndi:BPMNLabel>
666
+ </bpmndi:BPMNShape>
667
+ <bpmndi:BPMNShape id="BPMNShape_be_feature_sla" bpmnElement="be_feature_sla">
668
+ <dc:Bounds x="2474" y="342" width="36" height="36" />
669
+ <bpmndi:BPMNLabel>
670
+ <dc:Bounds x="2450" y="423" width="84" height="14" />
591
671
  </bpmndi:BPMNLabel>
592
672
  </bpmndi:BPMNShape>
593
673
  <bpmndi:BPMNEdge id="BPMNEdge_w_toImpl" bpmnElement="w_toImpl">
594
- <di:waypoint x="1928" y="160" />
595
- <di:waypoint x="2028" y="160" />
674
+ <di:waypoint x="1992" y="160" />
675
+ <di:waypoint x="2092" y="160" />
596
676
  </bpmndi:BPMNEdge>
597
677
  <bpmndi:BPMNEdge id="BPMNEdge_w_toGw" bpmnElement="w_toGw">
598
- <di:waypoint x="2128" y="160" />
599
- <di:waypoint x="2228" y="160" />
678
+ <di:waypoint x="2192" y="160" />
679
+ <di:waypoint x="2292" y="160" />
600
680
  </bpmndi:BPMNEdge>
601
681
  <bpmndi:BPMNEdge id="BPMNEdge_w_done" bpmnElement="w_done">
602
- <di:waypoint x="2278" y="160" />
603
- <di:waypoint x="2410" y="160" />
682
+ <di:waypoint x="2342" y="160" />
683
+ <di:waypoint x="2792" y="160" />
604
684
  <bpmndi:BPMNLabel>
605
- <dc:Bounds x="2328" y="138" width="32" height="14" />
685
+ <dc:Bounds x="2551" y="138" width="32" height="14" />
686
+ </bpmndi:BPMNLabel>
687
+ </bpmndi:BPMNEdge>
688
+ <bpmndi:BPMNEdge id="BPMNEdge_w_abandon" bpmnElement="w_abandon">
689
+ <di:waypoint x="2692" y="320" />
690
+ <di:waypoint x="2810" y="320" />
691
+ <di:waypoint x="2810" y="178" />
692
+ <bpmndi:BPMNLabel>
693
+ <dc:Bounds x="2725" y="298" width="53" height="14" />
606
694
  </bpmndi:BPMNLabel>
607
695
  </bpmndi:BPMNEdge>
608
696
  <bpmndi:BPMNEdge id="BPMNEdge_w_escalate" bpmnElement="w_escalate">
609
- <di:waypoint x="2253" y="185" />
610
- <di:waypoint x="2253" y="320" />
611
- <di:waypoint x="2378" y="320" />
697
+ <di:waypoint x="2317" y="185" />
698
+ <di:waypoint x="2317" y="320" />
699
+ <di:waypoint x="2442" y="320" />
612
700
  <bpmndi:BPMNLabel>
613
- <dc:Bounds x="2258" y="246" width="67" height="14" />
701
+ <dc:Bounds x="2322" y="246" width="67" height="14" />
614
702
  </bpmndi:BPMNLabel>
615
703
  </bpmndi:BPMNEdge>
616
- <bpmndi:BPMNEdge id="BPMNEdge_w_toWait" bpmnElement="w_toWait">
617
- <di:waypoint x="2478" y="320" />
618
- <di:waypoint x="2578" y="320" />
704
+ <bpmndi:BPMNEdge id="BPMNEdge_w_toAnswerGw" bpmnElement="w_toAnswerGw">
705
+ <di:waypoint x="2542" y="320" />
706
+ <di:waypoint x="2642" y="320" />
707
+ </bpmndi:BPMNEdge>
708
+ <bpmndi:BPMNEdge id="BPMNEdge_w_sla" bpmnElement="w_sla">
709
+ <di:waypoint x="2492" y="378" />
710
+ <di:waypoint x="2492" y="398" />
711
+ <di:waypoint x="2810" y="398" />
712
+ <di:waypoint x="2810" y="178" />
713
+ <bpmndi:BPMNLabel>
714
+ <dc:Bounds x="2567" y="365" width="88" height="28" />
715
+ </bpmndi:BPMNLabel>
619
716
  </bpmndi:BPMNEdge>
620
717
  <bpmndi:BPMNEdge id="BPMNEdge_w_answerLoop" bpmnElement="w_answerLoop">
621
- <di:waypoint x="2596" y="338" />
622
- <di:waypoint x="2596" y="380" />
623
- <di:waypoint x="2078" y="380" />
624
- <di:waypoint x="2078" y="200" />
718
+ <di:waypoint x="2667" y="345" />
719
+ <di:waypoint x="2667" y="400" />
720
+ <di:waypoint x="2142" y="400" />
721
+ <di:waypoint x="2142" y="200" />
722
+ <bpmndi:BPMNLabel>
723
+ <dc:Bounds x="2380" y="378" width="49" height="14" />
724
+ </bpmndi:BPMNLabel>
625
725
  </bpmndi:BPMNEdge>
626
726
  </bpmndi:BPMNPlane>
627
727
  </bpmndi:BPMNDiagram>