From f3b47af551fa6cd85509a65bb77d8d1b9bcb744a Mon Sep 17 00:00:00 2001
From: Matthias Andreas Benkard <code@mail.matthias.benkard.de>
Date: Sat, 22 Aug 2026 21:23:06 +0200
Subject: =?UTF-8?q?Die=20Auslieferung=20tr=C3=A4gt=20nur,=20was=20der=20Br?=
 =?UTF-8?q?owser=20wirklich=20braucht?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Die Browserfassung soll künftig über Cloudflare Workers gehen, und dort gilt
eine Grenze von 25 MiB je Datei, unkomprimiert gemessen. Zwei der
ausgelieferten Dateien standen dem entgegen: Das Quelltextarchiv maß 29,7 MB
und war damit schon nicht mehr hochzuladen, das Wasm-Modul mit 24,5 MB zu
achtundneunzig Hundertsteln der Grenze und ohne jeden Spielraum.

Das Archiv war ein ungefiltertes „git archive“ des Repositoriums, und über
fünfundneunzig Hundertstel davon waren die Beispiel-PDFs. Der Quelltext selbst
misst keine dreihunderttausend Zeichen. Die Gesetzes- und Drucksachentexte sind
fremde Werke, an denen allein die Tests messen; sie sind nicht der Quelltext,
aus dem sich das Ausgelieferte herstellen ließe, und die Auflage des AGPLv3 § 13
verlangt sie deshalb nicht. Sie sind aus dem Archiv genommen, und
„quelltext-fassung.txt“ sagt fortan, dass sie fehlen, warum sie fehlen und wo
sie vollständig liegen. Damit dies nicht stillschweigend zurückfällt, bricht
„webpaket.sh“ ab, sobald das Archiv acht Mebibyte überschreitet, und ebenso,
wenn irgendeine ausgelieferte Datei die Grenze der Zielplattform reißt: Lieber
hier auffallen als beim Hochladen.

Der Korpus lag überdies unter „src/main/resources“ und wanderte deshalb in
jedes Erzeugnis: in das Klassenverzeichnis, in die ausführbare Archivdatei —
achtundzwanzig Megabyte für ein Werk von sechshundert Kilobyte Java — und auf
den Klassenpfad des Übersetzers, dessen Ressourcentabelle die Verzeichnisnamen
bis ins Wasm trug. Er liegt nunmehr unter „src/test/resources“, wo er hingehört,
und ist von der Kopie nach „target/test-classes“ ausgenommen: Die Tests lesen
ihn über Dateisystempfade, eine Kopie wäre bei jedem Bau fünfunddreißig
Megabyte umsonst.

Das Modul wiegt statt 24,5 nunmehr 17,2 Megabyte; komprimiert geht es mit 5,5
statt 7,1 Megabyte über die Leitung. Vier Ursachen liegen dem zugrunde. Der
Picocli-Annotationsprozessor meldete die Befehlszeilenklasse mit sämtlichen
Methoden zur Reflexion an, worauf die Erreichbarkeitsanalyse die ganze
Befehlszeilenfassung samt Dateizugriffen in ein Bild zog, in dem es keine
Befehlszeile gibt; im Profil „wasm“ läuft er nicht mehr, und eine von einem
früheren Lauf liegengebliebene Konfiguration wird vor dem Übersetzen entfernt,
damit die Größe nicht davon abhängt, was vorher lief. Der Ressourcen-Glob
„org/apache/fontbox/**“ bettete 3,3 Megabyte ostasiatischer CMaps, die
Schrifttabelle „Scripts.txt“ und — weil zwei Sterne auch Klassendateien treffen
— 0,7 Megabyte „.class“-Dateien ein, von denen ein deutsches Gesetzes-PDF nichts
braucht; geblieben sind die beiden Identity-CMaps. Die Metriken unter
„org/apache/pdfbox/resources“ bleiben vollständig, denn an ihnen hängt die
Breitenberechnung bei nicht eingebetteten Schriften. Übersetzt wird mit „-Os“,
und den Rest holt „wasm-opt -Oz“ im Webpaket.

Dessen Merkmale sind einzeln aufgezählt und nicht als „--all-features“ erteilt.
Der bequeme Weg war gangbar und führte doch ins Leere: Binaryen nutzte
daraufhin Vorschläge, die noch kein Browser annimmt, und das Modul scheiterte
erst beim Instanziieren — erst an einem exakten Heap-Typ aus den „custom
descriptors“, nach dessen Abschaltung an der kompakten Importsektion. Zugelassen
ist nunmehr, was ausgeliefert in den Browsern steht und was Web Image braucht.

Die Vorkompression nach „.gz“ und „.br“ entfällt als Regelfall, denn Cloudflare
komprimiert selbst und jede Beilage wäre dort eine weitere Datei; wer mit nginx
selbst ausliefert, fordert sie mit VORKOMPRIMIEREN=1 an. Das
Auslieferungsverzeichnis fällt damit von achtundsechzig auf siebzehn Megabyte,
und ein liegengebliebenes „.DS_Store“ geht nicht mehr mit hoch.

Dreihundertfünfundzwanzig Testfälle bestehen. Das Modul ist im Browser
gelaufen: Vier Dokumentenpaare — IfSG, UWG, AGG und das Bayerische Jagdgesetz,
also gii-XML wie PDF als Stammfassung, Bundesgesetzblatt, Drucksache und
Gesetz- und Verordnungsblatt als Änderungsdokument — ergeben Synopsen, deren
SHA-256-Summen denen der Befehlszeilenfassung gleichen. Der Ressourcenbeschnitt
kostet also keine Zeichen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I31a47d1dcf3b27ffa4ae891947b1c4e083107a71
---
 .../sampledata/Landesrecht-Beispiele.adoc          | 269 +++++++++++++++++++++
 1 file changed, 269 insertions(+)
 create mode 100644 src/test/resources/sampledata/Landesrecht-Beispiele.adoc

(limited to 'src/test/resources/sampledata/Landesrecht-Beispiele.adoc')

diff --git a/src/test/resources/sampledata/Landesrecht-Beispiele.adoc b/src/test/resources/sampledata/Landesrecht-Beispiele.adoc
new file mode 100644
index 0000000..3eb455c
--- /dev/null
+++ b/src/test/resources/sampledata/Landesrecht-Beispiele.adoc
@@ -0,0 +1,269 @@
+= Beispieldaten: Landesrecht weiterer Länder
+Matthias Andreas Benkard
+
+Ergänzend zum bayerischen Belegfall (`BayJG/`) sind hier Änderungsgesetze und
+Änderungsverordnungen aus dem Landesrecht weiterer Länder gesammelt. Sie dienen als
+Kandidaten für künftige Ertüchtigungswellen und decken Konventionen ab, die im Bundes- und
+im bayerischen Recht so nicht vorkommen.
+
+WICHTIG: Anders als Bayern (Art./§-Inversion) gliedern alle übrigen Länder ihre Stammgesetze
+in *§* (wie der Bund) mit `Artikel N` als Änderungsgesetz-Container. Die neuen Testdimensionen
+liegen daher im *PDF-Layout* und in *Befehlsidiom-Varianten*, nicht in der Gliederung.
+
+Zu jedem Beispiel ist bislang nur das *Änderungsgesetz* beschafft. Die jeweils zugehörige
+*konsolidierte Stammfassung* (nötig für einen Akzeptanztest wie bei BayJG) fehlt noch; sie käme
+je Land aus einem eigenen Portal (juris-basiert: landesrecht-bw, recht.nrw, revosax, voris,
+hessenrecht, gesetze-rechtsprechung.sh.juris.de; Eigensystem: Berlin) oder als handgepflegter
+`--extract-only`-Klartext analog zu `BayJG/BayJG-alt.txt`.
+
+== Übersicht
+
+[cols="1,3,3",options="header"]
+|===
+|Land |Datei / Fundstelle |Besonderheit für das Werkzeug
+
+|Berlin
+|`Berlin/GVBl-2026-17_ASOG-LAF-AendG.pdf` — GVBl. für Berlin Nr. 17 vom 11.06.2026, S. 234
+(Gesetz zur Änderung des ASOG und des LAF-Errichtungsgesetzes vom 03.06.2026)
+|*Zweispaltiges Layout* (Herausgabe über Wolters Kluwer). Der Spaltenspike ist erledigt: Die
+Reihenfolge des Inhaltsstroms *ist* bereits die Lesereihenfolge, eine koordinatenbasierte
+Spaltenerkennung ist nicht nötig. Verbleibende Layout-Eigenheit sind ganzseitenbreite Rahmen
+(Titelblock, laufender Seitenkopf), die an falscher Stelle im Strom stehen — der Seitenkopf wird
+herausgeschnitten, der Titelblock landet weiterhin mitten im Text. Tiefe Verschachtelung
+a)/aa)/bb)/cc); Artikel 1 ändert eine *Anlage* mit eigener Nummern-Gliederung.
+
+|Schleswig-Holstein
+|`SchleswigHolstein/GVOBl-2026-27_Kommunalrecht-AendG.pdf` — GVOBl. Schl.-H. 2026/27 vom
+30.03.2026 (Gesetz zur Änderung des Gesetzes zur Änderung kommunalrechtlicher Vorschriften)
+|Neues Neufassungsidiom „§ 34a Absatz 1 *erhält folgende Fassung*:" (statt „wird wie folgt
+gefasst"); *hochgestellte Fußnotenmarker an Artikel-Überschriften* („Artikel 1 ¹)"); Meta-
+Änderung an einem anderen Änderungsgesetz („Artikel 5 wird gestrichen").
+
+|Hessen
+|`Hessen/GVBl-2026-05_11-AendVO-verkehrsrechtl-Zustaendigkeiten.pdf` — GVBl. Hessen Nr. 5 vom
+03.02.2026 (Elfte Verordnung zur Änderung der Verordnung zur Bestimmung verkehrsrechtlicher
+Zuständigkeiten)
+|*Sperrsatz* in Datums- und Signaturzeilen („3 . F e bru a r 2 02 6", „Der Mi n is t er pr
+äs i d e nt") — er trifft, anders als erwartet, nur den Unterschriftenblock und keinen Befehl;
+*abgekürztes „Abs."/„Nr." im §-Kontext*; die *FFN-Fußnote der Überschrift* („* Ändert FFN 61-60")
+steht am Seitenfuß mitten zwischen zwei Gliederungspunkten.
+
+|Niedersachsen
+|`Niedersachsen/Nds-GVBl-2026-10_ELER-Foerdergesetz-AendG.pdf` — Nds. GVBl. 2026 Nr. 10 vom
+04.02.2026 (Gesetz zur Änderung des Niedersächsischen ELER-Fördergesetzes) +
+`Nds-GVBl-2026-23_BeurtVO-Steuer_amtliche-Satznummern.pdf` — Nr. 23 vom 18.03.2026
+|*Hochgestellte amtliche Satznummern ¹²³* wie Bayern, aber im *§-Modus* (nicht invertiert) →
+das bayerische Superskriptmodul wäre wiederverwendbar. Nr. 23 (Verordnung) zeigt die
+Satznummern deutlich; Nr. 10 ist das eigentliche Änderungsgesetz (Idiom „Absatz 1 erhält
+folgende Fassung"). Saubere einspaltige PDFs über die stabile API `verkuendung-niedersachsen.de`.
+
+|Baden-Württemberg
+|`BadenWuerttemberg/GBl-2026-26_KommunalwahlO-AendVO.pdf` — GBl. BW 2026 Nr. 26 vom 27.02.2026
+(Verordnung des Innenministeriums zur Änderung der Kommunalwahlordnung)
+|Standard-HdR-Befehle im GBl-Layout; „werden nach dem Wort … die Wörter … eingefügt",
+„werden die Wörter … gestrichen".
+
+|Nordrhein-Westfalen
+|`NRW/GV-NRW-2026-S202_22-Rundfunkaenderungsgesetz.pdf` — GV. NRW. 2026 Nr. 7 vom 31.03.2026,
+S. 202 (22. Rundfunkänderungsgesetz)
+|Umfangreiches Mehrgesetz-Artikelgesetz (17 S.); „Die Inhaltsübersicht wird wie folgt
+geändert", „§ … (weggefallen)". Bereitgestellt aus dem amtlichen recht.nrw.de-PDF. *Unbalancierte
+Anführungszeichen* im amtlichen Satz (Artikel 2 Nr. 7 b und Nr. 11). Konsolidierte Fassungen sind
+über `recht.nrw.de/lrgv/gesetz/<TTMMJJJJ>-<Kurztitel-Slug>` frei und serverseitig gerendert
+abrufbar; der Datumspräfix ist der Gültigkeitsbeginn der jeweiligen Fassung.
+
+|Sachsen
+|`Sachsen/SaechsGVBl-2026-S134_AendG-SaechsBeamtVG_revosax.pdf` — SächsGVBl. S. 134
+(Gesetz zur Änderung des Sächsischen Beamtenversorgungsgesetzes vom 13.04.2026)
+|Kompaktes Änderungsgesetz, Verschachtelung a)/aa)/bb)/cc), „wird durch den folgenden Satz
+ersetzt". Quelle: revosax-Gesamtansicht (nicht der Original-GVBl-Satz — recht-sachsen.de ist ein
+cookie-/kostenpflichtiger Shop).
+
+|Thüringen
+|`Thueringen/GVBl-TH-2026-02_KiGaFinanzVO-AendVO-ua.pdf` — GVBl. Freistaat Thüringen Nr. 2 vom
+13.02.2026 (u. a. Vierte Verordnung zur Änderung der Thüringer Kindergartenfinanzierungs-
+verordnung)
+|Sammelheft (28 S.) mit vier Verkündungen, davon eine Änderungsverordnung. Unterscheidend: Das
+Blatt führt *kein einziges* `„`, sondern setzt gerade Anführungszeichen beidseitig; dazu das
+Idiom „die Verweisung „X" durch die Verweisung „Y" ersetzt", ein Rahmen, der sich auf eine
+Untereinheit der umnummerierten Norm verengt, und eine Bereichs-Umnummerierung über einen
+aufgehobenen Platzhalter hinweg. Voller Akzeptanzfall, Stammfassung
+`Thueringen/ThuerKigaFinVO-alt.txt`.
+|===
+
+== Stand der Umsetzung
+
+* *Sachsen* ist als erster nichtbayerischer Belegfall vollständig umgesetzt: konsolidierte
+  Vorfassung `Sachsen/SaechsBeamtVG-alt.txt` (kanonischer Klartext, Fassung vom 01.02.2025, aus
+  der archivierten revosax-Volltextfassung abgeleitet) und End-to-End-Akzeptanztest
+  (`EndToEndTest.saechsBeamtVgAcceptance`; fünf Befehle, kein Rest).
+* *Niedersachsen* ist umgesetzt: `Niedersachsen/NEFG-alt.txt` (seit 2022 unveränderter NEFG, aus
+  dem zweispaltigen Nds. GVBl 2022 Nr. 33) und `EndToEndTest.nefgAcceptance` (alle sieben Befehle
+  angewandt, kein Rest — einschließlich der beiden niedersächsischen Einfügeformen: Sachnummer mit
+  Leerzeichen „§ 2 a“ und gliederungsbezogene Einfügung „In Kapitel 4 wird nach § 12 …“).
+* *Schleswig-Holstein* ist bis einschließlich der Befehlserkennung umgesetzt
+  (`EndToEndTest.kommunalrechtAendGSchleswigHolstein`): Artikel 1 trifft die Gemeindeordnung,
+  Artikel 2 die Kreisordnung, je ein Neufassungsbefehl, kein unbekannter Befehl. Ein voller
+  Akzeptanztest ist *nicht* möglich — siehe „Noch offen“.
+* *Nordrhein-Westfalen* ist der Massentest-Fall: aus demselben Heft sind alle vier ändernden
+  Artikel als Akzeptanzfälle hinterlegt.
++
+--
+`EndToEndTest.tmzGesetzAcceptance`:: Artikel 3 (Telemedienzuständigkeitsgesetz), vier Befehle,
+kein Rest. Stamm `NRW/TMZ-Gesetz-alt.txt`.
+`EndToEndTest.wdrGesetzAcceptance`:: Artikel 1 (WDR-Gesetz), 101 Befehle an 31 Normen, davon 100
+angewandt. Stamm `NRW/WDR-Gesetz-alt.txt` (Fassung vom 01.01.2025). Der Fall trägt die
+Umnummerierungs-Kaskaden (§ 3: Absatz 2 → zwei Absätze, die Absätze 3 bis 11 rücken auf, ein neuer
+Absatz 13 kommt hinzu; § 15 Absatz 3: Nummer 22 entfällt, 23 bis 37 rücken auf), den Sammelrahmen
+„Es werden ersetzt:“ und die Angabe-Befehle auf die Inhaltsübersicht. Einziges Residuum ist
+Nr. 13 e) aa): „der Punkt am Ende des Satzes“ ist in einer zweisätzigen Nummer nicht eindeutig.
+`EndToEndTest.lmgNrwAcceptance`:: Artikel 2 (Landesmediengesetz), 18 Befehle, kein Rest. Stamm
+`NRW/LMG-NRW-alt.txt` (Fassung vom 01.01.2025).
+`EndToEndTest.rundfunkAusfuehrungsgesetzAcceptance`:: Artikel 4 (17. RÄStV-AusfG), ein Befehl,
+kein Rest. Stamm `NRW/17-RAEStV-AusfG-alt.txt` (Erstfassung vom 17.12.2015, bis 2026 unverändert).
+Der Artikel führt seinen Befehl *ohne* Gliederungspunkt — der Text nach der Änderungsformel ist
+der Befehl —, und das Zitat der neuen Fassung trägt verschachtelte Anführungszeichen (ein
+vollständiges „durch Artikel 3 …“ innerhalb einer eckigen Klammer). Beides trägt die vorhandene
+Maschinerie.
+--
++
+Alle vier Ergebnisse sind normweise gegen die amtliche Fassung vom 01.04.2026 abgeglichen. Es
+bleiben nur Abweichungen, in denen die amtliche Nachfassung selbst vom Befehlswortlaut abweicht
+(§ 15 WDR-Gesetz: „des“ vor „Bundesreisekostengesetzes“ entfallen; § 7 und § 21 WDR-Gesetz: ein
+überzähliges Anführungszeichen aus dem Änderungsgesetz; § 93 LMG NRW: zusätzlich die Wörter
+„Film (“ gestrichen) — ÄndGgner wendet dort den Wortlaut an. Damit ist das Heft GV. NRW. 7/2026
+vollständig belegt.
+* *Berlin* ist bis zur Befehlserkennung umgesetzt (`EndToEndTest.asogLafAendGBerlin`): Artikel 2
+  (LAF-Errichtungsgesetz) wird vollständig erkannt, beide Punkte erben ihr Ziel aus der
+  Änderungsformel. Artikel 1 wird seit der Wortanker-Einfügung und der Zitatgrenze am
+  Aufzählungspunkt *vollständig* erkannt — alle sechs Befehle, einschließlich der Änderungen an der
+  unnummerierten Anlage. Ein voller Akzeptanztest bleibt an der Stammfassung hängen (siehe „Noch
+  offen“).
+* *Hessen* ist bis zur Befehlserkennung umgesetzt (`EndToEndTest.verkehrsZustVAendVOHessen`): alle
+  21 Befehle des Artikels 1 werden erkannt. Der als Härtetest erwartete Sperrsatz erwies sich als
+  harmlos — er trifft nur den Unterschriftenblock. Zu tun war dreierlei: die laufende GVBl-Fußzeile
+  und der Masthead als Kolumnentitel, die Sternchen-Fußnote der Überschrift („* Ändert FFN 61-60“,
+  am Seitenfuß zwischen zwei Gliederungspunkten) ebenso, und zwei Befehlsformen — der Zusatz
+  „am Ende“ darf beim Satzzeichen fehlen, und das Objekt hinter „durch“ darf auch ohne Fundstelle
+  verkürzt sein. Ein voller Akzeptanztest ist *nicht* möglich — siehe „Noch offen“.
+* Baden-Württemberg (GBl 2026 Nr. 26): großes Anlage-lastiges Änderungsgesetz (§§ 4–57a + Anlagen
+  1/3b/4b); Stammfassung/Akzeptanztest noch offen.
+
+== Beschaffung der Stammfassungen
+
+Für einen vollen Akzeptanztest wird die Fassung *vor* dem Änderungsgesetz gebraucht. Welcher Weg
+dafür trägt, hängt allein vom Portal ab; die drei erprobten Wege:
+
+`recht.nrw.de` (Nordrhein-Westfalen):: Der bequemste Fall. Serverseitig gerendertes HTML, keine
+Single-Page-Anwendung, `robots.txt` erlaubt alles. Das URL-Schema
+`recht.nrw.de/lrgv/gesetz/<TTMMJJJJ>-<Kurztitel-Slug>` trägt den *Gültigkeitsbeginn der jeweiligen
+Fassung* im Datumspräfix — Vor- und Nachfassung sind damit unmittelbar adressierbar, und das
+Ergebnis lässt sich gegen die amtliche Nachfassung prüfen. Die Slugs findet die Suchmaske nicht
+(Formular); sie stehen im Sitemap-Index (`robots.txt` listet `sitemap/page/1..47/sitemap.xml`, je
+1000 Einträge). Alte `lmi/owa/br_*`-URLs leiten auf die neuen Slugs um.
+
+`revosax.sachsen.de` (Sachsen):: Liefert Volltext-PDFs je Fassung, aber nur die aktuelle live. Die
+Vorfassung kommt über die Wayback-CDX-API: Fassungs-IDs abfragen, die zum Zeitraum passende wählen,
+per `…id_/…`-Rohform laden. Achtung, `WebFetch` erreicht `web.archive.org` nicht — nur `curl`.
+
+juris-Landesportale:: Sackgasse — *geprüft* für `gesetze-rechtsprechung.sh.juris.de`
+(Schleswig-Holstein), `gesetze.berlin.de` (Berlin, trotz Eigennamen dieselbe Anwendung),
+`landesrecht-bw.de` (Baden-Württemberg) und `rv.hessenrecht.hessen.de` (Hessen, Kennung `bshe`).
+und `landesrecht.thueringen.de` (Thüringen).
+Alle fünf sind seit etwa Ende 2022 reine Single-Page-Anwendungen; sämtliche Dokument-URLs liefern
+nur die leere Anwendungshülle (rund 5,4 kB), die Inhalte hängen an einer tokenpflichtigen
+Schnittstelle. Auch archivierte
+Einzelnorm-Seiten sind bereits Hüllen. Brauchbar sind allenfalls Wayback-Snapshots aus der Zeit
+*vor* der Umstellung — die sind aber meist zu alt für die gesuchte Fassung. Für
+`voris.niedersachsen.de` ist dasselbe zu erwarten, aber *nicht* nachgeprüft: Ein Versuch lohnt,
+bevor man aufgibt.
+
+Parlamentsdokumentationen:: Der Ausweg, wo das Landesrechtportal versperrt ist. Gibt der Landtag
+das Gesetzblatt heraus — in Thüringen ist das so —, so liegen dessen Hefte oft frei in der
+Parlamentsdatenbank, auch die alten:
+`parldok.thueringer-landtag.de/ParlDok/dokument/<WP>/art/GVBl/num/<Heft>/jahr/<Jahr>[/seite/<S>]`.
+Damit lässt sich eine konsolidierte Fassung aus dem Stammheft und den Änderungsheften
+zusammensetzen, wenn kein Portal sie fertig liefert (Rezept in `Thueringen/SOURCES`). Das Archiv
+der Staatskanzlei (`thueringen.de/th1/tsk/gvbl/`) hilft dagegen nicht: Es antwortet Skripten mit
+einer Bot-Schutz-Fehlerseite.
+
+Fällt das Portal aus, bleibt der Weg über das Gesetzblatt selbst: Trägt der Einleitungssatz des
+Änderungsgesetzes kein „zuletzt geändert durch“, so ist die Originalfassung zugleich die
+Stammfassung (so bei Niedersachsen). Die Extraktion zweispaltiger Hefte übernimmt `--extract-only`
+des Werkzeugs selbst; `pdftotext -layout` verschränkt dort die Spalten.
+
+Ein Fallstrick beim Prüfen extrahierter Hefte: Das GV.-NRW.-Heft 7/2026 kodiert einen Teil seiner
+Umlaute *zerlegt* (`u` + U+0308 statt `ü`, 79 Stellen, darunter dutzende „eingefügt:“/„angefügt:“).
+Im Text ist das unsichtbar, für jedes Befehlsmuster aber ein anderes Wort. `TextBereiniger.bereinige`
+normalisiert deshalb ganz früh nach NFC — nicht NFKC, das plättete die amtlichen Satznummern ¹²³ zu
+gewöhnlichen Ziffern. Wer Klartext von Hand aufbereitet, sollte ihn ebenfalls in NFC ablegen; der
+Klartext-Zweig des Loaders normalisiert zur Sicherheit mit.
+
+== Noch offen
+
+* *Schleswig-Holstein — Stammfassung nicht beschaffbar*: Das Landesportal
+  `gesetze-rechtsprechung.sh.juris.de` ist seit Ende 2022 eine reine Single-Page-Anwendung; die
+  Dokumentinhalte liegen hinter einer anmeldepflichtigen „mylex“-API (`connectUrl` aus dem
+  `localStorage`), sämtliche Dokument-URLs liefern nur die leere Anwendungshülle. Die Wayback
+  Machine hat die serverseitig gerenderte Gesamtausgabe der Gemeindeordnung zuletzt am
+  14.11.2022 erfasst — dort fehlt der hier geänderte § 34a noch (er wurde erst durch das Gesetz
+  vom 05.02.2025 eingefügt). Auch die archivierten Einzelnorm-Seiten (113 Stück) sind bereits
+  SPA-Hüllen ohne Inhalt. Ein voller Akzeptanztest bleibt daher offen, bis die konsolidierte
+  Fassung aus einer anderen Quelle vorliegt.
+* *Berlin — Stammfassung nicht beschaffbar*: `gesetze.berlin.de` ist trotz des Eigennamens dieselbe
+  juris-Anwendung wie das schleswig-holsteinische Portal (Kennung `bsbe`) und ebenso
+  anmeldepflichtig. In der Wayback Machine gibt es keine serverseitig gerenderten Volltexte des
+  ASOG oder des LAF-Errichtungsgesetzes.
+* *Hessen — Stammfassung nicht beschaffbar*: `rv.hessenrecht.hessen.de` ist dieselbe juris-Anwendung
+  (Kennung `bshe`) wie die Portale Schleswig-Holsteins und Berlins; Dokument-URLs liefern nur die
+  Anwendungshülle. Die Befehlserkennung ist vollständig belegt, die Anwendung bleibt offen.
+* *Anlagen im kanonischen Klartext*: Anlagen sind als Änderungsziel unterstützt — im gii-XML sind
+  sie eigene Normen („Anlage 8“, „Anhang“), und `Stelle.anlagenEnbez()` löst sie auf; im GEG werden
+  anlagenbezogene Befehle angewandt. Der `LandesRechtTextParser` kennt jedoch nur „§“- und
+  „Art.“-Normköpfe: Eine handgepflegte Stammfassung kann *keine* Anlage tragen. Das ist die
+  konkrete Lücke für Berlin (Artikel 1) und Baden-Württemberg (Anlagen 1/3b/4b). Beide Portale sind
+  inzwischen als juris-Anwendung *nachgeprüft* — die Lücke geht deshalb erst mit einem
+  Anlage-tragenden Stammgesetz aus einem anderen Portal auf, praktisch `recht.nrw.de`.
+* *Berlin, ganzseitenbreite Rahmen*: Titelblock und Impressum stehen im Inhaltsstrom an anderer
+  Stelle als im Satzbild (der Titelblock mitten im Fließtext der ersten Seite). Das zu beheben
+  verlangt eine geometrische Lesereihenfolge (XY-Cut), nicht bloß eine Spaltenerkennung.
+* *Rheinland-Pfalz*: Die Verkündungsplattform `verkuendung.rlp.de` verkündet erst seit dem
+  01.07.2026 elektronisch; ältere GVBl-Hefte liegen nicht als freie Direkt-PDF vor.
+* Bremen, Hamburg, Mecklenburg-Vorpommern, Saarland, Brandenburg, Sachsen-Anhalt: noch nicht
+  erfasst.
+
+== Wo weitermachen
+
+Kein Land scheitert noch an reiner Extraktionsschwäche; offen sind Modell- und Beschaffungsfragen.
+Nach absteigendem Nutzen:
+
+. *Ein Anlage-tragendes Stammgesetz über `recht.nrw.de` beschaffen* — und dann die
+  *Anlagen-Normköpfe im `LandesRechtTextParser`* ergänzen (er kennt neben „§“/„Art.“ inzwischen
+  auch die Inhaltsübersicht als Norm). Über Berlin oder Baden-Württemberg geht das nicht mehr:
+  deren Portale sind als juris-Anwendung nachgeprüft. Ohne eine solche Stammfassung bleibt die
+  Ergänzung nicht end-to-end prüfbar.
+. *Berlin, ganzseitenbreite Rahmen* (XY-Cut) — die letzte offene Layout-Frage, siehe „Noch offen“.
+
+*Erledigt:* _Thüringen_ ist vollständig umgesetzt (`EndToEndTest.thuerKiGaFinVOAendVO`, zehn
+Befehle, kein Rest). Es war das letzte beschaffte, nie angefasste Heft und hat drei allgemeine
+Befunde gebracht: gerade Anführungszeichen werden paarweise gelesen, wenn ein Text kein deutsches
+öffnendes Zeichen führt; eine Bereichs-Umnummerierung nennt Bezeichnungen, meint aber Einheiten und
+bleibt deshalb bis zur Anwendung ungeteilt; und der Wortbestand eines Dokuments entscheidet, ob ein
+Trennstrich vor einem Großbuchstaben eine Silbentrennung war. Die Stammfassung ist aus vier
+Gesetzblättern zusammengesetzt — siehe `Thueringen/SOURCES`.
+
+*Erledigt:* Die _Stellung eines eingefügten Blocks_ war der letzte sichtbare Rest an Art. 56 des
+BayJG. Ursache war nicht die Einfügung selbst, sondern die Neufassung der Nr. 4 einen Punkt zuvor:
+Sie setzte ihren Wortlaut ohne Einrückung, worauf der Zeilenblock dieser Marke bis ans Absatzende
+reichte — er reicht so weit, wie tiefer eingerückt wird. Art. 56 Abs. 1 gleicht seither in Aufbau
+und Wortlaut der amtlichen Nachfassung; der Akzeptanztest prüft das.
+
+Regressionsschutz: `./mvnw verify` prüft die bestehenden Belegfälle mit. Gepinnt ist dabei nicht
+überall dieselbe Art von Zahl — für UWG, AGG und ProdHaftG, dass *kein* Befehl manuell bleibt; für
+das BayJG die 154 erkannten Befehle, die vollständige Anwendung und den Wortlaut des
+Bußgeldkatalogs — dort auch Aufbau und Einrückung, weil an ihnen die Stellung eingefügter Blöcke
+hängt; für Sachsen,
+Niedersachsen und die vier NRW-Artikel die vollständige Anwendung bis auf das eine benannte
+Residuum im WDR-Gesetz; für Schleswig-Holstein, Berlin und Hessen die vollständige *Erkennung*
+(dort 21 Befehle). Wer eine dieser Zahlen
+ändern muss, sollte den Grund im Test vermerken.
-- 
cgit v1.2.1

