Erster Stand des öffentlichen Ausschnitts aus dem Vault. Die .gitignore arbeitet als Positivliste: ausgeschlossen ist alles, eingeschlossen nur, was ausdrücklich wieder aufgenommen wird. Notizen, Projekte, Finanzen, das Sitzungsgedächtnis und settings.local.json bleiben damit außen vor. Der Kundenname in AI/Regelwerk/seo.md ist durch eine neutrale Bezeichnung ersetzt; die Regeln selbst sind unverändert. Co-Authored-By: Claude Opus 5 <[email protected]>
5.4 KiB
Entwurf: Konsistenzprüfung der Anweisungsschicht
Geschrieben am 2026-08-30 vor der ersten Zeile Code, wie es AI/Regelwerk/pruefwerkzeuge §1 verlangt.
Was die Prüfung beantworten soll — und woher die Antwort kommt
| # | Frage | Herkunft | Auflösung |
|---|---|---|---|
| 1 | Zeigt jeder Wikilink auf eine existierende Datei? | Quelle — Dateisystem | Ziel ist <link>.md oder <link> relativ zum Vault-Root. Alias nach | wird abgeschnitten, Anker nach # ebenso. |
| 2 | Trägt jede Regelwerk-Datei die Pflichtfelder im Frontmatter? | Projektvorgabe — abgelesen an den sieben bestehenden Dateien | type, status, title, summary, tags, created, updated |
| 3 | Ist jede Regelwerk-Datei vom Stamm aus verlinkt? | Projektvorgabe — CLAUDE.md, Abschnitt „Regelwerk" | Eine Datei, die niemand verlinkt, wird nie geladen. |
| 4 | Steht eine Regelwerk-Datei auf status: pending-review? |
Projektvorgabe — CLAUDE.md, Abschnitt „Selbstpflege" | Hinweis, kein Fehler: die Freigabe steht aus. |
| 5 | Weicht das model: einer Agentendefinition von der Rollentabelle im Stamm ab? |
Projektvorgabe — CLAUDE.md, Tabelle „Agenten & Modelle" | Die Tabelle wird gelesen, nicht im Skript nachgebaut. |
| 6 | Nennen mehrere Dateien die Planablage-Konvention widersprüchlich? | Projektvorgabe — codeworkflow.md ist maßgeblich |
Siehe Auflösung unten. |
Die drei Annahmen, die vor dem Code aufgelöst wurden
Annahme A: „Ein Pfad in Backticks ist ein Vault-Pfad." Falsch. Backticks tragen auch Befehle (python …), Frontmatter-Schlüssel (modell:), Dateinamen ohne Ort (CHANGELOG.md) und Beispielwerte. Eine allgemeine Pfadprüfung wäre eine Heuristik im Positivlisten-Gewand.
→ Aufgelöst durch Streichung. Frage 2 der ersten Fassung („existiert jeder Pfad in Backticks") ist nicht Teil der Prüfung. Wikilinks werden geprüft, Backtick-Pfade nicht. Das steht als benannte Lücke im Kopfkommentar.
Annahme B: „Aus Fließtext lässt sich ablesen, welches Modell ein Agent fährt." Falsch. „Executer-Subagent (executer, Sonnet — bei reiner Abschrift Haiku…)" ist für einen Menschen eindeutig und für ein Skript nicht.
→ Aufgelöst durch Einschränkung des Geltungsbereichs. Geprüft wird ausschließlich das model:-Feld im Frontmatter der Agentendateien gegen die Rollentabelle im Stamm. Fließtextaussagen über Modelle prüft das Skript nicht — benannte Lücke.
Annahme C: „Eine widersprüchliche Konvention ist maschinell erkennbar." Nur eingeschränkt.
→ Aufgelöst durch eine erzwungene Form. Das Skript sucht das Literal docs/plans/JJJJ-MM-TT und klassifiziert das unmittelbar folgende Zeichen: / = Ordnerform, . = Dateiform. Regel: Wer die Dateiform nennt, ohne die Ordnerform zu nennen, ist ein Befund — denn codeworkflow.md schreibt beide vor und die Ordnerform ist die, die vergessen wird. Genau dieser Fall lag am 2026-08-30 in planer.md vor.
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.
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.
Angriffsliste — einmal vollständig
Je Fall eine Wegwerfkopie des Vaults, Rücksetzen dazwischen, Exit-Code und auslösende Meldung protokolliert. Vor allem läuft die Grundlinie: die unbeschädigte Kopie muss sauber durchlaufen, sonst misst der Rest nichts.
| Klasse | Fall |
|---|---|
| Grundlinie | unveränderter Vault → Exit 0 |
| fehlt | Pflichtfeld summary aus einer Regelwerk-Datei entfernt |
| fehlt | Regelwerk-Datei nicht mehr im Stamm verlinkt |
| null | status: auf leeren Wert gesetzt |
| leer | Regelwerk-Datei auf 0 Byte gekürzt |
| zusätzlich | neue Regelwerk-Datei, die niemand verlinkt |
| Wertebereich | model: sonnet in pruefer.md (Tabelle sagt opus) |
| Verweis ins Leere | Wikilink auf nicht existierende Datei |
| Konvention | Dateiform der Planablage ohne Ordnerform |
| Reihenfolge | toter Wikilink an erster und an letzter Position derselben Datei |
| Umgebung | --vault zeigt auf ein Verzeichnis ohne CLAUDE.md |
| Umgebung | AI/Regelwerk/ fehlt vollständig |
| Umgebung | Rollentabelle im Stamm nicht auffindbar |
Die letzten drei sind die wichtigsten: Sie prüfen, dass eine fehlende Voraussetzung ein Befund ist und kein Grund zu schweigen (§6).
Abbruchbedingung, vor der ersten Runde benannt
Schluss ist, wenn eine Runde nur noch Umformulierungen findet oder wenn alle verbleibenden Befunde dieselbe Antwort haben. Die Prüfung ist fertig, wenn alle dreizehn Fälle der Angriffsliste anschlagen und die Grundlinie grün ist — nicht, wenn sie „durchläuft".
Was diese Prüfung ausdrücklich nicht ist
Ein Fangnetz gegen formale Widersprüche. Kein Nachweis, dass die Anweisungsschicht widerspruchsfrei ist. Zwei Dateien können dieselbe Regel in verschiedenen Worten gegensätzlich formulieren, und die Prüfung meldet null Befunde. Der belastbare Nachweis ist das Lesen — die Prüfung nimmt nur die Formalien aus dem Weg, damit beim Lesen Kontext für den Inhalt bleibt.