🛠️ QA- & Korrektur-Workflow
Dieser Leitfaden beschreibt, wie OCR-Leseungenauigkeiten, Tippfehler in Kommentaren oder diakritische Korrekturen im Projekt boethlingk kollationiert, korrigiert und synchron in alle digitalen Editions-Artefakte (Typst-Buch-PDF, TEI-P5-XML und Sandwich-PDF) übernommen werden.
🏛️ Das Architekturprinzip: Single Source of Truth
Alle Korrekturen erfolgen ausschließlich an einer einzigen zentralen Stelle:
👉 data/ashtadhyayi_complete_boethlingk1887.json
Manuelle Änderungen in generierten Ausgabedateien (wie XML oder PDF) sind strikt zu vermeiden, da diese Dateien bei jedem Build-Lauf automatisiert und deterministisch überschrieben werden.
┌────────────────────────┐
│ Korrektur in │
│ Master-JSON-Datei │
└───────────┬────────────┘
│
┌─────────────────────┼─────────────────────┐
▼ ▼ ▼
scripts/build_typeset_edition.py │ scripts/generate_tei_p5.py
│ │ │
▼ │ ▼
[boethlingk1887_typeset.pdf] │ [boehtlingk1887_p5.xml]
(Modernes Buch-PDF) │ (Archiv-XML & RelaxNG)
▼
scripts/build_sandwich_pdf.py
│
▼
[boehtlingk1887_sandwich.pdf]
(1:1 Faksimile-PDF)
🔍 Weg 1: Visuelle Kollationierung mit dem QA-Viewer (Empfohlen)
Für den visuellen Abgleich von Text und Faksimile enthält das Repository den interaktiven Editor viewer.html.
1. Lokalen Server starten
Aufgrund von Browser-Sicherheitsrichtlinien (CORS) bei lokalen Dateien starten Sie einen lokalen Webserver im Projektverzeichnis:
Öffnen Sie im Browser:http://localhost:8000/viewer.html
2. Bedienung & Editor-Funktionen
- Linker Bereich (Faksimile-Inspektion): Zeigt den hochauflösenden Scan der Universitätsbibliothek Heidelberg. Mit Mausrad / Touchpad zoomen und bei gedrückter Maustaste verschieben.
- Rechter Bereich (Sūtra-Felder): Die Daten des aktuellen Sūtras sind direkt editierbar:
canonical_devanagari: Devanāgarī-Sūtratextcanonical_iast: Wissenschaftliche Transliterationtranslation: Deutsche Übersetzung von Otto Böhtlingk (1887)commentary: Philologischer Kommentar und Belegstellen- Snippet-Toolbar: Schaltflächen zum schnellen Einfügen von Dandas (
॥) und IAST-Diakritika (ā,ī,ū,ṛ,ṝ,ḷ,ṭ,ḍ,ṇ,ś,ṣ,ṃ,ḥ). - Navigation: Mit den Pfeiltasten oder den Schaltflächen Vorheriges / Nächstes Sūtra durch das Werk navigieren.
3. Speichern mit Silent Auto-Repair
- Drücken Sie
Cmd+S(Mac) bzw.Ctrl+S(Windows/Linux) oder klicken Sie auf „Speichern (JSON)“. - Der QA-Viewer führt ein unaufdringliches Silent Auto-Repair durch (Bereinigung von typografischen Fehlzeichen) und speichert den Datensatz direkt über die File System Access API in
data/ashtadhyayi_complete_boethlingk1887.json.
⌨️ Weg 2: Gezielte Bearbeitung im Code-Editor
Wenn Ihnen die Sūtra-Nummer (z. B. 1.1.4) oder eine konkrete Textstelle bereits bekannt ist:
- Öffnen Sie
data/ashtadhyayi_complete_boethlingk1887.jsonin VS Code oder Ihrem bevorzugten Editor. - Suchen Sie nach
"ref": "1.1.4". - Passen Sie die Werte direkt an:
- Datei speichern.
⚡ Schritt 3: Ausgabe-Artefakte neu kompilieren
Nach dem Speichern der Korrektur führen Sie im Terminal die Build-Skripte aus:
1. Dichte 1:1-Faksimile-Ausgabe neu bauen (Dauer: ca. 10 Sekunden)
Erzeugt den vollständigen, druckreifen 1:1-Faksimile-Neusatz mit exakter historischer Seitenkongruenz (0 Überläufe) unter:👉
data/output/boethlingk1887_facsimile_dense.pdf (484 Seiten)
2. Fließende Buchausgabe neu bauen (Dauer: ca. 0,9 Sekunden)
Erzeugt die modernisierte Vektor-Leseausgabe im ISO B5-Format unter:👉
data/output/boethlingk1887_typeset_edition.pdf (512 Seiten)
3. TEI-P5-XML-Edition generieren & validieren (Dauer: ca. 3 Sekunden)
Aktualisiert die XML-Edition unterdata/tei/boehtlingk1887_p5.xml und validiert sie automatisch gegen das offizielle TEI RelaxNG-Schema (schemas/tei_all.rng).
4. Reflowable EPUB 3 E-Book erzeugen
Erzeugt das mobile E-Reader-Buch unterdata/output/boethlingk1887.epub.
🚀 Schritt 4: Prüfen, Committen & Pull Request (Kuratierungs-Workflow)
Das Projekt boethlingk wird als wissenschaftlich kuratierte Edition (Curated Edition, geleitet von Marco Demarmels / birchville-org) geführt. Um die kanonische Integrität der 3.997 Sūtras und die Konformität der TEI-P5-XML-Edition dauerhaft zu gewährleisten, fließen Textkorrekturen, philologische Präzisierungen und Ergänzungen verbindlich über Branch- und Pull-Request-Verfahren (PR) ein.
1. Lokale Integritätsprüfung ausführen
Vor jedem Commit ist sicherzustellen, dass die gesamte Testsuite (pytest) ohne Fehler durchläuft:
# Automatisierte Quality Gates ausführen (Textintegrität, Schriftsymmetrie, Seitenparität):
uv run pytest
Die Testsuite prüft automatisch:
* Textintegrität (tests/test_text_integrity.py): Whitelist erlaubter Unicode-Skripte (Latein mit IAST, Devanāgarī, Griechisch), Ausschluss von Fremdskripten (Hebräisch, Telugu etc.), Verbot von Platzhalter-Tokens ([Sanskrit], [OCR]) und Detektion verwaister Interpunktion (,).
* Typografische Symmetrie (tests/test_typeset_symmetry.py): Prüfung des kompilierten PDFs auf einheitliche Schriftart (STIX Two Text), Schriftstil (aufrecht) und Farbe der Kolumnentitel über alle Seiten (keine unmotivierten Wechsel zwischen gerade und ungerade).
* 1:1-Seitenparität (tests/test_page_parity.py): Exakte Übereinstimmung aller 476 historischen Textseiten mit den 476 PDF-Textseiten.
# TEI-P5-XML neu erzeugen und gegen das offizielle RelaxNG-Schema validieren:
uv run python scripts/generate_tei_p5.py \
--input data/ashtadhyayi_complete_boethlingk1887.json \
--output data/tei/boehtlingk1887_p5.xml \
--schema schemas/tei_all.rng
2. Feature-Branch erstellen & Änderungen committen
Korrekturen niemals direkt auf main committen, sondern in einem thematischen Feature-Branch isolieren:
# Neuen Feature-Branch anlegen (Konvention: fix/sutra-<ref> oder corr/<thema>)
git checkout -b fix/sutra-1.1.4
# Geänderte Master-Daten und generierte TEI-P5-Datei stagen
git add data/ashtadhyayi_complete_boethlingk1887.json data/tei/boehtlingk1887_p5.xml
# Aussagekräftigen Commit erstellen
git commit -m "fix(sutra): correct reading and commentary for sutra 1.1.4"
3. Branch pushen & Pull Request (PR) eröffnen
Den Branch auf das Remote-Repository (bzw. den eigenen Fork) übertragen:
Anschließend auf GitHub einen Pull Request gegen den Branch main eröffnen:
* Über das GitHub Web-Interface: Nach dem Push erscheint automatisch der Dialog „Compare & pull request“.
* Alternativ über das GitHub CLI (gh):
gh pr create \
--title "fix(sutra): Korrektur Lesart und Kommentar zu Sūtra 1.1.4" \
--body "Philologischer Abgleich mit Faksimile UB Heidelberg Seite 3: Textkorrektur im Kommentar zu Sūtra 1.1.4."
💡 Best Practice für Pull Requests: - Betroffene Sūtra-Nummer (
ref) und Buchseitennummer im Titel oder Text nennen (z. B.Sūtra 1.1.4, S. 3). - Faksimile-Referenz: Link zum entsprechenden IIIF-Faksimile der Universitätsbibliothek Heidelberg beifügen. - Begründung: Kurze Erläuterung der Korrektur (z. B. Beseitigung eines OCR-Fehlers bei IAST-Diakritika oder Devanāgarī-Ligaturen).
4. Automatische CI-Validierung im Pull Request
Bei jeder Eröffnung oder Aktualisierung eines Pull Requests führt die GitHub Actions CI-Pipeline (.github/workflows/ci.yml) automatische Validierungen durch:
* Master Dataset Integrity: Überprüfung aller 3.997 Sūtras auf Vollständigkeit und Eindeutigkeit (0 Duplikate, 0 Lücken).
* TEI-P5 RelaxNG Validation: Vollständige Schemaprüfung des generierten XML-Dokuments gegen schemas/tei_all.rng.
Ein Merge ist nur zulässig, wenn alle CI-Prüfungen erfolgreich („grün“) durchlaufen.
5. Kuratierung, Review & Merge
Als Projektkurator prüft Marco Demarmels jede eingereichte Korrektur philologisch und technisch:
1. Philologische Verifikation: Stimmt die Korrektur exakt mit der Druckfassung Böhtlingks (Leipzig 1887) überein?
2. Kanonische Konsistenz: Bleiben Sūtra-Zählung, Pāda-Zuordnung und Textstruktur gewahrt?
3. Freigabe & Merge: Nach Bestätigung wird der Pull Request in den kanonischen main-Branch übernommen und neue Release-Artefakte werden bei Bedarf bereitgestellt.
(Hinweis: Direkte Commits und Pushes auf main sind ausschließlich dem Projektkurator für administrative Releases und Bereitstellungs-Pipelines vorbehalten.)