- beispiele/referenz_gewannenfestlegung.md/.bpmn: aus dem ersten echten Einlese-Durchgang (input/Gewannenvermessung.md), als „Test“ markiert, fachlich nicht abgenommen. 4 Lanes, externer Pool, 14 Gateways, verschachtelte Varianten; Byte-Vergleich über pruefe_prozesse.py. - tests/test_referenzmodelle.py: je Referenzmodell keine Lane „Nicht zugeordnet“, höchstens vier Kanten je Gateway, keine Kante durch eine Raute (Geometrie aus test_md_to_bpmn.py übernommen). - Gefunden: Kante S12→S13 läuft durch die Raute von S13 – als xfail(strict=True) mit Verweis auf #8. AGENTS.md regelt, dass xfail nur für so erfasste Konverterfehler an Referenzmodellen zulässig ist. - Anleitung, Fallstricke (zwei Einträge), STATUS. - Tests: python -m pytest -q -> 82 bestanden, 1 xfail (#8). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
7.2 KiB
Fallstricke und Erkenntnisse
Gemeinsames Gedächtnis: Dinge, die man nicht aus dem Code ablesen kann und die schon einmal Zeit gekostet haben. Kurz, konkret, mit Datum und Quelle. Neue Einträge oben in der passenden Rubrik. Veraltetes löschen, nicht auskommentieren.
BPMN und PICTURE (Skill sn-bpmn, md_to_bpmn.py)
-
Kanten durch Gateways sind noch nicht ganz behoben. Im Referenzmodell Gewannenfestlegung läuft die Kante S12→S13 (Gateway → Gateway, Ziel oberhalb der Quelle, Ankunft am Nordpunkt) senkrecht durch die Raute von S13. Der Fix vom 21.09.2026 deckt diese Lage nicht ab. Erfasst als Issue #8 und als
xfailintests/test_referenzmodelle.py. (23.09.2026) -
Zusammenführende Gateways brauchen eine Beschriftung mit Zuständigkeit, sonst landen sie in der Lane „Nicht zugeordnet“ (
split_lane()braucht Text nach dem Doppelpunkt). In BPMN bleiben Zusammenführungen üblicherweise unbeschriftet – ein Fall für eine spätere Konverteränderung. (23.09.2026, Referenzmodell) -
Das bpmn.io-Wasserzeichen ist Lizenzauflage. bpmn-js steht unter MIT, verlangt aber, dass das Wasserzeichen unten rechts sichtbar bleibt und nicht überdeckt wird. In
werkzeuge/vorschau/vorschau.htmldeshalb nichts in die untere rechte Ecke der Zeichenfläche legen. (bpmn-jsLICENSE, 23.09.2026) -
Diagramme nie roh in ein
<script>schreiben. Eine Beschriftung mit</script>würde den Skriptblock beenden.scripts/vorschau.pymaskiert jedes<im Diagramm als\u003c; die Bibliothek selbst wird nicht verändert, sondern nur auf<script/</scriptgeprüft. (23.09.2026) -
Jede Änderung an der Ausgabe von
md_to_bpmn.pymacht die abgelegten.bpmnrot. Der Test intests/test_pruefe_prozesse.pyvergleicht jede.bpmnunterprozesse/und inbeispiele/byte-genau mit der Umwandlung ihrer.md. Nach einer Konverteränderungpython scripts/pruefe_prozesse.py --erzeugenausführen und die neu erzeugten Dateien mit in den Pull Request nehmen. Das setzt voraus, dass der Konverter deterministisch bleibt: keine Zufalls-IDs, keine Zeitstempel, keine Reihenfolge ausset-Iteration. (ADR 0003, 23.09.2026) -
Zusätzliche Zeilen in einer Arbeitsschritt-
.mdnur ganz oben oder mit#.parse_markdown()bricht nach dem ersten Schritt bei jeder unbekannten Zeile ab; davor überspringt es Zeilen, die nicht wieSchlüssel: Wertaussehen. Deshalb steht der Einlese-Vermerk (<!-- eingelesen: … -->) als erste Zeile. (23.09.2026,scripts/einlesen.py) -
Path.read_text()macht aus CRLF stillschweigend LF. Wer eine Datei liest und mit Zusatz zurückschreibt, stellt so Windows-Dateien unbemerkt um.scripts/einlesen.pyliest deshalb als Bytes. (23.09.2026, Test) -
Metadaten gehören nicht als Kopfzeile in die Arbeitsschritt-
.md.parse_markdown()liest eine Zeile wieVerantwortliche Stelle: …als Schritt mit IDVerantwortlicheund TypStelleund bricht ab. Status und Stand stehen deshalb im SteckbriefREADME.mddes Prozessordners. (23.09.2026) -
Zuständigkeit gilt auch für Gateways und Ereignisse. Ohne
Rolle:-Präfix landen sie in der Lane „Nicht zugeordnet“. Ein?stört nur vor dem Doppelpunkt:Sachbearbeitung: Antrag vollständig?funktioniert. (23.09.2026, beim Erstellen der Beispiele) -
Ein Gateway hat in PICTURE nur vier feste Anschlusspunkte (N/O/S/W auf der Rautenkontur), keinen variablen Rand wie ein Rechteck. Eine Kante, die diesen Punkt verlässt bzw. dort ankommt, darf sich danach nicht direkt zur Ziel-/Quellkoordinate drehen, wenn diese auf der anderen Achse liegt – sonst läuft der rechtwinklige Streckenzug quer durchs Innere der Raute zurück, statt außen herumzugehen (
orthogonal_points()inmd_to_bpmn.py, behoben BPMN-Skill 21.09.2026). Ursache: die feste Anschlusspunkt-Zuteilung (assign_gateway_sides(), Präferenzreihenfolge S/O/W/N bzw. N/W/O/S) kennt die tatsächliche Lage des anderen Endes nicht. Die Kante muss beim Verlassen/Ankommen an einer Raute zuerst ein Stück auf der sicheren Stub-Achse bleiben (die einzige garantiert freie Koordinate außerhalb der Kontur), bevor sie zur anderen Achse abbiegt – sonst reicht ein einfacher Bounding-Box-Test nicht, um den Fehler zu erkennen (ein Punkt auf der Rautenkontur liegt immer innerhalb der Bounding-Box). Prüfen mit echter Diamant-Geometrie (Manhattan-Abstand zum Mittelpunkt, skaliert auf die Halbachsen, < 1 heißt innen), nicht mit der Bounding-Box – siehetest_kante_fuehrt_nicht_durchs_innere_eines_gatewaysintest_md_to_bpmn.py.
Text und Sprache
- Deutscher Text ohne Umlaute/ß ist ein eigenständiges Muster, kein Einzelfall. KI-generierter Text weicht
gern auf ASCII aus (
gueltigstattgültig,ueberstattüber) – in AG_QGIS über alle Plugins verteilt gefunden (Plugin_SN_Basis #42), im BPMN-Skill in Elementnamen und Docstrings. Neuen deutschen Text (Beschriftungen im Modell, Kommentare, Docstrings) immer mit echten Umlauten/ß schreiben. Vor dem Commitpython scripts/pruefe_umlaute.pylaufen lassen – findet das Muster in.py-Dateien (String-Inhalte und Kommentare mit Leerzeichen). Die Wortstammliste ist bewusst konservativ; Ersatz fürs Lesen ist sie nicht. Arbeitsschritt-.mdprüft das Skript nicht. (AG_QGIS 09/2026)
Umgebung und Werkzeuge
-
Öffentliche Organisation heißt nicht öffentliches Repo. In Gitea haben Organisation und Repo getrennte Sichtbarkeit.
AG_Prozessewar öffentlich,Projektwissenprivat: Die Weboberfläche zeigte es angemeldeten Personen normal, die API ohne Anmeldung lieferte 404.scripts/gitea.pyliest bewusst ohne Token und braucht deshalb ein öffentliches Repo; es prüft das jetzt vor jeder Abfrage. Prüfen ohne Anmeldung:curl -s -o /dev/null -w "%{http_code}" https://entwicklung.flurneuordnung-sachsen.de/api/v1/repos/AG_Prozesse/Projektwissenmuss200liefern. (23.09.2026) -
Gitea ordnet Commits über die E-Mail-Adresse zu. Stimmt
user.emailnicht mit einer im Gitea-Konto hinterlegten Adresse überein, erscheinen die Commits ohne Zuordnung zum Benutzer. Es gilt die dienstliche Adresse, die im Gitea-Konto hinterlegt ist. Wer den Rechner auch privat nutzt, setzt sie je Repository mitgit config --localstatt global. Nachträglich nur durch Umschreiben der Historie korrigierbar. (AG_QGIS 04.09.2026) -
pytestist die einzige Abhängigkeit außerhalb der Standardbibliothek. Die Tests des Konverters brauchen es;md_to_bpmn.pyselbst läuft ohne. (23.09.2026) -
.vscode/gehört nicht ins Repository. Einstellungen mit Pfaden eines einzelnen Arbeitsplatzes gehören in die Benutzereinstellungen, siehedocs/leitfaden/04_werkzeuge_einrichten.md. (AG_QGIS 04.09.2026)
Zusammenarbeit
- Tool-Gedächtnis ist lokal. Die Claude-Auto-Memory sieht niemand sonst. Geteiltes Wissen nur in diesem Ordner.
- Issues sind teils Diskussionen, nicht Aufträge (Label
Diskussion). Vor der Umsetzung Konsens im Issue abwarten oder im PR als Annahme kennzeichnen. - Quelldokumente enthalten oft Interna. Word/PDF-Prozessbeschreibungen nur lokal unter
referenz/ablegen (nicht versioniert). Vor dem Committen eines Arbeitsschritt-Entwurfs prüfen, dass keine Namen, Aktenzeichen oder Verfahrensdaten darin stehen. (23.09.2026)