Auch wenn ein Modell Verbindungen zwischen parallelen Zweigen oder Sprünge in einen Zweig hinein enthält, läuft
keine Vorwärtskante durchs Innere eines Elements.
Betroffen
Bereich: Konverter md_to_bpmn.py
Dateien (falls bekannt): orthogonal_points(), ggf. compute_layers() / layout_vertical() / layout_lanes()
Ändert Markdown-Syntax oder Ablageformat der Prozessbibliothek? nein – .bpmn können sich ändern
Fachlicher Hintergrund
Gefunden bei #12 mit einem Belastungstest: jede mögliche zusätzliche Rückwärtsverbindung in zwei kleinen
Testmodellen, mit und ohne Lanes (126 Fälle). In 21 Fällen läuft eine Vorwärtskante durch ein Element, auf main vor #12 genauso wie danach. Typisch sind zwei Lagen:
Eine Verbindung zwischen Geschwisterzweigen (z. B. „Mitte → Links“) oder ein Sprung von hinten in einen Zweig
(z. B. „Danach → Rechts“) macht die Zielaufgabe zu einem späteren Schritt. Sie rückt eine Ebene tiefer.
Die Kante vom verzweigenden Gateway zu dieser Aufgabe läuft dann gerade durch die Aufgabe, die dazwischen steht. orthogonal_points() kennt die übrigen Elemente nicht.
Nachstellbar, ohne Lanes:
S1 Start: A
-> S2
S2 Gateway XOR: W?
a -> S3
b -> S4
c -> S5
S3 Task: Links
-> S6
S4 Task: Mitte
-> S6
S5 Task: Rechts
-> S6
S6 Gateway XOR: Z
-> S7
S7 Task: Danach
zurück -> S5
-> S8
S8 Ende: E
Hier läuft die Kante S2 → S5 (Flow_4) durch S3. Verfahren des Belastungstests, als Ausgangspunkt für einen
parametrisierten Test: In ein kleines Modell je eine zusätzliche Kante zurück -> <früherer Schritt> einfügen, für
alle Paare, jeweils ohne Lanes, mit einer Lane und mit zwei abwechselnden Lanes. Dann kreuzungen() aufrufen.
Fachlich sind solche Querverbindungen selten, sie kommen aber bei Nachforderungen und Korrekturschleifen vor.
Abnahmekriterien
Das Beispiel oben erzeugt keine Kante durch ein Element (Test mit kreuzungen() aus tests/test_referenzmodelle.py)
Ein Test über die Varianten des Belastungstests: keine Kreuzung durch Vorwärtskanten
Test je neuem Verhalten vorhanden (Konverter, Skripte), python -m pytest -q grün
PICTURE-Import: nötig, falls sich .bpmn der Beispiele ändern
Nicht Teil dieses Issues
Rücksprungkanten (#12, erledigt); Nachrichtenflüsse (#13); ein allgemeines Layoutverfahren mit Hindernissuche,
falls sich die Fälle mit Regeln lösen lassen.
## Ziel
Auch wenn ein Modell Verbindungen zwischen parallelen Zweigen oder Sprünge in einen Zweig hinein enthält, läuft
keine Vorwärtskante durchs Innere eines Elements.
## Betroffen
Bereich: Konverter `md_to_bpmn.py`
Dateien (falls bekannt): `orthogonal_points()`, ggf. `compute_layers()` / `layout_vertical()` / `layout_lanes()`
Ändert Markdown-Syntax oder Ablageformat der Prozessbibliothek? nein – `.bpmn` können sich ändern
## Fachlicher Hintergrund
Gefunden bei #12 mit einem Belastungstest: jede mögliche zusätzliche Rückwärtsverbindung in zwei kleinen
Testmodellen, mit und ohne Lanes (126 Fälle). In 21 Fällen läuft eine **Vorwärtskante** durch ein Element, auf
`main` vor #12 genauso wie danach. Typisch sind zwei Lagen:
- Eine Verbindung zwischen Geschwisterzweigen (z. B. „Mitte → Links“) oder ein Sprung von hinten in einen Zweig
(z. B. „Danach → Rechts“) macht die Zielaufgabe zu einem späteren Schritt. Sie rückt eine Ebene tiefer.
- Die Kante vom verzweigenden Gateway zu dieser Aufgabe läuft dann gerade durch die Aufgabe, die dazwischen steht.
`orthogonal_points()` kennt die übrigen Elemente nicht.
Nachstellbar, ohne Lanes:
```
S1 Start: A
-> S2
S2 Gateway XOR: W?
a -> S3
b -> S4
c -> S5
S3 Task: Links
-> S6
S4 Task: Mitte
-> S6
S5 Task: Rechts
-> S6
S6 Gateway XOR: Z
-> S7
S7 Task: Danach
zurück -> S5
-> S8
S8 Ende: E
```
Hier läuft die Kante S2 → S5 (`Flow_4`) durch S3. Verfahren des Belastungstests, als Ausgangspunkt für einen
parametrisierten Test: In ein kleines Modell je eine zusätzliche Kante `zurück -> <früherer Schritt>` einfügen, für
alle Paare, jeweils ohne Lanes, mit einer Lane und mit zwei abwechselnden Lanes. Dann `kreuzungen()` aufrufen.
Fachlich sind solche Querverbindungen selten, sie kommen aber bei Nachforderungen und Korrekturschleifen vor.
## Abnahmekriterien
- [ ] Das Beispiel oben erzeugt keine Kante durch ein Element (Test mit `kreuzungen()` aus
`tests/test_referenzmodelle.py`)
- [ ] Ein Test über die Varianten des Belastungstests: keine Kreuzung durch Vorwärtskanten
- [ ] Test je neuem Verhalten vorhanden (Konverter, Skripte), `python -m pytest -q` grün
- [ ] PICTURE-Import: nötig, falls sich `.bpmn` der Beispiele ändern
## Nicht Teil dieses Issues
Rücksprungkanten (#12, erledigt); Nachrichtenflüsse (#13); ein allgemeines Layoutverfahren mit Hindernissuche,
falls sich die Fälle mit Regeln lösen lassen.
Ergänzung aus #23: Seit dem Stub am Aufgaben-Ende (Kanten zwischen Aufgabe und Gateway) haben sich im
Belastungstest vier Fälle dieser Art verschoben. Die Kanten gehen jetzt zuerst senkrecht und dann waagrecht statt
umgekehrt und treffen dabei die verrutschte Aufgabe:
drei Zweige, S4 -> S3, eine Lane: neu Flow_7 → Task_S3
drei Zweige, S5 -> S3, eine Lane: neu Flow_6 → Task_S3
drei Zweige, S5 -> S4, ohne Lanes: neu Flow_5 → Task_S4
parallel, S5 -> S4, zwei Lanes: neu Flow_7 → Task_S4 (S5 → Gateway S6 läuft auf Höhe von S6 durch S4)
In zwei anderen Fällen (S4 -> S3 bzw. S5 -> S3, zwei Lanes) verschwindet dafür eine Kreuzung. Kern bleibt, dass orthogonal_points() die übrigen Elemente nicht kennt. Welche der beiden gleichwertigen Reihenfolgen, erst senkrecht
oder erst waagrecht, frei ist, lässt sich nur mit Hinderniskenntnis entscheiden. Das gehört zu diesem Issue.
Ergänzung aus #23: Seit dem Stub am Aufgaben-Ende (Kanten zwischen Aufgabe und Gateway) haben sich im
Belastungstest vier Fälle dieser Art verschoben. Die Kanten gehen jetzt zuerst senkrecht und dann waagrecht statt
umgekehrt und treffen dabei die verrutschte Aufgabe:
- drei Zweige, `S4 -> S3`, eine Lane: neu `Flow_7` → `Task_S3`
- drei Zweige, `S5 -> S3`, eine Lane: neu `Flow_6` → `Task_S3`
- drei Zweige, `S5 -> S4`, ohne Lanes: neu `Flow_5` → `Task_S4`
- parallel, `S5 -> S4`, zwei Lanes: neu `Flow_7` → `Task_S4` (S5 → Gateway S6 läuft auf Höhe von S6 durch S4)
In zwei anderen Fällen (`S4 -> S3` bzw. `S5 -> S3`, zwei Lanes) verschwindet dafür eine Kreuzung. Kern bleibt, dass
`orthogonal_points()` die übrigen Elemente nicht kennt. Welche der beiden gleichwertigen Reihenfolgen, erst senkrecht
oder erst waagrecht, frei ist, lässt sich nur mit Hinderniskenntnis entscheiden. Das gehört zu diesem Issue.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Ziel
Auch wenn ein Modell Verbindungen zwischen parallelen Zweigen oder Sprünge in einen Zweig hinein enthält, läuft
keine Vorwärtskante durchs Innere eines Elements.
Betroffen
Bereich: Konverter
md_to_bpmn.pyDateien (falls bekannt):
orthogonal_points(), ggf.compute_layers()/layout_vertical()/layout_lanes()Ändert Markdown-Syntax oder Ablageformat der Prozessbibliothek? nein –
.bpmnkönnen sich ändernFachlicher Hintergrund
Gefunden bei #12 mit einem Belastungstest: jede mögliche zusätzliche Rückwärtsverbindung in zwei kleinen
Testmodellen, mit und ohne Lanes (126 Fälle). In 21 Fällen läuft eine Vorwärtskante durch ein Element, auf
mainvor #12 genauso wie danach. Typisch sind zwei Lagen:(z. B. „Danach → Rechts“) macht die Zielaufgabe zu einem späteren Schritt. Sie rückt eine Ebene tiefer.
orthogonal_points()kennt die übrigen Elemente nicht.Nachstellbar, ohne Lanes:
Hier läuft die Kante S2 → S5 (
Flow_4) durch S3. Verfahren des Belastungstests, als Ausgangspunkt für einenparametrisierten Test: In ein kleines Modell je eine zusätzliche Kante
zurück -> <früherer Schritt>einfügen, füralle Paare, jeweils ohne Lanes, mit einer Lane und mit zwei abwechselnden Lanes. Dann
kreuzungen()aufrufen.Fachlich sind solche Querverbindungen selten, sie kommen aber bei Nachforderungen und Korrekturschleifen vor.
Abnahmekriterien
kreuzungen()austests/test_referenzmodelle.py)python -m pytest -qgrün.bpmnder Beispiele ändernNicht Teil dieses Issues
Rücksprungkanten (#12, erledigt); Nachrichtenflüsse (#13); ein allgemeines Layoutverfahren mit Hindernissuche,
falls sich die Fälle mit Regeln lösen lassen.
Ergänzung aus #23: Seit dem Stub am Aufgaben-Ende (Kanten zwischen Aufgabe und Gateway) haben sich im
Belastungstest vier Fälle dieser Art verschoben. Die Kanten gehen jetzt zuerst senkrecht und dann waagrecht statt
umgekehrt und treffen dabei die verrutschte Aufgabe:
S4 -> S3, eine Lane: neuFlow_7→Task_S3S5 -> S3, eine Lane: neuFlow_6→Task_S3S5 -> S4, ohne Lanes: neuFlow_5→Task_S4S5 -> S4, zwei Lanes: neuFlow_7→Task_S4(S5 → Gateway S6 läuft auf Höhe von S6 durch S4)In zwei anderen Fällen (
S4 -> S3bzw.S5 -> S3, zwei Lanes) verschwindet dafür eine Kreuzung. Kern bleibt, dassorthogonal_points()die übrigen Elemente nicht kennt. Welche der beiden gleichwertigen Reihenfolgen, erst senkrechtoder erst waagrecht, frei ist, lässt sich nur mit Hinderniskenntnis entscheiden. Das gehört zu diesem Issue.