Prozessbibliothek als eigenes Repository auslagern (#9)

- 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>
This commit is contained in:
2026-09-25 09:40:52 +02:00
co-authored by Claude Opus 5.5
parent 23a39fd929
commit 31131cc5c3
26 changed files with 312 additions and 131 deletions
+3 -1
View File
@@ -10,10 +10,12 @@
| `leitfaden/04_werkzeuge_einrichten.md` | stabil | Einrichtung: Claude Code als CLI und in VS Code; von null zur ersten Aufgabe |
| `leitfaden/05_git_arbeitsweise.md` | **verbindlich** | Branches, Pull Requests, was der Agent darf |
| `leitfaden/07_prozesse_einlesen.md` | stabil | Einsteiger-Ablauf: Beschreibung in `input/` legen, einlesen, freigeben |
| `leitfaden/08_prozessbibliothek.md` | stabil | Regeln und Ablauf für die Prozessbibliothek (eigenes Repository) |
| `vorlagen/` | Vorlagen | Issue, PR, Übergabe, Repo-`AGENTS.md`, Steckbrief eines Prozesses |
Die Fachdoku des Konverters (Markdown-Syntax, Elementkatalog, Modellierregeln) liegt beim Skill in
`.agents/skills/sn-bpmn/`, die versionierten Prozessmodelle in `prozesse/` (Regeln: `prozesse/README.md`).
`.agents/skills/sn-bpmn/`, die versionierten Prozessmodelle im eigenen Repository `Prozessbibliothek`
(Regeln: `leitfaden/08_prozessbibliothek.md`).
Regel: **Lebende** Dokumente werden mit jeder Änderung gepflegt, **Momentaufnahmen** nicht nachträglich geändert
(neue Analyse = neue Datei mit Datum).
@@ -1,6 +1,6 @@
# 0003 – Prozessmodelle liegen versioniert in `prozesse/<name>/`, die `.md` ist maßgeblich
Status: vorgeschlagen · Datum: 2026-09-23 · Beteiligte: AG Prozesse
Status: ersetzt durch 0004 · Datum: 2026-09-23 · Beteiligte: AG Prozesse
## Kontext
Der Skill `sn-bpmn` legt Entwürfe in `entwuerfe/` ab; der Ordner ist nicht versioniert. Fertige Modelle hatten damit
@@ -0,0 +1,41 @@
# 0004 – Prozessmodelle liegen im eigenen Repository `Prozessbibliothek`
Status: vorgeschlagen · Datum: 2026-09-25 · Beteiligte: AG Prozesse · Ersetzt: 0003
## Kontext
Nach ADR 0003 lagen die Prozessmodelle in `prozesse/` innerhalb von `Projektwissen`. Damit waren Fachdaten und
Werkzeuge verschränkt (Issue #9): Wer ein Modell ändert, arbeitet im selben Verlauf, in denselben Issues und
Pull Requests wie am Konverter, an den Skills und an der Doku. Fachleute, die nur Modelle pflegen, müssen sich
durch Werkzeug-Änderungen lesen, und die Abnahme eines Modells geht im Verlauf der Werkzeuge unter.
## Entscheidung
Die Prozessmodelle liegen im eigenen Repository `AG_Prozesse/Prozessbibliothek`, das als Klon neben
`Projektwissen` im Workspace liegt (`workspace.toml`, `scripts/setup_workspace.py`).
- **Aufbau:** ein Ordner je Prozess direkt in der Wurzel, `<name>/` mit genau drei Dateien: Steckbrief
`README.md`, Arbeitsschritt-Beschreibung `<name>.md`, daraus erzeugte `<name>.bpmn`. In der Wurzel sonst nur
`README.md`, `AGENTS.md`, `CLAUDE.md`, `.gitattributes` und `.gitignore`. Das Repository enthält keinen Code.
- **Die `.md` ist maßgeblich** und die `.bpmn` wird mitcommittet, damit sie ohne Python heruntergeladen und in
PICTURE importiert werden kann. Der Steckbrief trägt den Status `Entwurf` oder `abgenommen`. Die Abnahme ist ein
eigener Pull Request in der Bibliothek. Diese Punkte bleiben aus ADR 0003 unverändert.
- **Regeln, Vorlagen und Prüfung bleiben in `Projektwissen`:** Ablageregeln in
`docs/leitfaden/08_prozessbibliothek.md`, Steckbrief-Vorlage `docs/vorlagen/prozess_readme.md`, Prüfung mit
`scripts/pruefe_prozesse.py` (Byte-Vergleich, Ordnerstruktur, Status) gegen den Klon. So gibt es den Konverter
nur an einer Stelle, und Regel und Prüfung ändern sich im selben Pull Request.
- **Ist die Bibliothek nicht geklont**, ist das für die Prüfung kein Fehler: geprüft werden dann nur die
Skill-Beispiele, und `pruefe_prozesse.py` sowie `pytest` weisen deutlich darauf hin.
- Issues zu einzelnen Modellen gehören in die Bibliothek, Issues zu Konverter, Skills und Doku nach
`Projektwissen`.
## Folgen
Modelle haben einen eigenen, lesbaren Verlauf, eigene Issues und eigene Pull Requests. Eine Konverteränderung,
die die Ausgabe verändert, braucht jetzt **zwei Pull Requests**: den in `Projektwissen` und einen in der
Bibliothek mit den neu erzeugten `.bpmn` (`python scripts/pruefe_prozesse.py --erzeugen` schreibt in den Klon).
Beide werden gemeinsam gemergt, damit die Bibliothek zum Konverter auf `main` passt. Wer nur `Projektwissen`
geklont hat, prüft keine Modelle mit; `scripts/hallo.py` meldet den fehlenden Klon.
## Verworfene Alternativen
Weiter `prozesse/` in `Projektwissen` (die Verschränkung bliebe); Prozessordner unter `prozesse/` im neuen Repo
(doppelter Pfad ohne Nutzen); eigenes Prüfskript in der Bibliothek (bräuchte eine Kopie von `md_to_bpmn.py`, die
auseinanderlaufen kann); Git-Submodul (für die Zielgruppe zu fehleranfällig, der Workspace klont Repos bereits
nebeneinander).
+2 -1
View File
@@ -27,4 +27,5 @@ Kurz, mit Grund.
|---|---|---|
| 0001 | Arbeitsweise aus AG_QGIS/Projektwissen übernehmen, ohne Historie | vorgeschlagen |
| 0002 | Branchmodell: `main` plus Arbeitsbranches | vorgeschlagen |
| 0003 | Prozessmodelle liegen versioniert in `prozesse/<name>/`, die `.md` ist maßgeblich | vorgeschlagen |
| 0003 | Prozessmodelle liegen versioniert in `prozesse/<name>/`, die `.md` ist maßgeblich | ersetzt durch 0004 |
| 0004 | Prozessmodelle liegen im eigenen Repository `Prozessbibliothek` | vorgeschlagen |
+6 -6
View File
@@ -14,7 +14,7 @@ Einrichtung Schritt für Schritt: `04_werkzeuge_einrichten.md`.
Wer nur modelliert, braucht Git kaum: Beschreibung als `.md` nach `input/` legen, Claude Code im Ordner
`AG_Prozesse` starten, „Lies den Ordner input ein“, Entwurf prüfen, umwandeln (`07_prozesse_einlesen.md`). Git und Pull Requests kommen erst ins Spiel, wenn sich am Konverter, an den Regeln oder an der Doku
etwas ändern soll — oder wenn ein Modell unter `prozesse/` abgelegt oder geändert wird (Abschnitt 2).
etwas ändern soll — oder wenn ein Modell in der Prozessbibliothek abgelegt oder geändert wird (Abschnitt 2).
## 2. Einen Prozess modellieren
@@ -26,7 +26,7 @@ flowchart TD
C -->|"passt so, wandle um"| D["&lt;name&gt;.bpmn"]
D --> E["Import in PICTURE"]
E -->|"Darstellungsfehler"| F["Issue anlegen<br/><i>Skill sn-ticket</i>"]
E -->|"für alle ablegen"| G["prozesse/&lt;name&gt;/<br/>Status Entwurf, Pull Request"]
E -->|"für alle ablegen"| G["Prozessbibliothek/&lt;name&gt;/<br/>Status Entwurf, Pull Request"]
G -->|"fachlich bestätigt"| H["Pull Request: Status abgenommen"]
```
@@ -39,8 +39,8 @@ flowchart TD
- **Rollen statt Personen.** Verantwortliche immer als Funktion („Sachbearbeitung"), nie mit Namen.
- **Darstellungsfehler in PICTURE** (Kanten durch Elemente, überlappende Lanes) sind Fehler des Konverters, nicht
deines Entwurfs. Issue anlegen, mit dem Entwurf als Beispiel (bereinigt).
- **Ablegen unter `prozesse/`** macht das Modell für alle sichtbar und versioniert (ADR 0003, Regeln in
`prozesse/README.md`). Die `.md` ist maßgeblich: Was nur in PICTURE nachgebessert wird, ist bei der nächsten
- **Ablegen in der Prozessbibliothek** macht das Modell für alle sichtbar und versioniert (eigenes Repository,
ADR 0004, Regeln in `08_prozessbibliothek.md`). Die `.md` ist maßgeblich: Was nur in PICTURE nachgebessert wird, ist bei der nächsten
Erzeugung weg. **Abnahme** heißt: ein eigener Pull Request, der im Steckbrief den Status auf `abgenommen` setzt;
das Review dieses Pull Requests ist die fachliche Bestätigung.
@@ -98,7 +98,7 @@ Werkzeugs (Claude Auto-Memory) ist ein Notizzettel; teilbares Wissen gehört in
| `.claude/commands/` | Slash-Befehle, z. B. `/hallo` |
| `.claude/settings.json` | Berechtigungen – sperrt `git push`, `merge`, `tag` |
| `docs/` | auf Abruf, nicht automatisch |
| `prozesse/` | auf Abruf; versionierte Modelle mit Steckbrief |
| `Prozessbibliothek/` | auf Abruf; eigener Klon mit den versionierten Modellen, eigene `AGENTS.md` |
| `input/` | beim Einlesen (Skill `sn-einlesen`); nicht versioniert |
| `referenz/`, `entwuerfe/` | nur, wenn du darauf verweist; nicht versioniert |
| `CLAUDE.local.md` | ja, lokal, nicht versioniert |
@@ -129,7 +129,7 @@ kleine PRs machen.
- [ ] Jeder neue oder geänderte Test hat einen deutschen Docstring `"""Prüft, dass …"""`
- [ ] Keine Debug-`print`, kein auskommentierter Code
- [ ] Änderungen an Markdown-Syntax oder Ablageformat im PR benannt (oder „keine“)
- [ ] Bei geänderter BPMN-Ausgabe: PICTURE-Import dokumentiert, `.bpmn` unter `prozesse/` neu erzeugt
- [ ] Bei geänderter BPMN-Ausgabe: PICTURE-Import dokumentiert, `.bpmn` der Bibliothek neu erzeugt (eigener PR dort)
- [ ] Keine personenbezogenen Daten, keine Originalunterlagen
- [ ] PR-Text vollständig nach Vorlage, mit Checkliste und Übergabenotiz; Wissensbasis nachgezogen, falls nötig
- [ ] Diff gelesen: nur, was das Issue verlangt
+6 -5
View File
@@ -71,12 +71,12 @@ Dieselbe Übersicht bekommst du ohne Agent mit `python scripts/einlesen.py`.
## 4. Entscheiden: Gibt es den Prozess schon?
Für jede neue Datei sucht der Agent im Bestand – versionierte Prozesse unter `prozesse/` und deine lokalen Entwürfe
Für jede neue Datei sucht der Agent im Bestand – versionierte Prozesse der Prozessbibliothek und deine lokalen Entwürfe
unter `entwuerfe/` – und sagt, ob und warum ein vorhandener Prozess passt. Gibt es einen, fragt er dich:
| Wenn du wählst … | … passiert |
|---|---|
| **Vorhandenen Prozess aktualisieren** | Der vorhandene Entwurf bzw. Prozess wird um die neuen Inhalte ergänzt. Bei Prozessen unter `prozesse/` geht das über ein Issue und einen Pull Request (Abschnitt 7). |
| **Vorhandenen Prozess aktualisieren** | Der vorhandene Entwurf bzw. Prozess wird um die neuen Inhalte ergänzt. Bei Prozessen der Prozessbibliothek geht das über ein Issue und einen Pull Request dort (Abschnitt 7). |
| **Als neuen Prozess anlegen** | Es entsteht ein eigener Entwurf mit anderem Namen. |
| **Datei überspringen** | Nichts passiert. Die Datei erscheint beim nächsten Einlesen wieder. |
| **Einlesen beenden** | Der Agent hört auf; die übrigen Dateien bleiben unberührt. |
@@ -114,8 +114,9 @@ Zeile unsichtbar, im Editor sichtbar. Bitte nicht von Hand ändern.
## 7. Für alle sichtbar ablegen (optional)
Entwürfe liegen nur auf deinem Rechner. Soll das Modell für die Gruppe verfügbar sein, legt der Agent es auf
Wunsch unter `prozesse/<name>/` ab – mit Steckbrief und Status `Entwurf` (Regeln: `prozesse/README.md`). Das ist
eine Änderung am gemeinsamen Repository:
Wunsch in der Prozessbibliothek ab, einem eigenen Repository, unter `<name>/` mit Steckbrief und Status `Entwurf`
(Regeln: [`08_prozessbibliothek.md`](08_prozessbibliothek.md)). Das ist eine Änderung an einem gemeinsamen
Repository:
1. Der Agent bereitet einen Issue-Text vor; **du** legst das Issue in Gitea an und nennst ihm die Nummer.
2. Der Agent legt den Ordner auf einem eigenen Branch an und bereitet Commit und Pull-Request-Text vor.
@@ -146,4 +147,4 @@ nacheinander und fragt bei jeder einzeln.
- Skill `sn-einlesen` (`.agents/skills/sn-einlesen/SKILL.md`) – was der Agent genau tut
- Skill `sn-bpmn` und `.agents/skills/sn-bpmn/Anleitung.md` – Entwurf und Syntax
- [`03_arbeitsweise.md`](03_arbeitsweise.md) – Arbeitsweise insgesamt
- `prozesse/README.md` – versionierte Ablage
- [`08_prozessbibliothek.md`](08_prozessbibliothek.md) – versionierte Ablage in der Prozessbibliothek
+65
View File
@@ -0,0 +1,65 @@
# Die Prozessbibliothek: Ablage der Prozessmodelle
Regeln und Ablauf für die versionierten Prozessmodelle der AG Prozesse (ADR 0004). Die Modelle liegen im eigenen
Repository [`AG_Prozesse/Prozessbibliothek`](https://entwicklung.flurneuordnung-sachsen.de/AG_Prozesse/Prozessbibliothek),
die Regeln und die Prüfung hier in `Projektwissen`. Arbeitsentwürfe gehören nicht in die Bibliothek, sondern nach
`entwuerfe/` (nicht versioniert).
## Wo sie liegt
`python scripts/setup_workspace.py` klont die Bibliothek in den Ordner `Prozessbibliothek/` im Workspace,
oder unter `repos_root` aus `workspace.local.toml`, wenn dort ein anderer Ort eingetragen ist.
`Projektwissen` versioniert den Ordner nicht mit, denn er ist ein eigener Git-Klon.
```
Prozessbibliothek/
README.md kurz: was hier liegt, Verweis auf diesen Leitfaden
AGENTS.md, CLAUDE.md Anweisungen für KI-Agenten
antrag-pruefen/
README.md Steckbrief: Status, Stand, Zuständigkeit, offene Punkte
antrag-pruefen.md Arbeitsschritt-Beschreibung – die maßgebliche Quelle
antrag-pruefen.bpmn daraus erzeugt, nie von Hand bearbeiten
```
## Regeln
- **Ordnername:** Kleinbuchstaben, Ziffern, Bindestriche (`antrag-pruefen`). Die beiden Modelldateien heißen wie
der Ordner.
- **Genau drei Dateien je Prozess.** Keine Originalunterlagen (Word, PDF), keine Bilder. Die bleiben lokal in
`referenz/`. In der Wurzel der Bibliothek liegen außer den Prozessordnern nur `README.md`, `AGENTS.md`,
`CLAUDE.md`, `.gitattributes` und `.gitignore`.
- **Die `.md` ist maßgeblich.** Die `.bpmn` wird nach jeder Änderung neu erzeugt und mitcommittet:
`python scripts/pruefe_prozesse.py --erzeugen` (aus `Projektwissen`). Änderungen, die in PICTURE nachgetragen
werden, fließen nicht zurück. Wer etwas dauerhaft ändern will, ändert die `.md`.
- **Status im Steckbrief:** `Entwurf` (liegt zur gemeinsamen Bearbeitung hier) oder `abgenommen` (fachlich
bestätigt). Den Wechsel auf `abgenommen` macht ein eigener Pull Request, dessen Review die Abnahme ist.
- **Keine personenbezogenen Daten.** Zuständigkeiten als Funktion, keine Namen, Aktenzeichen oder Verfahrensdaten.
- **Issues zu einem Modell** werden in der Bibliothek angelegt, Issues zu Konverter, Skills und Doku in
`Projektwissen`. Branches heißen in beiden Repositories `feature/<issue-nr>-<kurzname>`.
## Prüfen
Aus dem Workspace-Root (`Projektwissen`):
```bash
python scripts/pruefe_prozesse.py # Struktur, Status, .bpmn aktuell? Prüft auch die Skill-Beispiele
python -m pytest -q # enthält dieselbe Prüfung
```
Ist die Bibliothek nicht geklont, prüfen beide nur die Skill-Beispiele und weisen darauf hin.
## Einen Prozess ablegen
1. Entwurf mit dem Skill `sn-bpmn` erstellen und fachlich prüfen.
2. Issue in der Bibliothek, dann im Klon `Prozessbibliothek/` einen Branch `feature/<issue-nr>-<prozessname>`
von `main` anlegen.
3. Ordner anlegen, Entwurf als `<name>.md` hineinkopieren, Steckbrief aus `docs/vorlagen/prozess_readme.md`.
4. In `Projektwissen`: `python scripts/pruefe_prozesse.py --erzeugen`, dann `python -m pytest -q`.
5. Im Klon committen. Pull Request in der Bibliothek: Der Agent bereitet vor, der Mensch pusht.
## Wenn sich der Konverter ändert
Ändert ein Pull Request in `Projektwissen` die BPMN-Ausgabe, meldet `pruefe_prozesse.py` die betroffenen Modelle
als veraltet. Dann in der Bibliothek einen Branch mit demselben Issue-Bezug anlegen,
`python scripts/pruefe_prozesse.py --erzeugen` ausführen, die neuen `.bpmn` dort committen und beide Pull Requests
gemeinsam mergen: erst `Projektwissen`, direkt danach die Bibliothek.
+7 -2
View File
@@ -1,7 +1,7 @@
# Status des Projekts
Kurz und aktuell. Wird bei jedem Merge und jeder Übergabe gepflegt (Skill `sn-uebergabe`). Älteres wandert nach unten
in „Erledigt" oder wird gelöscht. **Stand: 23.09.2026.**
in „Erledigt" oder wird gelöscht. **Stand: 25.09.2026.**
## Aktuelle Phase
@@ -20,7 +20,8 @@ Skills sind übernommen, alles QGIS- und Plugin-Spezifische ist entfernt. Kern i
1. **Repo `Projektwissen` in Gitea öffentlich schalten** (Repo → Einstellungen → Sichtbarkeit). Die Organisation ist
öffentlich, das Repo nicht; ohne das liest `scripts/gitea.py` keine Tickets, und die Skills `sn-ticket` und
`sn-aufgabe-bearbeiten` laufen ins Leere.
2. **ADR 0003 (Ablage in `prozesse/`) vom Team annehmen lassen**, dann den ersten echten Prozess ablegen.
2. **ADR 0004 (Prozessbibliothek als eigenes Repository) vom Team annehmen lassen**, dann den ersten echten
Prozess dort ablegen.
3. **Glossar um BPMN-/PICTURE-Begriffe ergänzen** und die Flurbereinigungsbegriffe auf das prüfen, was für
Prozesse gebraucht wird.
4. **Leitfäden vom Team gegenlesen lassen.** `docs/leitfaden/03–05` sind für die Prozessarbeit neu gefasst;
@@ -30,6 +31,10 @@ Skills sind übernommen, alles QGIS- und Plugin-Spezifische ist entfernt. Kern i
## Erledigt
- 25.09.2026 **Prozessbibliothek als eigenes Repository** (#9, ADR 0004): `prozesse/` ist aus Projektwissen
entfernt, die Modelle liegen im Klon `Prozessbibliothek/` (`workspace.toml`). `pruefe_prozesse.py` und
`einlesen.py` suchen dort; Regeln in `docs/leitfaden/08_prozessbibliothek.md`.
- 23.09.2026 **Erster echter Einlese-Durchgang** (`input/Gewannenvermessung.md` → `entwuerfe/gewannenfestlegung`)
und daraus das **Referenzmodell** `beispiele/referenz_gewannenfestlegung` für Konvertertests (#7), mit
Strukturtests. Dabei gefunden: Kante durch Gateway S13 (#8, als `xfail` erfasst).
+2 -2
View File
@@ -2,9 +2,9 @@
<Was soll am Ende möglich sein? Ein Satz aus Nutzersicht.>
## Betroffen
Bereich: Prozessmodell (`prozesse/<name>/`) | Konverter `md_to_bpmn.py` | Skill | Skripte | Doku
Bereich: Konverter `md_to_bpmn.py` | Skill | Skripte | Doku
Dateien (falls bekannt):
Ändert Markdown-Syntax oder Ablageformat unter `prozesse/`? nein | ja: <welche>
Ändert Markdown-Syntax oder Ablageformat der Prozessbibliothek? nein | ja: <welche>
## Fachlicher Hintergrund
<Begriffe, Regeln, Beispiel (keine echten Verfahrensdaten, keine Namen). Verweise auf Glossar.>
+4 -3
View File
@@ -4,12 +4,13 @@
## Wie geprüft
- `python -m pytest -q`: <Ergebniszeile>
- `python scripts/pruefe_umlaute.py`: <Ergebniszeile>
- Bei Modellen unter `prozesse/`: `.bpmn` mit `python scripts/pruefe_prozesse.py --erzeugen` erzeugt
- Bei Modellen der Prozessbibliothek: `.bpmn` mit `python scripts/pruefe_prozesse.py --erzeugen` erzeugt
- PICTURE-Import: <PICTURE-Version, Datei, Ergebnis> | nicht nötig, weil …
## Änderungen an Syntax und Ablageformat
keine | <welche, mit Verweis auf Issue: Markdown-Syntax (`Anleitung.md`), Ablage unter `prozesse/`
(`prozesse/README.md`, ADR 0003); welche Modelle unter `prozesse/` angepasst oder neu erzeugt wurden>
keine | <welche, mit Verweis auf Issue: Markdown-Syntax (`Anleitung.md`), Ablage in der Prozessbibliothek
(`docs/leitfaden/08_prozessbibliothek.md`, ADR 0004); welche Modelle der Bibliothek angepasst oder neu erzeugt
wurden, mit Verweis auf den zugehörigen PR dort>
## Übergabenotiz
<nach docs/vorlagen/uebergabe.md>
+5 -4
View File
@@ -21,10 +21,11 @@ Kurz, konkret, mit Datum und Quelle. Neue Einträge oben in der passenden Rubrik
sondern nur auf `<script`/`</script` geprüft. (23.09.2026)
- **Jede Änderung an der Ausgabe von `md_to_bpmn.py` macht die abgelegten `.bpmn` rot.** Der Test in
`tests/test_pruefe_prozesse.py` vergleicht jede `.bpmn` unter `prozesse/` und in `beispiele/` byte-genau mit der
Umwandlung ihrer `.md`. Nach einer Konverteränderung `python scripts/pruefe_prozesse.py --erzeugen` ausfü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 aus `set`-Iteration. (ADR 0003, 23.09.2026)
`tests/test_pruefe_prozesse.py` vergleicht jede `.bpmn` der Prozessbibliothek und in `beispiele/` byte-genau mit
der Umwandlung ihrer `.md`. Nach einer Konverteränderung `python scripts/pruefe_prozesse.py --erzeugen` ausführen;
die neuen `.bpmn` der Beispiele gehören in den Pull Request, die der Bibliothek in einen eigenen Pull Request dort
(ADR 0004). Das setzt voraus, dass der Konverter deterministisch
bleibt: keine Zufalls-IDs, keine Zeitstempel, keine Reihenfolge aus `set`-Iteration. (ADR 0003, 23.09.2026; ADR 0004, 25.09.2026)
- **Zusätzliche Zeilen in einer Arbeitsschritt-`.md` nur ganz oben oder mit `#`.** `parse_markdown()` bricht
nach dem ersten Schritt bei jeder unbekannten Zeile ab; davor überspringt es Zeilen, die nicht wie
`Schlüssel: Wert` aussehen. Deshalb steht der Einlese-Vermerk (`<!-- eingelesen: … -->`) als erste Zeile.