# Next Steps - #TODO Unified error strategy (Definition) - Aufwand: `M` - Labels: `quality`, `api` - Ziel: Einheitliches Verhalten bei Fehlern. - Akzeptanzkriterien: - ADR/kurze Doku: wann `null/false`, wann Exception. - `sql.php`, `link-meta.php`, `troy-api.php` folgen derselben Strategie. - Mindestens 3 Beispiele in `README.md` dokumentiert. - Festlegung: - Exceptions fuer interne/unerwartete Fehler (Konfiguration fehlt, DB/HTTP/JSON-Fehler, Parsing-Fehler, invalide Argumente). - `null` nur fuer "kein Ergebnis" als erwarteter Zustand (z. B. URL ohne OG-Metadaten). - `false` nur fuer boolesche Checks/Operationen mit reinem Erfolg-Flag; keine Detailfehler ueber `false`. - Keine Mischung pro Funktion: jede Funktion dokumentiert exakt einen Fehlerkanal in PHPDoc/README. - Alle gecatchten Exceptions werden mit Kontext weitergeworfen (ohne Secrets), nicht still geschluckt. - #TODO Complete `secret.php.example` - Aufwand: `S` - Labels: `docs`, `config` - Ziel: Vollstaendige Vorlagedatei fuer lokale Setups. - Akzeptanzkriterien: - Alle erwarteten Variablen aus `sql.php`, `mail.php`, `troy-api.php` enthalten. - Jede Variable hat kurzen Kommentar. - Dateiformat entspricht direkt nutzbarer Vorlage. - #TODO Remove `@` error suppression incrementally - Aufwand: `M` - Labels: `quality`, `safety` - Ziel: Fehler sichtbar und kontrolliert behandeln. - Akzeptanzkriterien: - Alle `@`-Operatoren inventarisiert. - Ersetzungen mit explizitem Error-Handling umgesetzt. - Keine neue `@`-Verwendung in geaenderten Dateien. - #TODO Sicherheit und Robustheit - #TODO Harden URL fetching against SSRF - Aufwand: `M` - Labels: `security`, `network` - Akzeptanzkriterien: - Private/loopback ranges werden blockiert. - Optionales Host-Allowlist-Feature vorhanden. - Tests fuer geblockte und erlaubte Ziele vorhanden. - #TODO Improve SQL error handling + logging - Aufwand: `M` - Labels: `sql`, `robustness` - Akzeptanzkriterien: - `prepare()`/`execute()`-Fehler werden explizit behandelt. - Fehler enthalten Query-Kontext ohne Secrets. - Verhalten entspricht der definierten Error-Strategie. - #TODO Replace fragile HTML allowlist sanitizer - Aufwand: `M` - Labels: `security`, `string` - Akzeptanzkriterien: - `onlySimpleHTML()` wird durch robusteren Ansatz ersetzt. - Erlaubte Tags sind konfigurierbar dokumentiert. - Regression-Tests fuer typische Eingaben vorhanden. - #TODO Code-Qualitaet - Sammel-Issue: Naming-Konvention, SQL-Binding-Refactor, Legacy-Markierung, Markdown-Konsolidierung, klare Modulgrenzen. - Aufwand: `L` - Empfehlung: in 3-5 Unter-Issues aufteilen. - #TODO Tests und Tooling - #TODO Bootstrap test/tooling baseline - Aufwand: `M` - Labels: `testing`, `ci` - Akzeptanzkriterien: - PHPUnit laeuft lokal mit ersten Smoke-Tests. - PHPStan/Psalm auf niedriger Stufe integriert. - CI fuehrt mindestens Lint + Tests bei Push aus. - #TODO Prepare Composer + namespace migration path - Aufwand: `L` - Labels: `architecture` - Akzeptanzkriterien: - Vorschlag fuer Zielstruktur (`src/`, namespaces, autoload). - Migrationsplan fuer prozedurale Helfer zu Klassen. - Konfigurationsobjekt und HTTP-Adapter als Zielbild beschrieben. ## Empfohlene Reihenfolge 1. `#1` bis `#5` (kurzfristig, hoher Hebel) 2. `#6` bis `#10` (Sicherheit/Robustheit) 3. `#11` (Tests + CI als Guardrail) 4. `#12` und Sammel-Issue aus Abschnitt 3