docs: Test-Plan Kategorie 55 — Architektur-Compliance Tests (Cross-Plugin Imports, Contracts, Plugin-Isolation, Model/Service/Route Dependencies, Hooks, Worker, Middleware, Manifests, DB-Architektur, Frontend-Architektur)

This commit is contained in:
Agent Zero
2026-08-21 21:44:26 +02:00
parent 1f8c4d5177
commit 00edc43e5c
+98
View File
@@ -993,6 +993,104 @@
---
## 55. Architektur-Compliance Tests
### 55.1 Cross-Plugin Import Check
- [ ] Kein Plugin importiert direkt aus einem anderen Plugin (außer über Contracts)
- [ ] `scripts/check_cross_plugin_imports.py` läuft clean (0 violations)
- [ ] wiki/plugin.py: Cross-Plugin Imports aus unified_search entfernen → Contracts verwenden
- [ ] Alle 25 Plugins auf direkte Imports aus anderen Plugins prüfen
- [ ] Plugin-Deaktivierung: Wenn Plugin A deaktiviert wird, darf Plugin B nicht crashen
### 55.2 Contract-Verwendung
- [ ] Jedes Plugin das mit anderen Plugins kommuniziert, nutzt Contracts
- [ ] `get_contract("plugin_name")` wird verwendet statt direkter Imports
- [ ] Contracts sind in `app/plugins/builtins/contracts.py` definiert
- [ ] Contract-Functions haben type hints und docstrings
- [ ] Contract-Versionierung: Wenn sich ein Contract ändert, wird die Version erhöht
### 55.3 Plugin-Isolation
- [ ] Jedes Plugin kann unabhängig aktiviert/deaktiviert werden
- [ ] Plugin-Deaktivierung entfernt alle Routes, Models, Hooks
- [ ] Plugin-Reaktivierung stellt alles wieder her
- [ ] Kein Plugin hat Hard-Dependencies auf andere Plugins (außer über Contracts)
- [ ] Plugin-Migration-Runner läuft isoliert pro Plugin
### 55.4 Model-Abhängigkeiten
- [ ] Kein Model importiert aus einem anderen Plugin-Model
- [ ] Foreign Keys zwischen Plugin-Tabellen gehen über Core-Tabellen (nicht direkt)
- [ ] Model-Tabellen haben tenant_id (TenantMixin)
- [ ] Model-Tabellen haben owner_id (OwnedMixin) wo erforderlich
- [ ] Keine zirkulären Model-Abhängigkeiten
### 55.5 Service-Abhängigkeiten
- [ ] Services importieren nicht aus Plugin-Modulen (nur aus Core und eigenen Plugin)
- [ ] Services haben keine zirkulären Abhängigkeiten
- [ ] Services nutzen Dependency Injection (FastAPI Depends)
- [ ] Services sind async (keine sync I/O in async Routes)
### 55.6 Route-Abhängigkeiten
- [ ] Routes nutzen `require_permission` Dependency für Auth
- [ ] Routes nutzen `get_current_user` Dependency für User-Context
- [ ] Routes nutzen `get_db` Dependency für DB-Session
- [ ] Routes validieren Input mit Pydantic Schemas
- [ ] Routes erstellen Audit-Log-Einträge bei Mutationen
- [ ] Routes haben korrekte HTTP-Status-Codes (200/201/204/400/403/404/422/500)
### 55.7 Hook-Registrierung
- [ ] Alle Hooks sind in `plugin.py on_activate` registriert
- [ ] Hooks werden in `on_deactivate` deregistriert
- [ ] Hook-Namen sind eindeutig (keine Namens-Kollisionen zwischen Plugins)
- [ ] Hooks haben korrekte Signaturen (async, korrekte Parameter)
### 55.8 ARQ Worker-Registrierung
- [ ] Alle Background-Jobs sind in `worker.py` registriert
- [ ] Job-Namen sind eindeutig
- [ ] Jobs haben retry-logic konfiguriert
- [ ] Jobs sind async
- [ ] Job-Queue wird korrekt verarbeitet
### 55.9 Middleware-Kette
- [ ] CORS Middleware korrekt konfiguriert
- [ ] CSRF Middleware korrekt konfiguriert
- [ ] Security Headers Middleware korrekt konfiguriert
- [ ] Rate Limit Middleware korrekt konfiguriert
- [ ] Request Logging Middleware korrekt konfiguriert
- [ ] Circuit Breaker Middleware korrekt konfiguriert
- [ ] Middleware-Reihenfolge ist korrekt
### 55.10 Plugin-Manifest-Validierung
- [ ] Jedes Plugin hat ein gültiges `manifest.py`
- [ ] Manifest hat: name, version, description, author, dependencies
- [ ] Manifest-Dependencies sind erfüllt (abhängige Plugins sind aktiv)
- [ ] Manifest-Version folgt Semantic Versioning
- [ ] Plugin-Signature ist validiert (falls Signature-Checking aktiv)
### 55.11 Datenbank-Architektur
- [ ] Alle Tabellen haben `tenant_id` (außer System-Tabellen)
- [ ] Alle Tabellen haben `created_at` und `updated_at`
- [ ] Alle Tabellen haben `deleted_at` (Soft-Delete)
- [ ] UUID Primary Keys (keine Integer Auto-Increment)
- [ ] TIMESTAMPTZ (keine naive datetime)
- [ ] JSONB für flexible Felder (metadata, config, applicable_to)
- [ ] RLS Policies auf allen Tenant-Tabellen
- [ ] Indexes auf häufig gefilterten Spalten
- [ ] Foreign Keys mit ON DELETE CASCADE wo appropriate
### 55.12 Frontend-Architektur
- [ ] Keine Class Components (nur Functional Components)
- [ ] Keine inline Styles (nur Tailwind)
- [ ] Keine hardcoded Strings (nur `t()` i18n)
- [ ] Keine `any` Types (TypeScript strict)
- [ ] Keine manual fetch/axios (nur TanStack Query)
- [ ] Keine Server-Data in Zustand (nur Client-State)
- [ ] Keine `dangerouslySetInnerHTML` ohne Sanitization
- [ ] ARIA Attributes auf allen interaktiven Elementen
- [ ] Touch Targets ≥ 44px
- [ ] React Hook Form + Zod für alle Forms
---
## Ausführungs-Reihenfolge
1. Smoke Tests (1.) — schnell, prüft ob System läuft