# Architecture Rule — BreakPilot Core ## File Size Budget Hard default: **500 LOC max** per file. Soft targets: - Handler/Router/Service: 300-400 LOC - Models/Schemas/Types: 200-300 LOC - Utilities: 100-200 LOC Ausnahmen nur in `.claude/rules/loc-exceptions.txt` mit Begruendung. ## Split-Trigger Sofort splitten wenn: - Datei ueberschreitet 500 LOC - Datei wuerde nach Aenderung 500 LOC ueberschreiten - Datei mischt Transport + Business Logic + Persistence - Datei enthaelt mehrere unabhaengig testbare Verantwortlichkeiten ## Go (consent-service, billing-service) - Handler duenn halten (≤40 LOC pro Handler-Funktion) - Business Logic in Services/Use-Cases - Transport/Request-Decoding getrennt von Domain-Logik - Dateien im gleichen Package teilen Typen automatisch — kein Re-Export noetig - Models nach Domain splitten (user, consent, school, document, etc.) ## Python (backend-core, night-scheduler) - Routes duenn halten — Business Logic in Services - Persistenz in Repositories/Data-Access-Module - Pydantic Schemas nach Domain splitten - Zirkulaere Imports vermeiden ## TypeScript / Next.js (admin-core, pitch-deck) - page.tsx duenn halten — Server Actions, Queries, Components auslagern - _components/ + _hooks/ Konvention fuer Route-lokale Extracts - .ts Dateien mit JSX muessen .tsx heissen (Turbopack!) - Monolithische types.ts frueh splitten - types.ts + types/ Shadowing vermeiden ## Entscheidungsreihenfolge 1. Bestehendes kleines kohaeesives Modul wiederverwenden 2. Neues Modul in der Naehe erstellen 3. Ueberfuellte Datei splitten, neues Verhalten in richtiges Split-Modul 4. Nur als letzter Ausweg: Grosse bestehende Datei erweitern ## FINGER WEG (laufende RAG Pipeline) Diese Verzeichnisse duerfen NICHT refaktoriert werden: - `control-pipeline/` — RAG/Control-Extraction Pipeline - `rag-service/` — Semantische Suche - `embedding-service/` — Text-Embeddings - `voice-service/bqas/` — RAG Quality Assessment ## Workflow (bei jeder Aenderung) 1. Datei lesen + LOC pruefen 2. Wenn nahe am Budget → erst splitten 3. Minimale kohaerente Aenderung 4. Verifikation (Tests + Lint) 5. Zusammenfassung: Was geaendert, was verifiziert, Restrisiko ## LOC-Check ausfuehren ```bash bash scripts/check-loc.sh --changed # nur geaenderte Dateien bash scripts/check-loc.sh --all # alle Dateien (zeigt alle Violations) ``` ## Commit-Marker - `[split-required]` — Aenderung beginnt mit Datei-Split - `[guardrail-change]` — Aenderungen an .claude/**, scripts/check-loc.sh - `[interface-change]` — Public API Contracts geaendert - `[migration-approved]` — Schema-/Migrations-Aenderungen