Files
BauIN/CLAUDE.md
T
ChristophandClaude Opus 5.5 db2d5d6228 Mehrsprachigkeit der Oberfläche (Deutsch Standard, Englisch wählbar)
- Sprache je Benutzer (users.locale), Middleware SetLocale, Auswahl unter
  Einstellungen → Darstellung; angebotene Sprachen in config/app.php
- Übersetzungen über Laravel Lang (lang/de.json, lang/de/*.php), Seitentitel
  aus #[Title] werden übersetzt
- Eigene Texte und Korrekturen in lang/project/de.json, übernommen mit
  `artisan lang:apply-project` (überstehen `lang:update`)
- Tests: jede im Code verwendete Übersetzung ist vorhanden, eigene
  Übersetzungen sind übernommen, Sprachwahl und Standardsprache;
  SecurityTest prüft Texte sprachunabhängig über __()
- lang/ von Pint ausgenommen (erzeugte Dateien)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 09:52:20 +02:00

70 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# KI-BauIN – Hinweise für Claude Code
KI-gestützte Prüfung von Mehrkostenanzeigen (MKA) und Nachträgen im Bahnbau. Stack und
Begründungen: `docs/tech-stack.md`. Einrichtung und Adressen: `README.md`.
## Befehle (immer über Sail, PHP 8.5 im Container)
```bash
./vendor/bin/sail up -d
./vendor/bin/sail artisan test # alle Tests
./vendor/bin/sail artisan test --filter=NameDesTests # einzelner Test
./vendor/bin/sail bin pint # Code-Stil
./vendor/bin/sail bin phpstan analyse # statische Analyse, Stufe 7
./vendor/bin/sail composer require … # Pakete nur im Container installieren
npm run build # Assets (oder npm run dev)
```
Vor jedem Commit: Tests, Pint und PHPStan ohne Fehler. Der gitleaks-Hook (`.githooks`)
wird nicht umgangen.
## Harte Vorgaben
- **Alles lokal.** Keine Skripte, Fonts, Bilder oder APIs von fremden Hosts. Einzige Ausnahme
ist später die KI-API des Kunden. `tests/Feature/NoExternalResourcesTest.php` muss grün bleiben.
- `<x-ts-avatar>` nur mit `text` (Initialen), nie mit `model`, `gravatar` oder Bild-URL –
sonst lädt TallStackUI von ui-avatars.com bzw. gravatar.com.
- `<x-ts-reaction>` nicht verwenden (lädt Emojis von Google).
- **Keine echten Kundendaten** in Code, Tests, Fixtures, Seedern, Commits oder Prompts.
Nur erfundene Beispieldaten (z. B. Projekt „Musterstadt Süd“).
- **Rechte bei jeder geschützten Aktion prüfen** (Policies/Gates, Spatie laravel-permission):
in Controllern und Livewire-Aktionen, bei Downloads, bei Suchtreffern und bevor Inhalte an
ein Sprachmodell gehen. Die Oberfläche auszublenden reicht nicht.
- **Dateien privat speichern** (Disk `local`) und nur über eine Route mit Rechteprüfung ausliefern.
## Entwicklungsgrundsätze
- Eingaben serverseitig validieren.
- Geschäftslogik in Services (`app/Services/…`); Livewire-Komponenten steuern nur Anzeige und
Interaktion.
- Zusammengehörige Datenänderungen in einer Datenbanktransaktion.
- Lang laufende oder wiederholbare Arbeit (Dokumentverarbeitung, Embeddings, KI-Aufrufe) als
Job in der Warteschlange (`database`), mit begrenzten Wiederholungen und nachvollziehbarem Status.
- Tabellen, Formulare und Navigation aus gemeinsamen Layouts und Komponenten aufbauen.
- Jede fachliche Änderung mit Feature-Test.
## Konventionen
- **Livewire 4, klassenbasierte Komponenten:** Klasse in `app/Livewire/…`, View in
`resources/views/livewire/…`.
- **UI: TallStackUI 4 mit Präfix `ts-`** (`<x-ts-button>`, `<x-ts-input>`, `<x-ts-modal>` …).
Kurzdoku je Komponente: `vendor/tallstackui/tallstackui/.ai/components/`. Kein Flux.
Toasts/Dialoge aus Livewire über `TallStackUi\Traits\Interactions` (`$this->toast()->success(…)->send()`).
- **Eigene Blade-Komponenten ohne Präfix**, z. B. `<x-heading>`, `<x-subheading>`, `<x-user-menu>`.
- **Dark Mode** über `tallstackui_darkTheme()` am `<html>`-Element; Speicherschlüssel `dark-theme`.
- **Benennung:** Fachbegriffe deutsch (`Mehrkostenanzeige`, `LvPosition`, `Los`), technische
Begriffe nach Laravel-Konvention englisch (`Controller`, `Policy`, `Job`).
- **Länder DE/AT:** gemeinsamer Kern, länderspezifische Logik hinter Schnittstellen in
`app/Laender/DE` bzw. `app/Laender/AT`. Fachliche Tabellen bekommen `mandant_id` und `land`.
- **Mehrsprachigkeit:** Jeder sichtbare Text über `__('English source text')`, nie fest im
Template. Standardsprache Deutsch, angebotene Sprachen in `config('app.available_locales')`,
Sprache je Benutzer in `users.locale` (Middleware `SetLocale`).
- `lang/de.json` und `lang/de/*.php` erzeugt Laravel Lang – nicht von Hand ändern.
- Eigene Texte und Korrekturen gehören nach `lang/project/{locale}.json`, danach
`sail artisan lang:apply-project`. Nach `sail artisan lang:update` ebenfalls `lang:apply-project`.
- `TranslationCoverageTest` schlägt fehl, wenn ein Text ohne Übersetzung ist.
- In Tests Texte über `__()` prüfen statt fest auf Englisch oder Deutsch.
- **Tests:** Pest als Runner, Tests im PHPUnit-Klassenstil (`tests/Feature`, `tests/Unit`).
Tests laufen gegen die Datenbank `testing`, nie gegen `ki_bauin`.
- **Commit-Nachrichten** auf Deutsch.