- Nachrichtenflüsse enden senkrecht unter ihrem Startpunkt an der
Oberkante des externen Pools statt an einem verteilten Punkt (keine
schrägen Linien mehr); die Anschlussverteilung am externen Pool entfällt.
- Steht unter dem Schritt ein Element: kurz nach unten (NACHRICHT_STUB),
dann in einen freien Gang – mit Lanes neben der Spalte, versetzt zu den
Rücksprungkanten (NACHRICHT_VERSATZ); ohne Lanes rechts neben allen
Elementen, der Pool wird dafür breiter.
- beispiel_lanes und Referenzmodell neu erzeugt: die beiden bekannten
Kreuzungen (S5, S24) sind behoben, BEKANNTE_KREUZUNGEN ist leer.
- Vier neue Tests (rechtwinklig, keine Kreuzung; je mit und ohne Lanes).
- Belastungstest (342 Varianten): Kreuzungen durch Nachrichtenflüsse
vorher 182, jetzt 0; schräge Nachrichtenflüsse vorher 600, jetzt 0.
- Tests: python -m pytest -q -> 106 bestanden, 1 übersprungen (leere
Parameterliste von test_bekannte_kreuzung_ist_behoben).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Mit Lanes: ruecksprung_points() fährt senkrecht nur in den Gängen
zwischen den Spalten (rechts der Quelle, links des Ziels) und waagrecht
knapp unter Quelle bzw. Ziel und in einem Kanal am Poolboden. Das
Kanalband wird nach der Platzierung an die letzte Lane angehängt: Die
Elemente bleiben, wo sie sind, die Kante bleibt im eigenen Pool, jede
Rücksprungkante hat eine eigene Kanalhöhe.
- Ohne Lanes: Kanal seitlich an allen Elementen zwischen Quelle und Ziel
vorbei (parallele Zweige stehen versetzt). Steht ein Nachbar in der
Zeile im Weg, unten hinaus bzw. oben hinein über die Lücke zwischen den
Zeilen (zeile(), zeile_frei()).
- beispiel_lanes: Kante S4->S2 läuft nicht mehr durch S5, Pool um das
Kanalband höher, externer Pool entsprechend tiefer. beispiel_prozess:
Kanal bei x 50 statt 20. Referenzmodell unverändert.
- xfail für #12 entfernt; fünf neue Tests in test_md_to_bpmn.py.
- Belastungstest (126 Rücksprung-Varianten, mit/ohne Lanes): Kreuzungen
durch Rücksprungkanten vorher in 31 Fällen, jetzt in keinem.
- Tests: python -m pytest -q -> 102 bestanden, 2 xfail (#13).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- test_referenzmodelle.py: kreuzungen() prüft alle Sequenz- und
Nachrichtenflüsse gegen Aufgaben, Ereignisse (Kreis), Gateways (Raute)
und Datenelemente und liefert alle Funde. Neuer Test je Modell unter
beispiele/ (auch Syntaxbeispiele): keine unbekannte Kreuzung.
- Bekannte Fälle je Kreuzung in BEKANNTE_KREUZUNGEN, jeder mit eigenem
xfail(strict=True)-Test: #12 (Rücksprung durch S5 in beispiel_lanes),
#13 (Nachrichtenfluss durch S5 in beispiel_lanes und durch S24 im
Referenzmodell).
- test_keine_kante_fuehrt_durchs_innere_eines_gateways entfällt: Die neue
Prüfung deckt Gateways mit derselben Rautengeometrie ab und meldet mehr.
Gegenprobe am Stand vor #8: alle sieben Kreuzungen auf einmal gefunden.
- Selbsttest der Prüfung und test_ausweichabstand_liegt_in_beiden_layouts
_im_freien_gang (bindet AUSWEICHABSTAND an DEFAULT_SIZE und Abstände).
- AGENTS.md: xfail-Ausnahme gilt für alle Modelle unter beispiele/, je
Fehler einzeln. Anleitung, Fallstricke, STATUS nachgezogen.
- Tests: python -m pytest -q -> 97 bestanden, 3 xfail (#12, #13).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PICTURE 2026.4.1 zeichnet das X auch ohne isMarkerVisible, die Vorschau
(bpmn-js) nur mit. Hinweis, erst in PICTURE gegenzuprüfen, bevor der
Konverter wegen der Vorschau geändert wird.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- build_bpmn(): Die BPMNShape jedes exklusiven Gateways bekommt
isMarkerVisible="true". BPMN lässt das X optional; ohne das Attribut
zeichnet bpmn-js eine leere Raute. OR-, AND- und ereignisbasierte
Gateways haben ihr Symbol immer und bleiben unverändert.
- Alle Beispiele neu erzeugt: je XOR-Gateway nur das Attribut ergänzt
(beispiel_lanes 1, beispiel_prozess 2, Referenzmodell 14), sonst
byte-gleich.
- Neuer Test test_nur_xor_gateways_zeigen_ihr_x.
- Tests: python -m pytest -q -> 93 bestanden.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- orthogonal_points(): Liegt bei Gateway -> Gateway der Stub des Starts
schon jenseits des Ziel-Anschlusspunkts (z. B. Südpunkt unten, Ziel
höher mit Nordpunkt), führt die Kante seitlich an der Ziel-Raute vorbei.
Gleiches für den waagrechten Spiegelfall (Ost -> West).
- _ausweichachse(): Die Ausweichachse liegt im freien Gang direkt vor der
Ziel-Spalte (AUSWEICHABSTAND 85), nicht in der Mitte zwischen Quelle und
Ziel – dort stand im Referenzmodell die Aufgabe S43.
- Referenzmodell neu erzeugt: fünf Kanten korrigiert (vorher liefen alle
fünf durch ein Gateway, gemeldet war nur S12->S13), dabei verschwindet
auch die Kreuzung Flow_13/S40. Syntaxbeispiele unverändert.
- xfail für referenz_gewannenfestlegung entfernt; drei neue Tests in
test_md_to_bpmn.py.
- Fallstricke: Ausweichachse; Strukturtests melden nur die erste Kreuzung.
- Tests: python -m pytest -q -> 92 bestanden.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- ADR 0004 ersetzt ADR 0003: Die Prozessmodelle liegen im Repository
AG_Prozesse/Prozessbibliothek, geklont nach Prozessbibliothek/ (neuer
Eintrag in workspace.toml, .gitignore). prozesse/ ist entfernt; das
Ablageformat (Ordner je Prozess, drei Dateien, Status) bleibt.
- pruefe_prozesse.py prüft den Klon (Ort über setup_workspace.repos_root),
lässt Punkt-Ordner wie .git aus und erlaubt in der Wurzel nur die
Repo-Dateien. Fehlt der Klon, gibt es einen Hinweis statt eines Befunds;
pytest warnt dann.
- einlesen.py sucht den Bestand in der Bibliothek und nennt Treffer als
Prozessbibliothek/<name>/, auch wenn der Klon woanders liegt.
- Regeln aus prozesse/README.md nach docs/leitfaden/08_prozessbibliothek.md,
inklusive Ablauf bei Konverteränderungen (zwei Pull Requests).
- Verweise in AGENTS.md, README, Skills, Leitfäden, Vorlagen, Fallstricken
und STATUS nachgezogen.
- Tests: python -m pytest -q -> 88 bestanden, 1 xfail (#8), 1 Warnung
(Bibliothek noch nicht geklont).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 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>
- input/ ist lokal und nicht versioniert (.gitignore); scripts/einlesen.py
legt ihn bei Bedarf an.
- scripts/einlesen.py ordnet jede Datei ein: abgelehnt (kein .md, nicht
UTF-8, leer, Unterordner), neu, geändert, eingelesen. Für neue und
geänderte Dateien: Prozessname, Ordnernamen-Vorschlag, ob schon eine
Arbeitsschritt-.md, und ähnliche Prozesse aus prozesse/ und entwuerfe/.
„vermerk“ schreibt nach Erfolg eine erste Zeile
<!-- eingelesen: <Zeitstempel> | neu|aktualisiert | <Ziel> | inhalt: <sha> -->;
die Prüfsumme erkennt spätere Änderungen. Zeilenenden bleiben erhalten.
- Skill sn-einlesen: Übersicht, Bestandsvergleich, Entscheidung des
Nutzers, neue Prozesse durch sn-bpmn, Vermerk nur bei Erfolg.
- docs/leitfaden/07_prozesse_einlesen.md: Ablauf für neue Nutzer.
- AGENTS.md, README, Leitfaden 03, Skill sn-bpmn, Fallstricke, STATUS.
- Tests: python -m pytest -q -> 79 bestanden (18 neu in
tests/test_einlesen.py).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Beim Übernehmen aus AG_QGIS/Projektwissen (main @ a0bb40a) waren Regeln
verloren gegangen oder eingeengt worden:
- PR-Vorlage: Abschnitt „Änderungen an Syntax und Ablageformat“ (dort
„Änderungen an Verträgen“), Checklistenpunkt „keine Debug-print“.
- Issue-Vorlage: Frage nach Syntax/Ablageformat, Testpflicht nicht nur
für den Konverter.
- AGENTS.md: Testpflicht wieder für jede neue Funktionalität; Syntax und
Ablageformat als Verträge; kein Arbeitsbranch ohne Issue; PR-Text
vollständig mit Checkliste. Skill sn-aufgabe-bearbeiten und Checkliste
in Leitfaden 03 entsprechend.
- ADR 0001 und STATUS: Quell-Commit war a0bb40a, nicht decd2a0.
gitea.py prüft vor jeder Abfrage, ob die Repos ohne Anmeldung lesbar
sind, und bricht sonst mit klarer Meldung ab – bisher meldete die
Sammelsuche bei einem privaten Repo „Keine passenden Tickets“. Die
Ausgabe läuft jetzt über UTF-8 (cp1252-Konsolen stürzten bei „→“ ab).
Tests: python -m pytest -q -> 61 bestanden (6 neu in tests/test_gitea.py).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- werkzeuge/vorschau/vorschau.html: Anzeige per Drag & Drop oder
Dateiauswahl, Zoom, Einpassen, Fehlermeldungen; funktioniert ohne
Python direkt aus dem Dateisystem.
- scripts/vorschau.py: erzeugt aus .bpmn oder Arbeitsschritt-.md eine
in sich geschlossene Seite und öffnet sie; --stdin als Filter, etwa
für einen Gitea-Renderer. Diagramm wird mit maskiertem '<' eingebettet,
die Bibliothek unverändert und nur auf <script/</script geprüft.
- bpmn-js 18.29.1 (navigated viewer + CSS + LICENSE) lokal eingebettet,
npm-Integrität geprüft; lädt nichts aus dem Netz. Wasserzeichen bleibt
laut Lizenzauflage sichtbar.
- tests/test_vorschau.py: 11 Tests; Skill sn-bpmn, Anleitung, AGENTS.md,
README, Leitfäden, Fallstricke und STATUS ergänzt.
- Tests: python -m pytest -q -> 55 bestanden. Darstellung mit Edge
headless geprüft (beide Beispiele, leere Seite, kaputte Datei).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Jedes Modell bekommt einen eigenen Ordner mit Steckbrief (README.md,
Status Entwurf|abgenommen), der maßgeblichen Arbeitsschritt-.md und der
daraus erzeugten .bpmn (ADR 0003).
- scripts/pruefe_prozesse.py prüft Ordnername, Dateien, Status und ob
jede .bpmn byte-gleich mit der Umwandlung ihrer .md ist; --erzeugen
erzeugt alle .bpmn neu. md_to_bpmn.py arbeitet deterministisch.
- tests/test_pruefe_prozesse.py: Bestandsprüfung plus 11 Fälle für die
Prüflogik; pytest.ini sammelt .agents/skills und tests.
- Die in Anleitung.md genannten, nie committeten Beispiele liegen jetzt
unter .agents/skills/sn-bpmn/beispiele/ und werden mitgeprüft.
- Skill sn-bpmn: Entwürfe nach entwuerfe/, neuer Schritt 5 „Ablegen“.
- Vorlage docs/vorlagen/prozess_readme.md, Doku und Fallstricke ergänzt.
- Tests: python -m pytest -q -> 44 bestanden.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Übernommen ohne Historie aus AG_QGIS/Projektwissen (main @ decd2a0),
Skill sn-bpmn vom Branch BPMN-Skill @ 6efcac4 (ADR 0001).
- Skripte hallo.py, gitea.py, setup_workspace.py auf die Organisation
AG_Prozesse umgestellt; das Workspace-Repo zählt über [workspace] repo
als Ticket-Repo, auch ohne weitere [[repos]].
- pruefe_umlaute.py prüft jetzt die .py-Dateien des Workspace selbst.
- Branchmodell main plus Arbeitsbranches (ADR 0002).
- AGENTS.md, README, Leitfäden, Skills, Vorlagen, Fallstricke und Glossar
auf die Prozessmodellierung zugeschnitten; QGIS- und Plugin-Spezifisches
entfernt.
- Tests: python -m pytest -q .agents/skills -> 32 bestanden.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>