diff --git a/docs/fix-plan-v3.md b/docs/fix-plan-v3.md index 3489115..1e1fb8d 100644 --- a/docs/fix-plan-v3.md +++ b/docs/fix-plan-v3.md @@ -500,62 +500,117 @@ Block D (pytest-Massen, DateTime, API-Pfade, Separate Tracks S1–S3: danach, unabhängig ``` -# BLOCK I — Keine bekannten Fehler mehr (NEU 2026-08-24, nach Block E) +# BLOCK I — Keine bekannten Fehler mehr (NEU 2026-08-24, VOLLSTÄNDIG überarbeitet) -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. +Ziel: Nach Abarbeitung dieses Blocks gibt es KEINEN bekannten Fehler mehr. +Grundlage: Vollständiger Abgleich aller Quellen — test-bugs.md (73 ⏳-Findings, +davon einige stale), Suite v2 (brach bei 77% ab, Restzone nie gemessen), +Blöcke F/G aus diesem Plan, S-Tracks S1/S2/S3. -### 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. +## I-A Stale-Status korrigieren (~1 Std) +Folgende Findings sind in dieser Reparatur-Serie bereits gefixt, aber die +Status-Markierung in test-bugs.md fehlt. Erst Dokumentation nachziehen: +- ARCH-051 (dict-body → Pydantic, c32e4bb), ARCH-055 (user_agent), + ARCH-056 (SYSTEM_PERMISSIONS), ARCH-057 (_plugins→public API), + ARCH-027 (verifiziert implementiert + strenger), + BUG-085–092 (D1-Ziel-Suites alle grün 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. +## I-B Suite v2 Restzone messen und triagieren (~1 Tag) +Suite v2 brach bei 77% ab (EEEE-Kette, vermutlich Mail-artige Hänger in einer +weiteren Suite). Die Suiten DANACH wurden nie gemessen: +- Hängende Suite identifizieren (--timeout pro Test setzen), mocken oder fixen. +- Voll-Lauf v3 OHNE Ausschlüsse mit per-Test-Timeout → definitive Failure-Liste. +- Jede Failure klassifizieren (Produktionsbug / Test-Harness / Vorbestand) und fixen. +Gate: pytest tests/ komplett durchgelaufen, 0 Failures, 0 Errors. -### 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. +## I-C Produktionsrelevante offene Bugs fixen (~2 Tage) +Aus dem Abgleich wirklich offen (nicht stale): +- BUG-024: GET /api/v1/plugins/{name} → 404 (Plugin-Detail-Route fehlt). +- BUG-036: GET /api/v1/workflows/instances → 500. +- BUG-071: Merge-API braucht source_contact_id/target_contact_id. +- ARCH-042: calendar/dms get_contract() erzeugt NEUE Instanz statt registrierte. +- ARCH-048: register_workflow_event_handlers nutzt falschen payload key. +- ARCH-050: engine.py acquire_lock awaitet nicht-async get_redis(). +- ARCH-032: knowledge/wiki unregister_actions_by_owner falsche Signatur. +- BUG-015: Cross-Plugin Imports — 6 verbleibende Violations (nach Block B waren es + 14→6; die 6 Restlichen fixen oder als erlaubte Ausnahmen whitelisten). +- BUG-006: wiki/plugin.py verbotene Cross-Plugin Imports (prüfen ob Block B sie + bereits eliminierte; sonst fixen). +- BUG-017/ARCH-011: Core-to-Plugin Imports (10 + 27) — prüfen welche durch Block B + entfielen, Rest fixen oder dokumentiert whitelisten (Contract-only). +- BUG-009/010/011/013/014/016/023: Einzelfixes laut test-bugs.md Details. +- BUG-027–035: Test-/Doku-Pfad-Korrekturen (teils in D3 als obsolet verifiziert — + Status-Markierung nachziehen, Rest korrigieren). +- BUG-039: entity-links API Pfad in Tests korrigieren. +- BUG-078: 3 dead functions entfernen oder aufrufen. +- BUG-100: 4 spike_i_integration_flow Failures triagen. +- BUG-068: Field-Level Permissions in contacts routes implementieren (Medium, + echtes Feature-Gap). +- ARCH-026: Plugin Cross-Dependencies deklarieren (Manifest dependencies Feld). +Gate: grep '⏳' docs/test-bugs.md = nur noch bewusst akzeptierte Ausnahmen +(mit Begründung), alles andere ✅. -### 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. +## I-D Frontend-Konsistenz (~1 Tag) +- Geister-Komponenten: @/pages/AIAssistant + 5 Contact-Detail-Tabs bauen oder + Manifest-Einträge entfernen. +- D5-Rest-API-Brüche ×12: ai/sessions ×5, policies ×4, mail signatures/drafts/ + labels ×4, notifications DELETE, agents/skills (Frontend umstellen auf echte + Endpoints oder Backend-Shims). +- ARCH-061: routes/index.tsx leeres Route-Objekt entfernen. +- ARCH-028: PluginRouteRenderer 'Page Not Found' i18n. +- ARCH-025: ProtectedRoute.tsx hardcoded deutscher Pfad i18n. +- ARCH-062: MessageSidebar TeamPanel-Duplikat auf SharedTeamPanel (aus C8) umstellen. +- ARCH-063: SortableMenuItem LucideIcons-Wildcard → ICON_MAP (OOM-Fix aus C8 prüfen). +- ARCH-021: Sidebar statische UND dynamische Menüs konsolidieren (Rest nach C5/C6). +- ARCH-004: Workspace/Sidebar is_visible Konsistenz final verifizieren (C2 done, + Regressionstest ergänzen). +Gate: tsc --noEmit clean + Production-Build + keine ErrorBoundary-Fallbacks im +Smoke-Crawl der Hauptnavigation. -### 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). +## I-E Test-Hygiene Runde 2 (~2–3 Tage) +- Mail-Suite: IMAP/SMTP konsequent mocken (AsyncMock-Pattern) → ~28 Tests deterministisch. - 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'). +- BUG-099: workstream-Tests löschen oder umbauen (4 Failures, Modul Phase 2 entfernt). +- BUG-097/098/093–096: Rest-Failures dieser Suiten triagen (D1 deckte nur Teil ab). +- BUG-012/E2: Playwright helpers.ts auf echte API umstellen; E2E gegen Production-Build. +Gate: pytest tests/ komplett ohne --ignore durchgelaufen, 0 Failures/Errors. -### 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. +## I-F Sicherheit & Compliance abschließen (User + Agent, ~1 Tag) +- I5 Credential-Rotation (PFLICHT, User): 7 kompromittierte Credentials rotieren + (Anleitung deploy-guide.md § Credential-Rotation); SECRET_KEY zuletzt. +- G1 DSGVO (KRITISCH): Art. 15/17/20 Endpoints existieren teilweise (system_settings.py + dsar/export), aber grep 'gdpr' in app/routes+services war leer → vollständige + Implementierung + Tests + Verarbeitungsübersicht. +- G2 Session-Revocation bei Passwortänderung (aktuell nur Logout invalidiert). +- G3 Hygiene-Funde aus Final-Check umsetzen. +- E4 Monitoring-Reality-Check: Alerting einmal real durchspielen, dokumentieren was alarmiert. +- E5 Performance-Baseline: Top-10-Endpoints p95 mit seed_perf_data.py; Schwellwerte dokumentieren. + +## I-G Qualität/Hygiene S-Tracks einplanen (~2–3 Tage, kann parallel) +- BUG-018: 36 Python God Objects >500 Zeilen — Split-Programm priorisiert nach + Hotspots (nicht Big-Bang; je Datei eigener Commit + Tests). +- BUG-081: 9 Frontend God Objects >500 Zeilen — gleiche Methodik. +- BUG-021/ARCH-024/045: i18n — 165 hardcoded Strings auf t() umstellen. +- BUG-022/070: npm audit fix (3+3 Vulnerabilities) + pip-audit-Routine in CI. +- ARCH-026: Plugin Cross-Dependencies deklarieren (falls nicht schon in I-C). +Gate: keine Datei >500 Zeilen in den priorisierten Hotspots; npm audit clean; +pip-audit clean; i18n-Scanner <10 Treffer. ## 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 +I-A (Stale-Status, sofort — ehrliche Basis) +I-B (Suite v2 Restzone messen — definitive Zahlen) +I5/I-F Rotation (User, sofort parallel — Sicherheit) +I4 (CI-Gate scharf, parallel — Driftschutz) +I-C (Produktionsbugs) → I-D (Frontend-Konsistenz) +I-E (Test-Hygiene Runde 2) → I-F Compliance → I-G S-Tracks ``` + +## Gate I — Definition von 'keine bekannten Fehler mehr' +1. pytest tests/ komplett durchgelaufen (kein Timeout, kein --ignore): 0 F, 0 E. +2. trace_api_contracts gegen Live-OpenAPI: 0 echte Findings. +3. grep '⏳' docs/test-bugs.md: nur noch bewusst akzeptierte Ausnahmen MIT Begründung. +4. 0 Geister-Komponenten; Production-Build + Smoke-Crawl der Navigation ohne ErrorBoundary. +5. Credentials rotiert (alle 7); CI-Gate aktiv (Runner + Branch-Protection). +6. DSGVO Art. 15/17/20 implementiert und getestet; Session-Revocation aktiv. +7. ruff/tsc/mypy clean; npm/pip audits clean.