From b4baef5875bbb0c464661969fc7c5cc90919dfed Mon Sep 17 00:00:00 2001 From: "Hermes (Server)" Date: Fri, 24 Jul 2026 10:37:13 +0200 Subject: [PATCH] =?UTF-8?q?Next=20Level=20Setup:=20Qualit=C3=A4ts-Gate=20+?= =?UTF-8?q?=20Projekt-Regeln=20(.hermes.md)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .githooks/pre-commit | 42 ++++++++++++++++++++++++++++++++++++++++++ .hermes.md | 20 ++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100755 .githooks/pre-commit create mode 100644 .hermes.md diff --git a/.githooks/pre-commit b/.githooks/pre-commit new file mode 100755 index 0000000..f20fda8 --- /dev/null +++ b/.githooks/pre-commit @@ -0,0 +1,42 @@ +#!/bin/bash +# Git Pre-Commit Hook: Melo App Qualitäts-Gate +# Läuft automatisch vor jedem git commit + +echo "🔍 Melo App Qualitäts-Gate gestartet..." + +# 1. Dart Analyse +echo -n " Prüfe: dart analyze ... " +ANALYZE_OUTPUT=$(flutter analyze 2>&1) +if echo "$ANALYZE_OUTPUT" | grep -q "No issues found"; then + echo "✅" +else + echo "❌ FEHLER!" + echo "$ANALYZE_OUTPUT" | tail -20 + exit 1 +fi + +# 2. Dart Formatierung +echo -n " Prüfe: dart format ... " +FORMAT_OUTPUT=$(dart format --set-exit-if-changed lib/ 2>&1) +if [ $? -eq 0 ]; then + echo "✅" +else + echo "❌ Formatierungsfehler! Führe 'dart format lib/' aus." + echo "$FORMAT_OUTPUT" + exit 1 +fi + +# 3. Tests +echo -n " Prüfe: flutter test ... " +TEST_OUTPUT=$(flutter test 2>&1) +if echo "$TEST_OUTPUT" | grep -q "All tests passed"; then + echo "✅" +elif echo "$TEST_OUTPUT" | grep -q "No tests found"; then + echo "⚠️ Keine Tests vorhanden (überspringe)" +else + echo "❌ Tests fehlgeschlagen!" + echo "$TEST_OUTPUT" | tail -20 + exit 1 +fi + +echo "✅ Alle Prüfungen bestanden! Commit wird freigegeben." diff --git a/.hermes.md b/.hermes.md new file mode 100644 index 0000000..451642e --- /dev/null +++ b/.hermes.md @@ -0,0 +1,20 @@ +# Melo App — Entwickler-Regeln (Ponytail-Prinzip) + +Dieses Projekt wird nach dem **Ponytail-Prinzip** entwickelt: minimaler Code, maximale Wirkung, keine überflüssigen Abstraktionen. + +## 📐 Kernregeln für die Entwicklung + +### 1. Minimalismus & Struktur +- **Kein Overengineering:** Keine komplexen Repository-Muster oder unnötige Service-Klassen. Direkte, einfache Lösungen (wie Singleton-Datenbank-Helfer direkt in ViewModels/Widgets) sind bevorzugt. +- **Dateigröße:** Versuche, Dateien unter 500 Zeilen zu halten. Größere UI-Teile oder Widgets in separate Widget-Dateien auslagern. +- **Maximal 100 Zeilen pro Task:** Halte die Änderungen pro Commit kompakt und zielgerichtet (max. ~100 Zeilen neuer Code). + +### 2. Sprachregeln (Deutsch) +- **Variablen & Methoden:** Alle Bezeichner für Variablen, Methoden, Funktionen und Widgets werden **strikt auf Deutsch** benannt (z. B. `_ladeSongs()`, `_aktiverTab`, `letzteSongs`). +- **Kommentare:** Dokumentation und Code-Kommentare werden ausschließlich auf Deutsch verfasst und erklären das *Warum*, nicht das *Was*. + +### 3. Qualitäts-Sicherung & Tests +- **Ressourcen freigeben:** Stelle sicher, dass jede `StreamSubscription` und jeder `AudioPlayer` in `dispose()` der Widgets oder Services ordnungsgemäß gecancelled/geschlossen wird, um Speicherlecks zu verhindern. +- **Fehlerbehandlung:** Jeder Dateizugriff, Web-Download oder Datenbank-Vorgang wird mit einem sicheren `try-catch`-Block abgesichert. +- **Sicherer Build:** Vor jedem Commit muss die App fehlerfrei bauen. Führe im Zweifel einen schnellen Test-Build durch: + `flutter build apk --release --split-per-abi`