Erstes Commit
This commit is contained in:
56
AGENTS.md
Normal file
56
AGENTS.md
Normal file
@@ -0,0 +1,56 @@
|
||||
# Zwingende Regeln für jede Code-Interaktion
|
||||
|
||||
- Respektiere und fördere die Verwendung von Alpine.js und Tailwind CSS
|
||||
- Vor Änderungen analysiere den umliegenden Code um Kontext und Muster zu verstehen
|
||||
|
||||
## Technologie-Stack
|
||||
|
||||
| Komponente | Vorschrift |
|
||||
|---|---|
|
||||
| **Static Site Generator** | Hugo (Extended) – ausschließlich im Docker-Build-Image verfügbar; nicht auf dem Host installiert. Alle Hugo-Projektdateien **müssen** im Ordner `hugo/` abgelegt werden (z.B. `hugo/content/`, `hugo/layouts/`, `hugo/data/`). |
|
||||
| **Interaktivität** | Alpine.js 3.x + Alpine AJAX (0.x). |
|
||||
| **Styling** | Tailwind CSS für alle UI-Klassen. Direktes CSS ausschließlich in `hugo/input.css`. |
|
||||
| **Fließkomma-Arithmetik** | `decimal.js-light` ist die verbindliche Bibliothek. Keine native JavaScript-Float-Arithmetik für Berechnungen. |
|
||||
|
||||
## Ordner- & Datei-Struktur
|
||||
|
||||
- Hugo-Konventionen sind zwingend. Erlaubt unter `hugo/`: `hugo/content/`, `hugo/data/`, `hugo/layouts/`, `hugo/assets/`, `hugo/static/`.
|
||||
- **Verboten**: Dateien außerhalb dieser Konventionen zu erstellen oder Hugo-Dateien außerhalb von `hugo/` abzulegen.
|
||||
- Einheiten-Daten gehören nach `hugo/data/{slug}.json`.
|
||||
- Direktes CSS nur in `input.css`. Keine zusätzlichen `.css`-Dateien für Komponenten-Styles.
|
||||
|
||||
## Code-Formatierung
|
||||
|
||||
- Einrücken mit einem Tab
|
||||
- Ausnahme: YAML. Dort wird mit 2 Leerzeichen eingerückt.
|
||||
- Öffnende geschweifte Klammern **am Ende der Block-Definitions-Zeile** z.B. bei `if` oder `while` und Funktionsdefinitionen
|
||||
- Schließende geschweifte Klammern **in einer eigenen Zeile am Ende des Blocks**
|
||||
- Variablennamen und Funktionsnamen in **camelCase**
|
||||
- Maximale Zeilenlänge: **80 Zeichen**; danach manueller oder automatischer Umbruch.
|
||||
- **Einfache Anführungszeichen** `'` in JavaScript und Go; **doppelte Anführungszeichen** `"` in HTML-Attributen, JSON und YAML.
|
||||
- **Keine trailing spaces** am Zeilenende.
|
||||
- Jede Datei endet mit **genau einer Leerzeile** (POSIX-Konvention), aber keinem weiteren Whitespace in dieser Leerzeile.
|
||||
- **Keine mehrfachen Leerzeilen** hintereinander (maximal eine Leerzeile zur Trennung von Blöcken).
|
||||
- Kein Leerzeichen vor Komma, Semikolon oder Doppelpunkt; immer ein Leerzeichen danach.
|
||||
- JavaScript: Keine `var`-Deklarationen; `const` als Standard, `let` nur bei tatsächlicher Re-Assignation.
|
||||
- JavaScript: Asynchrone Operationen mit `async/await`; keine verschachtelten `.then()`-Ketten (Callback Hell).
|
||||
- JavaScript: Keine verschachtelten ternären Operatoren.
|
||||
- JavaScript: Arrow-Funktionen mit implizitem Return nur bei Einzeilern; mehrzeilige Arrow-Funktionen benötigen geschweifte Klammern und explizites `return`.
|
||||
- Hugo Templates / Go: Keine verschachtelten Template-Logiken über **3 Ebenen** hinaus (z. B. `{{ if }}` in `{{ range }}` in `{{ if }}`); komplexere Logik muss in ein Partial ausgelagert werden.
|
||||
|
||||
## Verbotene Techniken & Anti-Patterns
|
||||
|
||||
- **Keine Änderungen im `app` Ordner** Der Ordner ist die Vorlage für die Migration und ist für Änderungen tabu.
|
||||
- **Keine leeren `catch`-Blöcke.** Ein leerer `catch` muss mit einem erklärenden Kommentar versehen sein.
|
||||
- **Keine überlangen Funktionen.** > 40 Zeilen signalisieren, dass eine Funktion aufgeteilt werden sollte.
|
||||
- **Keine tiefen Verschachtelungen.** > 3 Einrückungsebenen (z. B. `if`-in-`if`-in-`if`) sind zu refactoren.
|
||||
- **Keine magischen Zahlen oder String-Literale.** Werte mit semantischer Bedeutung müssen als benannte Konstanten definiert werden.
|
||||
- **Keine ungenutzten Imports, Variablen oder Funktionen.** Sie müssen entfernt werden.
|
||||
- **Keine `console.log`, `alert` oder `debugger` im Committeten Code.**
|
||||
- **Keine doppelten Negationen.** Verwende explizite Boolean-Casts statt `!!`.
|
||||
- **Keine globalen Variablen.** Daten müssen im jeweiligen Scope oder per explizitem State-Management (z. B. Alpine `x-data`) gehalten werden.
|
||||
|
||||
## Automatisierte Tests
|
||||
|
||||
- Vor Abschluss eines Features oder einer Änderung **muss** der Docker-Build-Test erfolgreich durchlaufen: `./tests/test-docker-build.sh`
|
||||
- Der Test prüft drei Ebenen: erfolgreicher `docker build`, existenz wichtiger Artefakte (`index.html`, `css/main.min.css`, `robots.txt`) und ein HTTP-Smoke-Test gegen den laufenden Container.
|
||||
Reference in New Issue
Block a user