# Architecture Rule — BreakPilot Lehrer ## 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 ## Python (backend-lehrer, klausur-service, voice-service) - Routes duenn halten — Business Logic in Services - Persistenz in Repositories/Data-Access-Module - Pydantic Schemas nach Domain splitten - Zirkulaere Imports vermeiden ## Go (school-service, edu-search-service) - Handler duenn halten (≤40 LOC) - Business Logic in Services/Use-Cases - Transport/Request-Decoding getrennt von Domain-Logik ## TypeScript / Next.js (admin-lehrer, studio-v2, website) - page.tsx duenn halten — Server Actions, Queries, Forms auslagern - Monolithische types.ts frueh splitten - types.ts + types/ Shadowing vermeiden - Shared Client/Server Types explizit trennen ## 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