# Skill-Vertrag (Lektion 106: ein Protokoll, keine Sonderfälle) Komposition: 1 Rolle + 0..n Stile + 1 Aufgabe. Nur die Aufgabe definiert das Ausgabeformat. Welche Skills ein Knoten nutzt, steht AUSSCHLIESSLICH in pipeline.yaml (`skills:` + `extra_skills:`) — nie im Worker-Code. ## Prompt-Struktur (Parser und Fakes verlassen sich darauf) - Eingabe-Abschnitte: `NAME:` in GROSSBUCHSTABEN am Zeilenanfang, Inhalt in den Folgezeilen. Erlaubte Klammer-Zusätze klein dahinter. - Nummerierte Mehrfach-Eingaben: `=== NAME ===`-Zeilen. - Der Format-Abschnitt beginnt mit einer Zeile, die mit `Ausgabeformat` anfängt. Regeln stehen unter `Regeln:`. ## Ausgabe-Protokoll - Blöcke: `===MARKE===`, Felder `FELD: wert` (GROSS, 2-20 Zeichen). - Leere pro Eingabe-Element: genau EIN Marker projektweit — `===LEER===` mit dem ID-Feld des Elements. Kein NICHTS, kein OK, kein Freitext. - Leeres Einzel-Feld: genau EIN Wert projektweit — `KEINER`. - Paar-Aufgaben rendern Eingaben einheitlich über `textkit.paar_liste` (`PAAR n:` / `A:` / `B:`). - Protokoll-Tokens (Urteile wie `dublette`, `mangel`) sind sprachneutrale Enum-Marker und ändern sich bei Übersetzungen NICHT. Sprachvorgabe für Prosa-Ausgaben liegt allein im Stil-Skill (deutsch-praezise) — Aufgaben-Prompts enthalten keine sprachspezifischen Beispiel-Floskeln.