- scripts/check-loc.sh: LOC budget checker (500 LOC hard cap) - .claude/rules/architecture.md: split triggers, patterns per language - .claude/rules/loc-exceptions.txt: documented escape hatches - AGENTS.python.md: FastAPI conventions (routes thin, service layer) - AGENTS.go.md: Go/Gin conventions (handler ≤40 LOC) - AGENTS.typescript.md: Next.js conventions (page.tsx ≤250 LOC, colocation) - CLAUDE.md extended with guardrail section + commit markers 273 files currently exceed 500 LOC — to be addressed phase by phase. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
47 lines
1.4 KiB
Markdown
47 lines
1.4 KiB
Markdown
# 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
|