regelwerk_check: Pruefung 7 meldet unsichtbare Zeichen in gespeicherten Workflows

Jedes Zeichen der Kategorie Cc ausser LF und jedes der Kategorie Cf in
.claude/workflows/**/*.js, gelesen als Bytes. Anlass: plankritik.js mit
CRLF scheiterte am Workflow-Werkzeug. Der Hook nach dem Bearbeiten loest
auch bei Workflows aus. Regressionslauf 28/28 angeschlagen, 6/6 stumm;
Hook-Treiber 58/58; Vorfall in exakter Form gemeldet (U+000D).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
Pascal MichelandClaude Opus 5.5 committed 2026-09-26 20:54:51 +02:00
1 parent 3082ab5b75
commit e50c8296d7
7 files changed
+184 -13

No files matched your search

+22 -2
View File
@@ -48,11 +48,25 @@ Benannte Lücken, bewusst nicht geprüft:
Dazu zwei Korrekturen am Regressionslauf, die mit diesem Nachtrag gekommen sind: Die Grundlinie setzt `status: pending-review` in ihrer Kopie auf `reference`. Vorher brach der Lauf nach jeder Selbstpflege an der Grundlinie ab, weil Prüfung 4 dann anschlägt — gemessen am 2026-09-23. Und Prüfung 4 bekommt dafür erstmals einen eigenen Angriffsfall.
## Nachtrag 2026-09-26: Prüfung 7, unsichtbare Zeichen in gespeicherten Workflows
Geschrieben vor der Änderung am Skript. Anlass: Am 2026-09-25 und 26 lehnte das Workflow-Werkzeug `plankritik.js` ab („script contains control characters that would be hidden in the approval dialog“). Die Datei trug CRLF im Arbeitsbaum. Pascal hat die Prüfung am 2026-09-26 als Punkt 4 des Pakets „Arbeitsweise“ freigegeben. Plan: `docs/plans/2026-09-26-workflow-steuerzeichen/` in diesem Ordner.
| # | Frage | Herkunft | Auflösung |
|---|---|---|---|
| 7a | Welche Zeichen weist das Werkzeug ab? | **Quelle** nur für CR (der Vorfall). Die Zeichenmenge steht im Abbild von Claude Code 2.1.281 nicht eindeutig neben der Meldung (am Abbild gelesen 2026-09-26). | Der Rest ist unbelegt und wird nicht geraten. |
| 7b | Welche Zeichen meldet die Prüfung? | **Projektvorgabe** | Jedes Zeichen der Unicode-Kategorie Cc außer LF und jedes der Kategorie Cf. Das ist eine geschlossene Menge und eine Obermenge dessen, was belegt ist. Tab wird gemeldet, obwohl unbelegt ist, ob das Werkzeug ihn abweist. |
| 7c | Welche Dateien? | **Projektvorgabe** | Jede `*.js` unter `.claude/workflows/`, auch in Unterordnern. |
| 7d | Wie gelesen? | **Quelle** — Erinnerung `gespeicherter-workflow-per-name-scheitert` | Als Bytes. `read_text` übersetzt CRLF still und war beim Vorfall blind. |
| 7e | Kein UTF-8, Ordner fehlt oder ist leer | **Projektvorgabe** — `pruefwerkzeuge.md`, Abschnitte 4 und 6 | Kein UTF-8 ist ein Befund. Fehlt der Ordner oder ist er leer, gibt es nichts zu prüfen, und Schweigen ist richtig. |
Der Hook `session-hooks/regelwerk_nach_edit.py` löst seitdem auch bei Änderungen unter `.claude/workflows/` aus.
## Positivliste, nicht Negativliste
Alle sechs Prüfungen schränken **geschlossene** Mengen ein: die Menge der Wikilinks in einer Datei, die Menge der Pflichtfelder, die Menge der Agentendateien, die Menge der Regelwerk-Dateien. Es gibt keine Prüfung, die eine offene Menge verbotener Muster abzählt — und damit auch keine handgepflegte Negativliste, die gegen sie verlieren könnte.
Alle sieben Prüfungen schränken **geschlossene** Mengen ein: die Menge der Wikilinks in einer Datei, die Menge der Pflichtfelder, die Menge der Agentendateien, die Menge der Regelwerk-Dateien, die Menge der Zeichen zweier Unicode-Kategorien. Es gibt keine Prüfung, die eine offene Menge verbotener Muster abzählt — und damit auch keine handgepflegte Negativliste, die gegen sie verlieren könnte.
Die Begründung gilt **nur** für diese sechs Achsen. Sie gilt ausdrücklich nicht für die Frage, ob zwei Regeln inhaltlich dasselbe sagen. Das sieht die Prüfung nicht und kann es nicht sehen.
Die Begründung gilt **nur** für diese sieben Achsen. Sie gilt ausdrücklich nicht für die Frage, ob zwei Regeln inhaltlich dasselbe sagen. Das sieht die Prüfung nicht und kann es nicht sehen.
## Angriffsliste — einmal vollständig
@@ -83,6 +97,12 @@ Je Fall eine Wegwerfkopie des Vaults, Rücksetzen dazwischen, Exit-Code und ausl
| Umgebung | `--vault` zeigt auf ein Verzeichnis ohne CLAUDE.md |
| Umgebung | `AI/Regelwerk/` fehlt vollständig |
| Umgebung | Rollentabelle im Stamm nicht auffindbar |
| Steuerzeichen, **Reihenfolge** | CRLF in der ersten Workflowdatei und, als eigener Fall, ein CR in der letzten Zeile der letzten |
| Steuerzeichen | NUL, Bidi-Umkehr U+202E, BOM am Dateianfang, Tab, je ein Fall |
| Kodierung | Workflowdatei ist kein UTF-8 |
| zusätzlich | Workflowdatei mit CR in einem Unterordner |
| Gegenfall (muss stumm bleiben) | typografische Anführungszeichen, Striche, Auslassungspunkte, Umlaut und Euro im Workflow |
| Gegenfall (muss stumm bleiben) | Workflow-Ordner fehlt |
Die letzten drei sind die wichtigsten: Sie prüfen, dass eine fehlende Voraussetzung ein **Befund** ist und kein Grund zu schweigen (§6).