diff --git a/docs/fix-plan-v3.md b/docs/fix-plan-v3.md index 9825ad2..3489115 100644 --- a/docs/fix-plan-v3.md +++ b/docs/fix-plan-v3.md @@ -499,3 +499,63 @@ Block D (pytest-Massen, DateTime, API-Pfade, Security-Triage, Marathon-Triage, Legacy) → Full Regression Separate Tracks S1–S3: danach, unabhängig ``` + +# BLOCK I — Keine bekannten Fehler mehr (NEU 2026-08-24, nach Block E) + +Ziel: Vom Stand 'Architektur repariert + bekannte Defekte dokumentiert' zu +'keine bekannten Fehler'. Jeder Punkt unten ist aus der Reparatur-Serie +bewiesen und mit Root-Cause versehen — nichts davon ist Spekulation. + +### I1 API-Verkabelung abschließen (~1 Tag) +Die 12 echten Brüche aus der D5-Triage (scanner-verifiziert, Rest waren Fehlalarme): +- `/ai/sessions`-Familie ×5 (Frontend nutzt tote Legacy-API; Backend hat `/ai/conversations`): Frontend-Client umstellen ODER Shim-Routen — Entscheidung vorab treffen. +- `/policies/{type}/{id}`-Nested ×4 (Backend nur PUT/DELETE `/policies/{policy_id}`): Frontend-Client anpassen. +- Mail signatures PATCH/DELETE ×2, mail drafts PATCH-vs-PUT ×1, mail labels DELETE ×1. +- DELETE `/notifications/{id}` ×1 (Backend nur PATCH `.../read`). +- GET `/agents/skills` ×1 (Backend `/agents/tools`). +Gate: trace_api_contracts gegen create_app().openapi() → 0 echte Findings; betroffene Frontend-Flows manuell verifiziert. + +### I2 Geister-Komponenten eliminieren (~2 Std) +Manifest-Einträge ohne existierende Komponente zeigen ErrorBoundary-Fallback: +- @/pages/AIAssistant (ai_assistant Menü+Route) — bauen oder entfernen. +- Contact-Detail-Tabs ×5 (calendar/dms/entity_links/mail/tags): bauen oder Manifest-Einträge entfernen. +Gate: Production-Build + kein Ghost-Finding mehr im Plugin-Manifest-Sync; Menü klickbar bis zum Ende. + +### I3 Test-Hygiene Runde 2 (~2–3 Tage) +Voll-Lauf v1 brach bei 44% ab (Mail-Hänger) — die Restzone ist ungetestet: +- I3-a Mail-Suite mocken (IMAP/SMTP via AsyncMock, Pattern exists in anderen Suiten): macht ~28 Tests deterministisch. +- I3-b Voll-Lauf v3 OHNE Ausschlüsse → jede Failure klassifizieren (Produktionsbug vs. Test-Veraltetheit) und fixen. Erwartet: 80–130 Failures gesamt, ~30% Produktionsrelevanz. +- I3-c Suite-für-Suite bis grün; Ziel: Voll-Suite grün als Merge-Gate-Beweis. + +### I4 CI-Gate scharf schalten (Server, ~2 Std) +- Forgejo Actions-Runner aktivieren (bisher total_count=0). +- Branch-Protection main: 'Merge nur bei grünem ci.yml-Lauf' + 'kein direkter Push auf main'. +- restore_drill.sh als wöchentlichen Job einhängen. + +### I5 Credential-Rotation (PFLICHT, User, ~1 Std) +7 kompromittierte Credentials (Git-Historie, siehe deploy-guide.md § Credential-Rotation): +Forgejo-Token, Coolify-Token, DB-Passwort, Redis-Passwort, SECRET_KEY, Admin-Passwort, +MAIL_ENCRYPTION_KEY. Reihenfolge laut Tabelle; SECRET_KEY zuletzt (invalidiert Sessions). +Nach Rotation: Health-Check + Deploy verifizieren. + +### I6 Kleinkram-Bündel (~1 Tag) +- BUG-099: workstream-Tests löschen oder auf neue Architektur umbauen (4 Failures). +- PluginLoader-Tests: erwartete UI-Texte angleichen (de/en, 5 Failures). +- `log_audit(details=...)`: Parameter persistieren ODER aus Signatur entfernen (Fallmine). +- Scanner-Qualität: stores/hooks-Scanner auf echte Member-Erkennung umstellen (aktuell False Positives wie 'const'/'null'). + +### I7 Server-Kontext-Follow-ups (E2/E4/E5, parallel zu I1–I6) +- E2: Playwright BASE_URL auf Production-Build + docker compose profile test. +- E4: Monitoring/Alerting einmal real durchspielen, was WIRKLICH alarmiert dokumentieren. +- E5: Performance-Baseline Top-10-Endpoints p95 mit seed_perf_data.py; Schwellwerte dokumentieren. + +## Reihenfolge von I +``` +I5 (Rotation, sofort — Sicherheit) +I4 (CI-Gate, parallel — Schutz vor Drift) +I1 (API-Verkabelung) → I2 (Geister) [User-sichtbar zuerst] +I3 (Test-Hygiene Runde 2) [größter Block] +I6 (Kleinkram) → I7 (Server-Kontext) +Gate I: Voll-Suite grün ohne Ausschlüsse + api_contracts 0 echte Findings + + 0 Geister-Komponenten + Credentials rotiert + CI-Gate aktiv +```