All checks were successful
Deploy Development / deploy (push) Successful in 48s
Test Suite / pytest-backend (push) Successful in 45s
Test Suite / lint-backend (push) Successful in 1s
Test Suite / build-frontend (push) Successful in 15s
Test Suite / k6 /health Baseline (push) Successful in 34s
Test Suite / playwright-tests (push) Successful in 1m35s
Document cross-app architecture patterns, Mitai alignment, and family entitlement standards. Documentation only; no runtime changes. Co-authored-by: Cursor <cursoragent@cursor.com>
4.1 KiB
4.1 KiB
Wiki Import – Designprinzipien (Extraktion)
Status: Analyse / Arbeitspapier
Stand: 2026-07-04
Geltungsbereich: Modul „MediaWiki Import“ — SMW-Ingest, Mapping, Tracking
Serie: Designprinzipien für Produktfamilie · Shinkan Dokument 11 von 15
Mitai-Vergleich: UNIVERSAL_IMPORT_DESIGN_PRINCIPLES.md (#6)
Kernkomponenten:
| Bereich | Pfade |
|---|---|
| Router | backend/routers/import_wiki.py, import_wiki_admin.py |
| Client | backend/smw_client.py |
| Mapper | backend/smw_mapper.py |
| Tracking | wiki_import_log, wiki_import_references |
| Spec | .claude/docs/technical/MEDIAWIKI_IMPORT_SPEC.md |
Modul
Wiki Import (Semantic MediaWiki)
Import von Übungen, Fähigkeiten, Methoden und Reifegradmodellen aus externem Wiki via API — Preview, Dry-Run, Duplikat-Erkennung, Admin-only.
Designprinzipien
1. Ingest ≠ Interpretation
| Prinzip | SmwClient holt Rohdaten; smw_mapper mappt auf Shinkan-Modelle — getrennte Schichten. |
| Begründung | Analog Mitai Import: Transport/Parser ≠ Domänen-Insert. |
| Quelle | import_wiki.py; Mitai Universal Import |
| Tragfähigkeit | hoch |
| Einschränkung | Keine generische Import-Registry wie Mitai CSV — wiki-spezifisch. |
2. Preview und Dry-Run vor Execute
| Prinzip | /preview zeigt Kandidaten; dry_run=true ohne DB-Schreiben. |
| Begründung | Admin sieht Auswirkungen; sichere Iteration. |
| Quelle | ImportExecuteRequest |
| Tragfähigkeit | hoch |
| Einschränkung | — |
3. Duplikat-Tracking über Wiki-Referenzen
| Prinzip | wiki_import_references speichert Wiki-Titel ↔ Shinkan-ID für Re-Import. |
| Begründung | Idempotenz und Update statt blindem Duplicate. |
| Quelle | Domain Model Import-Tabellen |
| Tragfähigkeit | hoch |
| Einschränkung | Gap-Analyse in SMW_IMPORTER_GAP_ANALYSIS.md beachten. |
4. Import-Typ als expliziter Parameter
| Prinzip | import_type: exercise | skill | method | Modelle — eigener Mapper-Pfad. |
| Begründung | Klare Verantwortung pro Ziel-Entität. |
| Quelle | map_wiki_to_* in smw_mapper.py |
| Tragfähigkeit | hoch |
| Einschränkung | Kein Plug-in-Registry-Pattern wie Mitai Module-Registry. |
5. Superadmin/Admin-only Execute
| Prinzip | require_admin auf Execute — Massenimport ist Plattform-Risiko. |
| Begründung | Governance und Datenqualität. |
| Quelle | import_wiki.py |
| Tragfähigkeit | hoch |
| Einschränkung | — |
6. Kategorie aus Env mit Fallback
| Prinzip | MEDIAWIKI_CATEGORY_* Env-Variablen; leere Query → Default je Typ. |
| Begründung | Wiki-Struktur konfigurierbar ohne Code-Deploy. |
| Quelle | CATEGORY_EXERCISES etc. |
| Tragfähigkeit | mittel |
| Einschränkung | Hardcoded Wiki-URL in Doku — Umgebungsspezifisch halten. |
7. Background Tasks für lange Imports
| Prinzip | FastAPI BackgroundTasks für Execute — HTTP nicht blockieren. |
| Begründung | Große Kategorien ohne Timeout. |
| Quelle | Execute-Endpoint |
| Tragfähigkeit | mittel |
| Einschränkung | Kein Job-Status-Polling-UI wie Mitai — Log-Tabelle nutzen. |
Nicht übernehmen
- Rohe Wiki-HTML ungemappt in DB — immer Mapper.
- Import ohne Log/Re-Import-Referenz — Duplikat-Chaos.
- Trainer-self-service Wiki-Import — Admin-only.
- Skill-Scoring beim Insert — Scores gehören in
skill_scoring-Schicht.