@nanobpm/nano-workforce 0.40.1 → 0.40.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 +7 -0
- package/app/queuedVerdict.test.ts +40 -0
- package/app/service.ts +45 -9
- package/package.json +1 -1
- package/resources/processes/merge-loop.bpmn +133 -89
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## [0.40.2](https://github.com/nanobpm/nano-workforce/compare/v0.40.1...v0.40.2) (2026-08-11)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **merge-loop:** escape wait-landed when a queued PR is evicted on conflict ([#117](https://github.com/nanobpm/nano-workforce/issues/117)) ([df7f850](https://github.com/nanobpm/nano-workforce/commit/df7f85050624f11490d715c90e054a5c7fb6d0fa)), closes [Magikcraft/nano-bpm#727](https://github.com/Magikcraft/nano-bpm/issues/727)
|
|
7
|
+
|
|
1
8
|
## [0.40.1](https://github.com/nanobpm/nano-workforce/compare/v0.40.0...v0.40.1) (2026-08-11)
|
|
2
9
|
|
|
3
10
|
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// The merge-loop enqueues a "ready" PR (mergeStatus="queued") and parks at `wait-landed`. This
|
|
2
|
+
// decision drives what the poller does next from the PR's live GitHub state. The regression it
|
|
3
|
+
// guards: a PR that develops a merge CONFLICT after being enqueued (#727/instance 729) must be
|
|
4
|
+
// EVICTED back to the mergeable gate, not left waiting forever — while a PR still legitimately in
|
|
5
|
+
// the queue (reported BLOCKED/UNSTABLE by GitHub) must keep waiting, never be falsely evicted.
|
|
6
|
+
import { test } from "node:test";
|
|
7
|
+
import { assertEquals } from "#test-assert";
|
|
8
|
+
import type { PrState } from "./github.ts";
|
|
9
|
+
import { queuedVerdict } from "./service.ts";
|
|
10
|
+
|
|
11
|
+
function st(over: Partial<PrState>): PrState {
|
|
12
|
+
return {
|
|
13
|
+
merged: false,
|
|
14
|
+
mergeStateStatus: "CLEAN",
|
|
15
|
+
failingChecks: 0,
|
|
16
|
+
failingCheckNames: [],
|
|
17
|
+
presentCheckNames: [],
|
|
18
|
+
totalChecks: 0,
|
|
19
|
+
isDraft: false,
|
|
20
|
+
headRefOid: null,
|
|
21
|
+
...over,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
test("a landed PR advances (merge-landed)", () => {
|
|
26
|
+
assertEquals(queuedVerdict(st({ merged: true, mergeStateStatus: "CLEAN" })), "landed");
|
|
27
|
+
// `merged` wins even if a stale mergeStateStatus lags.
|
|
28
|
+
assertEquals(queuedVerdict(st({ merged: true, mergeStateStatus: "DIRTY" })), "landed");
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
test("a DIRTY (conflicting) PR is evicted — this is the #727 wedge", () => {
|
|
32
|
+
assertEquals(queuedVerdict(st({ merged: false, mergeStateStatus: "DIRTY" })), "evicted");
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
test("a PR still legitimately in the queue keeps waiting (never falsely evicted)", () => {
|
|
36
|
+
// Queuing PRs commonly report these; none is a conflict, so none may evict.
|
|
37
|
+
for (const s of ["CLEAN", "BLOCKED", "UNSTABLE", "BEHIND", "HAS_HOOKS", "UNKNOWN", "DRAFT"]) {
|
|
38
|
+
assertEquals(queuedVerdict(st({ merged: false, mergeStateStatus: s })), "waiting", s);
|
|
39
|
+
}
|
|
40
|
+
});
|
package/app/service.ts
CHANGED
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
fetchPrState,
|
|
18
18
|
hasPendingCopilotReviewer,
|
|
19
19
|
type MergeMethod,
|
|
20
|
+
type PrState,
|
|
20
21
|
requestCopilotReview,
|
|
21
22
|
} from "./github.ts";
|
|
22
23
|
import { mergeLanes, readExclusions } from "./mergeExclusion.ts";
|
|
@@ -637,7 +638,7 @@ async function mirrorTaskStatusForPr(data: DataLayer, prKey: string, status: "op
|
|
|
637
638
|
* • waiting_deps → every declared dependency has merged → `deps-cleared`
|
|
638
639
|
* • waiting_merge → GitHub settled the PR as mergeable/blocked → `merge-ready` {mergeState}
|
|
639
640
|
* • waiting_lane → predecessor in same exclusion lane merged → re-arm `waiting_merge`
|
|
640
|
-
* • queued → the queued PR
|
|
641
|
+
* • queued → the queued PR landed → `merge-landed`; or it conflicts (DIRTY) → `merge-evicted`
|
|
641
642
|
* On publish we flip status to the transient `merging` (which no branch scans) so a slow pass
|
|
642
643
|
* can't double-signal, exactly as `pollReviews` flips to `converging`; `flipToMergingThenPublish`
|
|
643
644
|
* reverts the flip if the publish fails so a failed handoff can't wedge the PR. */
|
|
@@ -756,25 +757,60 @@ async function pollMerges(data: DataLayer, engine: EngineClient, token: string)
|
|
|
756
757
|
}
|
|
757
758
|
}
|
|
758
759
|
|
|
759
|
-
// 4) Queued PR landed?
|
|
760
|
+
// 4) Queued PR landed — or fell out of the merge queue?
|
|
761
|
+
//
|
|
762
|
+
// A PR enqueued by `attempt-merge` (mergeStatus="queued") parks the process at `wait-landed`.
|
|
763
|
+
// Two things can end that wait: the queue lands the PR (→ `merge-landed`), or the PR is EVICTED
|
|
764
|
+
// from the queue because its base moved under it and it now conflicts (`DIRTY`). Without the
|
|
765
|
+
// eviction path a conflicted-after-enqueue PR waits forever (nothing ever publishes
|
|
766
|
+
// `merge-landed`), which is exactly how #727/instance 729 wedged. We must NOT treat a merely
|
|
767
|
+
// "not yet landed" PR as evicted: while it is legitimately queuing GitHub often reports it as
|
|
768
|
+
// BLOCKED (a pending queue check) or UNSTABLE, which `classifyMergeability` calls not-ready. Only
|
|
769
|
+
// a genuine merge CONFLICT (`DIRTY`) means it has dropped out — evict on that alone and re-arm the
|
|
770
|
+
// merge poller (`merge-evicted` → `arm-merge`), which re-runs the mergeable gate so the existing
|
|
771
|
+
// auto-rebase / escalate machinery resolves the conflict.
|
|
760
772
|
for (const pr of await prs(data).find({ status: "queued" })) {
|
|
761
773
|
const { repo, number, pr_key: prKey } = pr;
|
|
762
774
|
try {
|
|
763
775
|
const st = await fetchPrState(repo, number, token);
|
|
764
776
|
if (st === null) continue; // no transport → skip this PR (others may still advance)
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
777
|
+
const verdict = queuedVerdict(st);
|
|
778
|
+
if (verdict === "landed") {
|
|
779
|
+
await flipToMergingThenPublish(data, engine, prKey, "queued", {
|
|
780
|
+
name: "merge-landed",
|
|
781
|
+
correlationKey: prKey,
|
|
782
|
+
variables: {},
|
|
783
|
+
});
|
|
784
|
+
console.log(`[poller] queued PR landed -> ${prKey}`);
|
|
785
|
+
} else if (verdict === "evicted") {
|
|
786
|
+
await flipToMergingThenPublish(data, engine, prKey, "queued", {
|
|
787
|
+
name: "merge-evicted",
|
|
788
|
+
correlationKey: prKey,
|
|
789
|
+
variables: {},
|
|
790
|
+
});
|
|
791
|
+
console.log(`[poller] queued PR evicted (conflict) -> ${prKey}`);
|
|
792
|
+
}
|
|
793
|
+
// otherwise: still legitimately in the queue — keep waiting.
|
|
772
794
|
} catch (err) {
|
|
773
795
|
console.error(`[poller] queued ${prKey}: ${err}`);
|
|
774
796
|
}
|
|
775
797
|
}
|
|
776
798
|
}
|
|
777
799
|
|
|
800
|
+
/** Decide what to do with a PR the process enqueued (parked at `wait-landed`), from its current
|
|
801
|
+
* GitHub merge state:
|
|
802
|
+
* • `landed` — the queue merged it → publish `merge-landed` (advance to mark-merged).
|
|
803
|
+
* • `evicted` — it fell out of the queue with a real merge CONFLICT (`DIRTY`) → publish
|
|
804
|
+
* `merge-evicted` so the process re-arms the merge poller and the mergeable gate re-runs
|
|
805
|
+
* (auto-rebase / escalate). Without this a conflicted-after-enqueue PR waits forever.
|
|
806
|
+
* • `waiting` — still legitimately in the queue. Crucially, a queuing PR is frequently reported
|
|
807
|
+
* BLOCKED/UNSTABLE (a pending queue check), which is NOT eviction — only `DIRTY` is. */
|
|
808
|
+
export function queuedVerdict(st: PrState): "landed" | "evicted" | "waiting" {
|
|
809
|
+
if (st.merged) return "landed";
|
|
810
|
+
if (st.mergeStateStatus === "DIRTY") return "evicted";
|
|
811
|
+
return "waiting";
|
|
812
|
+
}
|
|
813
|
+
|
|
778
814
|
/** The subset of a Camunda-8 `/v2/jobs/search` result item this app reads. `worker` is the
|
|
779
815
|
* leasing worker's name (empty/absent until an agent activates the job); `deadline` is the
|
|
780
816
|
* activation lock's expiry (ISO ts). */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nanobpm/nano-workforce",
|
|
3
|
-
"version": "0.40.
|
|
3
|
+
"version": "0.40.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",
|
|
@@ -18,6 +18,11 @@
|
|
|
18
18
|
<zeebe:subscription correlationKey="=prKey" />
|
|
19
19
|
</bpmn:extensionElements>
|
|
20
20
|
</bpmn:message>
|
|
21
|
+
<bpmn:message id="Message_mergeEvicted" name="merge-evicted">
|
|
22
|
+
<bpmn:extensionElements>
|
|
23
|
+
<zeebe:subscription correlationKey="=prKey" />
|
|
24
|
+
</bpmn:extensionElements>
|
|
25
|
+
</bpmn:message>
|
|
21
26
|
<bpmn:message id="Message_mergeEscAnswered" name="escalation-answered">
|
|
22
27
|
<bpmn:extensionElements>
|
|
23
28
|
<zeebe:subscription correlationKey="=prKey" />
|
|
@@ -109,6 +114,7 @@
|
|
|
109
114
|
<bpmn:incoming>f_m_answer</bpmn:incoming>
|
|
110
115
|
<bpmn:incoming>f_ci_fixed</bpmn:incoming>
|
|
111
116
|
<bpmn:incoming>f_reb_rebased</bpmn:incoming>
|
|
117
|
+
<bpmn:incoming>f_m_evicted</bpmn:incoming>
|
|
112
118
|
<bpmn:outgoing>f_m_arm</bpmn:outgoing>
|
|
113
119
|
</bpmn:serviceTask>
|
|
114
120
|
<bpmn:intermediateCatchEvent id="wait-mergeable" name="Wait: mergeable">
|
|
@@ -140,11 +146,21 @@
|
|
|
140
146
|
<bpmn:outgoing>f_m_gQueued</bpmn:outgoing>
|
|
141
147
|
<bpmn:outgoing>f_m_gBlocked</bpmn:outgoing>
|
|
142
148
|
</bpmn:exclusiveGateway>
|
|
143
|
-
<bpmn:
|
|
149
|
+
<bpmn:eventBasedGateway id="eg-landed" name="landed or evicted?">
|
|
144
150
|
<bpmn:incoming>f_m_gQueued</bpmn:incoming>
|
|
151
|
+
<bpmn:outgoing>f_eg_landed</bpmn:outgoing>
|
|
152
|
+
<bpmn:outgoing>f_eg_evicted</bpmn:outgoing>
|
|
153
|
+
</bpmn:eventBasedGateway>
|
|
154
|
+
<bpmn:intermediateCatchEvent id="wait-landed" name="Wait: merge queue landed">
|
|
155
|
+
<bpmn:incoming>f_eg_landed</bpmn:incoming>
|
|
145
156
|
<bpmn:outgoing>f_m_landed</bpmn:outgoing>
|
|
146
157
|
<bpmn:messageEventDefinition id="med_mergeLanded" messageRef="Message_mergeLanded" />
|
|
147
158
|
</bpmn:intermediateCatchEvent>
|
|
159
|
+
<bpmn:intermediateCatchEvent id="wait-evicted" name="Wait: evicted from queue">
|
|
160
|
+
<bpmn:incoming>f_eg_evicted</bpmn:incoming>
|
|
161
|
+
<bpmn:outgoing>f_m_evicted</bpmn:outgoing>
|
|
162
|
+
<bpmn:messageEventDefinition id="med_mergeEvicted" messageRef="Message_mergeEvicted" />
|
|
163
|
+
</bpmn:intermediateCatchEvent>
|
|
148
164
|
<bpmn:serviceTask id="mark-merged" name="Mark merged">
|
|
149
165
|
<bpmn:extensionElements>
|
|
150
166
|
<zeebe:taskDefinition type="pr.mark-merged" />
|
|
@@ -287,9 +303,12 @@
|
|
|
287
303
|
<bpmn:sequenceFlow id="f_m_gMerged" name="merged" sourceRef="gw-merge" targetRef="mark-merged">
|
|
288
304
|
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=mergeStatus = "merged"</bpmn:conditionExpression>
|
|
289
305
|
</bpmn:sequenceFlow>
|
|
290
|
-
<bpmn:sequenceFlow id="f_m_gQueued" name="queued" sourceRef="gw-merge" targetRef="
|
|
306
|
+
<bpmn:sequenceFlow id="f_m_gQueued" name="queued" sourceRef="gw-merge" targetRef="eg-landed">
|
|
291
307
|
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=mergeStatus = "queued"</bpmn:conditionExpression>
|
|
292
308
|
</bpmn:sequenceFlow>
|
|
309
|
+
<bpmn:sequenceFlow id="f_eg_landed" sourceRef="eg-landed" targetRef="wait-landed" />
|
|
310
|
+
<bpmn:sequenceFlow id="f_eg_evicted" sourceRef="eg-landed" targetRef="wait-evicted" />
|
|
311
|
+
<bpmn:sequenceFlow id="f_m_evicted" sourceRef="wait-evicted" targetRef="arm-merge" />
|
|
293
312
|
<bpmn:sequenceFlow id="f_m_gBlocked" name="blocked" sourceRef="gw-merge" targetRef="merge-esc-attempt" />
|
|
294
313
|
<bpmn:sequenceFlow id="f_m_landed" sourceRef="wait-landed" targetRef="mark-merged" />
|
|
295
314
|
<bpmn:sequenceFlow id="f_m_done" sourceRef="mark-merged" targetRef="MergeEnd" />
|
|
@@ -332,49 +351,61 @@
|
|
|
332
351
|
<bpmndi:BPMNShape id="BPMNShape_gw-merge" bpmnElement="gw-merge" isMarkerVisible="true">
|
|
333
352
|
<dc:Bounds x="1063" y="95" width="50" height="50" />
|
|
334
353
|
<bpmndi:BPMNLabel>
|
|
335
|
-
<dc:Bounds x="
|
|
354
|
+
<dc:Bounds x="1022" y="150" width="53" height="28" />
|
|
355
|
+
</bpmndi:BPMNLabel>
|
|
356
|
+
</bpmndi:BPMNShape>
|
|
357
|
+
<bpmndi:BPMNShape id="BPMNShape_eg-landed" bpmnElement="eg-landed" isMarkerVisible="true">
|
|
358
|
+
<dc:Bounds x="1238" y="255" width="50" height="50" />
|
|
359
|
+
<bpmndi:BPMNLabel>
|
|
360
|
+
<dc:Bounds x="1231" y="222" width="64" height="28" />
|
|
336
361
|
</bpmndi:BPMNLabel>
|
|
337
362
|
</bpmndi:BPMNShape>
|
|
338
363
|
<bpmndi:BPMNShape id="BPMNShape_wait-landed" bpmnElement="wait-landed">
|
|
339
|
-
<dc:Bounds x="
|
|
364
|
+
<dc:Bounds x="1420" y="262" width="36" height="36" />
|
|
340
365
|
<bpmndi:BPMNLabel>
|
|
341
|
-
<dc:Bounds x="
|
|
366
|
+
<dc:Bounds x="1396" y="303" width="85" height="28" />
|
|
367
|
+
</bpmndi:BPMNLabel>
|
|
368
|
+
</bpmndi:BPMNShape>
|
|
369
|
+
<bpmndi:BPMNShape id="BPMNShape_wait-evicted" bpmnElement="wait-evicted">
|
|
370
|
+
<dc:Bounds x="1420" y="422" width="36" height="36" />
|
|
371
|
+
<bpmndi:BPMNLabel>
|
|
372
|
+
<dc:Bounds x="1394" y="375" width="88" height="42" />
|
|
342
373
|
</bpmndi:BPMNLabel>
|
|
343
374
|
</bpmndi:BPMNShape>
|
|
344
375
|
<bpmndi:BPMNShape id="BPMNShape_mark-merged" bpmnElement="mark-merged">
|
|
345
|
-
<dc:Bounds x="
|
|
376
|
+
<dc:Bounds x="1588" y="80" width="100" height="80" />
|
|
346
377
|
</bpmndi:BPMNShape>
|
|
347
378
|
<bpmndi:BPMNShape id="BPMNShape_MergeEnd" bpmnElement="MergeEnd">
|
|
348
|
-
<dc:Bounds x="
|
|
379
|
+
<dc:Bounds x="1788" y="102" width="36" height="36" />
|
|
349
380
|
<bpmndi:BPMNLabel>
|
|
350
|
-
<dc:Bounds x="
|
|
381
|
+
<dc:Bounds x="1781" y="143" width="50" height="14" />
|
|
351
382
|
</bpmndi:BPMNLabel>
|
|
352
383
|
</bpmndi:BPMNShape>
|
|
353
384
|
<bpmndi:BPMNShape id="BPMNShape_merge-esc-conflict" bpmnElement="merge-esc-conflict">
|
|
354
|
-
<dc:Bounds x="1038" y="
|
|
385
|
+
<dc:Bounds x="1038" y="720" width="100" height="80" />
|
|
355
386
|
</bpmndi:BPMNShape>
|
|
356
387
|
<bpmndi:BPMNShape id="BPMNShape_merge-esc-attempt" bpmnElement="merge-esc-attempt">
|
|
357
|
-
<dc:Bounds x="1388" y="
|
|
388
|
+
<dc:Bounds x="1388" y="560" width="100" height="80" />
|
|
358
389
|
</bpmndi:BPMNShape>
|
|
359
390
|
<bpmndi:BPMNShape id="BPMNShape_wait-merge-answer" bpmnElement="wait-merge-answer">
|
|
360
|
-
<dc:Bounds x="
|
|
391
|
+
<dc:Bounds x="1620" y="582" width="36" height="36" />
|
|
361
392
|
<bpmndi:BPMNLabel>
|
|
362
|
-
<dc:Bounds x="
|
|
393
|
+
<dc:Bounds x="1661" y="579" width="74" height="42" />
|
|
363
394
|
</bpmndi:BPMNLabel>
|
|
364
395
|
</bpmndi:BPMNShape>
|
|
365
396
|
<bpmndi:BPMNShape id="BPMNShape_gw-ci-fix" bpmnElement="gw-ci-fix" isMarkerVisible="true">
|
|
366
|
-
<dc:Bounds x="863" y="
|
|
397
|
+
<dc:Bounds x="863" y="735" width="50" height="50" />
|
|
367
398
|
<bpmndi:BPMNLabel>
|
|
368
|
-
<dc:Bounds x="844" y="
|
|
399
|
+
<dc:Bounds x="844" y="716" width="89" height="14" />
|
|
369
400
|
</bpmndi:BPMNLabel>
|
|
370
401
|
</bpmndi:BPMNShape>
|
|
371
402
|
<bpmndi:BPMNShape id="BPMNShape_fix-ci" bpmnElement="fix-ci">
|
|
372
|
-
<dc:Bounds x="1038" y="
|
|
403
|
+
<dc:Bounds x="1038" y="880" width="100" height="80" />
|
|
373
404
|
</bpmndi:BPMNShape>
|
|
374
405
|
<bpmndi:BPMNShape id="BPMNShape_gw-ci-result" bpmnElement="gw-ci-result" isMarkerVisible="true">
|
|
375
|
-
<dc:Bounds x="1238" y="
|
|
406
|
+
<dc:Bounds x="1238" y="895" width="50" height="50" />
|
|
376
407
|
<bpmndi:BPMNLabel>
|
|
377
|
-
<dc:Bounds x="1240" y="
|
|
408
|
+
<dc:Bounds x="1240" y="876" width="46" height="14" />
|
|
378
409
|
</bpmndi:BPMNLabel>
|
|
379
410
|
</bpmndi:BPMNShape>
|
|
380
411
|
<bpmndi:BPMNShape id="BPMNShape_gw-rebase" bpmnElement="gw-rebase" isMarkerVisible="true">
|
|
@@ -384,12 +415,12 @@
|
|
|
384
415
|
</bpmndi:BPMNLabel>
|
|
385
416
|
</bpmndi:BPMNShape>
|
|
386
417
|
<bpmndi:BPMNShape id="BPMNShape_rebase" bpmnElement="rebase">
|
|
387
|
-
<dc:Bounds x="1038" y="
|
|
418
|
+
<dc:Bounds x="1038" y="1040" width="100" height="80" />
|
|
388
419
|
</bpmndi:BPMNShape>
|
|
389
420
|
<bpmndi:BPMNShape id="BPMNShape_gw-rebase-result" bpmnElement="gw-rebase-result" isMarkerVisible="true">
|
|
390
|
-
<dc:Bounds x="1238" y="
|
|
421
|
+
<dc:Bounds x="1238" y="1055" width="50" height="50" />
|
|
391
422
|
<bpmndi:BPMNLabel>
|
|
392
|
-
<dc:Bounds x="1233" y="
|
|
423
|
+
<dc:Bounds x="1233" y="1036" width="60" height="14" />
|
|
393
424
|
</bpmndi:BPMNLabel>
|
|
394
425
|
</bpmndi:BPMNShape>
|
|
395
426
|
<bpmndi:BPMNEdge id="BPMNEdge_f_m_start" bpmnElement="f_m_start">
|
|
@@ -421,69 +452,78 @@
|
|
|
421
452
|
</bpmndi:BPMNEdge>
|
|
422
453
|
<bpmndi:BPMNEdge id="BPMNEdge_f_m_gMerged" bpmnElement="f_m_gMerged">
|
|
423
454
|
<di:waypoint x="1113" y="120" />
|
|
424
|
-
<di:waypoint x="
|
|
455
|
+
<di:waypoint x="1588" y="120" />
|
|
425
456
|
<bpmndi:BPMNLabel>
|
|
426
|
-
<dc:Bounds x="
|
|
457
|
+
<dc:Bounds x="1326" y="98" width="49" height="14" />
|
|
427
458
|
</bpmndi:BPMNLabel>
|
|
428
459
|
</bpmndi:BPMNEdge>
|
|
429
460
|
<bpmndi:BPMNEdge id="BPMNEdge_f_m_done" bpmnElement="f_m_done">
|
|
430
|
-
<di:waypoint x="
|
|
431
|
-
<di:waypoint x="
|
|
461
|
+
<di:waypoint x="1688" y="120" />
|
|
462
|
+
<di:waypoint x="1788" y="120" />
|
|
432
463
|
</bpmndi:BPMNEdge>
|
|
433
464
|
<bpmndi:BPMNEdge id="BPMNEdge_f_ci_giveup" bpmnElement="f_ci_giveup">
|
|
434
|
-
<di:waypoint x="913" y="
|
|
435
|
-
<di:waypoint x="1038" y="
|
|
465
|
+
<di:waypoint x="913" y="760" />
|
|
466
|
+
<di:waypoint x="1038" y="760" />
|
|
436
467
|
<bpmndi:BPMNLabel>
|
|
437
|
-
<dc:Bounds x="942" y="
|
|
468
|
+
<dc:Bounds x="942" y="765" width="67" height="28" />
|
|
438
469
|
</bpmndi:BPMNLabel>
|
|
439
470
|
</bpmndi:BPMNEdge>
|
|
440
471
|
<bpmndi:BPMNEdge id="BPMNEdge_f_ci_blocked" bpmnElement="f_ci_blocked">
|
|
441
|
-
<di:waypoint x="1288" y="
|
|
442
|
-
<di:waypoint x="1438" y="
|
|
443
|
-
<di:waypoint x="1438" y="
|
|
472
|
+
<di:waypoint x="1288" y="920" />
|
|
473
|
+
<di:waypoint x="1438" y="920" />
|
|
474
|
+
<di:waypoint x="1438" y="640" />
|
|
444
475
|
<bpmndi:BPMNLabel>
|
|
445
|
-
<dc:Bounds x="1319" y="
|
|
476
|
+
<dc:Bounds x="1319" y="898" width="89" height="14" />
|
|
446
477
|
</bpmndi:BPMNLabel>
|
|
447
478
|
</bpmndi:BPMNEdge>
|
|
448
479
|
<bpmndi:BPMNEdge id="BPMNEdge_f_reb_giveup" bpmnElement="f_reb_giveup">
|
|
449
480
|
<di:waypoint x="913" y="280" />
|
|
450
481
|
<di:waypoint x="1088" y="280" />
|
|
451
|
-
<di:waypoint x="1088" y="
|
|
482
|
+
<di:waypoint x="1088" y="720" />
|
|
452
483
|
<bpmndi:BPMNLabel>
|
|
453
484
|
<dc:Bounds x="977" y="247" width="67" height="28" />
|
|
454
485
|
</bpmndi:BPMNLabel>
|
|
455
486
|
</bpmndi:BPMNEdge>
|
|
456
487
|
<bpmndi:BPMNEdge id="BPMNEdge_f_reb_blocked" bpmnElement="f_reb_blocked">
|
|
457
|
-
<di:waypoint x="1288" y="
|
|
458
|
-
<di:waypoint x="1438" y="
|
|
459
|
-
<di:waypoint x="1438" y="
|
|
488
|
+
<di:waypoint x="1288" y="1080" />
|
|
489
|
+
<di:waypoint x="1438" y="1080" />
|
|
490
|
+
<di:waypoint x="1438" y="640" />
|
|
460
491
|
<bpmndi:BPMNLabel>
|
|
461
|
-
<dc:Bounds x="1331" y="
|
|
492
|
+
<dc:Bounds x="1331" y="1047" width="64" height="28" />
|
|
462
493
|
</bpmndi:BPMNLabel>
|
|
463
494
|
</bpmndi:BPMNEdge>
|
|
495
|
+
<bpmndi:BPMNEdge id="BPMNEdge_f_eg_landed" bpmnElement="f_eg_landed">
|
|
496
|
+
<di:waypoint x="1288" y="280" />
|
|
497
|
+
<di:waypoint x="1420" y="280" />
|
|
498
|
+
</bpmndi:BPMNEdge>
|
|
499
|
+
<bpmndi:BPMNEdge id="BPMNEdge_f_m_landed" bpmnElement="f_m_landed">
|
|
500
|
+
<di:waypoint x="1456" y="280" />
|
|
501
|
+
<di:waypoint x="1638" y="280" />
|
|
502
|
+
<di:waypoint x="1638" y="160" />
|
|
503
|
+
</bpmndi:BPMNEdge>
|
|
464
504
|
<bpmndi:BPMNEdge id="BPMNEdge_f_m_escC" bpmnElement="f_m_escC">
|
|
465
|
-
<di:waypoint x="1138" y="
|
|
466
|
-
<di:waypoint x="1158" y="
|
|
467
|
-
<di:waypoint x="1158" y="
|
|
468
|
-
<di:waypoint x="
|
|
469
|
-
<di:waypoint x="
|
|
505
|
+
<di:waypoint x="1138" y="740" />
|
|
506
|
+
<di:waypoint x="1158" y="740" />
|
|
507
|
+
<di:waypoint x="1158" y="540" />
|
|
508
|
+
<di:waypoint x="1638" y="540" />
|
|
509
|
+
<di:waypoint x="1638" y="582" />
|
|
470
510
|
</bpmndi:BPMNEdge>
|
|
471
511
|
<bpmndi:BPMNEdge id="BPMNEdge_f_m_escA" bpmnElement="f_m_escA">
|
|
472
|
-
<di:waypoint x="1488" y="
|
|
473
|
-
<di:waypoint x="
|
|
512
|
+
<di:waypoint x="1488" y="600" />
|
|
513
|
+
<di:waypoint x="1620" y="600" />
|
|
474
514
|
</bpmndi:BPMNEdge>
|
|
475
515
|
<bpmndi:BPMNEdge id="BPMNEdge_f_m_answer" bpmnElement="f_m_answer">
|
|
476
|
-
<di:waypoint x="
|
|
477
|
-
<di:waypoint x="
|
|
478
|
-
<di:waypoint x="402" y="
|
|
516
|
+
<di:waypoint x="1638" y="618" />
|
|
517
|
+
<di:waypoint x="1638" y="660" />
|
|
518
|
+
<di:waypoint x="402" y="660" />
|
|
479
519
|
<di:waypoint x="402" y="160" />
|
|
480
520
|
</bpmndi:BPMNEdge>
|
|
481
521
|
<bpmndi:BPMNEdge id="BPMNEdge_f_m_mCiFix" bpmnElement="f_m_mCiFix">
|
|
482
522
|
<di:waypoint x="713" y="145" />
|
|
483
|
-
<di:waypoint x="713" y="
|
|
484
|
-
<di:waypoint x="863" y="
|
|
523
|
+
<di:waypoint x="713" y="760" />
|
|
524
|
+
<di:waypoint x="863" y="760" />
|
|
485
525
|
<bpmndi:BPMNLabel>
|
|
486
|
-
<dc:Bounds x="718" y="
|
|
526
|
+
<dc:Bounds x="718" y="518" width="60" height="42" />
|
|
487
527
|
</bpmndi:BPMNLabel>
|
|
488
528
|
</bpmndi:BPMNEdge>
|
|
489
529
|
<bpmndi:BPMNEdge id="BPMNEdge_f_m_mRebase" bpmnElement="f_m_mRebase">
|
|
@@ -498,18 +538,18 @@
|
|
|
498
538
|
<di:waypoint x="713" y="145" />
|
|
499
539
|
<di:waypoint x="713" y="318" />
|
|
500
540
|
<di:waypoint x="1018" y="318" />
|
|
501
|
-
<di:waypoint x="1018" y="
|
|
502
|
-
<di:waypoint x="1038" y="
|
|
541
|
+
<di:waypoint x="1018" y="740" />
|
|
542
|
+
<di:waypoint x="1038" y="740" />
|
|
503
543
|
<bpmndi:BPMNLabel>
|
|
504
544
|
<dc:Bounds x="823" y="326" width="85" height="14" />
|
|
505
545
|
</bpmndi:BPMNLabel>
|
|
506
546
|
</bpmndi:BPMNEdge>
|
|
507
547
|
<bpmndi:BPMNEdge id="BPMNEdge_f_ci_go" bpmnElement="f_ci_go">
|
|
508
|
-
<di:waypoint x="888" y="
|
|
509
|
-
<di:waypoint x="888" y="
|
|
510
|
-
<di:waypoint x="1038" y="
|
|
548
|
+
<di:waypoint x="888" y="785" />
|
|
549
|
+
<di:waypoint x="888" y="920" />
|
|
550
|
+
<di:waypoint x="1038" y="920" />
|
|
511
551
|
<bpmndi:BPMNLabel>
|
|
512
|
-
<dc:Bounds x="893" y="
|
|
552
|
+
<dc:Bounds x="893" y="839" width="49" height="28" />
|
|
513
553
|
</bpmndi:BPMNLabel>
|
|
514
554
|
</bpmndi:BPMNEdge>
|
|
515
555
|
<bpmndi:BPMNEdge id="BPMNEdge_f_reb_go" bpmnElement="f_reb_go">
|
|
@@ -517,8 +557,8 @@
|
|
|
517
557
|
<di:waypoint x="933" y="280" />
|
|
518
558
|
<di:waypoint x="933" y="305" />
|
|
519
559
|
<di:waypoint x="1158" y="305" />
|
|
520
|
-
<di:waypoint x="1158" y="
|
|
521
|
-
<di:waypoint x="1138" y="
|
|
560
|
+
<di:waypoint x="1158" y="1080" />
|
|
561
|
+
<di:waypoint x="1138" y="1080" />
|
|
522
562
|
<bpmndi:BPMNLabel>
|
|
523
563
|
<dc:Bounds x="1101" y="310" width="49" height="28" />
|
|
524
564
|
</bpmndi:BPMNLabel>
|
|
@@ -526,60 +566,64 @@
|
|
|
526
566
|
<bpmndi:BPMNEdge id="BPMNEdge_f_m_gQueued" bpmnElement="f_m_gQueued">
|
|
527
567
|
<di:waypoint x="1088" y="145" />
|
|
528
568
|
<di:waypoint x="1088" y="280" />
|
|
529
|
-
<di:waypoint x="
|
|
569
|
+
<di:waypoint x="1238" y="280" />
|
|
530
570
|
<bpmndi:BPMNLabel>
|
|
531
571
|
<dc:Bounds x="1093" y="206" width="46" height="14" />
|
|
532
572
|
</bpmndi:BPMNLabel>
|
|
533
573
|
</bpmndi:BPMNEdge>
|
|
574
|
+
<bpmndi:BPMNEdge id="BPMNEdge_f_eg_evicted" bpmnElement="f_eg_evicted">
|
|
575
|
+
<di:waypoint x="1263" y="305" />
|
|
576
|
+
<di:waypoint x="1263" y="440" />
|
|
577
|
+
<di:waypoint x="1420" y="440" />
|
|
578
|
+
</bpmndi:BPMNEdge>
|
|
534
579
|
<bpmndi:BPMNEdge id="BPMNEdge_f_m_gBlocked" bpmnElement="f_m_gBlocked">
|
|
535
|
-
<di:waypoint x="
|
|
536
|
-
<di:waypoint x="
|
|
537
|
-
<di:waypoint x="
|
|
538
|
-
<di:waypoint x="
|
|
580
|
+
<di:waypoint x="1088" y="95" />
|
|
581
|
+
<di:waypoint x="1088" y="75" />
|
|
582
|
+
<di:waypoint x="1844" y="75" />
|
|
583
|
+
<di:waypoint x="1844" y="478" />
|
|
584
|
+
<di:waypoint x="1368" y="478" />
|
|
585
|
+
<di:waypoint x="1368" y="580" />
|
|
586
|
+
<di:waypoint x="1388" y="580" />
|
|
539
587
|
<bpmndi:BPMNLabel>
|
|
540
|
-
<dc:Bounds x="
|
|
588
|
+
<dc:Bounds x="1849" y="270" width="53" height="14" />
|
|
541
589
|
</bpmndi:BPMNLabel>
|
|
542
590
|
</bpmndi:BPMNEdge>
|
|
543
591
|
<bpmndi:BPMNEdge id="BPMNEdge_f_ci_done" bpmnElement="f_ci_done">
|
|
544
|
-
<di:waypoint x="1138" y="
|
|
545
|
-
<di:waypoint x="1238" y="
|
|
592
|
+
<di:waypoint x="1138" y="920" />
|
|
593
|
+
<di:waypoint x="1238" y="920" />
|
|
546
594
|
</bpmndi:BPMNEdge>
|
|
547
595
|
<bpmndi:BPMNEdge id="BPMNEdge_f_reb_done" bpmnElement="f_reb_done">
|
|
548
|
-
<di:waypoint x="1138" y="
|
|
549
|
-
<di:waypoint x="1158" y="
|
|
550
|
-
<di:waypoint x="1158" y="
|
|
551
|
-
<di:waypoint x="1238" y="
|
|
552
|
-
<di:waypoint x="1263" y="
|
|
553
|
-
<di:waypoint x="1263" y="
|
|
554
|
-
</bpmndi:BPMNEdge>
|
|
555
|
-
<bpmndi:BPMNEdge id="BPMNEdge_f_m_landed" bpmnElement="f_m_landed">
|
|
556
|
-
<di:waypoint x="1263" y="298" />
|
|
557
|
-
<di:waypoint x="1263" y="318" />
|
|
558
|
-
<di:waypoint x="1281" y="318" />
|
|
559
|
-
<di:waypoint x="1281" y="540" />
|
|
560
|
-
<di:waypoint x="1644" y="540" />
|
|
561
|
-
<di:waypoint x="1644" y="180" />
|
|
562
|
-
<di:waypoint x="1468" y="180" />
|
|
563
|
-
<di:waypoint x="1468" y="160" />
|
|
596
|
+
<di:waypoint x="1138" y="1100" />
|
|
597
|
+
<di:waypoint x="1158" y="1100" />
|
|
598
|
+
<di:waypoint x="1158" y="1125" />
|
|
599
|
+
<di:waypoint x="1238" y="1125" />
|
|
600
|
+
<di:waypoint x="1263" y="1125" />
|
|
601
|
+
<di:waypoint x="1263" y="1105" />
|
|
564
602
|
</bpmndi:BPMNEdge>
|
|
565
603
|
<bpmndi:BPMNEdge id="BPMNEdge_f_ci_fixed" bpmnElement="f_ci_fixed">
|
|
566
|
-
<di:waypoint x="1263" y="
|
|
567
|
-
<di:waypoint x="1263" y="
|
|
568
|
-
<di:waypoint x="402" y="
|
|
604
|
+
<di:waypoint x="1263" y="945" />
|
|
605
|
+
<di:waypoint x="1263" y="980" />
|
|
606
|
+
<di:waypoint x="402" y="980" />
|
|
569
607
|
<di:waypoint x="402" y="160" />
|
|
570
608
|
<bpmndi:BPMNLabel>
|
|
571
|
-
<dc:Bounds x="813" y="
|
|
609
|
+
<dc:Bounds x="813" y="958" width="39" height="14" />
|
|
572
610
|
</bpmndi:BPMNLabel>
|
|
573
611
|
</bpmndi:BPMNEdge>
|
|
574
612
|
<bpmndi:BPMNEdge id="BPMNEdge_f_reb_rebased" bpmnElement="f_reb_rebased">
|
|
575
|
-
<di:waypoint x="1263" y="
|
|
576
|
-
<di:waypoint x="1263" y="
|
|
577
|
-
<di:waypoint x="402" y="
|
|
613
|
+
<di:waypoint x="1263" y="1105" />
|
|
614
|
+
<di:waypoint x="1263" y="1140" />
|
|
615
|
+
<di:waypoint x="402" y="1140" />
|
|
578
616
|
<di:waypoint x="402" y="160" />
|
|
579
617
|
<bpmndi:BPMNLabel>
|
|
580
|
-
<dc:Bounds x="806" y="
|
|
618
|
+
<dc:Bounds x="806" y="1118" width="53" height="14" />
|
|
581
619
|
</bpmndi:BPMNLabel>
|
|
582
620
|
</bpmndi:BPMNEdge>
|
|
621
|
+
<bpmndi:BPMNEdge id="BPMNEdge_f_m_evicted" bpmnElement="f_m_evicted">
|
|
622
|
+
<di:waypoint x="1438" y="458" />
|
|
623
|
+
<di:waypoint x="1438" y="478" />
|
|
624
|
+
<di:waypoint x="402" y="478" />
|
|
625
|
+
<di:waypoint x="402" y="160" />
|
|
626
|
+
</bpmndi:BPMNEdge>
|
|
583
627
|
</bpmndi:BPMNPlane>
|
|
584
628
|
</bpmndi:BPMNDiagram>
|
|
585
629
|
</bpmn:definitions>
|