# Extension-Readiness (Module-System V1.1) Letzte Aktualisierung: 2026-03-18 ## Ziel Verbindliche Vorbedingungen für weitere eigenstaendige Module auf dem bestehenden Modul-System festhalten. ## Kanonische Quelle Normativer Manifest- und Runtime-Contract: `/docs/reference-module-manifest-contract.md`. Diese Readiness-Doku ist bewusst kurz und verweist für Felddefinitionen/Guards immer auf den Manifest-Contract. ## Readiness-Checkliste vor Modul 2+ 1. **Modulgrenzen klarziehen** - Betroffene Schichten benoennen (`pages -> Service -> Repository`). - Keine Modul-spezifischen Hardcodings im Core-Layout/Core-Routing. 2. **Manifest-Contract einhalten** - `module.php` validiert gegen den kanonischen Contract (`permissions`, `scheduler_jobs`, `ui_slots`, `routes`). - Route-/Slot-/Layout-Guards laufen fail-fast. 3. **Security + Scope absichern** - AuthZ/RBAC serverseitig prüfen. - Tenant-Scope serverseitig prüfen. - POST-Mutationen mit CSRF absichern. 4. **Runtime-Hygiene absichern** - `php bin/console module:sync` laeuft reproduzierbar mit standardisierter Step-Summary. - Keine First-party CLI-Warnings/Notices/Deprecations; Vendor-Rauschen wird nur gezaehlt/reportet. 5. **Testbarkeit und Gates** - Architektur- und Domain-Tests für neue Logik ergaenzen. - `phpunit` und `phpstan` als Pflicht-Gates gruen. 6. **Daten- und Betriebsfaehigkeit** - Schema-/Datenänderungen für Bestandsinstallationen idempotent in `db/updates/*.sql`. - Logs/Audit ohne unredacted PII/Secrets. ## Derzeit Out of Scope - Eigener DB-Server oder Netzwerk-Microservice je Modul. - Externe Drittanbieter-Module mit Legacy-Kompatibilitaet. ## Verfügbare Core-Services für Module JS-seitig: - Confirm-Dialog (`confirmDialog`) - Async-Flash (`showAsyncFlash`) - DOM-Utilities (`app-dom.js`) - CSRF-Metadaten über `data-csrf-key` / `data-csrf-token` PHP-seitig: - Guard (`MintyPHP\\Support\\Guard`) - SessionStore (`MintyPHP\\Http\\SessionStoreInterface`) - Flash (`MintyPHP\\Support\\Flash`) - DI-Container (`MintyPHP\\App\\AppContainer`) - Modul-Contracts (`LayoutContextProvider`, `SessionProvider`, `SearchResourceProvider`)