# Konformitäts-Check (V2) PHP-basiertes Skript, das prüft, ob ein V2-Modul die Spec erfüllt (siehe `v2-modules/_spec/delivery-format.md` und `module-manifest.md`). ## Aufruf Aus dem Modul-Wurzelordner: ```bash cd v2-modules/ php ../../v2-platform/tools/conformance-check/check.php ``` Exit-Code: - `0` = LIEFERBEREIT (Phase-1-Checks bestanden, Browser-Checks Phase 2) - `1` = Fehler vorhanden — nicht lieferbar Output: - Farbige Console-Ausgabe (✓ / ✗ / ⚠) - `tests/conformance-report.json` mit allen Details ## Welche Checks (Phase 1, PHP-only) | Check | Was wird geprüft | |---|---| | **Manifest-Schema** | Pflichtfelder, Slug-Format, supportedLanguages (de-AT-easy Pflicht), Lehrplan-Anker mit Land-Prefix, glossarSchwerpunkte ≤ 10, dbTables-Prefix `m__`, difficultyLevels, telemetryMilestones | | **Pflicht-Files** | README.md, db/migrations.sql, tests/mock-platform.html, entryHtml/cardImage/screenshots existieren physisch, verbotene Files (.env.local, node_modules), Großdateien-Warnung > 50 MB | | **i18n** | pro supportedLanguage eine JSON-Datei in public/i18n/, Easy-Variante deckt alle Keys der Standard-Variante ab | | **DB-Migrations** | CREATE TABLE mit IF NOT EXISTS, ADD COLUMN mit IF NOT EXISTS, keine DROP/TRUNCATE/RENAME, Tabellen mit Modul-Prefix | | **admin-fields.json** | Pflicht-Datei, moduleId matcht slug, groups[].fields[] mit key/label/labelEasy/type | | **CSS-Hex-Hardcodes** | scant public/**/*.css und .html nach Hex-Werten — verboten, müssen `var(--ggs-*)` oder `var(---*)` sein | ## Phase 2 (später, mit Headless-Browser) - A11y-Audit via axe-core - Telemetry-Event-Test (mindestens 5 Heartbeats, alle deklarierten Milestones werden gefeuert, ein Result-POST) - Keyboard-Navigation-Test (Tab-Reihenfolge, Enter/Esc) - Focus-Indikator vorhanden - prefers-reduced-motion respektiert - High-Contrast-Render-Test - Alt-Texte auf allen `` - Semantische Buttons statt `
` Diese Tests brauchen Playwright/Headless-Chrome — folgt in einer späteren Iteration. Vorläufig **manuell** mit `tests/mock-platform.html` prüfen. ## Beispiel-Output ``` === GeoGraSim V2-Konformitäts-Check === Modul: hallo-welt @ 1.0.0 Pfad: c:\xampp\htdocs\geograsim\v2-modules\hallo-welt Spec: 1.0 --- Manifest-Schema --- ✓ Alle Pflichtfelder vorhanden ✓ Slug-Format ok ('hallo-welt') ✓ Lehrplan-Anker: 1 Eintrag/Einträge, alle mit Land-Prefix ✓ glossarSchwerpunkte: 0 von max 10 Einträgen --- Pflicht-Files --- ✓ Pflicht-File vorhanden: README.md ✓ Pflicht-File vorhanden: db/migrations.sql ✓ Pflicht-File vorhanden: tests/mock-platform.html ... === Zusammenfassung === ✓ Passed: 18 ✗ Failed: 0 ⚠ Warning: 1 STATUS: LIEFERBEREIT (Phase-1-Checks). Browser-Checks Phase 2 noch manuell. ``` ## Bekannte Limitationen - Slug-Eindeutigkeit über alle Module wird **nicht** geprüft (das macht Atlas beim Integrieren — braucht Zugriff auf `module_info_v2`) - Lehrplan-Anker-Existenz in der DB nicht geprüft (selbe Grund) - Glossar-Slug-Existenz nicht geprüft (selber Grund) - Sed-Lauf erkennt nicht, ob `
` in JS-Templates gebaut wird - Schwere Spec-Verstöße (z.B. fetch auf OpenAI im Browser) werden nur in Phase 2 erkannt