@nanobpm/nano-workforce 0.156.0 → 0.158.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nanobpm/nano-workforce",
3
- "version": "0.156.0",
3
+ "version": "0.158.0",
4
4
  "description": "Nano Workforce — an Agent Graph Orchestration application for Agentic SDLC: durable BPMN processes that coordinate a graph of AI agents across the software delivery lifecycle.",
5
5
  "type": "module",
6
6
  "main": "main.ts",
@@ -0,0 +1,50 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
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" xmlns:nano="https://nanobpm.io/schema/shapes/1.0" id="Definitions_nano_workforce_converge_cell" targetNamespace="http://nanobpm.io/nano-workforce">
3
+ <bpmn:process id="converge-cell" name="Converge cell" isExecutable="true">
4
+ <bpmn:startEvent id="Start" name="PR to converge">
5
+ <bpmn:outgoing>cc_toConverge</bpmn:outgoing>
6
+ </bpmn:startEvent>
7
+ <bpmn:serviceTask id="converge" name="Hand off to convergence loop">
8
+ <bpmn:extensionElements>
9
+ <zeebe:taskDefinition type="pr.converge-feature" />
10
+ <zeebe:properties>
11
+ <zeebe:property name="io.nanobpm.dataEnvelope.in" value="ConvergeFeatureIn" />
12
+ </zeebe:properties>
13
+ </bpmn:extensionElements>
14
+ <bpmn:incoming>cc_toConverge</bpmn:incoming>
15
+ <bpmn:outgoing>cc_toEnd</bpmn:outgoing>
16
+ </bpmn:serviceTask>
17
+ <bpmn:endEvent id="End" name="Converging">
18
+ <bpmn:incoming>cc_toEnd</bpmn:incoming>
19
+ </bpmn:endEvent>
20
+ <bpmn:sequenceFlow id="cc_toConverge" sourceRef="Start" targetRef="converge" />
21
+ <bpmn:sequenceFlow id="cc_toEnd" sourceRef="converge" targetRef="End" />
22
+ </bpmn:process>
23
+ <bpmndi:BPMNDiagram id="BPMNDiagram_converge-cell">
24
+ <bpmndi:BPMNPlane id="BPMNPlane_converge-cell" bpmnElement="converge-cell">
25
+ <bpmndi:BPMNShape id="BPMNShape_Start" bpmnElement="Start">
26
+ <dc:Bounds x="80" y="102" width="36" height="36" />
27
+ <bpmndi:BPMNLabel>
28
+ <dc:Bounds x="68" y="143" width="60" height="28" />
29
+ </bpmndi:BPMNLabel>
30
+ </bpmndi:BPMNShape>
31
+ <bpmndi:BPMNShape id="BPMNShape_converge" bpmnElement="converge">
32
+ <dc:Bounds x="216" y="80" width="100" height="80" />
33
+ </bpmndi:BPMNShape>
34
+ <bpmndi:BPMNShape id="BPMNShape_End" bpmnElement="End">
35
+ <dc:Bounds x="416" y="102" width="36" height="36" />
36
+ <bpmndi:BPMNLabel>
37
+ <dc:Bounds x="396" y="143" width="76" height="14" />
38
+ </bpmndi:BPMNLabel>
39
+ </bpmndi:BPMNShape>
40
+ <bpmndi:BPMNEdge id="BPMNEdge_cc_toConverge" bpmnElement="cc_toConverge">
41
+ <di:waypoint x="116" y="120" />
42
+ <di:waypoint x="216" y="120" />
43
+ </bpmndi:BPMNEdge>
44
+ <bpmndi:BPMNEdge id="BPMNEdge_cc_toEnd" bpmnElement="cc_toEnd">
45
+ <di:waypoint x="316" y="120" />
46
+ <di:waypoint x="416" y="120" />
47
+ </bpmndi:BPMNEdge>
48
+ </bpmndi:BPMNPlane>
49
+ </bpmndi:BPMNDiagram>
50
+ </bpmn:definitions>
@@ -0,0 +1,133 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
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" xmlns:nano="https://nanobpm.io/schema/shapes/1.0" id="Definitions_nano_workforce_human_escalation" targetNamespace="http://nanobpm.io/nano-workforce">
3
+ <bpmn:process id="human-escalation" name="Human escalation cell" isExecutable="true">
4
+ <bpmn:startEvent id="Start" name="Escalated">
5
+ <bpmn:outgoing>he_toTask</bpmn:outgoing>
6
+ </bpmn:startEvent>
7
+ <bpmn:userTask id="escalation" name="Task escalation (human)">
8
+ <bpmn:extensionElements>
9
+ <zeebe:formDefinition formId="feature-escalation" />
10
+ <zeebe:userTask />
11
+ <zeebe:assignmentDefinition candidateGroups="operators" assignee="=if (is defined(escalationAssignee) and escalationAssignee != null and trim(string(escalationAssignee)) != &#34;&#34;) then escalationAssignee else null" />
12
+ </bpmn:extensionElements>
13
+ <bpmn:incoming>he_toTask</bpmn:incoming>
14
+ <bpmn:outgoing>he_toAnswerGw</bpmn:outgoing>
15
+ </bpmn:userTask>
16
+ <bpmn:boundaryEvent id="be_he_sla" name="SLA elapsed" attachedToRef="escalation">
17
+ <bpmn:outgoing>he_sla</bpmn:outgoing>
18
+ <bpmn:timerEventDefinition id="ted_he_sla">
19
+ <bpmn:timeDuration xsi:type="bpmn:tFormalExpression">=escalationSlaTimeout</bpmn:timeDuration>
20
+ </bpmn:timerEventDefinition>
21
+ </bpmn:boundaryEvent>
22
+ <bpmn:exclusiveGateway id="he_gw_answer" name="answer?" default="he_abandon">
23
+ <bpmn:incoming>he_toAnswerGw</bpmn:incoming>
24
+ <bpmn:outgoing>he_answer</bpmn:outgoing>
25
+ <bpmn:outgoing>he_abandon</bpmn:outgoing>
26
+ </bpmn:exclusiveGateway>
27
+ <bpmn:endEvent id="he_end_answered" name="Answered">
28
+ <bpmn:extensionElements>
29
+ <zeebe:ioMapping>
30
+ <zeebe:input source="=&#34;answer&#34;" target="resolution" />
31
+ </zeebe:ioMapping>
32
+ </bpmn:extensionElements>
33
+ <bpmn:incoming>he_answer</bpmn:incoming>
34
+ </bpmn:endEvent>
35
+ <bpmn:endEvent id="he_end_abandoned" name="Abandoned">
36
+ <bpmn:extensionElements>
37
+ <zeebe:ioMapping>
38
+ <zeebe:input source="=&#34;abandon&#34;" target="resolution" />
39
+ </zeebe:ioMapping>
40
+ </bpmn:extensionElements>
41
+ <bpmn:incoming>he_abandon</bpmn:incoming>
42
+ </bpmn:endEvent>
43
+ <bpmn:endEvent id="he_end_sla" name="SLA auto-abandon">
44
+ <bpmn:extensionElements>
45
+ <zeebe:ioMapping>
46
+ <zeebe:input source="=&#34;abandon&#34;" target="resolution" />
47
+ </zeebe:ioMapping>
48
+ </bpmn:extensionElements>
49
+ <bpmn:incoming>he_sla</bpmn:incoming>
50
+ </bpmn:endEvent>
51
+ <bpmn:sequenceFlow id="he_toTask" sourceRef="Start" targetRef="escalation" />
52
+ <bpmn:sequenceFlow id="he_toAnswerGw" sourceRef="escalation" targetRef="he_gw_answer" />
53
+ <bpmn:sequenceFlow id="he_answer" name="answer" sourceRef="he_gw_answer" targetRef="he_end_answered">
54
+ <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=resolution = "answer"</bpmn:conditionExpression>
55
+ </bpmn:sequenceFlow>
56
+ <bpmn:sequenceFlow id="he_abandon" name="abandon" sourceRef="he_gw_answer" targetRef="he_end_abandoned" />
57
+ <bpmn:sequenceFlow id="he_sla" name="SLA auto-abandon" sourceRef="be_he_sla" targetRef="he_end_sla" />
58
+ </bpmn:process>
59
+ <bpmndi:BPMNDiagram id="BPMNDiagram_human-escalation">
60
+ <bpmndi:BPMNPlane id="BPMNPlane_human-escalation" bpmnElement="human-escalation">
61
+ <bpmndi:BPMNShape id="BPMNShape_Start" bpmnElement="Start">
62
+ <dc:Bounds x="80" y="102" width="36" height="36" />
63
+ <bpmndi:BPMNLabel>
64
+ <dc:Bounds x="64" y="143" width="69" height="14" />
65
+ </bpmndi:BPMNLabel>
66
+ </bpmndi:BPMNShape>
67
+ <bpmndi:BPMNShape id="BPMNShape_escalation" bpmnElement="escalation">
68
+ <dc:Bounds x="216" y="80" width="100" height="80" />
69
+ </bpmndi:BPMNShape>
70
+ <bpmndi:BPMNShape id="BPMNShape_he_gw_answer" bpmnElement="he_gw_answer" isMarkerVisible="true">
71
+ <dc:Bounds x="552" y="95" width="50" height="50" />
72
+ <bpmndi:BPMNLabel>
73
+ <dc:Bounds x="549" y="76" width="56" height="14" />
74
+ </bpmndi:BPMNLabel>
75
+ </bpmndi:BPMNShape>
76
+ <bpmndi:BPMNShape id="BPMNShape_he_end_answered" bpmnElement="he_end_answered">
77
+ <dc:Bounds x="702" y="262" width="36" height="36" />
78
+ <bpmndi:BPMNLabel>
79
+ <dc:Bounds x="688" y="303" width="65" height="14" />
80
+ </bpmndi:BPMNLabel>
81
+ </bpmndi:BPMNShape>
82
+ <bpmndi:BPMNShape id="BPMNShape_he_end_abandoned" bpmnElement="he_end_abandoned">
83
+ <dc:Bounds x="702" y="102" width="36" height="36" />
84
+ <bpmndi:BPMNLabel>
85
+ <dc:Bounds x="686" y="143" width="69" height="14" />
86
+ </bpmndi:BPMNLabel>
87
+ </bpmndi:BPMNShape>
88
+ <bpmndi:BPMNShape id="BPMNShape_he_end_sla" bpmnElement="he_end_sla">
89
+ <dc:Bounds x="416" y="262" width="36" height="36" />
90
+ <bpmndi:BPMNLabel>
91
+ <dc:Bounds x="390" y="303" width="88" height="28" />
92
+ </bpmndi:BPMNLabel>
93
+ </bpmndi:BPMNShape>
94
+ <bpmndi:BPMNShape id="BPMNShape_be_he_sla" bpmnElement="be_he_sla">
95
+ <dc:Bounds x="248" y="142" width="36" height="36" />
96
+ <bpmndi:BPMNLabel>
97
+ <dc:Bounds x="164" y="183" width="84" height="14" />
98
+ </bpmndi:BPMNLabel>
99
+ </bpmndi:BPMNShape>
100
+ <bpmndi:BPMNEdge id="BPMNEdge_he_toTask" bpmnElement="he_toTask">
101
+ <di:waypoint x="116" y="120" />
102
+ <di:waypoint x="216" y="120" />
103
+ </bpmndi:BPMNEdge>
104
+ <bpmndi:BPMNEdge id="BPMNEdge_he_toAnswerGw" bpmnElement="he_toAnswerGw">
105
+ <di:waypoint x="316" y="120" />
106
+ <di:waypoint x="552" y="120" />
107
+ </bpmndi:BPMNEdge>
108
+ <bpmndi:BPMNEdge id="BPMNEdge_he_abandon" bpmnElement="he_abandon">
109
+ <di:waypoint x="602" y="120" />
110
+ <di:waypoint x="702" y="120" />
111
+ <bpmndi:BPMNLabel>
112
+ <dc:Bounds x="626" y="98" width="53" height="14" />
113
+ </bpmndi:BPMNLabel>
114
+ </bpmndi:BPMNEdge>
115
+ <bpmndi:BPMNEdge id="BPMNEdge_he_answer" bpmnElement="he_answer">
116
+ <di:waypoint x="577" y="145" />
117
+ <di:waypoint x="577" y="280" />
118
+ <di:waypoint x="702" y="280" />
119
+ <bpmndi:BPMNLabel>
120
+ <dc:Bounds x="582" y="206" width="49" height="14" />
121
+ </bpmndi:BPMNLabel>
122
+ </bpmndi:BPMNEdge>
123
+ <bpmndi:BPMNEdge id="BPMNEdge_he_sla" bpmnElement="he_sla">
124
+ <di:waypoint x="266" y="178" />
125
+ <di:waypoint x="266" y="280" />
126
+ <di:waypoint x="416" y="280" />
127
+ <bpmndi:BPMNLabel>
128
+ <dc:Bounds x="271" y="215" width="88" height="28" />
129
+ </bpmndi:BPMNLabel>
130
+ </bpmndi:BPMNEdge>
131
+ </bpmndi:BPMNPlane>
132
+ </bpmndi:BPMNDiagram>
133
+ </bpmn:definitions>
@@ -0,0 +1,136 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
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" xmlns:nano="https://nanobpm.io/schema/shapes/1.0" id="Definitions_nano_workforce_implement_cell" targetNamespace="http://nanobpm.io/nano-workforce">
3
+ <bpmn:process id="implement-cell" name="Implement cell" isExecutable="true">
4
+ <bpmn:startEvent id="Start" name="Task">
5
+ <bpmn:outgoing>ic_toImplement</bpmn:outgoing>
6
+ </bpmn:startEvent>
7
+ <bpmn:serviceTask id="implement-task" name="Implement (agent)">
8
+ <bpmn:extensionElements>
9
+ <zeebe:taskDefinition type="senior:feature" />
10
+ <zeebe:linkedResources>
11
+ <zeebe:linkedResource resourceId="feature.md" bindingType="latest" resourceType="GenericScript" linkName="prompt" />
12
+ </zeebe:linkedResources>
13
+ <zeebe:ioMapping>
14
+ <zeebe:input source="=&#34;&#10;&#10;---&#10;&#10;&#34; + task.prompt + (if (is defined(baseBranchBrief) and baseBranchBrief != null) then baseBranchBrief else &#34;&#34;) + (if (is defined(blackboardBrief) and blackboardBrief != null) then blackboardBrief else &#34;&#34;) + (if (is defined(resolvedDepsBrief) and resolvedDepsBrief != null) then resolvedDepsBrief else &#34;&#34;) + (if (is defined(resolvedArtifacts) = false or resolvedArtifacts = null or count(resolvedArtifacts[item != null]) = 0) then &#34;&#34; else (&#34;&#10;&#10;---&#10;&#10;**Bound upstream readiness.** Build/install/clone against EXACTLY these resolved published versions (the ones first carrying the awaited capability), and bump the consumer dependency to them — never merely the newest:&#10;&#10;&#34; + string join(resolvedArtifacts[item != null], &#34;&#10;&#34;))) + (if (is defined(customInstructions) = false or customInstructions = null) then &#34;&#34; else &#34;&#10;&#10;---&#10;&#10;## Operator custom instructions&#10;&#10;The operator supplied these instructions for this run — follow them:&#10;&#10;&#34; + customInstructions)" target="appendPrompt" />
15
+ <zeebe:input source="=if (is defined(transcriptUrlBase)) then transcriptUrlBase else null" target="transcriptUrlBase" />
16
+ <zeebe:output source="=status" target="status" />
17
+ <zeebe:output source="=question" target="question" />
18
+ <zeebe:output source="=if (is defined(transcriptUrl)) then transcriptUrl else null" target="transcriptUrl" />
19
+ </zeebe:ioMapping>
20
+ </bpmn:extensionElements>
21
+ <bpmn:incoming>ic_toImplement</bpmn:incoming>
22
+ <bpmn:incoming>ic_answerLoop</bpmn:incoming>
23
+ <bpmn:outgoing>ic_toGw</bpmn:outgoing>
24
+ </bpmn:serviceTask>
25
+ <bpmn:exclusiveGateway id="ic_gw" name="clean terminal?" default="ic_escalate">
26
+ <bpmn:incoming>ic_toGw</bpmn:incoming>
27
+ <bpmn:outgoing>ic_escalate</bpmn:outgoing>
28
+ <bpmn:outgoing>ic_done</bpmn:outgoing>
29
+ </bpmn:exclusiveGateway>
30
+ <bpmn:callActivity id="escalate" name="Human escalation">
31
+ <bpmn:extensionElements>
32
+ <zeebe:calledElement processId="human-escalation" propagateAllChildVariables="true" />
33
+ </bpmn:extensionElements>
34
+ <bpmn:incoming>ic_escalate</bpmn:incoming>
35
+ <bpmn:outgoing>ic_toAnswerGw</bpmn:outgoing>
36
+ </bpmn:callActivity>
37
+ <bpmn:exclusiveGateway id="ic_gw_answer" name="answer?" default="ic_abandon">
38
+ <bpmn:incoming>ic_toAnswerGw</bpmn:incoming>
39
+ <bpmn:outgoing>ic_answerLoop</bpmn:outgoing>
40
+ <bpmn:outgoing>ic_abandon</bpmn:outgoing>
41
+ </bpmn:exclusiveGateway>
42
+ <bpmn:endEvent id="ic_end" name="Task done">
43
+ <bpmn:incoming>ic_done</bpmn:incoming>
44
+ <bpmn:incoming>ic_abandon</bpmn:incoming>
45
+ </bpmn:endEvent>
46
+ <bpmn:sequenceFlow id="ic_toImplement" sourceRef="Start" targetRef="implement-task" />
47
+ <bpmn:sequenceFlow id="ic_toGw" sourceRef="implement-task" targetRef="ic_gw" />
48
+ <bpmn:sequenceFlow id="ic_done" name="done" sourceRef="ic_gw" targetRef="ic_end">
49
+ <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=status = "opened" or status = "blocked" or status = "skipped"</bpmn:conditionExpression>
50
+ </bpmn:sequenceFlow>
51
+ <bpmn:sequenceFlow id="ic_escalate" name="escalated" sourceRef="ic_gw" targetRef="escalate" />
52
+ <bpmn:sequenceFlow id="ic_toAnswerGw" sourceRef="escalate" targetRef="ic_gw_answer" />
53
+ <bpmn:sequenceFlow id="ic_answerLoop" name="answer" sourceRef="ic_gw_answer" targetRef="implement-task">
54
+ <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=resolution = "answer"</bpmn:conditionExpression>
55
+ </bpmn:sequenceFlow>
56
+ <bpmn:sequenceFlow id="ic_abandon" name="abandon" sourceRef="ic_gw_answer" targetRef="ic_end" />
57
+ </bpmn:process>
58
+ <bpmndi:BPMNDiagram id="BPMNDiagram_implement-cell">
59
+ <bpmndi:BPMNPlane id="BPMNPlane_implement-cell" bpmnElement="implement-cell">
60
+ <bpmndi:BPMNShape id="BPMNShape_Start" bpmnElement="Start">
61
+ <dc:Bounds x="80" y="102" width="36" height="36" />
62
+ <bpmndi:BPMNLabel>
63
+ <dc:Bounds x="81" y="143" width="34" height="14" />
64
+ </bpmndi:BPMNLabel>
65
+ </bpmndi:BPMNShape>
66
+ <bpmndi:BPMNShape id="BPMNShape_implement-task" bpmnElement="implement-task">
67
+ <dc:Bounds x="216" y="80" width="100" height="80" />
68
+ </bpmndi:BPMNShape>
69
+ <bpmndi:BPMNShape id="BPMNShape_ic_gw" bpmnElement="ic_gw" isMarkerVisible="true">
70
+ <dc:Bounds x="416" y="95" width="50" height="50" />
71
+ <bpmndi:BPMNLabel>
72
+ <dc:Bounds x="406" y="62" width="70" height="28" />
73
+ </bpmndi:BPMNLabel>
74
+ </bpmndi:BPMNShape>
75
+ <bpmndi:BPMNShape id="BPMNShape_escalate" bpmnElement="escalate">
76
+ <dc:Bounds x="566" y="80" width="100" height="80" />
77
+ </bpmndi:BPMNShape>
78
+ <bpmndi:BPMNShape id="BPMNShape_ic_gw_answer" bpmnElement="ic_gw_answer" isMarkerVisible="true">
79
+ <dc:Bounds x="766" y="95" width="50" height="50" />
80
+ <bpmndi:BPMNLabel>
81
+ <dc:Bounds x="763" y="76" width="56" height="14" />
82
+ </bpmndi:BPMNLabel>
83
+ </bpmndi:BPMNShape>
84
+ <bpmndi:BPMNShape id="BPMNShape_ic_end" bpmnElement="ic_end">
85
+ <dc:Bounds x="916" y="102" width="36" height="36" />
86
+ <bpmndi:BPMNLabel>
87
+ <dc:Bounds x="901" y="83" width="66" height="14" />
88
+ </bpmndi:BPMNLabel>
89
+ </bpmndi:BPMNShape>
90
+ <bpmndi:BPMNEdge id="BPMNEdge_ic_toImplement" bpmnElement="ic_toImplement">
91
+ <di:waypoint x="116" y="120" />
92
+ <di:waypoint x="216" y="120" />
93
+ </bpmndi:BPMNEdge>
94
+ <bpmndi:BPMNEdge id="BPMNEdge_ic_toGw" bpmnElement="ic_toGw">
95
+ <di:waypoint x="316" y="120" />
96
+ <di:waypoint x="416" y="120" />
97
+ </bpmndi:BPMNEdge>
98
+ <bpmndi:BPMNEdge id="BPMNEdge_ic_escalate" bpmnElement="ic_escalate">
99
+ <di:waypoint x="466" y="120" />
100
+ <di:waypoint x="566" y="120" />
101
+ <bpmndi:BPMNLabel>
102
+ <dc:Bounds x="483" y="128" width="67" height="14" />
103
+ </bpmndi:BPMNLabel>
104
+ </bpmndi:BPMNEdge>
105
+ <bpmndi:BPMNEdge id="BPMNEdge_ic_toAnswerGw" bpmnElement="ic_toAnswerGw">
106
+ <di:waypoint x="666" y="120" />
107
+ <di:waypoint x="766" y="120" />
108
+ </bpmndi:BPMNEdge>
109
+ <bpmndi:BPMNEdge id="BPMNEdge_ic_abandon" bpmnElement="ic_abandon">
110
+ <di:waypoint x="816" y="120" />
111
+ <di:waypoint x="916" y="120" />
112
+ <bpmndi:BPMNLabel>
113
+ <dc:Bounds x="840" y="128" width="53" height="14" />
114
+ </bpmndi:BPMNLabel>
115
+ </bpmndi:BPMNEdge>
116
+ <bpmndi:BPMNEdge id="BPMNEdge_ic_done" bpmnElement="ic_done">
117
+ <di:waypoint x="441" y="145" />
118
+ <di:waypoint x="441" y="180" />
119
+ <di:waypoint x="934" y="180" />
120
+ <di:waypoint x="934" y="138" />
121
+ <bpmndi:BPMNLabel>
122
+ <dc:Bounds x="672" y="158" width="32" height="14" />
123
+ </bpmndi:BPMNLabel>
124
+ </bpmndi:BPMNEdge>
125
+ <bpmndi:BPMNEdge id="BPMNEdge_ic_answerLoop" bpmnElement="ic_answerLoop">
126
+ <di:waypoint x="791" y="145" />
127
+ <di:waypoint x="791" y="200" />
128
+ <di:waypoint x="266" y="200" />
129
+ <di:waypoint x="266" y="160" />
130
+ <bpmndi:BPMNLabel>
131
+ <dc:Bounds x="504" y="208" width="49" height="14" />
132
+ </bpmndi:BPMNLabel>
133
+ </bpmndi:BPMNEdge>
134
+ </bpmndi:BPMNPlane>
135
+ </bpmndi:BPMNDiagram>
136
+ </bpmn:definitions>
@@ -0,0 +1,218 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
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" xmlns:nano="https://nanobpm.io/schema/shapes/1.0" id="Definitions_nano_workforce_merge_cell" targetNamespace="http://nanobpm.io/nano-workforce">
3
+ <bpmn:process id="merge-cell" name="Merge cell (trial merge)" isExecutable="true">
4
+ <bpmn:startEvent id="Start" name="Wave produced">
5
+ <bpmn:outgoing>mc_toTrial</bpmn:outgoing>
6
+ </bpmn:startEvent>
7
+ <bpmn:serviceTask id="trial-merge" name="Trial merge (agent)">
8
+ <bpmn:extensionElements>
9
+ <zeebe:taskDefinition type="senior:trial-merge" />
10
+ <zeebe:linkedResources>
11
+ <zeebe:linkedResource resourceId="trial-merge.md" bindingType="latest" resourceType="GenericScript" linkName="prompt" />
12
+ </zeebe:linkedResources>
13
+ <zeebe:ioMapping>
14
+ <zeebe:input source="=null" target="result" />
15
+ <zeebe:input source="=null" target="conflicts" />
16
+ <zeebe:input source="=null" target="failing" />
17
+ <zeebe:input source="=null" target="summary" />
18
+ <zeebe:input source="=null" target="answer" />
19
+ </zeebe:ioMapping>
20
+ </bpmn:extensionElements>
21
+ <bpmn:incoming>mc_toTrial</bpmn:incoming>
22
+ <bpmn:incoming>mc_rerun</bpmn:incoming>
23
+ <bpmn:incoming>mc_sla</bpmn:incoming>
24
+ <bpmn:outgoing>mc_toRecord</bpmn:outgoing>
25
+ </bpmn:serviceTask>
26
+ <bpmn:serviceTask id="record-trial-merge" name="Record trial merge">
27
+ <bpmn:extensionElements>
28
+ <zeebe:taskDefinition type="pr.record-trial-merge" />
29
+ <zeebe:properties>
30
+ <zeebe:property name="io.nanobpm.dataEnvelope.in" value="RecordTrialMergeIn" />
31
+ </zeebe:properties>
32
+ </bpmn:extensionElements>
33
+ <bpmn:incoming>mc_toRecord</bpmn:incoming>
34
+ <bpmn:outgoing>mc_toGwTrial</bpmn:outgoing>
35
+ </bpmn:serviceTask>
36
+ <bpmn:exclusiveGateway id="gw-trial" name="trial red?" default="mc_proceed">
37
+ <bpmn:incoming>mc_toGwTrial</bpmn:incoming>
38
+ <bpmn:outgoing>mc_escalate</bpmn:outgoing>
39
+ <bpmn:outgoing>mc_proceed</bpmn:outgoing>
40
+ </bpmn:exclusiveGateway>
41
+ <bpmn:userTask id="trial-merge-decision" name="Trial-merge decision (human)">
42
+ <bpmn:extensionElements>
43
+ <zeebe:formDefinition formId="trial-merge-decision" />
44
+ <zeebe:userTask />
45
+ <zeebe:assignmentDefinition candidateGroups="operators" assignee="=if (is defined(escalationAssignee) and escalationAssignee != null and trim(string(escalationAssignee)) != &#34;&#34;) then escalationAssignee else null" />
46
+ </bpmn:extensionElements>
47
+ <bpmn:incoming>mc_escalate</bpmn:incoming>
48
+ <bpmn:outgoing>mc_toResolve</bpmn:outgoing>
49
+ </bpmn:userTask>
50
+ <bpmn:boundaryEvent id="be_trial_sla" name="SLA elapsed" attachedToRef="trial-merge-decision">
51
+ <bpmn:outgoing>mc_sla</bpmn:outgoing>
52
+ <bpmn:timerEventDefinition id="ted_trial_sla">
53
+ <bpmn:timeDuration xsi:type="bpmn:tFormalExpression">=escalationSlaTimeout</bpmn:timeDuration>
54
+ </bpmn:timerEventDefinition>
55
+ </bpmn:boundaryEvent>
56
+ <bpmn:serviceTask id="resolve-trial-attention" name="Clear trial attention">
57
+ <bpmn:extensionElements>
58
+ <zeebe:taskDefinition type="pr.resolve-trial-attention" />
59
+ <zeebe:properties>
60
+ <zeebe:property name="io.nanobpm.dataEnvelope.in" value="ResolveTrialAttentionIn" />
61
+ </zeebe:properties>
62
+ </bpmn:extensionElements>
63
+ <bpmn:incoming>mc_toResolve</bpmn:incoming>
64
+ <bpmn:outgoing>mc_toAnswerGw</bpmn:outgoing>
65
+ </bpmn:serviceTask>
66
+ <bpmn:exclusiveGateway id="gw-trial-answer" name="action?" default="mc_rerun">
67
+ <bpmn:incoming>mc_toAnswerGw</bpmn:incoming>
68
+ <bpmn:outgoing>mc_answerProceed</bpmn:outgoing>
69
+ <bpmn:outgoing>mc_answerAbandon</bpmn:outgoing>
70
+ <bpmn:outgoing>mc_rerun</bpmn:outgoing>
71
+ </bpmn:exclusiveGateway>
72
+ <bpmn:endEvent id="merge-passed" name="Merge check passed">
73
+ <bpmn:incoming>mc_proceed</bpmn:incoming>
74
+ <bpmn:incoming>mc_answerProceed</bpmn:incoming>
75
+ </bpmn:endEvent>
76
+ <bpmn:endEvent id="merge-abandoned" name="Abandoned">
77
+ <bpmn:incoming>mc_answerAbandon</bpmn:incoming>
78
+ </bpmn:endEvent>
79
+ <bpmn:sequenceFlow id="mc_toTrial" sourceRef="Start" targetRef="trial-merge" />
80
+ <bpmn:sequenceFlow id="mc_toRecord" sourceRef="trial-merge" targetRef="record-trial-merge" />
81
+ <bpmn:sequenceFlow id="mc_toGwTrial" sourceRef="record-trial-merge" targetRef="gw-trial" />
82
+ <bpmn:sequenceFlow id="mc_escalate" name="suite failed" sourceRef="gw-trial" targetRef="trial-merge-decision">
83
+ <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=trialMergeRed</bpmn:conditionExpression>
84
+ </bpmn:sequenceFlow>
85
+ <bpmn:sequenceFlow id="mc_proceed" name="proceed" sourceRef="gw-trial" targetRef="merge-passed" />
86
+ <bpmn:sequenceFlow id="mc_toResolve" sourceRef="trial-merge-decision" targetRef="resolve-trial-attention" />
87
+ <bpmn:sequenceFlow id="mc_toAnswerGw" sourceRef="resolve-trial-attention" targetRef="gw-trial-answer" />
88
+ <bpmn:sequenceFlow id="mc_answerProceed" name="proceed" sourceRef="gw-trial-answer" targetRef="merge-passed">
89
+ <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=action = "proceed"</bpmn:conditionExpression>
90
+ </bpmn:sequenceFlow>
91
+ <bpmn:sequenceFlow id="mc_answerAbandon" name="abandon" sourceRef="gw-trial-answer" targetRef="merge-abandoned">
92
+ <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=action = "abandon"</bpmn:conditionExpression>
93
+ </bpmn:sequenceFlow>
94
+ <bpmn:sequenceFlow id="mc_rerun" name="rebase" sourceRef="gw-trial-answer" targetRef="trial-merge" />
95
+ <bpmn:sequenceFlow id="mc_sla" name="SLA auto-rerun" sourceRef="be_trial_sla" targetRef="trial-merge" />
96
+ </bpmn:process>
97
+ <bpmndi:BPMNDiagram id="BPMNDiagram_merge-cell">
98
+ <bpmndi:BPMNPlane id="BPMNPlane_merge-cell" bpmnElement="merge-cell">
99
+ <bpmndi:BPMNShape id="BPMNShape_Start" bpmnElement="Start">
100
+ <dc:Bounds x="80" y="102" width="36" height="36" />
101
+ <bpmndi:BPMNLabel>
102
+ <dc:Bounds x="68" y="143" width="60" height="28" />
103
+ </bpmndi:BPMNLabel>
104
+ </bpmndi:BPMNShape>
105
+ <bpmndi:BPMNShape id="BPMNShape_trial-merge" bpmnElement="trial-merge">
106
+ <dc:Bounds x="216" y="80" width="100" height="80" />
107
+ </bpmndi:BPMNShape>
108
+ <bpmndi:BPMNShape id="BPMNShape_record-trial-merge" bpmnElement="record-trial-merge">
109
+ <dc:Bounds x="416" y="80" width="100" height="80" />
110
+ </bpmndi:BPMNShape>
111
+ <bpmndi:BPMNShape id="BPMNShape_gw-trial" bpmnElement="gw-trial" isMarkerVisible="true">
112
+ <dc:Bounds x="616" y="95" width="50" height="50" />
113
+ <bpmndi:BPMNLabel>
114
+ <dc:Bounds x="606" y="76" width="71" height="14" />
115
+ </bpmndi:BPMNLabel>
116
+ </bpmndi:BPMNShape>
117
+ <bpmndi:BPMNShape id="BPMNShape_trial-merge-decision" bpmnElement="trial-merge-decision">
118
+ <dc:Bounds x="766" y="240" width="100" height="80" />
119
+ </bpmndi:BPMNShape>
120
+ <bpmndi:BPMNShape id="BPMNShape_resolve-trial-attention" bpmnElement="resolve-trial-attention">
121
+ <dc:Bounds x="966" y="240" width="100" height="80" />
122
+ </bpmndi:BPMNShape>
123
+ <bpmndi:BPMNShape id="BPMNShape_gw-trial-answer" bpmnElement="gw-trial-answer" isMarkerVisible="true">
124
+ <dc:Bounds x="1166" y="255" width="50" height="50" />
125
+ <bpmndi:BPMNLabel>
126
+ <dc:Bounds x="1221" y="273" width="53" height="14" />
127
+ </bpmndi:BPMNLabel>
128
+ </bpmndi:BPMNShape>
129
+ <bpmndi:BPMNShape id="BPMNShape_merge-passed" bpmnElement="merge-passed">
130
+ <dc:Bounds x="1316" y="102" width="36" height="36" />
131
+ <bpmndi:BPMNLabel>
132
+ <dc:Bounds x="1293" y="143" width="82" height="28" />
133
+ </bpmndi:BPMNLabel>
134
+ </bpmndi:BPMNShape>
135
+ <bpmndi:BPMNShape id="BPMNShape_merge-abandoned" bpmnElement="merge-abandoned">
136
+ <dc:Bounds x="1316" y="422" width="36" height="36" />
137
+ <bpmndi:BPMNLabel>
138
+ <dc:Bounds x="1300" y="463" width="69" height="14" />
139
+ </bpmndi:BPMNLabel>
140
+ </bpmndi:BPMNShape>
141
+ <bpmndi:BPMNShape id="BPMNShape_be_trial_sla" bpmnElement="be_trial_sla">
142
+ <dc:Bounds x="798" y="302" width="36" height="36" />
143
+ <bpmndi:BPMNLabel>
144
+ <dc:Bounds x="774" y="383" width="84" height="14" />
145
+ </bpmndi:BPMNLabel>
146
+ </bpmndi:BPMNShape>
147
+ <bpmndi:BPMNEdge id="BPMNEdge_mc_toTrial" bpmnElement="mc_toTrial">
148
+ <di:waypoint x="116" y="120" />
149
+ <di:waypoint x="216" y="120" />
150
+ </bpmndi:BPMNEdge>
151
+ <bpmndi:BPMNEdge id="BPMNEdge_mc_toRecord" bpmnElement="mc_toRecord">
152
+ <di:waypoint x="316" y="120" />
153
+ <di:waypoint x="416" y="120" />
154
+ </bpmndi:BPMNEdge>
155
+ <bpmndi:BPMNEdge id="BPMNEdge_mc_toGwTrial" bpmnElement="mc_toGwTrial">
156
+ <di:waypoint x="516" y="120" />
157
+ <di:waypoint x="616" y="120" />
158
+ </bpmndi:BPMNEdge>
159
+ <bpmndi:BPMNEdge id="BPMNEdge_mc_proceed" bpmnElement="mc_proceed">
160
+ <di:waypoint x="666" y="120" />
161
+ <di:waypoint x="1316" y="120" />
162
+ <bpmndi:BPMNLabel>
163
+ <dc:Bounds x="902" y="98" width="53" height="14" />
164
+ </bpmndi:BPMNLabel>
165
+ </bpmndi:BPMNEdge>
166
+ <bpmndi:BPMNEdge id="BPMNEdge_mc_rerun" bpmnElement="mc_rerun">
167
+ <di:waypoint x="1191" y="305" />
168
+ <di:waypoint x="1191" y="360" />
169
+ <di:waypoint x="266" y="360" />
170
+ <di:waypoint x="266" y="160" />
171
+ <bpmndi:BPMNLabel>
172
+ <dc:Bounds x="706" y="338" width="46" height="14" />
173
+ </bpmndi:BPMNLabel>
174
+ </bpmndi:BPMNEdge>
175
+ <bpmndi:BPMNEdge id="BPMNEdge_mc_escalate" bpmnElement="mc_escalate">
176
+ <di:waypoint x="641" y="145" />
177
+ <di:waypoint x="641" y="280" />
178
+ <di:waypoint x="766" y="280" />
179
+ <bpmndi:BPMNLabel>
180
+ <dc:Bounds x="646" y="206" width="85" height="14" />
181
+ </bpmndi:BPMNLabel>
182
+ </bpmndi:BPMNEdge>
183
+ <bpmndi:BPMNEdge id="BPMNEdge_mc_answerProceed" bpmnElement="mc_answerProceed">
184
+ <di:waypoint x="1191" y="255" />
185
+ <di:waypoint x="1191" y="120" />
186
+ <di:waypoint x="1316" y="120" />
187
+ <bpmndi:BPMNLabel>
188
+ <dc:Bounds x="1196" y="181" width="53" height="14" />
189
+ </bpmndi:BPMNLabel>
190
+ </bpmndi:BPMNEdge>
191
+ <bpmndi:BPMNEdge id="BPMNEdge_mc_answerAbandon" bpmnElement="mc_answerAbandon">
192
+ <di:waypoint x="1191" y="305" />
193
+ <di:waypoint x="1191" y="440" />
194
+ <di:waypoint x="1316" y="440" />
195
+ <bpmndi:BPMNLabel>
196
+ <dc:Bounds x="1196" y="393" width="53" height="14" />
197
+ </bpmndi:BPMNLabel>
198
+ </bpmndi:BPMNEdge>
199
+ <bpmndi:BPMNEdge id="BPMNEdge_mc_toResolve" bpmnElement="mc_toResolve">
200
+ <di:waypoint x="866" y="280" />
201
+ <di:waypoint x="966" y="280" />
202
+ </bpmndi:BPMNEdge>
203
+ <bpmndi:BPMNEdge id="BPMNEdge_mc_toAnswerGw" bpmnElement="mc_toAnswerGw">
204
+ <di:waypoint x="1066" y="280" />
205
+ <di:waypoint x="1166" y="280" />
206
+ </bpmndi:BPMNEdge>
207
+ <bpmndi:BPMNEdge id="BPMNEdge_mc_sla" bpmnElement="mc_sla">
208
+ <di:waypoint x="816" y="338" />
209
+ <di:waypoint x="816" y="358" />
210
+ <di:waypoint x="266" y="358" />
211
+ <di:waypoint x="266" y="160" />
212
+ <bpmndi:BPMNLabel>
213
+ <dc:Bounds x="504" y="325" width="74" height="28" />
214
+ </bpmndi:BPMNLabel>
215
+ </bpmndi:BPMNEdge>
216
+ </bpmndi:BPMNPlane>
217
+ </bpmndi:BPMNDiagram>
218
+ </bpmn:definitions>