docs(plan): Block I VOLLSTÄNDIG überarbeitet — alle Fehlerquellen einbezogen nach Abgleich von test-bugs.md (73 ⏳-Findings), Suite v2 Restzone (brach bei 77% ab), Blöcke F/G aus Originalplan, S-Tracks S1/S2/S3; Struktur: I-A Stale-Status → I-B Restzone messen → I-C Produktionsbugs → I-D Frontend → I-E Test-Hygiene Runde 2 → I-F Sicherheit/Compliance → I-G S-Tracks; Gate I = 7 konkrete Kriterien für keine bekannten Fehler
This commit is contained in:
+102
-47
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user