@nanobpm/nano-workforce 0.48.0 → 0.48.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.
- package/CHANGELOG.md +14 -0
- package/app/mergeRebaseArm.test.ts +63 -0
- package/package.json +1 -1
- package/pages/home.page.json +0 -151
- package/resources/processes/merge-loop.bpmn +76 -48
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [0.48.2](https://github.com/nanobpm/nano-workforce/compare/v0.48.1...v0.48.2) (2026-08-12)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **merge-loop:** reconcile from ground truth instead of escalating on a missing agent status ([#135](https://github.com/nanobpm/nano-workforce/issues/135)) ([6861cbe](https://github.com/nanobpm/nano-workforce/commit/6861cbe160d0aebb903924f5aaf67f9c90adac6d)), closes [#134](https://github.com/nanobpm/nano-workforce/issues/134)
|
|
7
|
+
|
|
8
|
+
## [0.48.1](https://github.com/nanobpm/nano-workforce/compare/v0.48.0...v0.48.1) (2026-08-12)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **ui:** remove duplicate "Plans (agent fleet)" section from the Convergence page ([#136](https://github.com/nanobpm/nano-workforce/issues/136)) ([7eb836a](https://github.com/nanobpm/nano-workforce/commit/7eb836a47888d5c29a716d15596bd8a2b29e448c))
|
|
14
|
+
|
|
1
15
|
# [0.48.0](https://github.com/nanobpm/nano-workforce/compare/v0.47.0...v0.48.0) (2026-08-12)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -29,6 +29,26 @@ function hasFlow(source: string, target: string): boolean {
|
|
|
29
29
|
return re.test(flat);
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
// Assert a specific `<sequenceFlow>` (matched by id) has the given source/target, regardless of
|
|
33
|
+
// attribute order. Unlike `hasFlow`, this pins the *named* flow so a test can't be satisfied by a
|
|
34
|
+
// sibling flow that happens to share the same source/target (e.g. a success arm masking a default).
|
|
35
|
+
function flowHasId(id: string, source: string, target: string): boolean {
|
|
36
|
+
const m = flat.match(new RegExp(`<bpmn:sequenceFlow\\b[^>]*\\bid="${id}"[^>]*/?>`));
|
|
37
|
+
if (!m) return false;
|
|
38
|
+
const tag = m[0];
|
|
39
|
+
return tag.includes(`sourceRef="${source}"`) && tag.includes(`targetRef="${target}"`);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Assert an `<exclusiveGateway>` (matched by id) declares the given `default` flow, regardless of
|
|
43
|
+
// attribute order. Matching the start tag by id and reading `default` from it keeps the guard
|
|
44
|
+
// robust to harmless XML reformatting (attribute reordering / wrapping) that a fixed-order literal
|
|
45
|
+
// substring would spuriously trip on.
|
|
46
|
+
function gatewayDefault(id: string, def: string): boolean {
|
|
47
|
+
const m = flat.match(new RegExp(`<bpmn:exclusiveGateway\\b[^>]*\\bid="${id}"[^>]*>`));
|
|
48
|
+
if (!m) return false;
|
|
49
|
+
return m[0].includes(`default="${def}"`);
|
|
50
|
+
}
|
|
51
|
+
|
|
32
52
|
test("conflict routes to the rebase budget gate, not straight to a human", () => {
|
|
33
53
|
// The conflict verdict must reach the auto-rebase gate…
|
|
34
54
|
assert(hasFlow("gw-mergeable", "gw-rebase"), "gw-mergeable → gw-rebase (conflict) missing");
|
|
@@ -62,6 +82,49 @@ test("rebase result: success re-arms the poller; unresolved escalates to a human
|
|
|
62
82
|
);
|
|
63
83
|
});
|
|
64
84
|
|
|
85
|
+
test("rebase result: a missing/ambiguous status reconciles from ground truth, not escalation (#134)", () => {
|
|
86
|
+
// #134 / Magikcraft/nano-bpm#751: the rebase agent resolved everything and the PR became
|
|
87
|
+
// MERGEABLE, but it emitted no machine-readable `status`, so the old default arm escalated a
|
|
88
|
+
// PR that was already landable. Ground truth is authoritative: the default (no-verdict) arm
|
|
89
|
+
// now re-arms the merge poller, which re-checks `gw-mergeable` from GitHub state — bounded by
|
|
90
|
+
// the existing rebaseMax budget — instead of pulling in a human.
|
|
91
|
+
assert(
|
|
92
|
+
gatewayDefault("gw-rebase-result", "f_reb_reconcile"),
|
|
93
|
+
'gw-rebase-result must default to f_reb_reconcile (reconcile)',
|
|
94
|
+
);
|
|
95
|
+
// Pin the *default* reconcile flow itself, not just any gw-rebase-result → arm-merge edge (the
|
|
96
|
+
// success arm `f_reb_rebased` shares that target), so a mis-wired default can't pass silently.
|
|
97
|
+
assert(
|
|
98
|
+
flowHasId("f_reb_reconcile", "gw-rebase-result", "arm-merge"),
|
|
99
|
+
"f_reb_reconcile must default gw-rebase-result → arm-merge (reconcile)",
|
|
100
|
+
);
|
|
101
|
+
// Escalation is now reserved for the agent's explicit "I cannot proceed" verdict.
|
|
102
|
+
assertStringIncludes(flat, 'id="f_reb_blocked"');
|
|
103
|
+
const rebBlocked = flat.match(/<bpmn:sequenceFlow[^>]*id="f_reb_blocked"[\s\S]*?<\/bpmn:sequenceFlow>/);
|
|
104
|
+
assert(rebBlocked, "f_reb_blocked flow missing");
|
|
105
|
+
assertStringIncludes(rebBlocked![0], 'status = "blocked"');
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
test("ci-fix result: a missing/ambiguous status reconciles from ground truth, not escalation (#134)", () => {
|
|
109
|
+
// Symmetric to the rebase arm: the CI-fix agent's no-verdict default re-arms the merge poller
|
|
110
|
+
// (ground-truth re-check, bounded by ciFixMax) rather than escalating a possibly-green PR.
|
|
111
|
+
assert(
|
|
112
|
+
gatewayDefault("gw-ci-result", "f_ci_reconcile"),
|
|
113
|
+
'gw-ci-result must default to f_ci_reconcile (reconcile)',
|
|
114
|
+
);
|
|
115
|
+
// Pin the *default* reconcile flow itself, not just any gw-ci-result → arm-merge edge (the
|
|
116
|
+
// success arm `f_ci_fixed` shares that target), so a mis-wired default can't pass silently.
|
|
117
|
+
assert(
|
|
118
|
+
flowHasId("f_ci_reconcile", "gw-ci-result", "arm-merge"),
|
|
119
|
+
"f_ci_reconcile must default gw-ci-result → arm-merge (reconcile)",
|
|
120
|
+
);
|
|
121
|
+
// Escalation reserved for the agent's explicit `blocked` verdict.
|
|
122
|
+
const ciBlocked = flat.match(/<bpmn:sequenceFlow[^>]*id="f_ci_blocked"[\s\S]*?<\/bpmn:sequenceFlow>/);
|
|
123
|
+
assert(ciBlocked, "f_ci_blocked flow missing");
|
|
124
|
+
assertStringIncludes(ciBlocked![0], 'status = "blocked"');
|
|
125
|
+
assert(hasFlow("gw-ci-result", "merge-esc-attempt"), "gw-ci-result → merge-esc-attempt (blocked) missing");
|
|
126
|
+
});
|
|
127
|
+
|
|
65
128
|
test("regression: the conflict verdict passes through the rebase actor, not straight to escalation", () => {
|
|
66
129
|
// The original #42 livelock had the conflict verdict escalate to a human with no remediation
|
|
67
130
|
// actor. The primary target of the conflict verdict must now be the rebase gate.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nanobpm/nano-workforce",
|
|
3
|
-
"version": "0.48.
|
|
3
|
+
"version": "0.48.2",
|
|
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",
|
package/pages/home.page.json
CHANGED
|
@@ -172,157 +172,6 @@
|
|
|
172
172
|
}
|
|
173
173
|
}
|
|
174
174
|
}
|
|
175
|
-
},
|
|
176
|
-
{
|
|
177
|
-
"type": "dataGrid",
|
|
178
|
-
"id": "plans",
|
|
179
|
-
"props": {
|
|
180
|
-
"title": "Plans (agent fleet)",
|
|
181
|
-
"rowKey": "plan_key",
|
|
182
|
-
"refreshMs": 5000,
|
|
183
|
-
"data": {
|
|
184
|
-
"kind": "datasource",
|
|
185
|
-
"source": "app",
|
|
186
|
-
"table": "plans",
|
|
187
|
-
"orderBy": { "field": "updated_at", "dir": "desc" },
|
|
188
|
-
"filter": [{ "field": "status", "in": ["planning", "dispatched"] }]
|
|
189
|
-
},
|
|
190
|
-
"tabs": [
|
|
191
|
-
{
|
|
192
|
-
"label": "Active",
|
|
193
|
-
"filter": [{ "field": "status", "in": ["planning", "dispatched"] }]
|
|
194
|
-
},
|
|
195
|
-
{
|
|
196
|
-
"label": "History",
|
|
197
|
-
"filter": [{ "field": "status", "in": ["done", "failed", "abandoned"] }]
|
|
198
|
-
}
|
|
199
|
-
],
|
|
200
|
-
"columns": [
|
|
201
|
-
{ "field": "plan_key", "header": "Issue" },
|
|
202
|
-
{ "field": "status", "header": "Status", "link": { "kind": "processExplorer", "keyField": "process_key" } },
|
|
203
|
-
{ "field": "task_count", "header": "Tasks" },
|
|
204
|
-
{ "field": "updated_at", "header": "Updated" }
|
|
205
|
-
],
|
|
206
|
-
"rowActions": [
|
|
207
|
-
{
|
|
208
|
-
"label": "Cancel",
|
|
209
|
-
"confirm": "Cancel this plan's fan-out run?",
|
|
210
|
-
"showWhenField": "process_key",
|
|
211
|
-
"action": { "path": "/app/actions/cancel", "body": { "processInstanceKey": "{{row.process_key}}" } }
|
|
212
|
-
}
|
|
213
|
-
],
|
|
214
|
-
"detail": {
|
|
215
|
-
"linkField": "issue_url",
|
|
216
|
-
"fields": [
|
|
217
|
-
{ "field": "repo", "label": "Repository" },
|
|
218
|
-
{ "field": "issue_number", "label": "Issue number" },
|
|
219
|
-
{ "field": "task_count", "label": "Tasks" },
|
|
220
|
-
{ "field": "outcome", "label": "Outcome" }
|
|
221
|
-
],
|
|
222
|
-
"children": [
|
|
223
|
-
{
|
|
224
|
-
"title": "Tasks",
|
|
225
|
-
"source": "app",
|
|
226
|
-
"table": "plan_tasks",
|
|
227
|
-
"parentField": "plan_key",
|
|
228
|
-
"childField": "plan_key",
|
|
229
|
-
"orderBy": { "field": "task_index", "dir": "asc" },
|
|
230
|
-
"columns": [
|
|
231
|
-
{ "field": "task_id", "header": "Task" },
|
|
232
|
-
{ "field": "title", "header": "Title" },
|
|
233
|
-
{ "field": "status", "header": "Status" },
|
|
234
|
-
{ "field": "pr_key", "header": "PR" },
|
|
235
|
-
{ "field": "summary", "header": "Summary" }
|
|
236
|
-
]
|
|
237
|
-
},
|
|
238
|
-
{
|
|
239
|
-
"title": "Plan reviews",
|
|
240
|
-
"source": "app",
|
|
241
|
-
"table": "plan_reviews",
|
|
242
|
-
"parentField": "plan_key",
|
|
243
|
-
"childField": "plan_key",
|
|
244
|
-
"orderBy": { "field": "round", "dir": "asc" },
|
|
245
|
-
"columns": [
|
|
246
|
-
{ "field": "round", "header": "Round" },
|
|
247
|
-
{ "field": "approved", "header": "Approved? (1/0)" },
|
|
248
|
-
{ "field": "findings", "header": "Reviewer findings" },
|
|
249
|
-
{ "field": "created_at", "header": "Recorded" }
|
|
250
|
-
]
|
|
251
|
-
},
|
|
252
|
-
{
|
|
253
|
-
"title": "Escalations",
|
|
254
|
-
"source": "app",
|
|
255
|
-
"table": "plan_escalations",
|
|
256
|
-
"parentField": "plan_key",
|
|
257
|
-
"childField": "plan_key",
|
|
258
|
-
"orderBy": { "field": "id", "dir": "asc" },
|
|
259
|
-
"columns": [
|
|
260
|
-
{ "field": "task_id", "header": "Task" },
|
|
261
|
-
{ "field": "question", "header": "Question" },
|
|
262
|
-
{ "field": "status", "header": "Status" },
|
|
263
|
-
{ "field": "draft_pr_key", "header": "Draft PR" },
|
|
264
|
-
{ "field": "answer", "header": "Answer" }
|
|
265
|
-
]
|
|
266
|
-
},
|
|
267
|
-
{
|
|
268
|
-
"title": "Coordination blackboard",
|
|
269
|
-
"source": "app",
|
|
270
|
-
"table": "plan_blackboard",
|
|
271
|
-
"parentField": "plan_key",
|
|
272
|
-
"childField": "plan_key",
|
|
273
|
-
"orderBy": { "field": "id", "dir": "asc" },
|
|
274
|
-
"columns": [
|
|
275
|
-
{ "field": "author_task", "header": "Agent" },
|
|
276
|
-
{ "field": "kind", "header": "Kind" },
|
|
277
|
-
{ "field": "files", "header": "Files" },
|
|
278
|
-
{ "field": "body", "header": "Note" },
|
|
279
|
-
{ "field": "created_at", "header": "Posted" }
|
|
280
|
-
]
|
|
281
|
-
},
|
|
282
|
-
{
|
|
283
|
-
"title": "Reported changes",
|
|
284
|
-
"source": "app",
|
|
285
|
-
"table": "plan_task_deltas",
|
|
286
|
-
"parentField": "plan_key",
|
|
287
|
-
"childField": "plan_key",
|
|
288
|
-
"orderBy": { "field": "id", "dir": "asc" },
|
|
289
|
-
"columns": [
|
|
290
|
-
{ "field": "task_id", "header": "Task" },
|
|
291
|
-
{ "field": "contract_change", "header": "Contract change" },
|
|
292
|
-
{ "field": "newly_touches", "header": "Newly touches" },
|
|
293
|
-
{ "field": "affects_tasks", "header": "Affects tasks" },
|
|
294
|
-
{ "field": "constraint_note", "header": "Constraint" }
|
|
295
|
-
]
|
|
296
|
-
},
|
|
297
|
-
{
|
|
298
|
-
"title": "Merge exclusions",
|
|
299
|
-
"source": "app",
|
|
300
|
-
"table": "plan_merge_exclusions",
|
|
301
|
-
"parentField": "plan_key",
|
|
302
|
-
"childField": "plan_key",
|
|
303
|
-
"orderBy": { "field": "id", "dir": "asc" },
|
|
304
|
-
"columns": [
|
|
305
|
-
{ "field": "task_a", "header": "Task A" },
|
|
306
|
-
{ "field": "task_b", "header": "Task B" },
|
|
307
|
-
{ "field": "files", "header": "Shared files" },
|
|
308
|
-
{ "field": "source", "header": "Source" }
|
|
309
|
-
]
|
|
310
|
-
}
|
|
311
|
-
],
|
|
312
|
-
"form": {
|
|
313
|
-
"showWhenField": "open_task_escalation_id",
|
|
314
|
-
"title": "Answer the open task escalation",
|
|
315
|
-
"promptField": "open_task_question",
|
|
316
|
-
"inputKey": "answer",
|
|
317
|
-
"inputLabel": "Your answer",
|
|
318
|
-
"submitLabel": "Send answer",
|
|
319
|
-
"action": {
|
|
320
|
-
"path": "/app/api/actions/message",
|
|
321
|
-
"body": { "name": "feature-escalation-answered", "correlationKey": "{{row.open_task_corr_key}}", "variables": "{{form}}" }
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
175
|
}
|
|
327
176
|
]
|
|
328
177
|
}
|
|
@@ -241,11 +241,12 @@
|
|
|
241
241
|
<bpmn:incoming>f_ci_go</bpmn:incoming>
|
|
242
242
|
<bpmn:outgoing>f_ci_done</bpmn:outgoing>
|
|
243
243
|
</bpmn:serviceTask>
|
|
244
|
-
<bpmn:exclusiveGateway id="gw-ci-result" name="fixed?" default="
|
|
244
|
+
<bpmn:exclusiveGateway id="gw-ci-result" name="fixed?" default="f_ci_reconcile">
|
|
245
245
|
<bpmn:incoming>f_ci_done</bpmn:incoming>
|
|
246
246
|
<bpmn:outgoing>f_ci_fixed</bpmn:outgoing>
|
|
247
247
|
<bpmn:outgoing>f_ci_wait</bpmn:outgoing>
|
|
248
248
|
<bpmn:outgoing>f_ci_blocked</bpmn:outgoing>
|
|
249
|
+
<bpmn:outgoing>f_ci_reconcile</bpmn:outgoing>
|
|
249
250
|
</bpmn:exclusiveGateway>
|
|
250
251
|
<bpmn:exclusiveGateway id="gw-rebase" name="auto-rebase?" default="f_reb_giveup">
|
|
251
252
|
<bpmn:incoming>f_m_mRebase</bpmn:incoming>
|
|
@@ -270,11 +271,12 @@
|
|
|
270
271
|
<bpmn:incoming>f_reb_go</bpmn:incoming>
|
|
271
272
|
<bpmn:outgoing>f_reb_done</bpmn:outgoing>
|
|
272
273
|
</bpmn:serviceTask>
|
|
273
|
-
<bpmn:exclusiveGateway id="gw-rebase-result" name="rebased?" default="
|
|
274
|
+
<bpmn:exclusiveGateway id="gw-rebase-result" name="rebased?" default="f_reb_reconcile">
|
|
274
275
|
<bpmn:incoming>f_reb_done</bpmn:incoming>
|
|
275
276
|
<bpmn:outgoing>f_reb_rebased</bpmn:outgoing>
|
|
276
277
|
<bpmn:outgoing>f_reb_wait</bpmn:outgoing>
|
|
277
278
|
<bpmn:outgoing>f_reb_blocked</bpmn:outgoing>
|
|
279
|
+
<bpmn:outgoing>f_reb_reconcile</bpmn:outgoing>
|
|
278
280
|
</bpmn:exclusiveGateway>
|
|
279
281
|
<bpmn:serviceTask id="record-merge-dep" name="Wait on another PR">
|
|
280
282
|
<bpmn:extensionElements>
|
|
@@ -309,7 +311,10 @@
|
|
|
309
311
|
<bpmn:sequenceFlow id="f_ci_fixed" name="fixed" sourceRef="gw-ci-result" targetRef="arm-merge">
|
|
310
312
|
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=status = "fixed"</bpmn:conditionExpression>
|
|
311
313
|
</bpmn:sequenceFlow>
|
|
312
|
-
<bpmn:sequenceFlow id="f_ci_blocked" name="could not fix" sourceRef="gw-ci-result" targetRef="merge-esc-attempt"
|
|
314
|
+
<bpmn:sequenceFlow id="f_ci_blocked" name="could not fix" sourceRef="gw-ci-result" targetRef="merge-esc-attempt">
|
|
315
|
+
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=status = "blocked"</bpmn:conditionExpression>
|
|
316
|
+
</bpmn:sequenceFlow>
|
|
317
|
+
<bpmn:sequenceFlow id="f_ci_reconcile" name="no verdict — reconcile from ground truth" sourceRef="gw-ci-result" targetRef="arm-merge" />
|
|
313
318
|
<bpmn:sequenceFlow id="f_ci_wait" name="waits on another PR" sourceRef="gw-ci-result" targetRef="record-merge-dep">
|
|
314
319
|
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=status = "waiting-on-pr"</bpmn:conditionExpression>
|
|
315
320
|
</bpmn:sequenceFlow>
|
|
@@ -321,7 +326,10 @@
|
|
|
321
326
|
<bpmn:sequenceFlow id="f_reb_rebased" name="rebased" sourceRef="gw-rebase-result" targetRef="arm-merge">
|
|
322
327
|
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=status = "rebased"</bpmn:conditionExpression>
|
|
323
328
|
</bpmn:sequenceFlow>
|
|
324
|
-
<bpmn:sequenceFlow id="f_reb_blocked" name="could not resolve" sourceRef="gw-rebase-result" targetRef="merge-esc-attempt"
|
|
329
|
+
<bpmn:sequenceFlow id="f_reb_blocked" name="could not resolve" sourceRef="gw-rebase-result" targetRef="merge-esc-attempt">
|
|
330
|
+
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=status = "blocked"</bpmn:conditionExpression>
|
|
331
|
+
</bpmn:sequenceFlow>
|
|
332
|
+
<bpmn:sequenceFlow id="f_reb_reconcile" name="no verdict — reconcile from ground truth" sourceRef="gw-rebase-result" targetRef="arm-merge" />
|
|
325
333
|
<bpmn:sequenceFlow id="f_reb_wait" name="waits on another PR" sourceRef="gw-rebase-result" targetRef="record-merge-dep">
|
|
326
334
|
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=status = "waiting-on-pr"</bpmn:conditionExpression>
|
|
327
335
|
</bpmn:sequenceFlow>
|
|
@@ -390,7 +398,7 @@
|
|
|
390
398
|
<bpmndi:BPMNShape id="BPMNShape_wait-landed" bpmnElement="wait-landed">
|
|
391
399
|
<dc:Bounds x="1420" y="262" width="36" height="36" />
|
|
392
400
|
<bpmndi:BPMNLabel>
|
|
393
|
-
<dc:Bounds x="1396" y="
|
|
401
|
+
<dc:Bounds x="1396" y="229" width="85" height="28" />
|
|
394
402
|
</bpmndi:BPMNLabel>
|
|
395
403
|
</bpmndi:BPMNShape>
|
|
396
404
|
<bpmndi:BPMNShape id="BPMNShape_wait-evicted" bpmnElement="wait-evicted">
|
|
@@ -417,7 +425,7 @@
|
|
|
417
425
|
<bpmndi:BPMNShape id="BPMNShape_wait-merge-answer" bpmnElement="wait-merge-answer">
|
|
418
426
|
<dc:Bounds x="1620" y="582" width="36" height="36" />
|
|
419
427
|
<bpmndi:BPMNLabel>
|
|
420
|
-
<dc:Bounds x="
|
|
428
|
+
<dc:Bounds x="1541" y="683" width="74" height="42" />
|
|
421
429
|
</bpmndi:BPMNLabel>
|
|
422
430
|
</bpmndi:BPMNShape>
|
|
423
431
|
<bpmndi:BPMNShape id="BPMNShape_gw-ci-fix" bpmnElement="gw-ci-fix" isMarkerVisible="true">
|
|
@@ -447,7 +455,7 @@
|
|
|
447
455
|
<bpmndi:BPMNShape id="BPMNShape_gw-rebase-result" bpmnElement="gw-rebase-result" isMarkerVisible="true">
|
|
448
456
|
<dc:Bounds x="1238" y="1215" width="50" height="50" />
|
|
449
457
|
<bpmndi:BPMNLabel>
|
|
450
|
-
<dc:Bounds x="
|
|
458
|
+
<dc:Bounds x="1193" y="1270" width="60" height="14" />
|
|
451
459
|
</bpmndi:BPMNLabel>
|
|
452
460
|
</bpmndi:BPMNShape>
|
|
453
461
|
<bpmndi:BPMNShape id="BPMNShape_record-merge-dep" bpmnElement="record-merge-dep">
|
|
@@ -498,12 +506,13 @@
|
|
|
498
506
|
<dc:Bounds x="942" y="765" width="67" height="28" />
|
|
499
507
|
</bpmndi:BPMNLabel>
|
|
500
508
|
</bpmndi:BPMNEdge>
|
|
501
|
-
<bpmndi:BPMNEdge id="
|
|
502
|
-
<di:waypoint x="
|
|
503
|
-
<di:waypoint x="
|
|
504
|
-
<di:waypoint x="
|
|
509
|
+
<bpmndi:BPMNEdge id="BPMNEdge_f_ci_reconcile" bpmnElement="f_ci_reconcile">
|
|
510
|
+
<di:waypoint x="1263" y="945" />
|
|
511
|
+
<di:waypoint x="1263" y="980" />
|
|
512
|
+
<di:waypoint x="402" y="980" />
|
|
513
|
+
<di:waypoint x="402" y="160" />
|
|
505
514
|
<bpmndi:BPMNLabel>
|
|
506
|
-
<dc:Bounds x="
|
|
515
|
+
<dc:Bounds x="792" y="919" width="82" height="56" />
|
|
507
516
|
</bpmndi:BPMNLabel>
|
|
508
517
|
</bpmndi:BPMNEdge>
|
|
509
518
|
<bpmndi:BPMNEdge id="BPMNEdge_f_reb_giveup" bpmnElement="f_reb_giveup">
|
|
@@ -514,13 +523,13 @@
|
|
|
514
523
|
<dc:Bounds x="977" y="247" width="67" height="28" />
|
|
515
524
|
</bpmndi:BPMNLabel>
|
|
516
525
|
</bpmndi:BPMNEdge>
|
|
517
|
-
<bpmndi:BPMNEdge id="
|
|
518
|
-
<di:waypoint x="1263" y="
|
|
519
|
-
<di:waypoint x="1263" y="
|
|
520
|
-
<di:waypoint x="
|
|
521
|
-
<di:waypoint x="
|
|
526
|
+
<bpmndi:BPMNEdge id="BPMNEdge_f_reb_reconcile" bpmnElement="f_reb_reconcile">
|
|
527
|
+
<di:waypoint x="1263" y="1265" />
|
|
528
|
+
<di:waypoint x="1263" y="1300" />
|
|
529
|
+
<di:waypoint x="402" y="1300" />
|
|
530
|
+
<di:waypoint x="402" y="160" />
|
|
522
531
|
<bpmndi:BPMNLabel>
|
|
523
|
-
<dc:Bounds x="
|
|
532
|
+
<dc:Bounds x="792" y="1239" width="82" height="56" />
|
|
524
533
|
</bpmndi:BPMNLabel>
|
|
525
534
|
</bpmndi:BPMNEdge>
|
|
526
535
|
<bpmndi:BPMNEdge id="BPMNEdge_f_eg_landed" bpmnElement="f_eg_landed">
|
|
@@ -533,15 +542,9 @@
|
|
|
533
542
|
<di:waypoint x="1638" y="160" />
|
|
534
543
|
</bpmndi:BPMNEdge>
|
|
535
544
|
<bpmndi:BPMNEdge id="BPMNEdge_f_m_escC" bpmnElement="f_m_escC">
|
|
536
|
-
<di:waypoint x="1138" y="
|
|
537
|
-
<di:waypoint x="
|
|
538
|
-
<di:waypoint x="
|
|
539
|
-
<di:waypoint x="1638" y="540" />
|
|
540
|
-
<di:waypoint x="1638" y="582" />
|
|
541
|
-
</bpmndi:BPMNEdge>
|
|
542
|
-
<bpmndi:BPMNEdge id="BPMNEdge_f_m_escA" bpmnElement="f_m_escA">
|
|
543
|
-
<di:waypoint x="1488" y="600" />
|
|
544
|
-
<di:waypoint x="1620" y="600" />
|
|
545
|
+
<di:waypoint x="1138" y="760" />
|
|
546
|
+
<di:waypoint x="1638" y="760" />
|
|
547
|
+
<di:waypoint x="1638" y="618" />
|
|
545
548
|
</bpmndi:BPMNEdge>
|
|
546
549
|
<bpmndi:BPMNEdge id="BPMNEdge_f_m_answer" bpmnElement="f_m_answer">
|
|
547
550
|
<di:waypoint x="1638" y="618" />
|
|
@@ -583,31 +586,56 @@
|
|
|
583
586
|
<dc:Bounds x="893" y="839" width="49" height="28" />
|
|
584
587
|
</bpmndi:BPMNLabel>
|
|
585
588
|
</bpmndi:BPMNEdge>
|
|
586
|
-
<bpmndi:BPMNEdge id="
|
|
589
|
+
<bpmndi:BPMNEdge id="BPMNEdge_f_ci_blocked" bpmnElement="f_ci_blocked">
|
|
587
590
|
<di:waypoint x="1288" y="920" />
|
|
588
|
-
<di:waypoint x="
|
|
589
|
-
<di:waypoint x="
|
|
591
|
+
<di:waypoint x="1308" y="920" />
|
|
592
|
+
<di:waypoint x="1308" y="895" />
|
|
593
|
+
<di:waypoint x="1676" y="895" />
|
|
594
|
+
<di:waypoint x="1676" y="562" />
|
|
595
|
+
<di:waypoint x="1488" y="562" />
|
|
590
596
|
<bpmndi:BPMNLabel>
|
|
591
|
-
<dc:Bounds x="
|
|
597
|
+
<dc:Bounds x="1448" y="873" width="89" height="14" />
|
|
598
|
+
</bpmndi:BPMNLabel>
|
|
599
|
+
</bpmndi:BPMNEdge>
|
|
600
|
+
<bpmndi:BPMNEdge id="BPMNEdge_f_ci_wait" bpmnElement="f_ci_wait">
|
|
601
|
+
<di:waypoint x="1263" y="945" />
|
|
602
|
+
<di:waypoint x="1263" y="1080" />
|
|
603
|
+
<di:waypoint x="1388" y="1080" />
|
|
604
|
+
<bpmndi:BPMNLabel>
|
|
605
|
+
<dc:Bounds x="1268" y="1016" width="75" height="28" />
|
|
592
606
|
</bpmndi:BPMNLabel>
|
|
593
607
|
</bpmndi:BPMNEdge>
|
|
594
608
|
<bpmndi:BPMNEdge id="BPMNEdge_f_reb_go" bpmnElement="f_reb_go">
|
|
595
609
|
<di:waypoint x="913" y="280" />
|
|
596
610
|
<di:waypoint x="933" y="280" />
|
|
597
611
|
<di:waypoint x="933" y="305" />
|
|
598
|
-
<di:waypoint x="
|
|
599
|
-
<di:waypoint x="
|
|
600
|
-
<di:waypoint x="
|
|
612
|
+
<di:waypoint x="1708" y="305" />
|
|
613
|
+
<di:waypoint x="1708" y="1140" />
|
|
614
|
+
<di:waypoint x="1018" y="1140" />
|
|
615
|
+
<di:waypoint x="1018" y="1220" />
|
|
616
|
+
<di:waypoint x="1038" y="1220" />
|
|
601
617
|
<bpmndi:BPMNLabel>
|
|
602
|
-
<dc:Bounds x="
|
|
618
|
+
<dc:Bounds x="1713" y="709" width="49" height="28" />
|
|
619
|
+
</bpmndi:BPMNLabel>
|
|
620
|
+
</bpmndi:BPMNEdge>
|
|
621
|
+
<bpmndi:BPMNEdge id="BPMNEdge_f_reb_blocked" bpmnElement="f_reb_blocked">
|
|
622
|
+
<di:waypoint x="1288" y="1240" />
|
|
623
|
+
<di:waypoint x="1308" y="1240" />
|
|
624
|
+
<di:waypoint x="1308" y="1215" />
|
|
625
|
+
<di:waypoint x="1676" y="1215" />
|
|
626
|
+
<di:waypoint x="1676" y="562" />
|
|
627
|
+
<di:waypoint x="1488" y="562" />
|
|
628
|
+
<bpmndi:BPMNLabel>
|
|
629
|
+
<dc:Bounds x="1460" y="1182" width="64" height="28" />
|
|
603
630
|
</bpmndi:BPMNLabel>
|
|
604
631
|
</bpmndi:BPMNEdge>
|
|
605
632
|
<bpmndi:BPMNEdge id="BPMNEdge_f_reb_wait" bpmnElement="f_reb_wait">
|
|
606
633
|
<di:waypoint x="1263" y="1215" />
|
|
607
|
-
<di:waypoint x="1263" y="
|
|
608
|
-
<di:waypoint x="
|
|
634
|
+
<di:waypoint x="1263" y="1140" />
|
|
635
|
+
<di:waypoint x="1438" y="1140" />
|
|
636
|
+
<di:waypoint x="1438" y="1120" />
|
|
609
637
|
<bpmndi:BPMNLabel>
|
|
610
|
-
<dc:Bounds x="
|
|
638
|
+
<dc:Bounds x="1268" y="1164" width="75" height="28" />
|
|
611
639
|
</bpmndi:BPMNLabel>
|
|
612
640
|
</bpmndi:BPMNEdge>
|
|
613
641
|
<bpmndi:BPMNEdge id="BPMNEdge_f_m_gQueued" bpmnElement="f_m_gQueued">
|
|
@@ -640,12 +668,12 @@
|
|
|
640
668
|
<di:waypoint x="1238" y="920" />
|
|
641
669
|
</bpmndi:BPMNEdge>
|
|
642
670
|
<bpmndi:BPMNEdge id="BPMNEdge_f_reb_done" bpmnElement="f_reb_done">
|
|
643
|
-
<di:waypoint x="1138" y="
|
|
644
|
-
<di:waypoint x="
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
<di:waypoint x="
|
|
648
|
-
<di:waypoint x="
|
|
671
|
+
<di:waypoint x="1138" y="1240" />
|
|
672
|
+
<di:waypoint x="1238" y="1240" />
|
|
673
|
+
</bpmndi:BPMNEdge>
|
|
674
|
+
<bpmndi:BPMNEdge id="BPMNEdge_f_m_escA" bpmnElement="f_m_escA">
|
|
675
|
+
<di:waypoint x="1488" y="600" />
|
|
676
|
+
<di:waypoint x="1620" y="600" />
|
|
649
677
|
</bpmndi:BPMNEdge>
|
|
650
678
|
<bpmndi:BPMNEdge id="BPMNEdge_f_ci_fixed" bpmnElement="f_ci_fixed">
|
|
651
679
|
<di:waypoint x="1263" y="945" />
|
|
@@ -653,7 +681,7 @@
|
|
|
653
681
|
<di:waypoint x="402" y="980" />
|
|
654
682
|
<di:waypoint x="402" y="160" />
|
|
655
683
|
<bpmndi:BPMNLabel>
|
|
656
|
-
<dc:Bounds x="813" y="
|
|
684
|
+
<dc:Bounds x="813" y="988" width="39" height="14" />
|
|
657
685
|
</bpmndi:BPMNLabel>
|
|
658
686
|
</bpmndi:BPMNEdge>
|
|
659
687
|
<bpmndi:BPMNEdge id="BPMNEdge_f_reb_rebased" bpmnElement="f_reb_rebased">
|
|
@@ -662,13 +690,13 @@
|
|
|
662
690
|
<di:waypoint x="402" y="1300" />
|
|
663
691
|
<di:waypoint x="402" y="160" />
|
|
664
692
|
<bpmndi:BPMNLabel>
|
|
665
|
-
<dc:Bounds x="806" y="
|
|
693
|
+
<dc:Bounds x="806" y="1308" width="53" height="14" />
|
|
666
694
|
</bpmndi:BPMNLabel>
|
|
667
695
|
</bpmndi:BPMNEdge>
|
|
668
696
|
<bpmndi:BPMNEdge id="BPMNEdge_f_dep_rewait" bpmnElement="f_dep_rewait">
|
|
669
697
|
<di:waypoint x="1438" y="1120" />
|
|
670
|
-
<di:waypoint x="1438" y="
|
|
671
|
-
<di:waypoint x="234" y="
|
|
698
|
+
<di:waypoint x="1438" y="1140" />
|
|
699
|
+
<di:waypoint x="234" y="1140" />
|
|
672
700
|
<di:waypoint x="234" y="138" />
|
|
673
701
|
</bpmndi:BPMNEdge>
|
|
674
702
|
<bpmndi:BPMNEdge id="BPMNEdge_f_m_evicted" bpmnElement="f_m_evicted">
|