@nanobpm/nano-workforce 0.145.0 → 0.145.1

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 CHANGED
@@ -1,3 +1,9 @@
1
+ ## [0.145.1](https://github.com/nanobpm/nano-workforce/compare/v0.145.0...v0.145.1) (2026-08-26)
2
+
3
+ ### Bug Fixes
4
+
5
+ * bound the merge-loop wait-landed wait so a never-enqueued PR escalates ([#556](https://github.com/nanobpm/nano-workforce/issues/556)) ([#558](https://github.com/nanobpm/nano-workforce/issues/558)) ([0e14578](https://github.com/nanobpm/nano-workforce/commit/0e14578e23d3914f8ae82a9fd84280fbc05c6588))
6
+
1
7
  ## [0.145.0](https://github.com/nanobpm/nano-workforce/compare/v0.144.0...v0.145.0) (2026-08-25)
2
8
 
3
9
  ### Features
package/app/contracts.ts CHANGED
@@ -136,6 +136,13 @@ export const ENV_CONTRACTS = {
136
136
  owner: "app/service.ts",
137
137
  semantics: "Minutes between review nudges.",
138
138
  },
139
+ NANO_PR_MERGE_LANDED_WAIT_TIMEOUT: {
140
+ category: "env",
141
+ name: "NANO_PR_MERGE_LANDED_WAIT_TIMEOUT",
142
+ owner: "app/service.ts",
143
+ semantics:
144
+ "How long the merge loop waits for a queued PR to actually land before escalating (FEEL/ISO-8601 duration).",
145
+ },
139
146
  NANO_PR_AUTO_MERGE: {
140
147
  category: "env",
141
148
  name: "NANO_PR_AUTO_MERGE",
@@ -0,0 +1,39 @@
1
+ // Unit coverage for the merge-queue landing liveness timeout policy. The value is baked into every
2
+ // merge-loop instance's `landedWaitTimeout` process variable and evaluated by the `wait-landed-timeout`
3
+ // timer catch (the timer arm of the `eg-landed` event-based gateway), so a malformed operator env
4
+ // must never deploy an uninterpretable `<bpmn:timeDuration>` — it falls back to the default instead.
5
+ // Run with `node --test`.
6
+
7
+ import assert from "node:assert/strict";
8
+ import { test } from "node:test";
9
+ import { DEFAULT_MERGE_LANDED_WAIT_TIMEOUT, mergeLandedWaitTimeout } from "./mergeLandedWait.ts";
10
+
11
+ test("mergeLandedWaitTimeout: blank / absent / malformed → default", () => {
12
+ assert.equal(mergeLandedWaitTimeout(undefined), DEFAULT_MERGE_LANDED_WAIT_TIMEOUT);
13
+ assert.equal(mergeLandedWaitTimeout(""), DEFAULT_MERGE_LANDED_WAIT_TIMEOUT);
14
+ assert.equal(mergeLandedWaitTimeout(" "), DEFAULT_MERGE_LANDED_WAIT_TIMEOUT);
15
+ assert.equal(mergeLandedWaitTimeout("1h"), DEFAULT_MERGE_LANDED_WAIT_TIMEOUT); // missing leading P/T
16
+ assert.equal(mergeLandedWaitTimeout("P"), DEFAULT_MERGE_LANDED_WAIT_TIMEOUT); // no component
17
+ assert.equal(mergeLandedWaitTimeout("PT"), DEFAULT_MERGE_LANDED_WAIT_TIMEOUT); // T with no time part
18
+ assert.equal(mergeLandedWaitTimeout("garbage"), DEFAULT_MERGE_LANDED_WAIT_TIMEOUT);
19
+ });
20
+
21
+ test("mergeLandedWaitTimeout: a valid ISO-8601 duration is honoured and upper-cased", () => {
22
+ assert.equal(mergeLandedWaitTimeout("PT30M"), "PT30M");
23
+ assert.equal(mergeLandedWaitTimeout("pt2h"), "PT2H");
24
+ assert.equal(mergeLandedWaitTimeout("P1D"), "P1D");
25
+ assert.equal(mergeLandedWaitTimeout(" pt90m "), "PT90M");
26
+ });
27
+
28
+ test("mergeLandedWaitTimeout: an explicit fallback is honoured for a bad value", () => {
29
+ assert.equal(mergeLandedWaitTimeout("nope", "PT10M"), "PT10M");
30
+ assert.equal(mergeLandedWaitTimeout("PT45M", "PT10M"), "PT45M");
31
+ });
32
+
33
+ test("the default is itself a well-formed ISO-8601 duration (never an uninterpretable timer)", () => {
34
+ // Validate the default against the grammar with a *distinct* fallback: if the default were
35
+ // malformed it would fall through to the sentinel, so equality to itself proves it parses.
36
+ const sentinel = "PT1S";
37
+ assert.notEqual(DEFAULT_MERGE_LANDED_WAIT_TIMEOUT, sentinel);
38
+ assert.equal(mergeLandedWaitTimeout(DEFAULT_MERGE_LANDED_WAIT_TIMEOUT, sentinel), DEFAULT_MERGE_LANDED_WAIT_TIMEOUT);
39
+ });
@@ -0,0 +1,39 @@
1
+ // Merge-queue landing liveness policy — kept as a pure module (no env, no I/O) so it is trivially
2
+ // testable, mirroring app/agentSla.ts. `app/service.ts` seeds the validated `landedWaitTimeout`
3
+ // process variable when it starts the merge-loop; the merge-loop's `wait-landed-timeout` timer catch
4
+ // (the timer arm of the `eg-landed` event-based gateway, racing `merge-landed` / `merge-evicted`)
5
+ // evaluates its `<bpmn:timeDuration>=landedWaitTimeout` at timer creation (FEEL-expression timer
6
+ // durations, engine-native).
7
+ //
8
+ // This closes the merge-queue landing liveness gap (issue #556): `attempt-merge` classifies a merge
9
+ // as `queued` on an ambiguous "merge queue" signal (or a REST "accepted but not yet landed"
10
+ // fallback) WITHOUT verifying the PR was actually enqueued. On a repo where a plain `gh pr merge`
11
+ // does not enqueue (e.g. Mergify, which needs an explicit `@Mergifyio queue`), the PR is never
12
+ // placed in any queue, yet the loop parks at `wait-landed` awaiting a `merge-landed` that can never
13
+ // be published — ACTIVE, no incident, no escalation, forever. Bounding the wait with a timer arm
14
+ // makes that impossible: when the timeout elapses the token routes to the existing merge escalation
15
+ // so a human is pulled in (add it to the queue / merge it, then reply to retry). It is a durable,
16
+ // in-process backstop — no external watchdog required, mirroring the convergence loop's
17
+ // `wait-review-timeout`.
18
+
19
+ import { isoDuration } from "./reviewWait.ts";
20
+
21
+ /** Default merge-queue landing timeout (ISO-8601 duration): how long the merge loop waits for a
22
+ * `queued` PR to actually land before the timer arm of the `eg-landed` event-based gateway fires and
23
+ * it escalates to a human. Deliberately generous — a native GitHub merge queue legitimately takes a
24
+ * while to build the prospective merged commit and run its required checks — while still bounded so a
25
+ * never-enqueued PR (the Mergify-eligible-but-unqueued wedge, #556) surfaces to a human rather than
26
+ * hanging forever. */
27
+ export const DEFAULT_MERGE_LANDED_WAIT_TIMEOUT = "PT1H";
28
+
29
+ /** Validate the operator-supplied merge-queue landing timeout (env
30
+ * `NANO_PR_MERGE_LANDED_WAIT_TIMEOUT`, ISO-8601 duration), falling back to
31
+ * {@link DEFAULT_MERGE_LANDED_WAIT_TIMEOUT} when absent, blank, or malformed — a bad env value must
32
+ * never deploy an uninterpretable timer expression. Derives its validation from the single canonical
33
+ * {@link isoDuration}. */
34
+ export function mergeLandedWaitTimeout(
35
+ raw: string | undefined,
36
+ def: string = DEFAULT_MERGE_LANDED_WAIT_TIMEOUT,
37
+ ): string {
38
+ return isoDuration(raw, def);
39
+ }
@@ -41,6 +41,7 @@ import {
41
41
  const MODEL = readFileSync("resources/processes/merge-loop.bpmn", "utf8");
42
42
 
43
43
  const AGENT_SLA_MS = 30 * 60 * 1000; // matches the PT30M we start instances with
44
+ const LANDED_WAIT_MS = 30 * 60 * 1000; // matches the PT30M landedWaitTimeout we start instances with
44
45
 
45
46
  type Output = Record<string, unknown>;
46
47
  type Responder = Output | Output[] | ((job: { variables: Record<string, unknown> }) => Output);
@@ -80,6 +81,7 @@ const DEFAULT_VARS: Record<string, unknown> = {
80
81
  rebaseRound: 0,
81
82
  mergeRetryRound: 0,
82
83
  agentSlaTimeout: "PT30M",
84
+ landedWaitTimeout: "PT30M",
83
85
  abandonBrief: null,
84
86
  failingChecksList: null,
85
87
  status: null,
@@ -206,11 +208,36 @@ test("a queued merge parks on the event gateway; the landed message marks it mer
206
208
  const engine = await boot({ responses: { "pr.merge": { mergeStatus: "queued" } } });
207
209
  await engine.publishMessage({ name: "deps-cleared", correlationKey: "pr-1" });
208
210
  await engine.publishMessage({ name: "merge-ready", correlationKey: "pr-1", variables: { mergeState: "ready" } });
209
- assertThatInstance(engine, byProcessId("merge-loop")).isActive().hasActiveElements("wait-landed", "wait-evicted");
211
+ assertThatInstance(engine, byProcessId("merge-loop")).isActive().hasActiveElements("wait-landed", "wait-evicted", "wait-landed-timeout");
210
212
  await engine.publishMessage({ name: "merge-landed", correlationKey: "pr-1" });
211
213
  assertThatInstance(engine, byProcessId("merge-loop")).hasCompleted().hasCompletedElements("mark-merged");
212
214
  });
213
215
 
216
+ test("a queued merge that never lands escalates when the landing timeout fires (#556)", async () => {
217
+ // The Mergify wedge: `attempt-merge` classifies the merge `queued` on an ambiguous signal, but the
218
+ // repo never actually enqueued the PR, so `merge-landed` can never be published. Without the timer
219
+ // arm the token would park at `wait-landed` forever (ACTIVE, no incident). The timer bounds it.
220
+ const engine = await boot({ responses: { "pr.merge": { mergeStatus: "queued" } } });
221
+ await engine.publishMessage({ name: "deps-cleared", correlationKey: "pr-1" });
222
+ await engine.publishMessage({ name: "merge-ready", correlationKey: "pr-1", variables: { mergeState: "ready" } });
223
+ assertThatInstance(engine, byProcessId("merge-loop")).isActive().hasActiveElement("wait-landed");
224
+ await engine.advanceTime(LANDED_WAIT_MS + 1);
225
+ await assertThatUserTask(engine, { instance: byProcessId("merge-loop"), elementId: "wait-merge-answer" }).isCreated();
226
+ assertThatInstance(engine, byProcessId("merge-loop")).hasCompletedElements("merge-esc-landed");
227
+ assert(!completedElementIds(engine).has("mark-merged"), "a never-landed queued merge must not mark-merged");
228
+ assertStringIncludes(String(escalation(engine).question ?? ""), "did not land within the merge-queue landing timeout", "the escalation must name the landing-timeout trigger");
229
+ });
230
+
231
+ test("answering the landing-timeout escalation re-arms the merge poller (#556)", async () => {
232
+ const engine = await boot({ responses: { "pr.merge": { mergeStatus: "queued" } } });
233
+ await engine.publishMessage({ name: "deps-cleared", correlationKey: "pr-1" });
234
+ await engine.publishMessage({ name: "merge-ready", correlationKey: "pr-1", variables: { mergeState: "ready" } });
235
+ await engine.advanceTime(LANDED_WAIT_MS + 1);
236
+ await assertThatUserTask(engine, { instance: byProcessId("merge-loop"), elementId: "wait-merge-answer" }).isCreated();
237
+ await engine.completeUserTask(await mergeAnswerTaskKey(engine), { answer: "queued it manually, retry" });
238
+ assertThatInstance(engine, byProcessId("merge-loop")).isActive().hasActiveElement("wait-mergeable");
239
+ });
240
+
214
241
  test("an evicted queued merge re-arms the poller rather than completing", async () => {
215
242
  const engine = await boot({ responses: { "pr.merge": { mergeStatus: "queued" } } });
216
243
  await engine.publishMessage({ name: "deps-cleared", correlationKey: "pr-1" });
package/app/service.ts CHANGED
@@ -54,6 +54,7 @@ import {
54
54
  import { activeStatusesFor, derivedTrackingTable } from "./instanceTracking.ts";
55
55
  import { pollLineage } from "./lineage.ts";
56
56
  import { mergeLanes, readExclusions } from "./mergeExclusion.ts";
57
+ import { mergeLandedWaitTimeout } from "./mergeLandedWait.ts";
57
58
  import {
58
59
  freshHeadRunAction,
59
60
  headRunPresenceCount,
@@ -156,6 +157,18 @@ export const AGENT_SLA_TIMEOUT = agentSlaTimeout(process.env.NANO_PR_AGENT_SLA_T
156
157
  * default so an uninterpretable timer is never deployed. */
157
158
  export const REVIEW_WAIT_TIMEOUT = reviewWaitTimeout(process.env.NANO_PR_REVIEW_WAIT_TIMEOUT);
158
159
 
160
+ /** How long the merge loop waits for a `queued` PR to actually land before escalating to a human.
161
+ * Seeded as the `landedWaitTimeout` process variable at merge start and evaluated by the merge-loop's
162
+ * `wait-landed-timeout` timer catch (the timer arm of the `eg-landed` event-based gateway, racing the
163
+ * `merge-landed` / `merge-evicted` messages). `attempt-merge` classifies a merge as `queued` on an
164
+ * ambiguous "merge queue" signal without verifying a real enqueue, so on a repo that never actually
165
+ * queues a plain `gh pr merge` (e.g. Mergify) the loop would otherwise park at `wait-landed` forever
166
+ * (issue #556). ISO-8601 duration; a malformed `NANO_PR_MERGE_LANDED_WAIT_TIMEOUT` falls back to the
167
+ * default so an uninterpretable timer is never deployed. */
168
+ export const MERGE_LANDED_WAIT_TIMEOUT = mergeLandedWaitTimeout(
169
+ process.env.NANO_PR_MERGE_LANDED_WAIT_TIMEOUT,
170
+ );
171
+
159
172
  /** Cooldown (ms) between the poller's automatic Copilot re-request nudges for a single waiting PR.
160
173
  * Copilot dismisses re-requests, so the poller retries — but not on every tick; this throttles it
161
174
  * to one attempt per window. Set via `NANO_PR_REVIEW_NUDGE_MINUTES` (minutes). */
@@ -708,6 +721,7 @@ export async function startMerge(
708
721
  mergeRetryRound: 0,
709
722
  mergeRetryMax: MAX_MERGE_RETRIES,
710
723
  agentSlaTimeout: AGENT_SLA_TIMEOUT,
724
+ landedWaitTimeout: MERGE_LANDED_WAIT_TIMEOUT,
711
725
  // Lineage (issue #245): thread the origin identity onto the merge instance (see startMerge).
712
726
  rootRequestKey,
713
727
  abandonUrl: abUrl,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nanobpm/nano-workforce",
3
- "version": "0.145.0",
3
+ "version": "0.145.1",
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",
@@ -155,6 +155,7 @@
155
155
  <bpmn:incoming>f_m_gQueued</bpmn:incoming>
156
156
  <bpmn:outgoing>f_eg_landed</bpmn:outgoing>
157
157
  <bpmn:outgoing>f_eg_evicted</bpmn:outgoing>
158
+ <bpmn:outgoing>f_eg_landedTimeout</bpmn:outgoing>
158
159
  </bpmn:eventBasedGateway>
159
160
  <bpmn:intermediateCatchEvent id="wait-landed" name="Wait: merge queue landed">
160
161
  <bpmn:incoming>f_eg_landed</bpmn:incoming>
@@ -166,6 +167,13 @@
166
167
  <bpmn:outgoing>f_m_evicted</bpmn:outgoing>
167
168
  <bpmn:messageEventDefinition id="med_mergeEvicted" messageRef="Message_mergeEvicted" />
168
169
  </bpmn:intermediateCatchEvent>
170
+ <bpmn:intermediateCatchEvent id="wait-landed-timeout" name="Wait: merge-queue landing timeout">
171
+ <bpmn:incoming>f_eg_landedTimeout</bpmn:incoming>
172
+ <bpmn:outgoing>f_m_landedStalled</bpmn:outgoing>
173
+ <bpmn:timerEventDefinition id="ted_landedTimeout">
174
+ <bpmn:timeDuration xsi:type="bpmn:tFormalExpression">=landedWaitTimeout</bpmn:timeDuration>
175
+ </bpmn:timerEventDefinition>
176
+ </bpmn:intermediateCatchEvent>
169
177
  <bpmn:serviceTask id="mark-merged" name="Mark merged">
170
178
  <bpmn:extensionElements>
171
179
  <zeebe:taskDefinition type="pr.mark-merged" />
@@ -223,9 +231,25 @@
223
231
  </bpmn:serviceTask>
224
232
  <bpmn:exclusiveGateway id="gw-merge-escalated" name="escalation opened?" default="f_m_escReenter">
225
233
  <bpmn:incoming>f_m_escA</bpmn:incoming>
234
+ <bpmn:incoming>f_m_escLanded</bpmn:incoming>
226
235
  <bpmn:outgoing>f_m_escWait</bpmn:outgoing>
227
236
  <bpmn:outgoing>f_m_escReenter</bpmn:outgoing>
228
237
  </bpmn:exclusiveGateway>
238
+ <bpmn:serviceTask id="merge-esc-landed" name="Escalate: merge queue never landed">
239
+ <bpmn:extensionElements>
240
+ <zeebe:taskDefinition type="pr.persist-escalation" />
241
+ <zeebe:properties>
242
+ <zeebe:property name="io.nanobpm.dataEnvelope.in" value="EscalationIn" />
243
+ <zeebe:property name="io.nanobpm.dataEnvelope.out" value="EscalationOut" />
244
+ </zeebe:properties>
245
+ <zeebe:ioMapping>
246
+ <zeebe:input source="=&#34;blocked&#34;" target="status" />
247
+ <zeebe:input source="=&#34;This PR was reported as added to the merge queue but did not land within the merge-queue landing timeout (&#34; + landedWaitTimeout + &#34;). The repository may not have actually enqueued it — e.g. a Mergify repo where a plain merge does not queue and an explicit `@Mergifyio queue` is required, or a native merge queue that dropped it silently. Add the PR to the merge queue (or merge it) manually, then reply to retry.&#34;" target="question" />
248
+ </zeebe:ioMapping>
249
+ </bpmn:extensionElements>
250
+ <bpmn:incoming>f_m_landedStalled</bpmn:incoming>
251
+ <bpmn:outgoing>f_m_escLanded</bpmn:outgoing>
252
+ </bpmn:serviceTask>
229
253
  <bpmn:userTask id="wait-merge-answer" name="Answer escalation">
230
254
  <bpmn:extensionElements>
231
255
  <zeebe:formDefinition formId="pr-escalation" />
@@ -575,6 +599,9 @@
575
599
  <bpmn:sequenceFlow id="f_mr_giveup" name="budget exhausted" sourceRef="gw-merge-retry" targetRef="merge-esc-attempt" />
576
600
  <bpmn:sequenceFlow id="f_eg_landed" sourceRef="eg-landed" targetRef="wait-landed" />
577
601
  <bpmn:sequenceFlow id="f_eg_evicted" sourceRef="eg-landed" targetRef="wait-evicted" />
602
+ <bpmn:sequenceFlow id="f_eg_landedTimeout" sourceRef="eg-landed" targetRef="wait-landed-timeout" />
603
+ <bpmn:sequenceFlow id="f_m_landedStalled" sourceRef="wait-landed-timeout" targetRef="merge-esc-landed" />
604
+ <bpmn:sequenceFlow id="f_m_escLanded" sourceRef="merge-esc-landed" targetRef="gw-merge-escalated" />
578
605
  <bpmn:sequenceFlow id="f_m_evicted" sourceRef="wait-evicted" targetRef="arm-merge" />
579
606
  <bpmn:sequenceFlow id="f_m_gBlocked" name="blocked" sourceRef="gw-merge" targetRef="merge-esc-attempt" />
580
607
  <bpmn:sequenceFlow id="f_m_gAbandoned" name="abandoned (PR closed)" sourceRef="gw-merge" targetRef="MergeAbandoned">
@@ -594,428 +621,469 @@
594
621
  <bpmndi:BPMNDiagram id="BPMNDiagram_merge-loop">
595
622
  <bpmndi:BPMNPlane id="BPMNPlane_merge-loop" bpmnElement="merge-loop">
596
623
  <bpmndi:BPMNShape id="BPMNShape_MergeStart" bpmnElement="MergeStart">
597
- <dc:Bounds x="80" y="102" width="36" height="36" />
624
+ <dc:Bounds x="80" y="262" width="36" height="36" />
598
625
  <bpmndi:BPMNLabel>
599
- <dc:Bounds x="54" y="143" width="89" height="14" />
626
+ <dc:Bounds x="54" y="303" width="89" height="14" />
600
627
  </bpmndi:BPMNLabel>
601
628
  </bpmndi:BPMNShape>
602
629
  <bpmndi:BPMNShape id="BPMNShape_wait-deps" bpmnElement="wait-deps">
603
- <dc:Bounds x="216" y="102" width="36" height="36" />
630
+ <dc:Bounds x="216" y="262" width="36" height="36" />
604
631
  <bpmndi:BPMNLabel>
605
- <dc:Bounds x="190" y="55" width="88" height="42" />
632
+ <dc:Bounds x="190" y="215" width="88" height="42" />
606
633
  </bpmndi:BPMNLabel>
607
634
  </bpmndi:BPMNShape>
608
635
  <bpmndi:BPMNShape id="BPMNShape_arm-merge" bpmnElement="arm-merge">
609
- <dc:Bounds x="352" y="80" width="100" height="80" />
636
+ <dc:Bounds x="352" y="240" width="100" height="80" />
610
637
  </bpmndi:BPMNShape>
611
638
  <bpmndi:BPMNShape id="BPMNShape_wait-mergeable" bpmnElement="wait-mergeable">
612
- <dc:Bounds x="552" y="102" width="36" height="36" />
639
+ <dc:Bounds x="552" y="262" width="36" height="36" />
613
640
  <bpmndi:BPMNLabel>
614
- <dc:Bounds x="535" y="69" width="70" height="28" />
641
+ <dc:Bounds x="535" y="229" width="70" height="28" />
615
642
  </bpmndi:BPMNLabel>
616
643
  </bpmndi:BPMNShape>
617
644
  <bpmndi:BPMNShape id="BPMNShape_gw-mergeable" bpmnElement="gw-mergeable" isMarkerVisible="true">
618
- <dc:Bounds x="688" y="95" width="50" height="50" />
645
+ <dc:Bounds x="688" y="255" width="50" height="50" />
619
646
  <bpmndi:BPMNLabel>
620
- <dc:Bounds x="675" y="76" width="77" height="14" />
647
+ <dc:Bounds x="675" y="236" width="77" height="14" />
621
648
  </bpmndi:BPMNLabel>
622
649
  </bpmndi:BPMNShape>
623
650
  <bpmndi:BPMNShape id="BPMNShape_attempt-merge" bpmnElement="attempt-merge">
624
- <dc:Bounds x="838" y="80" width="100" height="80" />
651
+ <dc:Bounds x="838" y="240" width="100" height="80" />
625
652
  </bpmndi:BPMNShape>
626
653
  <bpmndi:BPMNShape id="BPMNShape_gw-merge" bpmnElement="gw-merge" isMarkerVisible="true">
627
- <dc:Bounds x="1063" y="95" width="50" height="50" />
654
+ <dc:Bounds x="1063" y="255" width="50" height="50" />
628
655
  <bpmndi:BPMNLabel>
629
- <dc:Bounds x="1022" y="150" width="53" height="28" />
656
+ <dc:Bounds x="1062" y="222" width="53" height="28" />
630
657
  </bpmndi:BPMNLabel>
631
658
  </bpmndi:BPMNShape>
632
659
  <bpmndi:BPMNShape id="BPMNShape_gw-merge-retry" bpmnElement="gw-merge-retry" isMarkerVisible="true">
633
- <dc:Bounds x="1238" y="575" width="50" height="50" />
660
+ <dc:Bounds x="1238" y="735" width="50" height="50" />
634
661
  <bpmndi:BPMNLabel>
635
- <dc:Bounds x="1219" y="670" width="88" height="28" />
662
+ <dc:Bounds x="1259" y="810" width="88" height="28" />
636
663
  </bpmndi:BPMNLabel>
637
664
  </bpmndi:BPMNShape>
638
665
  <bpmndi:BPMNShape id="BPMNShape_eg-landed" bpmnElement="eg-landed" isMarkerVisible="true">
639
- <dc:Bounds x="1238" y="255" width="50" height="50" />
666
+ <dc:Bounds x="1238" y="415" width="50" height="50" />
640
667
  <bpmndi:BPMNLabel>
641
- <dc:Bounds x="1231" y="222" width="64" height="28" />
668
+ <dc:Bounds x="1231" y="490" width="64" height="28" />
642
669
  </bpmndi:BPMNLabel>
643
670
  </bpmndi:BPMNShape>
644
671
  <bpmndi:BPMNShape id="BPMNShape_wait-landed" bpmnElement="wait-landed">
645
- <dc:Bounds x="1420" y="262" width="36" height="36" />
672
+ <dc:Bounds x="1420" y="422" width="36" height="36" />
646
673
  <bpmndi:BPMNLabel>
647
- <dc:Bounds x="1396" y="303" width="85" height="28" />
674
+ <dc:Bounds x="1416" y="483" width="85" height="28" />
648
675
  </bpmndi:BPMNLabel>
649
676
  </bpmndi:BPMNShape>
650
677
  <bpmndi:BPMNShape id="BPMNShape_wait-evicted" bpmnElement="wait-evicted">
651
- <dc:Bounds x="1420" y="422" width="36" height="36" />
678
+ <dc:Bounds x="1420" y="582" width="36" height="36" />
679
+ <bpmndi:BPMNLabel>
680
+ <dc:Bounds x="1461" y="579" width="88" height="42" />
681
+ </bpmndi:BPMNLabel>
682
+ </bpmndi:BPMNShape>
683
+ <bpmndi:BPMNShape id="BPMNShape_wait-landed-timeout" bpmnElement="wait-landed-timeout">
684
+ <dc:Bounds x="1420" y="102" width="36" height="36" />
652
685
  <bpmndi:BPMNLabel>
653
- <dc:Bounds x="1394" y="375" width="88" height="42" />
686
+ <dc:Bounds x="1331" y="92" width="84" height="56" />
654
687
  </bpmndi:BPMNLabel>
655
688
  </bpmndi:BPMNShape>
656
689
  <bpmndi:BPMNShape id="BPMNShape_mark-merged" bpmnElement="mark-merged">
657
- <dc:Bounds x="1588" y="80" width="100" height="80" />
690
+ <dc:Bounds x="1588" y="240" width="100" height="80" />
658
691
  </bpmndi:BPMNShape>
659
692
  <bpmndi:BPMNShape id="BPMNShape_MergeEnd" bpmnElement="MergeEnd">
660
- <dc:Bounds x="1820" y="102" width="36" height="36" />
693
+ <dc:Bounds x="1795" y="262" width="36" height="36" />
661
694
  <bpmndi:BPMNLabel>
662
- <dc:Bounds x="1813" y="143" width="50" height="14" />
695
+ <dc:Bounds x="1788" y="303" width="50" height="14" />
663
696
  </bpmndi:BPMNLabel>
664
697
  </bpmndi:BPMNShape>
665
698
  <bpmndi:BPMNShape id="BPMNShape_MergeAbandoned" bpmnElement="MergeAbandoned">
666
- <dc:Bounds x="1245" y="742" width="36" height="36" />
699
+ <dc:Bounds x="1245" y="902" width="36" height="36" />
667
700
  <bpmndi:BPMNLabel>
668
- <dc:Bounds x="1222" y="783" width="82" height="28" />
701
+ <dc:Bounds x="1222" y="943" width="82" height="28" />
669
702
  </bpmndi:BPMNLabel>
670
703
  </bpmndi:BPMNShape>
671
704
  <bpmndi:BPMNShape id="BPMNShape_merge-esc-conflict" bpmnElement="merge-esc-conflict">
672
- <dc:Bounds x="1388" y="880" width="100" height="80" />
705
+ <dc:Bounds x="1388" y="1040" width="100" height="80" />
673
706
  </bpmndi:BPMNShape>
674
707
  <bpmndi:BPMNShape id="BPMNShape_merge-esc-attempt" bpmnElement="merge-esc-attempt">
675
- <dc:Bounds x="1388" y="560" width="100" height="80" />
708
+ <dc:Bounds x="1388" y="720" width="100" height="80" />
676
709
  </bpmndi:BPMNShape>
677
710
  <bpmndi:BPMNShape id="BPMNShape_gw-merge-escalated" bpmnElement="gw-merge-escalated" isMarkerVisible="true">
678
- <dc:Bounds x="1613" y="575" width="50" height="50" />
711
+ <dc:Bounds x="1788" y="95" width="50" height="50" />
679
712
  <bpmndi:BPMNLabel>
680
- <dc:Bounds x="1601" y="670" width="74" height="28" />
713
+ <dc:Bounds x="1756" y="150" width="74" height="28" />
681
714
  </bpmndi:BPMNLabel>
682
715
  </bpmndi:BPMNShape>
716
+ <bpmndi:BPMNShape id="BPMNShape_merge-esc-landed" bpmnElement="merge-esc-landed">
717
+ <dc:Bounds x="1588" y="80" width="100" height="80" />
718
+ </bpmndi:BPMNShape>
683
719
  <bpmndi:BPMNShape id="BPMNShape_wait-merge-answer" bpmnElement="wait-merge-answer">
684
- <dc:Bounds x="1788" y="560" width="100" height="80" />
720
+ <dc:Bounds x="1938" y="80" width="100" height="80" />
685
721
  </bpmndi:BPMNShape>
686
722
  <bpmndi:BPMNShape id="BPMNShape_record-merge-answer" bpmnElement="record-merge-answer">
687
- <dc:Bounds x="1988" y="560" width="100" height="80" />
723
+ <dc:Bounds x="2138" y="80" width="100" height="80" />
688
724
  </bpmndi:BPMNShape>
689
725
  <bpmndi:BPMNShape id="BPMNShape_gw-ci-fix" bpmnElement="gw-ci-fix" isMarkerVisible="true">
690
- <dc:Bounds x="863" y="895" width="50" height="50" />
726
+ <dc:Bounds x="863" y="1055" width="50" height="50" />
691
727
  <bpmndi:BPMNLabel>
692
- <dc:Bounds x="784" y="950" width="89" height="14" />
728
+ <dc:Bounds x="904" y="1110" width="89" height="14" />
693
729
  </bpmndi:BPMNLabel>
694
730
  </bpmndi:BPMNShape>
695
731
  <bpmndi:BPMNShape id="BPMNShape_SP_cifix" bpmnElement="SP_cifix">
696
- <dc:Bounds x="1038" y="1040" width="100" height="80" />
732
+ <dc:Bounds x="1038" y="1200" width="100" height="80" />
697
733
  </bpmndi:BPMNShape>
698
734
  <bpmndi:BPMNShape id="BPMNShape_gw-ci-outcome" bpmnElement="gw-ci-outcome" isMarkerVisible="true">
699
- <dc:Bounds x="1238" y="1055" width="50" height="50" />
735
+ <dc:Bounds x="1238" y="1215" width="50" height="50" />
700
736
  <bpmndi:BPMNLabel>
701
- <dc:Bounds x="1232" y="1150" width="63" height="28" />
737
+ <dc:Bounds x="1232" y="1310" width="63" height="28" />
702
738
  </bpmndi:BPMNLabel>
703
739
  </bpmndi:BPMNShape>
704
740
  <bpmndi:BPMNShape id="BPMNShape_gw-rebase" bpmnElement="gw-rebase" isMarkerVisible="true">
705
- <dc:Bounds x="863" y="255" width="50" height="50" />
741
+ <dc:Bounds x="863" y="415" width="50" height="50" />
706
742
  <bpmndi:BPMNLabel>
707
- <dc:Bounds x="844" y="236" width="88" height="14" />
743
+ <dc:Bounds x="844" y="370" width="88" height="14" />
708
744
  </bpmndi:BPMNLabel>
709
745
  </bpmndi:BPMNShape>
710
746
  <bpmndi:BPMNShape id="BPMNShape_SP_rebase" bpmnElement="SP_rebase">
711
- <dc:Bounds x="1038" y="1200" width="100" height="80" />
747
+ <dc:Bounds x="1038" y="1360" width="100" height="80" />
712
748
  </bpmndi:BPMNShape>
713
749
  <bpmndi:BPMNShape id="BPMNShape_gw-rebase-outcome" bpmnElement="gw-rebase-outcome" isMarkerVisible="true">
714
- <dc:Bounds x="1238" y="1215" width="50" height="50" />
750
+ <dc:Bounds x="1238" y="1375" width="50" height="50" />
715
751
  <bpmndi:BPMNLabel>
716
- <dc:Bounds x="1232" y="1310" width="63" height="28" />
752
+ <dc:Bounds x="1272" y="1430" width="63" height="28" />
717
753
  </bpmndi:BPMNLabel>
718
754
  </bpmndi:BPMNShape>
719
755
  <bpmndi:BPMNShape id="BPMNShape_record-merge-dep" bpmnElement="record-merge-dep">
720
- <dc:Bounds x="1388" y="1040" width="100" height="80" />
756
+ <dc:Bounds x="1388" y="1200" width="100" height="80" />
721
757
  </bpmndi:BPMNShape>
722
758
  <bpmndi:BPMNEdge id="BPMNEdge_f_m_start" bpmnElement="f_m_start">
723
- <di:waypoint x="116" y="120" />
724
- <di:waypoint x="216" y="120" />
759
+ <di:waypoint x="116" y="280" />
760
+ <di:waypoint x="216" y="280" />
725
761
  </bpmndi:BPMNEdge>
726
762
  <bpmndi:BPMNEdge id="BPMNEdge_f_m_deps" bpmnElement="f_m_deps">
727
- <di:waypoint x="252" y="120" />
728
- <di:waypoint x="352" y="120" />
763
+ <di:waypoint x="252" y="280" />
764
+ <di:waypoint x="352" y="280" />
729
765
  </bpmndi:BPMNEdge>
730
766
  <bpmndi:BPMNEdge id="BPMNEdge_f_m_arm" bpmnElement="f_m_arm">
731
- <di:waypoint x="452" y="120" />
732
- <di:waypoint x="552" y="120" />
767
+ <di:waypoint x="452" y="280" />
768
+ <di:waypoint x="552" y="280" />
733
769
  </bpmndi:BPMNEdge>
734
770
  <bpmndi:BPMNEdge id="BPMNEdge_f_m_ready" bpmnElement="f_m_ready">
735
- <di:waypoint x="588" y="120" />
736
- <di:waypoint x="688" y="120" />
771
+ <di:waypoint x="588" y="280" />
772
+ <di:waypoint x="688" y="280" />
737
773
  </bpmndi:BPMNEdge>
738
774
  <bpmndi:BPMNEdge id="BPMNEdge_f_m_mReady" bpmnElement="f_m_mReady">
739
- <di:waypoint x="738" y="120" />
740
- <di:waypoint x="838" y="120" />
775
+ <di:waypoint x="738" y="280" />
776
+ <di:waypoint x="838" y="280" />
741
777
  <bpmndi:BPMNLabel>
742
- <dc:Bounds x="769" y="98" width="39" height="14" />
778
+ <dc:Bounds x="769" y="258" width="39" height="14" />
743
779
  </bpmndi:BPMNLabel>
744
780
  </bpmndi:BPMNEdge>
745
781
  <bpmndi:BPMNEdge id="BPMNEdge_f_m_attempt" bpmnElement="f_m_attempt">
746
- <di:waypoint x="938" y="120" />
747
- <di:waypoint x="1063" y="120" />
782
+ <di:waypoint x="938" y="280" />
783
+ <di:waypoint x="1063" y="280" />
748
784
  </bpmndi:BPMNEdge>
749
785
  <bpmndi:BPMNEdge id="BPMNEdge_f_m_gMerged" bpmnElement="f_m_gMerged">
750
- <di:waypoint x="1113" y="120" />
751
- <di:waypoint x="1588" y="120" />
786
+ <di:waypoint x="1113" y="280" />
787
+ <di:waypoint x="1588" y="280" />
752
788
  <bpmndi:BPMNLabel>
753
- <dc:Bounds x="1379" y="98" width="49" height="14" />
789
+ <dc:Bounds x="1401" y="258" width="49" height="14" />
754
790
  </bpmndi:BPMNLabel>
755
791
  </bpmndi:BPMNEdge>
756
792
  <bpmndi:BPMNEdge id="BPMNEdge_f_m_done" bpmnElement="f_m_done">
757
- <di:waypoint x="1688" y="120" />
758
- <di:waypoint x="1820" y="120" />
793
+ <di:waypoint x="1688" y="280" />
794
+ <di:waypoint x="1795" y="280" />
759
795
  </bpmndi:BPMNEdge>
760
796
  <bpmndi:BPMNEdge id="BPMNEdge_f_ci_rearm" bpmnElement="f_ci_rearm">
761
- <di:waypoint x="1263" y="1105" />
762
- <di:waypoint x="1263" y="1140" />
763
- <di:waypoint x="402" y="1140" />
764
- <di:waypoint x="402" y="160" />
797
+ <di:waypoint x="1263" y="1265" />
798
+ <di:waypoint x="1263" y="1300" />
799
+ <di:waypoint x="402" y="1300" />
800
+ <di:waypoint x="402" y="320" />
765
801
  <bpmndi:BPMNLabel>
766
- <dc:Bounds x="789" y="1079" width="88" height="56" />
802
+ <dc:Bounds x="442" y="1239" width="88" height="56" />
767
803
  </bpmndi:BPMNLabel>
768
804
  </bpmndi:BPMNEdge>
769
805
  <bpmndi:BPMNEdge id="BPMNEdge_f_reb_rearm" bpmnElement="f_reb_rearm">
770
- <di:waypoint x="1263" y="1265" />
771
- <di:waypoint x="1263" y="1300" />
772
- <di:waypoint x="402" y="1300" />
773
- <di:waypoint x="402" y="160" />
806
+ <di:waypoint x="1263" y="1425" />
807
+ <di:waypoint x="1263" y="1460" />
808
+ <di:waypoint x="402" y="1460" />
809
+ <di:waypoint x="402" y="320" />
774
810
  <bpmndi:BPMNLabel>
775
- <dc:Bounds x="794" y="1253" width="78" height="42" />
811
+ <dc:Bounds x="794" y="1413" width="78" height="42" />
776
812
  </bpmndi:BPMNLabel>
777
813
  </bpmndi:BPMNEdge>
778
814
  <bpmndi:BPMNEdge id="BPMNEdge_f_ci_giveup" bpmnElement="f_ci_giveup">
779
- <di:waypoint x="913" y="920" />
780
- <di:waypoint x="1388" y="920" />
815
+ <di:waypoint x="913" y="1080" />
816
+ <di:waypoint x="1388" y="1080" />
781
817
  <bpmndi:BPMNLabel>
782
- <dc:Bounds x="1127" y="925" width="67" height="28" />
818
+ <dc:Bounds x="1127" y="1085" width="67" height="28" />
783
819
  </bpmndi:BPMNLabel>
784
820
  </bpmndi:BPMNEdge>
785
821
  <bpmndi:BPMNEdge id="BPMNEdge_f_reb_giveup" bpmnElement="f_reb_giveup">
786
- <di:waypoint x="913" y="280" />
787
- <di:waypoint x="933" y="280" />
788
- <di:waypoint x="933" y="305" />
789
- <di:waypoint x="1163" y="305" />
790
- <di:waypoint x="1163" y="900" />
791
- <di:waypoint x="1388" y="900" />
822
+ <di:waypoint x="913" y="440" />
823
+ <di:waypoint x="933" y="440" />
824
+ <di:waypoint x="933" y="465" />
825
+ <di:waypoint x="1163" y="465" />
826
+ <di:waypoint x="1163" y="1060" />
827
+ <di:waypoint x="1388" y="1060" />
792
828
  <bpmndi:BPMNLabel>
793
- <dc:Bounds x="1035" y="310" width="67" height="28" />
829
+ <dc:Bounds x="1035" y="432" width="67" height="28" />
794
830
  </bpmndi:BPMNLabel>
795
831
  </bpmndi:BPMNEdge>
796
832
  <bpmndi:BPMNEdge id="BPMNEdge_f_mr_giveup" bpmnElement="f_mr_giveup">
797
- <di:waypoint x="1288" y="600" />
798
- <di:waypoint x="1388" y="600" />
833
+ <di:waypoint x="1288" y="760" />
834
+ <di:waypoint x="1388" y="760" />
799
835
  <bpmndi:BPMNLabel>
800
- <dc:Bounds x="1305" y="605" width="67" height="28" />
836
+ <dc:Bounds x="1285" y="687" width="67" height="28" />
801
837
  </bpmndi:BPMNLabel>
802
838
  </bpmndi:BPMNEdge>
803
839
  <bpmndi:BPMNEdge id="BPMNEdge_f_eg_landed" bpmnElement="f_eg_landed">
804
- <di:waypoint x="1288" y="280" />
805
- <di:waypoint x="1420" y="280" />
840
+ <di:waypoint x="1288" y="440" />
841
+ <di:waypoint x="1420" y="440" />
806
842
  </bpmndi:BPMNEdge>
807
843
  <bpmndi:BPMNEdge id="BPMNEdge_f_m_landed" bpmnElement="f_m_landed">
808
- <di:waypoint x="1456" y="280" />
809
- <di:waypoint x="1638" y="280" />
810
- <di:waypoint x="1638" y="160" />
844
+ <di:waypoint x="1456" y="440" />
845
+ <di:waypoint x="1638" y="440" />
846
+ <di:waypoint x="1638" y="320" />
811
847
  </bpmndi:BPMNEdge>
812
848
  <bpmndi:BPMNEdge id="BPMNEdge_f_m_escC" bpmnElement="f_m_escC">
813
- <di:waypoint x="1488" y="920" />
814
- <di:waypoint x="1838" y="920" />
815
- <di:waypoint x="1838" y="640" />
849
+ <di:waypoint x="1488" y="1080" />
850
+ <di:waypoint x="1988" y="1080" />
851
+ <di:waypoint x="1988" y="160" />
816
852
  </bpmndi:BPMNEdge>
817
853
  <bpmndi:BPMNEdge id="BPMNEdge_f_m_escA" bpmnElement="f_m_escA">
818
- <di:waypoint x="1488" y="600" />
819
- <di:waypoint x="1613" y="600" />
854
+ <di:waypoint x="1488" y="760" />
855
+ <di:waypoint x="1851" y="760" />
856
+ <di:waypoint x="1851" y="145" />
857
+ <di:waypoint x="1858" y="145" />
858
+ <di:waypoint x="1858" y="120" />
859
+ <di:waypoint x="1838" y="120" />
820
860
  </bpmndi:BPMNEdge>
821
861
  <bpmndi:BPMNEdge id="BPMNEdge_f_m_escReenter" bpmnElement="f_m_escReenter">
822
- <di:waypoint x="1638" y="625" />
823
- <di:waypoint x="1638" y="660" />
824
- <di:waypoint x="402" y="660" />
825
- <di:waypoint x="402" y="160" />
862
+ <di:waypoint x="1813" y="95" />
863
+ <di:waypoint x="1813" y="60" />
864
+ <di:waypoint x="402" y="60" />
865
+ <di:waypoint x="402" y="240" />
826
866
  <bpmndi:BPMNLabel>
827
- <dc:Bounds x="1023" y="665" width="74" height="42" />
867
+ <dc:Bounds x="1071" y="13" width="74" height="42" />
828
868
  </bpmndi:BPMNLabel>
829
869
  </bpmndi:BPMNEdge>
830
870
  <bpmndi:BPMNEdge id="BPMNEdge_f_m_answerRecord" bpmnElement="f_m_answerRecord">
831
- <di:waypoint x="1888" y="600" />
832
- <di:waypoint x="1988" y="600" />
871
+ <di:waypoint x="2038" y="120" />
872
+ <di:waypoint x="2138" y="120" />
833
873
  </bpmndi:BPMNEdge>
834
874
  <bpmndi:BPMNEdge id="BPMNEdge_f_m_answer" bpmnElement="f_m_answer">
835
- <di:waypoint x="2038" y="640" />
836
- <di:waypoint x="2038" y="980" />
837
- <di:waypoint x="402" y="980" />
838
- <di:waypoint x="402" y="160" />
875
+ <di:waypoint x="2188" y="160" />
876
+ <di:waypoint x="2188" y="340" />
877
+ <di:waypoint x="402" y="340" />
878
+ <di:waypoint x="402" y="320" />
839
879
  </bpmndi:BPMNEdge>
840
880
  <bpmndi:BPMNEdge id="BPMNEdge_f_ci_escAttempt" bpmnElement="f_ci_escAttempt">
841
- <di:waypoint x="1263" y="1055" />
842
- <di:waypoint x="1263" y="1035" />
843
- <di:waypoint x="1908" y="1035" />
844
- <di:waypoint x="1908" y="555" />
845
- <di:waypoint x="1368" y="555" />
846
- <di:waypoint x="1368" y="580" />
847
- <di:waypoint x="1388" y="580" />
881
+ <di:waypoint x="1263" y="1215" />
882
+ <di:waypoint x="1263" y="1195" />
883
+ <di:waypoint x="843" y="1195" />
884
+ <di:waypoint x="843" y="402" />
885
+ <di:waypoint x="1218" y="402" />
886
+ <di:waypoint x="1218" y="478" />
887
+ <di:waypoint x="1368" y="478" />
888
+ <di:waypoint x="1368" y="740" />
889
+ <di:waypoint x="1388" y="740" />
848
890
  <bpmndi:BPMNLabel>
849
- <dc:Bounds x="1556" y="1013" width="60" height="14" />
891
+ <dc:Bounds x="1023" y="1173" width="60" height="14" />
850
892
  </bpmndi:BPMNLabel>
851
893
  </bpmndi:BPMNEdge>
852
894
  <bpmndi:BPMNEdge id="BPMNEdge_f_reb_waitDep" bpmnElement="f_reb_waitDep">
853
- <di:waypoint x="1288" y="1240" />
854
- <di:waypoint x="1438" y="1240" />
855
- <di:waypoint x="1438" y="1120" />
895
+ <di:waypoint x="1288" y="1400" />
896
+ <di:waypoint x="1438" y="1400" />
897
+ <di:waypoint x="1438" y="1280" />
856
898
  <bpmndi:BPMNLabel>
857
- <dc:Bounds x="1366" y="1245" width="75" height="28" />
899
+ <dc:Bounds x="1346" y="1405" width="75" height="28" />
858
900
  </bpmndi:BPMNLabel>
859
901
  </bpmndi:BPMNEdge>
860
902
  <bpmndi:BPMNEdge id="BPMNEdge_f_reb_escAttempt" bpmnElement="f_reb_escAttempt">
861
- <di:waypoint x="1288" y="1240" />
862
- <di:waypoint x="1308" y="1240" />
863
- <di:waypoint x="1308" y="1215" />
864
- <di:waypoint x="1908" y="1215" />
865
- <di:waypoint x="1908" y="555" />
866
- <di:waypoint x="1368" y="555" />
867
- <di:waypoint x="1368" y="580" />
868
- <di:waypoint x="1388" y="580" />
903
+ <di:waypoint x="1263" y="1375" />
904
+ <di:waypoint x="1263" y="1355" />
905
+ <di:waypoint x="843" y="1355" />
906
+ <di:waypoint x="843" y="402" />
907
+ <di:waypoint x="1218" y="402" />
908
+ <di:waypoint x="1218" y="478" />
909
+ <di:waypoint x="1368" y="478" />
910
+ <di:waypoint x="1368" y="740" />
911
+ <di:waypoint x="1388" y="740" />
869
912
  <bpmndi:BPMNLabel>
870
- <dc:Bounds x="1913" y="1104" width="64" height="42" />
913
+ <dc:Bounds x="774" y="1234" width="64" height="42" />
871
914
  </bpmndi:BPMNLabel>
872
915
  </bpmndi:BPMNEdge>
873
916
  <bpmndi:BPMNEdge id="BPMNEdge_f_reb_escConflict" bpmnElement="f_reb_escConflict">
874
- <di:waypoint x="1288" y="1240" />
875
- <di:waypoint x="1368" y="1240" />
876
- <di:waypoint x="1368" y="920" />
877
- <di:waypoint x="1388" y="920" />
917
+ <di:waypoint x="1288" y="1400" />
918
+ <di:waypoint x="1368" y="1400" />
919
+ <di:waypoint x="1368" y="1080" />
920
+ <di:waypoint x="1388" y="1080" />
878
921
  <bpmndi:BPMNLabel>
879
- <dc:Bounds x="1303" y="1086" width="60" height="28" />
922
+ <dc:Bounds x="1303" y="1246" width="60" height="28" />
880
923
  </bpmndi:BPMNLabel>
881
924
  </bpmndi:BPMNEdge>
882
925
  <bpmndi:BPMNEdge id="BPMNEdge_f_m_mCiFix" bpmnElement="f_m_mCiFix">
883
- <di:waypoint x="713" y="145" />
884
- <di:waypoint x="713" y="920" />
885
- <di:waypoint x="863" y="920" />
926
+ <di:waypoint x="713" y="305" />
927
+ <di:waypoint x="713" y="1080" />
928
+ <di:waypoint x="863" y="1080" />
886
929
  <bpmndi:BPMNLabel>
887
- <dc:Bounds x="718" y="598" width="60" height="42" />
930
+ <dc:Bounds x="718" y="758" width="60" height="42" />
888
931
  </bpmndi:BPMNLabel>
889
932
  </bpmndi:BPMNEdge>
890
933
  <bpmndi:BPMNEdge id="BPMNEdge_f_m_mRebase" bpmnElement="f_m_mRebase">
891
- <di:waypoint x="713" y="145" />
892
- <di:waypoint x="713" y="280" />
893
- <di:waypoint x="863" y="280" />
934
+ <di:waypoint x="713" y="305" />
935
+ <di:waypoint x="713" y="440" />
936
+ <di:waypoint x="863" y="440" />
894
937
  <bpmndi:BPMNLabel>
895
- <dc:Bounds x="758" y="258" width="60" height="14" />
938
+ <dc:Bounds x="758" y="418" width="60" height="14" />
896
939
  </bpmndi:BPMNLabel>
897
940
  </bpmndi:BPMNEdge>
898
941
  <bpmndi:BPMNEdge id="BPMNEdge_f_m_mBlocked" bpmnElement="f_m_mBlocked">
899
- <di:waypoint x="713" y="145" />
900
- <di:waypoint x="713" y="318" />
901
- <di:waypoint x="933" y="318" />
902
- <di:waypoint x="933" y="920" />
903
- <di:waypoint x="1388" y="920" />
942
+ <di:waypoint x="713" y="305" />
943
+ <di:waypoint x="713" y="478" />
944
+ <di:waypoint x="933" y="478" />
945
+ <di:waypoint x="933" y="1080" />
946
+ <di:waypoint x="1388" y="1080" />
904
947
  <bpmndi:BPMNLabel>
905
- <dc:Bounds x="781" y="326" width="85" height="14" />
948
+ <dc:Bounds x="741" y="456" width="85" height="14" />
906
949
  </bpmndi:BPMNLabel>
907
950
  </bpmndi:BPMNEdge>
908
951
  <bpmndi:BPMNEdge id="BPMNEdge_f_ci_go" bpmnElement="f_ci_go">
909
- <di:waypoint x="888" y="945" />
910
- <di:waypoint x="888" y="1080" />
911
- <di:waypoint x="1038" y="1080" />
952
+ <di:waypoint x="888" y="1105" />
953
+ <di:waypoint x="888" y="1240" />
954
+ <di:waypoint x="1038" y="1240" />
912
955
  <bpmndi:BPMNLabel>
913
- <dc:Bounds x="893" y="999" width="49" height="28" />
956
+ <dc:Bounds x="893" y="1159" width="49" height="28" />
914
957
  </bpmndi:BPMNLabel>
915
958
  </bpmndi:BPMNEdge>
916
959
  <bpmndi:BPMNEdge id="BPMNEdge_f_reb_go" bpmnElement="f_reb_go">
917
- <di:waypoint x="913" y="280" />
918
- <di:waypoint x="1018" y="280" />
919
- <di:waypoint x="1018" y="1240" />
920
- <di:waypoint x="1038" y="1240" />
960
+ <di:waypoint x="913" y="440" />
961
+ <di:waypoint x="1018" y="440" />
962
+ <di:waypoint x="1018" y="1400" />
963
+ <di:waypoint x="1038" y="1400" />
921
964
  <bpmndi:BPMNLabel>
922
- <dc:Bounds x="1023" y="746" width="49" height="28" />
965
+ <dc:Bounds x="1023" y="906" width="49" height="28" />
923
966
  </bpmndi:BPMNLabel>
924
967
  </bpmndi:BPMNEdge>
925
968
  <bpmndi:BPMNEdge id="BPMNEdge_f_m_gQueued" bpmnElement="f_m_gQueued">
926
- <di:waypoint x="1088" y="145" />
927
- <di:waypoint x="1088" y="280" />
928
- <di:waypoint x="1238" y="280" />
969
+ <di:waypoint x="1113" y="280" />
970
+ <di:waypoint x="1263" y="280" />
971
+ <di:waypoint x="1263" y="415" />
929
972
  <bpmndi:BPMNLabel>
930
- <dc:Bounds x="1093" y="206" width="46" height="14" />
973
+ <dc:Bounds x="1268" y="361" width="46" height="14" />
931
974
  </bpmndi:BPMNLabel>
932
975
  </bpmndi:BPMNEdge>
933
976
  <bpmndi:BPMNEdge id="BPMNEdge_f_m_gRetry" bpmnElement="f_m_gRetry">
934
- <di:waypoint x="1113" y="120" />
935
- <di:waypoint x="1218" y="120" />
936
- <di:waypoint x="1218" y="600" />
937
- <di:waypoint x="1238" y="600" />
977
+ <di:waypoint x="1113" y="280" />
978
+ <di:waypoint x="1218" y="280" />
979
+ <di:waypoint x="1218" y="760" />
980
+ <di:waypoint x="1238" y="760" />
938
981
  <bpmndi:BPMNLabel>
939
- <dc:Bounds x="1135" y="246" width="78" height="28" />
982
+ <dc:Bounds x="1135" y="419" width="78" height="28" />
940
983
  </bpmndi:BPMNLabel>
941
984
  </bpmndi:BPMNEdge>
942
985
  <bpmndi:BPMNEdge id="BPMNEdge_f_eg_evicted" bpmnElement="f_eg_evicted">
943
- <di:waypoint x="1263" y="305" />
944
- <di:waypoint x="1263" y="440" />
945
- <di:waypoint x="1420" y="440" />
986
+ <di:waypoint x="1288" y="440" />
987
+ <di:waypoint x="1400" y="440" />
988
+ <di:waypoint x="1400" y="600" />
989
+ <di:waypoint x="1420" y="600" />
990
+ </bpmndi:BPMNEdge>
991
+ <bpmndi:BPMNEdge id="BPMNEdge_f_eg_landedTimeout" bpmnElement="f_eg_landedTimeout">
992
+ <di:waypoint x="1288" y="440" />
993
+ <di:waypoint x="1308" y="440" />
994
+ <di:waypoint x="1308" y="415" />
995
+ <di:waypoint x="1420" y="415" />
996
+ <di:waypoint x="1420" y="478" />
997
+ <di:waypoint x="1858" y="478" />
998
+ <di:waypoint x="1858" y="235" />
999
+ <di:waypoint x="1420" y="235" />
1000
+ <di:waypoint x="1420" y="158" />
1001
+ <di:waypoint x="1438" y="158" />
1002
+ <di:waypoint x="1438" y="138" />
946
1003
  </bpmndi:BPMNEdge>
947
1004
  <bpmndi:BPMNEdge id="BPMNEdge_f_m_gBlocked" bpmnElement="f_m_gBlocked">
948
- <di:waypoint x="1088" y="95" />
949
- <di:waypoint x="1088" y="75" />
950
- <di:waypoint x="1876" y="75" />
951
- <di:waypoint x="1876" y="478" />
952
- <di:waypoint x="1368" y="478" />
953
- <di:waypoint x="1368" y="580" />
954
- <di:waypoint x="1388" y="580" />
1005
+ <di:waypoint x="1113" y="280" />
1006
+ <di:waypoint x="1133" y="280" />
1007
+ <di:waypoint x="1133" y="305" />
1008
+ <di:waypoint x="1218" y="305" />
1009
+ <di:waypoint x="1218" y="805" />
1010
+ <di:waypoint x="1368" y="805" />
1011
+ <di:waypoint x="1368" y="780" />
1012
+ <di:waypoint x="1388" y="780" />
955
1013
  <bpmndi:BPMNLabel>
956
- <dc:Bounds x="1577" y="456" width="53" height="14" />
1014
+ <dc:Bounds x="1309" y="783" width="53" height="14" />
957
1015
  </bpmndi:BPMNLabel>
958
1016
  </bpmndi:BPMNEdge>
959
1017
  <bpmndi:BPMNEdge id="BPMNEdge_f_m_gAbandoned" bpmnElement="f_m_gAbandoned">
960
- <di:waypoint x="1088" y="95" />
961
- <di:waypoint x="1088" y="75" />
962
- <di:waypoint x="1876" y="75" />
963
- <di:waypoint x="1876" y="478" />
964
- <di:waypoint x="1768" y="478" />
965
- <di:waypoint x="1768" y="760" />
966
- <di:waypoint x="1281" y="760" />
967
- <bpmndi:BPMNLabel>
968
- <dc:Bounds x="1681" y="605" width="82" height="28" />
1018
+ <di:waypoint x="1113" y="280" />
1019
+ <di:waypoint x="1133" y="280" />
1020
+ <di:waypoint x="1133" y="305" />
1021
+ <di:waypoint x="1225" y="305" />
1022
+ <di:waypoint x="1225" y="805" />
1023
+ <di:waypoint x="1245" y="805" />
1024
+ <di:waypoint x="1245" y="882" />
1025
+ <di:waypoint x="1263" y="882" />
1026
+ <di:waypoint x="1263" y="902" />
1027
+ <bpmndi:BPMNLabel>
1028
+ <dc:Bounds x="1230" y="541" width="82" height="28" />
969
1029
  </bpmndi:BPMNLabel>
970
1030
  </bpmndi:BPMNEdge>
971
1031
  <bpmndi:BPMNEdge id="BPMNEdge_f_ci_waitDep" bpmnElement="f_ci_waitDep">
972
- <di:waypoint x="1288" y="1080" />
973
- <di:waypoint x="1388" y="1080" />
1032
+ <di:waypoint x="1288" y="1240" />
1033
+ <di:waypoint x="1388" y="1240" />
974
1034
  <bpmndi:BPMNLabel>
975
- <dc:Bounds x="1281" y="987" width="75" height="28" />
1035
+ <dc:Bounds x="1281" y="1167" width="75" height="28" />
976
1036
  </bpmndi:BPMNLabel>
977
1037
  </bpmndi:BPMNEdge>
978
1038
  <bpmndi:BPMNEdge id="BPMNEdge_f_ci_spdone" bpmnElement="f_ci_spdone">
979
- <di:waypoint x="1138" y="1080" />
980
- <di:waypoint x="1238" y="1080" />
981
- </bpmndi:BPMNEdge>
982
- <bpmndi:BPMNEdge id="BPMNEdge_f_reb_spdone" bpmnElement="f_reb_spdone">
983
1039
  <di:waypoint x="1138" y="1240" />
984
1040
  <di:waypoint x="1238" y="1240" />
985
1041
  </bpmndi:BPMNEdge>
1042
+ <bpmndi:BPMNEdge id="BPMNEdge_f_reb_spdone" bpmnElement="f_reb_spdone">
1043
+ <di:waypoint x="1138" y="1400" />
1044
+ <di:waypoint x="1238" y="1400" />
1045
+ </bpmndi:BPMNEdge>
1046
+ <bpmndi:BPMNEdge id="BPMNEdge_f_m_landedStalled" bpmnElement="f_m_landedStalled">
1047
+ <di:waypoint x="1456" y="120" />
1048
+ <di:waypoint x="1588" y="120" />
1049
+ </bpmndi:BPMNEdge>
1050
+ <bpmndi:BPMNEdge id="BPMNEdge_f_m_escLanded" bpmnElement="f_m_escLanded">
1051
+ <di:waypoint x="1688" y="120" />
1052
+ <di:waypoint x="1788" y="120" />
1053
+ </bpmndi:BPMNEdge>
986
1054
  <bpmndi:BPMNEdge id="BPMNEdge_f_m_escWait" bpmnElement="f_m_escWait">
987
- <di:waypoint x="1663" y="600" />
988
- <di:waypoint x="1788" y="600" />
1055
+ <di:waypoint x="1838" y="120" />
1056
+ <di:waypoint x="1938" y="120" />
989
1057
  </bpmndi:BPMNEdge>
990
1058
  <bpmndi:BPMNEdge id="BPMNEdge_f_ci_recheck" bpmnElement="f_ci_recheck">
991
- <di:waypoint x="1263" y="1105" />
992
- <di:waypoint x="1263" y="1140" />
993
- <di:waypoint x="570" y="1140" />
994
- <di:waypoint x="570" y="138" />
1059
+ <di:waypoint x="1263" y="1265" />
1060
+ <di:waypoint x="1263" y="1300" />
1061
+ <di:waypoint x="570" y="1300" />
1062
+ <di:waypoint x="570" y="298" />
995
1063
  <bpmndi:BPMNLabel>
996
- <dc:Bounds x="575" y="605" width="85" height="28" />
1064
+ <dc:Bounds x="575" y="765" width="85" height="28" />
997
1065
  </bpmndi:BPMNLabel>
998
1066
  </bpmndi:BPMNEdge>
999
1067
  <bpmndi:BPMNEdge id="BPMNEdge_f_dep_rewait" bpmnElement="f_dep_rewait">
1000
- <di:waypoint x="1438" y="1120" />
1001
- <di:waypoint x="1438" y="1140" />
1002
- <di:waypoint x="234" y="1140" />
1003
- <di:waypoint x="234" y="138" />
1068
+ <di:waypoint x="1438" y="1280" />
1069
+ <di:waypoint x="1438" y="1480" />
1070
+ <di:waypoint x="234" y="1480" />
1071
+ <di:waypoint x="234" y="298" />
1004
1072
  </bpmndi:BPMNEdge>
1005
1073
  <bpmndi:BPMNEdge id="BPMNEdge_f_mr_go" bpmnElement="f_mr_go">
1006
- <di:waypoint x="1263" y="625" />
1007
- <di:waypoint x="1263" y="645" />
1008
- <di:waypoint x="402" y="645" />
1009
- <di:waypoint x="402" y="160" />
1074
+ <di:waypoint x="1263" y="785" />
1075
+ <di:waypoint x="1263" y="805" />
1076
+ <di:waypoint x="402" y="805" />
1077
+ <di:waypoint x="402" y="320" />
1010
1078
  <bpmndi:BPMNLabel>
1011
- <dc:Bounds x="808" y="612" width="49" height="28" />
1079
+ <dc:Bounds x="786" y="810" width="49" height="28" />
1012
1080
  </bpmndi:BPMNLabel>
1013
1081
  </bpmndi:BPMNEdge>
1014
1082
  <bpmndi:BPMNEdge id="BPMNEdge_f_m_evicted" bpmnElement="f_m_evicted">
1015
- <di:waypoint x="1438" y="458" />
1016
- <di:waypoint x="1438" y="478" />
1017
- <di:waypoint x="402" y="478" />
1018
- <di:waypoint x="402" y="160" />
1083
+ <di:waypoint x="1438" y="618" />
1084
+ <di:waypoint x="1438" y="638" />
1085
+ <di:waypoint x="402" y="638" />
1086
+ <di:waypoint x="402" y="320" />
1019
1087
  </bpmndi:BPMNEdge>
1020
1088
  </bpmndi:BPMNPlane>
1021
1089
  </bpmndi:BPMNDiagram>