diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml
new file mode 100644
index 0000000..5bb6db7
--- /dev/null
+++ b/.github/workflows/qa.yml
@@ -0,0 +1,40 @@
+---
+
+name: Quality Assurance
+
+on:
+ pull_request:
+ push:
+ branches: master
+
+jobs:
+
+ parse-xml:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-python@v5
+ - run: pip install lxml
+ - uses: jannekem/run-python-script-action@v1
+ with:
+ script: |
+ from pathlib import Path
+ from lxml.etree import parse, XMLSyntaxError
+
+ encountered_errors = []
+ root_path = Path.cwd()
+
+ for file in root_path.rglob("*.xml"):
+ try:
+ parse(str(file))
+ except XMLSyntaxError as e:
+ encountered_errors.append(f"{file.relative_to(root_path)}: {e.msg}")
+
+ if encountered_errors:
+ print("\nInvalid XML encodings were found:")
+ print("---------------------------------")
+ print("\n".join(encountered_errors) + "\n")
+ raise SystemExit(1)
+
+...
\ No newline at end of file
diff --git a/xml/transcript/gm_duesseldorf/KK123_20/01.xml b/xml/transcript/gm_duesseldorf/KK123_20/01.xml
index a148a0a..c3ef677 100644
--- a/xml/transcript/gm_duesseldorf/KK123_20/01.xml
+++ b/xml/transcript/gm_duesseldorf/KK123_20/01.xml
@@ -473,7 +473,7 @@
⏓
Aengſtlich drückende Schaale
- Aengſtlich drückende Schaale
+ Aengſtlich drückende Schaale
⎼
⏑
⏑
@@ -539,8 +539,8 @@
⏑
⎼
- Sonnedurchſtrahleten Aether
- Sonnedurchſtrahleten
+ Sonnedurchſtrahleten Aether
+ Sonnedurchſtrahleten
Aether
⏑ ⏑
⎼
diff --git a/xml/transcript/gsa/389773/0002.xml b/xml/transcript/gsa/389773/0002.xml
index 3c1e520..a5a6453 100644
--- a/xml/transcript/gsa/389773/0002.xml
+++ b/xml/transcript/gsa/389773/0002.xml
@@ -361,7 +361,7 @@
- Sie
+ Sie
Nun