Eingangsordner input/ und Skill sn-einlesen (#5)

- 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>
This commit is contained in:
2026-09-23 14:09:48 +02:00
co-authored by Claude Opus 5.5
parent 47b59e2d83
commit 27589749ff
13 changed files with 769 additions and 7 deletions
+1
View File
@@ -9,6 +9,7 @@
| `leitfaden/03_arbeitsweise.md` | stabil | Einstieg, Arbeitszyklus, Checklisten |
| `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 |
| `vorlagen/` | Vorlagen | Issue, PR, Übergabe, Repo-`AGENTS.md`, Steckbrief eines Prozesses |
Die Fachdoku des Konverters (Markdown-Syntax, Elementkatalog, Modellierregeln) liegt beim Skill in
+3 -2
View File
@@ -12,8 +12,8 @@ Einrichtung Schritt für Schritt: `04_werkzeuge_einrichten.md`.
| **Einen Prozess modellieren** | Fachleute | Skill `sn-bpmn` | BPMN-Datei für PICTURE |
| **Werkzeug und Wissen verbessern** | alle, die einen PR stellen | Skill `sn-aufgabe-bearbeiten` | Pull Request auf `main` |
Wer nur modelliert, braucht Git kaum: Claude Code im Ordner `AG_Prozesse` starten, Quelle nennen, Entwurf prüfen,
umwandeln. Git und Pull Requests kommen erst ins Spiel, wenn sich am Konverter, an den Regeln oder an der Doku
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).
## 2. Einen Prozess modellieren
@@ -99,6 +99,7 @@ Werkzeugs (Claude Auto-Memory) ist ein Notizzettel; teilbares Wissen gehört in
| `.claude/settings.json` | Berechtigungen – sperrt `git push`, `merge`, `tag` |
| `docs/` | auf Abruf, nicht automatisch |
| `prozesse/` | auf Abruf; versionierte Modelle mit Steckbrief |
| `input/` | beim Einlesen (Skill `sn-einlesen`); nicht versioniert |
| `referenz/`, `entwuerfe/` | nur, wenn du darauf verweist; nicht versioniert |
| `CLAUDE.local.md` | ja, lokal, nicht versioniert |
+149
View File
@@ -0,0 +1,149 @@
# Prozesse einlesen: vom Eingangsordner zum BPMN-Diagramm
Für Kolleginnen und Kollegen, die eine Prozessbeschreibung in ein BPMN-Modell für PICTURE überführen wollen.
Git- oder Programmierkenntnisse braucht es dafür nicht. Stand 23.09.2026.
**Kurz:** Beschreibung als `.md`-Datei in den Ordner `input/` legen, Claude Code starten, „Lies den Ordner input
ein“ sagen, die Rückfragen beantworten, den Entwurf prüfen und freigeben. Fertig ist eine `.bpmn`-Datei für PICTURE.
```mermaid
flowchart TD
A["Beschreibung als .md<br/>nach input/ legen"] --> B["Claude Code: „Lies input ein“"]
B --> C{"Dateityp .md<br/>und UTF-8?"}
C -->|nein| X["abgelehnt – Datei bleibt liegen,<br/>Grund wird genannt"]
C -->|ja| D{"schon eingelesen<br/>und unverändert?"}
D -->|ja| Y["übersprungen"]
D -->|nein| E{"gibt es den Prozess<br/>schon?"}
E -->|nein| F["neuer Prozess:<br/>Entwurf in entwuerfe/"]
E -->|ja| G{"deine Entscheidung"}
G -->|aktualisieren| H["vorhandenen Prozess<br/>ergänzen"]
G -->|eigener Prozess| F
G -->|überspringen| Z["kein Vermerk,<br/>kommt beim nächsten Mal wieder"]
F --> I["Entwurf prüfen,<br/>Vorschau ansehen"]
H --> I
I -->|"„passt so“"| J["BPMN erzeugen"]
J --> K["Vermerk mit Datum/Uhrzeit<br/>oben in der .md"]
```
## 1. Einmalig: Einrichtung
Wer schon mit Claude Code im Ordner `AG_Prozesse` arbeitet, kann diesen Abschnitt überspringen. Sonst:
[`04_werkzeuge_einrichten.md`](04_werkzeuge_einrichten.md) Abschnitte 2 und 3 (Git, Python, Projektwissen holen,
Claude Code). Danach gibt es den Ordner `AG_Prozesse`; `input/` darin entsteht beim ersten Einlesen von selbst.
`input/` wird **nicht** mit Git geteilt. Was dort liegt, sieht nur, wer an deinem Rechner arbeitet.
## 2. Die Datei vorbereiten
**Vorerst werden nur `.md`-Dateien angenommen** (Markdown, also reiner Text). Word-, PDF- oder `.txt`-Dateien
werden abgelehnt und bleiben unverändert liegen.
So wird aus einer Word- oder PDF-Beschreibung eine `.md`-Datei:
1. In VS Code (oder dem Windows-Editor) eine neue Datei anlegen.
2. Den Text der Beschreibung hineinkopieren. Überschriften dürfen mit `# ` beginnen, Aufzählungen mit `- `.
Die erste Überschrift oder eine Zeile `Prozess: <Name>` wird als Prozessname verwendet.
3. Speichern unter `AG_Prozesse\input\<kurzer-name>.md`, **Codierung UTF-8** (VS Code speichert so; im Windows-Editor
unter „Speichern unter“ → Codierung „UTF-8“ wählen). Sonst werden Umlaute nicht gelesen und die Datei abgelehnt.
Vorher prüfen und entfernen: **Namen von Personen, Aktenzeichen, Verfahrensdaten.** Zuständigkeiten als Funktion
schreiben („Sachbearbeitung“, „Teamleitung“). Der Inhalt wird zur Verarbeitung an den KI-Anbieter übertragen.
Wer die Syntax schon kennt, kann direkt eine Arbeitsschritt-`.md` schreiben
(`.agents/skills/sn-bpmn/Anleitung.md`). Sie wird dann nur geprüft und nicht neu formuliert.
## 3. Einlesen starten
Im Ordner `AG_Prozesse` Claude Code starten (Terminal: `claude`, oder VS Code mit der Erweiterung) und schreiben:
> *Lies den Ordner input ein.*
(oder den Befehl `/sn-einlesen` wählen). Der Agent zeigt zuerst eine Übersicht, zum Beispiel:
```
[neu] input/antragspruefung.md: „Antragsprüfung im Sachgebiet“ (Rohtext)
ähnlich (0.44): Entwurf (lokal) entwuerfe/antrag-pruefen.md – „Antrag prüfen“
[abgelehnt] input/vorlage.docx: Dateityp .docx – vorerst nur .md
[eingelesen] input/wegebau.md: am 2026-09-20 10:12:03 +0200 (neu -> entwuerfe/wegebau-abnehmen.md)
```
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
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). |
| **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. |
Gibt es keinen passenden Prozess, legt der Agent einen neuen Entwurf an und schlägt einen Namen vor. Du kannst
ihn ändern.
## 5. Entwurf prüfen und freigeben
Der Agent schreibt den Entwurf nach `entwuerfe/<name>.md` und nennt die Stellen, an denen er etwas **annehmen**
musste (Schrittgrenzen, Verzweigungen, Zuständigkeiten). Genau dort lohnt der fachliche Blick.
- Als Diagramm ansehen: `python scripts/vorschau.py entwuerfe/<name>.md` – öffnet den Browser, offline.
- Änderungen direkt in `entwuerfe/<name>.md` machen oder dem Agenten sagen, was anders sein soll.
- Wenn es passt: *„passt so, wandle um“*. **Vorher wandelt der Agent nicht um.**
Danach liegt `entwuerfe/<name>.bpmn` bereit für den Import in PICTURE.
## 6. Der Vermerk
Nach erfolgreichem Einlesen steht in der ersten Zeile deiner Datei in `input/` ein Vermerk, zum Beispiel:
```
<!-- eingelesen: 2026-09-23 14:05:12 +0200 | neu | entwuerfe/antrag-pruefen.md | inhalt: 3f2a9c1e0b7d -->
```
Datum und Uhrzeit, Ergebnis (`neu` oder `aktualisiert`) und wo das Ergebnis liegt. In der Markdown-Vorschau ist die
Zeile unsichtbar, im Editor sichtbar. Bitte nicht von Hand ändern.
- **Unveränderte Dateien mit Vermerk** werden beim nächsten Einlesen übersprungen.
- **Änderst du die Datei danach**, erkennt das der Agent (Prüfsumme) und bietet sie als „geändert“ erneut an.
Der neue Vermerk kommt obenauf, der alte bleibt als Verlauf stehen.
- **Kein Vermerk** bei Überspringen, Abbruch oder wenn der Entwurf nicht freigegeben wurde.
## 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:
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.
3. **Du** pushst und stellst den Pull Request; eine Kollegin oder ein Kollege prüft.
## 8. Häufige Fragen
**Meine Word-Datei wird abgelehnt.** Vorerst nur `.md`, siehe Abschnitt 2.
**„keine UTF-8-Datei“.** Die Datei in VS Code öffnen, unten rechts auf die Codierung klicken → „Mit Codierung
speichern“ → UTF-8.
**Die Datei wird immer wieder als neu angezeigt.** Sie wurde übersprungen oder nicht freigegeben – dann gibt es
keinen Vermerk. Einlesen erneut starten und abschließen, oder die Datei aus `input/` entfernen, wenn sie nicht
mehr gebraucht wird.
**Der Agent hält zwei Prozesse für gleich, die es nicht sind.** Die Ähnlichkeit ist nur ein Hinweis. „Als neuen
Prozess anlegen“ wählen und einen unterscheidbaren Namen vergeben.
**Ich möchte eine Datei noch einmal komplett neu einlesen.** Die Vermerkzeilen oben löschen; dann gilt sie wieder
als neu.
**Kann ich mehrere Dateien auf einmal einlesen?** Ja, sie liegen alle in `input/`. Der Agent bearbeitet sie
nacheinander und fragt bei jeder einzeln.
## Siehe auch
- 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
+4
View File
@@ -30,6 +30,10 @@ Skills sind übernommen, alles QGIS- und Plugin-Spezifische ist entfernt. Kern i
## Erledigt
- 23.09.2026 **Eingangsordner `input/` und Skill `sn-einlesen`** (#5): `.md`-Dateien werden geprüft (andere
Typen vorerst abgelehnt), mit dem Bestand verglichen, nach Entscheidung des Nutzers durch `sn-bpmn` geführt und
bei Erfolg mit Zeitstempel vermerkt. Einsteiger-Ablauf: `docs/leitfaden/07_prozesse_einlesen.md`.
- 23.09.2026 **Regeln für PR- und Issue-Texte an AG_QGIS angeglichen:** Vertragsabschnitt in der PR-Vorlage
(„Änderungen an Syntax und Ablageformat“), Vertragsfrage in der Issue-Vorlage, Testpflicht wieder für jede neue
Funktionalität, vollständige Checklisten, kein Arbeitsbranch ohne Issue. `gitea.py` meldet ein nicht öffentliches
+6
View File
@@ -17,6 +17,12 @@ Kurz, konkret, mit Datum und Quelle. Neue Einträge oben in der passenden Rubrik
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)
- **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.
(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.py` liest deshalb als Bytes. (23.09.2026, Test)
- **Metadaten gehören nicht als Kopfzeile in die Arbeitsschritt-`.md`.** `parse_markdown()` liest eine Zeile wie
`Verantwortliche Stelle: …` als Schritt mit ID `Verantwortliche` und Typ `Stelle` und bricht ab. Status und Stand
stehen deshalb im Steckbrief `README.md` des Prozessordners. (23.09.2026)