Files
Adminator 1e51ef7def Nachtrag: alle bisher untracked Ordner + hängende Änderungen mit-committen
- Konzept/, didaktik_geografie/, didaktik_simulation/, v2-modules/, v2-platform/
- 12 code-workspace-Files
- STATUS-*.md
- viele M/D/R-Änderungen an bereits getrackten Files
- .gitignore verstärkt: **/.humaninput/, **/secret_keys.txt

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-07-08 02:27:02 +02:00

198 lines
8.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Vertrag 5: Delivery Format
Wie ein Modul-Paket aussehen muss, damit Atlas es integrieren kann.
## Verbindliche Ordnerstruktur
```
v2-modules/<slug>/
├── manifest.json ← Vertrag 1, Pflicht
├── README.md ← Überblick für Atlas + Modul-Dokumentation
├── CHANGELOG.md ← Pflicht ab Modul-Version 1.1.0
├── public/ ← alles was im Browser ausgeliefert wird
│ ├── game.html ← Entry Point (Pfad in manifest.entryHtml)
│ ├── assets/
│ │ ├── card.png ← Cockpit-Karten-Bild (manifest.cardImage)
│ │ ├── screenshot-01.png
│ │ ├── screenshot-02.png
│ │ ├── img/ ← weitere Bilder
│ │ ├── audio/
│ │ ├── data/
│ │ └── ...
│ ├── js/
│ │ └── *.js ← Modul-eigenes JS
│ └── css/
│ └── *.css ← Modul-eigenes CSS
├── server/ ← optional: Modul-eigene PHP-Endpoints
│ ├── api/
│ │ └── orders.php
│ └── lib/
│ └── helpers.php
├── db/
│ ├── migrations.sql ← Pflicht: additive Schema-Änderungen
│ └── seed.sql ← optional: Initial-Daten für m_<slug>_*-Tabellen
├── tests/
│ ├── mock-platform.html ← Pflicht: Standalone-Test mit Mock-Plattform
│ └── conformance-report.json ← wird vom Konformitäts-Check generiert
└── docs/ ← optional: Modul-spezifische Doku
├── architecture.md
└── content-spec.md
```
## Pflicht-Files
| File | Zweck |
|---|---|
| `manifest.json` | Modul-Deklaration (Vertrag 1) |
| `README.md` | Was macht das Modul, wie wird es bedient, bekannte Probleme |
| `public/game.html` (oder anderer Entry) | Browser-Einstieg |
| `public/assets/card.png` | Cockpit-Karten-Bild, mind. 800×600px |
| `db/migrations.sql` | Additive Schema-Änderungen (kann leer sein wenn keine eigenen Tabellen) |
| `tests/mock-platform.html` | Standalone-Lauf gegen Mock-API zum Selbsttest |
## Pflicht-Konventionen
### Pfade
- Alle Asset-Pfade in `manifest.json` und im Code **relativ** zum
Modul-Wurzel (z.B. `public/assets/foo.png`, NICHT `/v2beta/sims/...`)
- Atlas rewrited Pfade beim Integrieren auf den richtigen Browser-Pfad
### Datenbank
- Alle eigenen Tabellen mit Prefix `m_<slug>_` (z.B. `m_logistik_orders`)
- `migrations.sql` muss **idempotent** sein (`CREATE TABLE IF NOT EXISTS`,
`ALTER TABLE ... ADD COLUMN IF NOT EXISTS`)
- Jede Tabelle hat Spalten `id`, `created_at`, `updated_at`,
`created_by_version` (default `'v2'`)
- Foreign Keys nur auf platform-stable Tabellen (`students`, `classes`)
oder auf eigene `m_<slug>_*`-Tabellen
### Sprache
- ALLE im Browser sichtbaren Texte als i18n-Key, mit mindestens
`de-AT-standard` und `de-AT-easy` Variante
- Empfehlung: simples JSON-File `public/i18n/de-AT-standard.json` und
`public/i18n/de-AT-easy.json`, dynamisch geladen je nach `lang`-Param
- Bei fehlender Easy-Variante: Atlas weist Lieferung ab
### Telemetry
- Alle in `manifest.telemetryMilestones` deklarierten Milestones
müssen mindestens einmal in `tests/mock-platform.html` ausgelöst
werden (Konformitäts-Check)
## Konformitäts-Check (vor Lieferung selbst durchführen)
Atlas stellt unter `v2-platform/tools/conformance-check/` ein
Skript bereit:
```bash
cd v2-modules/<slug>
php ../../v2-platform/tools/conformance-check/check.php
```
Prüft:
1. ✅ Manifest-Schema (alle Pflichtfelder, Typen, Werte)
2. ✅ Pflicht-Files vorhanden
3. ✅ Asset-Pfade in Manifest existieren physisch
4. ✅ DB-Migrations sind idempotent (Trockenlauf in Sandbox-DB)
5. ✅ Mock-Platform-Test läuft durch (Headless Chrome)
6. ✅ Alle deklarierten Milestones werden im Test ausgelöst
7. ✅ Easy-Sprache-i18n vorhanden
8. ✅ Telemetry-Endpoint wird mindestens 5× im Test aufgerufen
9. ✅ Result-POST mit allen Pflichtfeldern wird einmal aufgerufen
10. ✅ Keine `console.error` während Test
11.**A11y-Audit (axe-core)**: keine Critical/Serious-Issues
12.**Kontrast-Audit**: alle Text/Hintergrund ≥ 4.5:1
13.**Keyboard-Navigation**: alle interaktiven Elemente per Tab erreichbar
14.**Focus-Indikator**: kein `outline: none` ohne Ersatz
15.**Reduced-Motion-Test**: keine Auto-Animation bei `prefers-reduced-motion: reduce`
16.**High-Contrast-Test**: Modul rendert mit `body[data-high-contrast="true"]` alle Texte sichtbar
17.**Alt-Texte vorhanden** auf allen `<img>`
18.**Semantische Buttons**: keine `<div onclick>` für Aktionen
(Punkte 1118 entsprechen [platform-standards.md § 9.13](platform-standards.md))
Schreibt `tests/conformance-report.json` mit Resultaten. Bei Erfolg:
„LIEFERBEREIT". Bei Fehler: Liste der Probleme.
## Lieferprozess
1. **Modul-Instanz** committed in `v2-modules/<slug>/` und führt
Konformitäts-Check aus
2. **Modul-Instanz** schreibt Inbox-Mail an `_inbox/zentrale/` mit:
- Slug
- Version
- Link zu `conformance-report.json`
- Was neu/geändert ist gegenüber Vorgänger-Version
3. **Atlas** prüft Mail + Report:
- Bei „LIEFERBEREIT": Atlas integriert (siehe unten)
- Bei Fehlern: Atlas schickt Inbox-Antwort mit Liste, Modul-Instanz
fixt und liefert neu
4. **Atlas Integration**:
a. Kopiert `v2-modules/<slug>/` nach `/v2beta/sims/<slug>/` auf
Lokal-Dev (XAMPP)
b. Fährt `db/migrations.sql` gegen Lokal-DB
c. Fährt `db/seed.sql` falls vorhanden
d. Registriert Modul in `module_info_v2`-Tabelle
e. Lehrplan-Anker und Glossar-Begriffe verknüpfen
f. Manueller Smoke-Test im V2-Cockpit
g. Wenn OK → Meister-Mail mit Deploy-Auftrag
5. **Meister** deployed `/v2beta/sims/<slug>/` auf Server, fährt
Migration, OPcache-Reset, smoke-tested live
6. **Atlas** schickt Erfolgs-Inbox an Modul-Instanz + Thomas
## Versionierung von Modul-Lieferungen
- Erste Lieferung: `version: "2.0.0"`
- Bug-Fix: `2.0.1` (kein Manifest-Schema-Change)
- Feature/UI-Update: `2.1.0` (neue Milestones, neue Difficulty-Level)
- Breaking Change (z.B. Output-Schema-Anpassung): `3.0.0` (Atlas-Review
besonders genau, evtl. Daten-Migration nötig)
CHANGELOG ab `2.1.0` Pflicht.
## Was im Lieferpaket NICHT drin sein darf
- ❌ V1-Code (`App/sims/<slug>/` bleibt unangerührt — keine Symlinks)
- ❌ Andere Modul-Verzeichnisse referenziert
- ❌ Plattform-Code referenziert (`v2-platform/*`)
- ❌ Sensible Daten (`.env`, Credentials, Schul-Echtdaten)
-`node_modules/`, `.git/`, IDE-Config-Files
- ❌ Großdateien > 50 MB (Audio/Video extern hosten)
## Beispiel: minimales lieferbares Modul
```
v2-modules/hallo-welt/
├── manifest.json
├── README.md
├── public/
│ ├── game.html ← zeigt "Hallo!" und triggered 1 Heartbeat + 1 Milestone + 1 Result
│ └── assets/
│ └── card.png
├── db/
│ └── migrations.sql ← leer (CREATE-Block kommentiert)
└── tests/
└── mock-platform.html ← lädt game.html, prüft 3 API-Calls
```
Atlas baut so ein Beispiel-Modul `hallo-welt/` als Referenz und
lebenden Test der Plattform.
## ✅ Geklärt mit Thomas (2026-05-17)
- **Konformitäts-Check Implementierung**: Hybrid — PHP für Schema/
File-Checks (Manifest, Migrations, Pflicht-Files), Node/Headless-
Chrome für Browser-Tests (A11y-axe, Telemetry-Events, i18n-Check).
Beides aufrufbar als ein `php check.php` aus dem Modul-Wurzelordner.
- **Großdateien-Limit**: 50 MB Default, Ausnahmen pro Modul auf
Antrag (Inbox an Atlas mit Begründung). Sonnensystem-Audio und
Heli-Sounds bekommen Ausnahme — Atlas notiert das in
`module_info_v2.notes`.
- **Lieferungs-Integration**:
- **Patch-Updates (2.0.x)**: Auto-Check entscheidet, Atlas integriert
automatisch wenn alle Prüfungen grün.
- **Minor-Updates (2.x.0)**: Auto-Check entscheidet, Atlas
benachrichtigt Thomas aber wartet nicht auf Freigabe.
- **Major-Updates (x.0.0)**: Atlas-Review PFLICHT — Modul wird in
Staging eingespielt, Atlas testet, Thomas-Freigabe nötig.
- Modul-Instanz markiert die Update-Klasse im CHANGELOG.