# Globale CLAUDE.md ## Sprache Alle Texte, Kommentare und Kommunikation auf Deutsch. Technische Begriffe und Code-Bezeichner bleiben im Original. ## Dokumentenformat **Immer AsciiDoc (`.adoc`) statt Markdown** für alle Dokumente (Analysen, Pläne, Berichte, Anfragen usw.). Neue Dokumente als `.adoc` anlegen. Bestehende `.md`-Dateien nur auf ausdrücklichen Wunsch konvertieren. Ausnahmen: von Tools erzwungene Dateien (`CLAUDE.md`, `MEMORY.md`, `README.md` wo vom Workflow verlangt) bleiben Markdown. **Erledigtes wird gelöscht, nicht markiert.** In Listen offener Punkte einen erledigten Eintrag ersatzlos entfernen — kein „erledigt"-Vermerk, kein Durchstreichen. Ebenso keine Metadaten ohne Aussagekraft (Mess-/Erhebungsdatum), wenn nur der Wert zählt. ## Entwicklungsprinzipien - **Single Responsibility:** Jede Datei, jede Funktion hat genau eine Aufgabe - **Keine toten Code-Pfade:** Unbenutzte Imports, Variablen, Funktionen sofort entfernen - **Aussagekraeftige Namen:** Sprechende Bezeichner statt `handleClick`, `process` - **Keine Magic Numbers:** Konstanten mit Namen versehen - **DRY mit Augenmass:** Shared Utilities nur bei echtem Mehrfachgebrauch - **Fail Fast:** Fehlende/ungueltige Konfiguration muss beim Start eine Exception werfen - **Explizit vor implizit:** Zustand oder Absicht nie implizit aus Momentanwerten ableiten (fragil/nicht robust). Trigger deklarieren ihre Absicht ueber ein dediziertes Item/Flag; die auswertende Logik liest dieses Item, statt den Zustand zu erraten - **Keine generischen `try/except`:** Spezifische Exceptions fangen - **Logging statt print:** `logger` verwenden - **Testpflicht:** Kein Code ohne zugehoerigen Test - **Security by Default:** Input-Validierung, Auth-Checks, sichere Defaults. Sicherheitskritische Pfade durch Tests absichern - **String-Eingaben trimmen:** Alle String-Felder beim Anlegen/Update in Services/Schemas trimmen (leading/trailing Whitespace entfernen). Leerstrings werden zu `None`, wenn das Feld optional ist. Verhindert Sortier-/Vergleichs-/Suchfehler durch unsichtbare Zeichen - **Kleine Funktionen, keine Kommentare fuer Offensichtliches** - **Kommentare hoechstens eine Zeile:** Ein Kommentar beschreibt kurz, *was* an dieser Stelle passiert (z.B. `// Messwerte pruefen`, `// zu spaet fuer Sperre`, `// Ladestand unterhalb Reserve`). Niemals das *Warum*, keine Begruendungen, keine Messwerte, keine verworfenen Alternativen, keine Mehrzeiler. Das Warum gehoert in die Commit-Message und ist dort in der Git-Historie nachlesbar - **Keine systemveraendernden Scripts zum Testen ausfuehren:** Scripts die Symlinks, Berechtigungen, Pakete oder Konfiguration aendern niemals "einfach so" ausfuehren. Stattdessen mit `bash -n` (Syntax) oder gezieltem `grep`/`cat` pruefen ## Code-Konventionen - **Backend:** Ruff, Type Hints, async, Pydantic-Schemas, Lifespan statt `on_event` - **Frontend:** `