Vorwärtskanten weichen Elementen über freie Linien aus (#22) #26

Merged
Daniel merged 1 commits from bugfix/22-vorwaertskanten-querverbindung into main 2026-09-25 17:40:41 +00:00
Owner

Was

Läuft der Standardweg einer Vorwärtskante durch ein fremdes Element, sucht der Konverter einen rechtwinkligen Umweg
über freie Linien. Saubere Kanten bleiben unverändert. Der Belastungstest aus #12 ist jetzt ein dauerhafter Test.
Closes #22

Wie geprüft

  • python -m pytest -q: 253 passed, 1 skipped. Das „skipped“ ist weiterhin die leere Parameterliste der
    bekannten Kreuzungen
  • Neue Tests vor der Umsetzung: 21 rot (20 Belastungsvarianten, dazu das Beispiel aus dem Issue), jetzt grün
  • python scripts/pruefe_umlaute.py: GRÜN: 0 Fund/e in 12 Datei(en).
  • python scripts/pruefe_prozesse.py: GRÜN: 0 Befund/e, 0 Prozess(e), 3 Beispiel(e). Die Beispiel-.bpmn sind
    unverändert
    , byte-gleich; der Umweg greift dort nie
  • Belastungstest (126 Fälle): Kreuzungen 24 → 0, schräge Anschlüsse bleiben bei 0. 23 Kanten werden umgeleitet,
    jede mit 3 oder 4 Zwischenpunkten, also Stub plus ein bzw. zwei Knicke. In keinem Fall fehlt ein freier Weg
  • Beispiel aus dem Issue, Kante S2 → S5: aus dem Westpunkt des Gateways nach links, 15 neben S3 hinunter und von oben
    in S5. Vorher lief sie durch S3
  • Laufzeit der Testsuite: rund 3 s
  • PICTURE-Import: nicht nötig. Das Abnahmekriterium verlangt ihn nur, wenn sich .bpmn der Beispiele ändern

Änderungen an Syntax und Ablageformat

keine. Die Ausgabe ändert sich nur bei Kanten, die bisher durch ein Element liefen. Modelle der Prozessbibliothek:
keine vorhanden.

Übergabenotiz

Aufgabe: #22: Auch bei Querverbindungen zwischen Zweigen läuft keine Vorwärtskante durch ein Element.
Stand: fertig
Geändert:

  • .agents/skills/sn-bpmn/md_to_bpmn.py:
    • neu umweg_points() mit _freie_linien() und _kehrt_um(), Konstante UMWEG_ABSTAND = 15
    • build_bpmn() prüft den Standardweg gegen element_boxen (alle Elemente außer Gruppen und Anmerkungen) und
      nimmt nur bei einer Kreuzung den Umweg
  • tests/test_referenzmodelle.py:
    • BELASTUNGSMODELLE, _belastungsfaelle()
    • Test über 126 Varianten
    • Test für das Beispiel aus dem Issue
  • .agents/skills/sn-bpmn/test_md_to_bpmn.py: zwei Einzeltests für umweg_points() (Hindernis umgehen, None
    ohne freien Weg)
  • docs/wissen/fallstricke.md, docs/status/STATUS.md

Nachweis: pytest: 253 passed, 1 skipped. PICTURE-Import nicht nötig, weil sich die Beispiele nicht ändern
Entscheidungen/Annahmen:

  • Der Umweg greift nur im Notfall. Damit bleiben alle heute sauberen Kanten byte-gleich, und kein bestehendes Modell
    der Prozessbibliothek müsste neu erzeugt werden
  • Hindernisse werden als Rechteck geprüft, bei Rauten und Kreisen also mit ihrer Umrandung. Das ist etwas
    vorsichtiger als nötig
  • Die zweite Suchstufe (zwei Zwischenknicke) ist bei vielen Elementen teurer. Sie läuft nur, wenn die erste Stufe
    keinen Weg findet. Im Belastungstest reichte in 7 Fällen ein Knick, 16 brauchten zwei
  • Die vier Fälle aus dem Kommentar zu #23 sind enthalten und behoben

Offen / nächste Schritte: keine offenen Konverter-Issues. Vorschlag: einen ersten echten Prozess in die
Prozessbibliothek aufnehmen, als weiteren Prüfstein für die Regeln
Wissensbasis: fallstricke.md: neuer Eintrag „Vorwärtskanten kennen die übrigen Elemente nur im Notfall“.
STATUS.md: Erledigt
Kontext für die nächste Sitzung: md_to_bpmn.py umweg_points(), tests/test_referenzmodelle.py
(Belastungstest)

Checkliste

  • Nur Änderungen zum Issue
  • Keine Debug-print, kein auskommentierter Code
  • Keine personenbezogenen Daten, keine internen Originalunterlagen
  • Doku des Skills nachgezogen: nicht betroffen (Syntax unverändert)
  • Wissensbasis nachgezogen (fallstricke.md, STATUS.md)

🤖 Generated with Claude Code

## Was Läuft der Standardweg einer Vorwärtskante durch ein fremdes Element, sucht der Konverter einen rechtwinkligen Umweg über freie Linien. Saubere Kanten bleiben unverändert. Der Belastungstest aus #12 ist jetzt ein dauerhafter Test. Closes #22 ## Wie geprüft - `python -m pytest -q`: `253 passed, 1 skipped`. Das „skipped“ ist weiterhin die leere Parameterliste der bekannten Kreuzungen - Neue Tests vor der Umsetzung: 21 rot (20 Belastungsvarianten, dazu das Beispiel aus dem Issue), jetzt grün - `python scripts/pruefe_umlaute.py`: `GRÜN: 0 Fund/e in 12 Datei(en).` - `python scripts/pruefe_prozesse.py`: `GRÜN: 0 Befund/e, 0 Prozess(e), 3 Beispiel(e).` **Die Beispiel-`.bpmn` sind unverändert**, byte-gleich; der Umweg greift dort nie - Belastungstest (126 Fälle): Kreuzungen 24 → 0, schräge Anschlüsse bleiben bei 0. 23 Kanten werden umgeleitet, jede mit 3 oder 4 Zwischenpunkten, also Stub plus ein bzw. zwei Knicke. In keinem Fall fehlt ein freier Weg - Beispiel aus dem Issue, Kante S2 → S5: aus dem Westpunkt des Gateways nach links, 15 neben S3 hinunter und von oben in S5. Vorher lief sie durch S3 - Laufzeit der Testsuite: rund 3 s - PICTURE-Import: nicht nötig. Das Abnahmekriterium verlangt ihn nur, wenn sich `.bpmn` der Beispiele ändern ## Änderungen an Syntax und Ablageformat keine. Die Ausgabe ändert sich nur bei Kanten, die bisher durch ein Element liefen. Modelle der Prozessbibliothek: keine vorhanden. ## Übergabenotiz **Aufgabe:** #22: Auch bei Querverbindungen zwischen Zweigen läuft keine Vorwärtskante durch ein Element. **Stand:** fertig **Geändert:** - `.agents/skills/sn-bpmn/md_to_bpmn.py`: - neu `umweg_points()` mit `_freie_linien()` und `_kehrt_um()`, Konstante `UMWEG_ABSTAND = 15` - `build_bpmn()` prüft den Standardweg gegen `element_boxen` (alle Elemente außer Gruppen und Anmerkungen) und nimmt nur bei einer Kreuzung den Umweg - `tests/test_referenzmodelle.py`: - `BELASTUNGSMODELLE`, `_belastungsfaelle()` - Test über 126 Varianten - Test für das Beispiel aus dem Issue - `.agents/skills/sn-bpmn/test_md_to_bpmn.py`: zwei Einzeltests für `umweg_points()` (Hindernis umgehen, `None` ohne freien Weg) - `docs/wissen/fallstricke.md`, `docs/status/STATUS.md` **Nachweis:** `pytest`: `253 passed, 1 skipped`. PICTURE-Import nicht nötig, weil sich die Beispiele nicht ändern **Entscheidungen/Annahmen:** - Der Umweg greift nur im Notfall. Damit bleiben alle heute sauberen Kanten byte-gleich, und kein bestehendes Modell der Prozessbibliothek müsste neu erzeugt werden - Hindernisse werden als Rechteck geprüft, bei Rauten und Kreisen also mit ihrer Umrandung. Das ist etwas vorsichtiger als nötig - Die zweite Suchstufe (zwei Zwischenknicke) ist bei vielen Elementen teurer. Sie läuft nur, wenn die erste Stufe keinen Weg findet. Im Belastungstest reichte in 7 Fällen ein Knick, 16 brauchten zwei - Die vier Fälle aus dem Kommentar zu #23 sind enthalten und behoben **Offen / nächste Schritte:** keine offenen Konverter-Issues. Vorschlag: einen ersten echten Prozess in die Prozessbibliothek aufnehmen, als weiteren Prüfstein für die Regeln **Wissensbasis:** `fallstricke.md`: neuer Eintrag „Vorwärtskanten kennen die übrigen Elemente nur im Notfall“. `STATUS.md`: Erledigt **Kontext für die nächste Sitzung:** `md_to_bpmn.py` `umweg_points()`, `tests/test_referenzmodelle.py` (Belastungstest) ## Checkliste - [x] Nur Änderungen zum Issue - [x] Keine Debug-`print`, kein auskommentierter Code - [x] Keine personenbezogenen Daten, keine internen Originalunterlagen - [x] Doku des Skills nachgezogen: nicht betroffen (Syntax unverändert) - [x] Wissensbasis nachgezogen (`fallstricke.md`, `STATUS.md`) 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Daniel added 1 commit 2026-09-25 17:40:33 +00:00
- build_bpmn() prüft jeden Standardweg einer Vorwärtskante gegen alle
  fremden Elemente. Nur bei einer Kreuzung sucht umweg_points() einen
  rechtwinkligen Weg von Stub zu Stub über freie Linien (Lückenmitten
  und 15 neben jedem Element), erst mit einem, dann mit zwei
  Zwischenknicken; der kürzeste gewinnt. Saubere Kanten bleiben
  byte-gleich, die Beispiel-.bpmn ändern sich nicht.
- Belastungstest aus #12 als dauerhafter Test (126 Varianten: keine
  Kreuzung, rechtwinklige Anschlüsse), Test für das Beispiel aus dem
  Issue und zwei Einzeltests für umweg_points().
- Im Belastungstest werden 23 Kanten umgeleitet (3 bis 4
  Zwischenpunkte); Kreuzungen vorher 24, jetzt 0.
- Tests: python -m pytest -q -> 253 bestanden, 1 übersprungen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Daniel merged commit 73a7f41492 into main 2026-09-25 17:40:41 +00:00
Daniel deleted branch bugfix/22-vorwaertskanten-querverbindung 2026-09-25 17:40:42 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: AG_Prozesse/Projektwissen#26