| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Sechzehn Länder hat die Bundesrepublik, vierzehn waren erfaßt. Die beiden
letzten fehlten aus demselben Grund: Ihre Landesrechtsportale führen keine
Fassungsliste, und ohne Vorfassung gibt es keinen Belegfall.
Für das Saarland hilft die Änderungshistorie aus. Weist sie für das fragliche
Jahr genau eine Änderung aus, so ist die Vorfassung die Gesamtausgabe ohne diese
eine. Für das Gesetz über den Saarlandpakt und die Verordnung zu seiner
Ausführung — beide geändert durch das Gesetz Nr. 2211 vom 24. Juni 2026 — ist
das so hergeleitet und aus den Gesetzblättern von 2019, 2020 und 2024 Norm für
Norm gegengeprüft worden: Die Ursprungsfassung nebst den beiden
zwischenzeitlichen Änderungen ergibt genau die heutige Gesamtausgabe. Ein Heft,
zwei Stammwerke, zwei Aufträge; zehn von zehn Normen der Verordnung und
neunzehn von zwanzig des Gesetzes stimmen zeichengenau.
Sachsen-Anhalt bleibt beim rheinland-pfälzischen Weg, und zwar doppelt
begründet: Das Portal führt keine Vorfassung, und das Gesetz- und
Verordnungsblatt des Landes ist überhaupt nicht frei. Frei ist die
Parlamentsdokumentation, weshalb hier die Drucksache 8/6357 des Landtags das
Änderungsdokument ist; aussagekräftig ist allein die Zahl der erschlossenen
Befehle, vierzehn an der Zahl.
Fünf Funde sind allgemein und stehen im Produktivcode: der Kolumnentitel des
saarländischen Amtsblattes; die Aufzählungsmarke, die Kennzeichnung ist und
nicht Wortlaut, sodaß „in Nummer 8 den Punkt ersetzen“ nicht mehr am eigenen
Markenpunkt scheitert; die Artikelwahl bei Ausführungsverordnungen, die ihren
eigenen Namen nicht mehr wegstreicht; die Wortfuge am markerlosen Umbruch, die
der Wortbestand ohne die zeilenletzten Wörter beweist; und die
Buchstabengliederung mit Punkt nebst den kleinen römischen Zahlen, bei denen
„i.“ aus dem Stand der Gliederung entschieden wird.
Nicht selbsttätig verarbeitbar bleiben die auslassende Anfügung, die Anfügung
an die Überschrift des Werkes selbst, der Verbund aus Bereichsumnummerierung
und Wortstreichung sowie die kurze Wortfuge; sie sind im Handbuch und in den
Herkunftsnachweisen als Grenzen benannt.
Die Prüfung geht auf: 456 Testfälle, „mvnw verify“ grün, „reuse lint“ 223 von
223, und der Korpuslauf hält seine Grundlinie bei vierunddreißig Aufträgen,
1429 Befehlen, 1295 angewandt, 661 von 671 gleichen Normen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014dzFZB6rfFjpVMxhF5mQWN
Change-Id: I046353512a672afda7b908f6aee425e4daba507c
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Der Korpuslauf sollte klären, woran die Anlagen-Reste liegen, und hat die Frage
anders beantwortet als erwartet: Unter den 116 liegengebliebenen Befehlen des
Korpus ist kein einziger ein Tabellenproblem. Die Annahme, die vier
mecklenburgischen Reste scheiterten an fehlender Tabellenunterstützung, war
unrichtig. Beschafft man das Ursprungsheft (GVOBl. M-V 2016 Nr. 12, über das
Internet-Archiv, weil der Wirt einer Skriptabfrage nicht antwortet), so zeigt
sich: Der Ausbildungsrahmenplan ist keine Tabelle, sondern gegliederter
Fließtext — je Abschnitt eine Kopfzeile, die Ausbildungsstelle, die Dauer und
eine Spiegelstrichliste. Er fehlte in der Stammfassung, das war alles.
Eine Anlage gliedert sich nach eigener Wahl. Neben den Nummern eines
Zuständigkeitskatalogs kennt das Erzeugnis deshalb fortan die benannte Einheit
und führt sie wie jene als eigene Norm, deren Bezeichnung die Anlage voranstellt:
„Anlage 1 Ausbildungsabschnitt 1“. Erkannt wird sie an ihrem Bau und nicht an
einer Wortliste — verlangt sind Buchstaben vor dem Wortstamm —, denn jede Anlage
darf ihre Einheiten nennen, wie sie will, und eine Liste wäre am nächsten Land
wieder unvollständig. Leser und Ausgeber tragen sie (der Rundlauf geht auf), der
Stellenparser nimmt sie als Stellenangabe, der Auflöser setzt sie mit der Anlage
zur Normbezeichnung zusammen, und der Anwender benennt sie um.
Dabei ist ein stiller Fehler zutage getreten: Die Umnummerierung lief für alles,
was weder Paragraph noch Absatz noch Aufzählungsmarke noch Satz war, in den
Auffangzweig „keine Textänderung nötig“ und meldete Erfolg, ohne etwas zu tun.
Erst der Belegfall hat das gezeigt.
Von den vier mecklenburgischen Resten sind zwei erledigt (22 statt 20 von 24
Befehlen). Die beiden übrigen haben benannte Gründe: Der eine fügt einen ganzen
Ausbildungsabschnitt ein — eine neue Norm innerhalb einer Anlage setzt das
Erzeugnis nicht —, der andere verweist auf einen Anhang des ändernden Gesetzes,
der nicht vorliegt. Die Anlage 2 (Vordruck des Befähigungsberichts) bleibt aus
demselben Grund fort; sie ist der einzige echte Tabellensatz des ganzen Korpus.
Die Grundlinie hat sich sogleich bewährt: Die Erweiterung kostete einen Befehl,
der zuvor angewandt wurde — „Die Überschrift zu Unterabschnitt 4 wird
gestrichen“ des GEG-Entwurfs fiel aus dem Gliederungszweig, weil auch
„Unterabschnitt“ auf den Wortstamm endet. Der Korpuslauf rügte das im selben
Durchgang („angewandte Befehle 86 statt 87“), und zwar in einem anderen Land und
einem anderen Dokument, wo keine Einzelprüfung es bemerkt hätte. Die Grenze ist
gezogen und durch zwei Prüffälle gepinnt.
Geprüft: mvnw verify (445 Testfälle) und reuse lint (214/214) gehen durch. Der
Akzeptanzfall pinnt 35 statt 29 Normen und 22 statt 20 angewandte Befehle; die
Grundlinie des Korpuslaufs ist auf 1289 statt 1287 angewandter Befehle
fortgeschrieben.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I3e6046c3a91ecc45406058b367ec5a9a19c84967
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Der Befund über das Erzeugnis ruhte auf handverlesenen Fällen. Rund drei Dutzend
Akzeptanzprüfungen sagen, dass diese Hefte aufgehen; sie sagen nicht, woran die
Reste im Ganzen liegen — ob an der Befehlssprache eines Landes, an der
Aufbereitung des Druckwerks oder am Alter der eingesetzten Stammfassung. Die
Auszählung der Gründe beantwortet das für ein Heft; über einen Korpus geführt
beantwortet sie es für das Erzeugnis.
Der Schalter --korpus arbeitet eine Auftragsliste ab und gibt je Auftrag eine
Zeile Kennzahlen aus: erschlossene, angewandte, liegengebliebene und am Stichtag
zurückgestellte Befehle, sodann die gleichen, geprüften, fehlenden, überzähligen
und abweichenden Normen des Abgleichs, zuletzt die Gründe nach Häufigkeit. Die
Liste nennt dieselben Angaben, die auch die Befehlszeile entgegennimmt — ein
Auftrag ist nichts anderes als ein Lauf. Mit --synopsen bleiben die
Einzelsynopsen samt einer Übersichtsseite stehen; ohne sie wäre der Bericht eine
Zahlenreihe, aus der niemand den Grund eines Restes erführe.
Eingecheckt ist der Bericht die Grundlinie. --grundlinie hält den Lauf dagegen
und rügt allein, was fällt: weniger erschlossene oder angewandte Befehle, weniger
gleiche Normen, mehr liegengebliebene, fehlende, überzählige oder abweichende.
Ein Fortschritt ist kein Fehler, sondern der Zweck der Arbeit; er verlangt
allein, die Grundlinie fortzuschreiben. Der Rückschritt endet mit 3 wie ein nicht
aufgehender Abgleich. Ein gescheiterter Auftrag hält den Lauf nicht an, sondern
trägt seinen Fehlertext in seiner Zeile — der Grundsatz der Nichtverwerfung gilt
auch hier.
Der mitgelieferte Korpus umfasst einunddreißig Aufträge und gibt 1413 Befehle
her, von denen 1287 angewandt werden; 632 von 641 verglichenen Normen gehen auf.
Er reproduziert die Zahlen der bestehenden Akzeptanzfälle (UWG 19/0, GEG 119/119,
BayJG 154/154, Berlin 171/171, WDR 101, Bremen 41/37, Hamburg 21/17). Drei
Aufträge tragen mit Absicht hohe Reste: Bei den beiden Beschlussempfehlungen und
bei Rheinland-Pfalz schreibt die Vorlage eine ältere Fassung fort als die
eingesetzte Stammfassung. Sie sind gleichwohl Wächter — steigen ihre Reste, so
hat sich etwas verschlechtert.
Nebenbei: Die Auszählung der Gründe stand doppelt (Befehlszeile und Synopse) und
liegt nun in Pipeline.zaehleGruende; das Ergebnis der Pipeline führt sie mit.
Geprüft: mvnw verify (443 Testfälle) und reuse lint (214/214) gehen durch; der
Korpuslauf ist Teil der Prüfung. Die Rügeregel ist am ganzen Korpus erprobt: Eine
um eins verschärfte Grundlinie führt zur Rüge „UWG-BGBl: angewandte Befehle 19
statt 20“ und zum Rückgabewert 3.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I4e10b041b78d95772da1c3ff18ab92b0b45dacaa
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Mecklenburg-Vorpommern tritt als sechzehntes Land hinzu. Sein Gesetzblatt liegt
vollständig offen (Jahrgänge ab 2014, rund 440 Hefte); das Portal dagegen ist
eine juris-Einseitenanwendung ohne Fassungsliste. Die Vorfassung kommt deshalb
aus dem Gesetzblatt selbst: Nennt der Einleitungssatz die Stammvorschrift ohne
jede frühere Änderung, so ist die Ursprungsfassung beweisbar die Vorfassung.
Der Fall — Artikel 44 des Besoldungsanpassungsgesetzes vom 8. Juli 2026, der die
Ausbildungs- und Prüfungsordnung amtstierärztlicher Dienst ändert — prüft die
Artikelwahl schärfer als jeder bisherige: Das Heft trägt ein Mantelgesetz mit
rund sechzig Artikeln, von denen jeder ein anderes Werk ändert. Er prüft ferner
die Inhaltsübersicht als eigene Norm, deren Angabe zu § 10 der erste und deren
Überschrift der siebte Befehl ändert.
Zwei Ergänzungen waren nötig: die Muster für Kolumnentitel und Seitenfuß des
Blattes (beide stehen im Inhaltsstrom, mitten im Befehlstext) und die Nebenform
„die Angabe zu § 10 wird durch die folgende Angabe ersetzt“. Die vier liegen
gebliebenen Befehle betreffen sämtlich die Anlagen, die die Stammfassung als
Tabellen und Vordrucke nicht mitführt.
Eine Nachfassung gibt es nicht: Der Artikel tritt erst am 1. September 2026 in
Kraft, weshalb die Gesamtausgabe des Portals noch die Vorfassung ist — sie hat
dieser als Gegenprobe gedient.
Geprüft: mvnw verify (430 Testfälle) und reuse lint (207/207) gehen durch; der
neue Akzeptanzfall pinnt die Wahl des Artikels 44, 24 gelesene und 20 angewandte
Befehle.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: Ic7f04bbd6326f2e34e50fab5b67eb8b2db346410
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Bremen tritt als fünfzehntes Land hinzu. Sein Transparenzportal ist nach BRAVORS
und recht.nrw.de das dritte, das einer Skriptabfrage gewöhnliches HTML liefert,
und das erste außerhalb Brandenburgs, das jede frühere Gesamtausgabe einzeln
adressierbar führt; Vor- und Nachfassung stammen daher aus derselben Quelle.
Das Heft (Brem.GBl. 2026 Nr. 87) versäumt es zweimal, ein Zitat zu schließen.
Daran zeigte sich, dass die Grenze am Aufzählungspunkt zu eng gefasst war: Sie
verlangte, dass der Rest des Abschnitts ausbalanciert zurückbleibe, und konnte
deshalb nur den letzten Mangel heilen. Nunmehr prüft sie, dass kein schließendes
Anführungszeichen ohne öffnendes zurückbleibt — ein Abschnitt darf mehrere
offene Zitate tragen, und jedes wird an seiner eigenen Grenze geschlossen. Das
Heft gab vorher 22 Befehle her, nun 41.
Die bremische Befehlssprache brachte sechs Nebenformen (Name der Verordnung,
bloße Aufzählungsmarke als Stelle, Marke mit Schlusspunkt, „geändert“ statt
„ersetzt“, „um Satz 2 ergänzt“, benanntes Satzzeichen) und fünf Anwendungsfunde:
Eine unvollendet endende Neufassung lässt die Untergliederung stehen; das Zitat
des ersten Satzes trägt die Absatzbezeichnung mit; ein Umbruch mitten im Satz
ist Satzspiegel; ein Platzhalter hält nur im eigenen Block Platz; und eine
angefügte Einheit, die ihre Nummer nennt, tritt an den genannten Platz. Dabei
kam ein stiller Mangel ans Licht: „hinter dem Wort“ war in den Mustern
zugelassen, wurde aber nirgends geprüft — die Wörter traten vor den Anker.
Geprüft: mvnw verify (428 Testfälle) und reuse lint (204/204) gehen durch; der
neue Akzeptanzfall pinnt 41 gelesene, 37 angewandte Befehle und den Gleichlauf
von 26 der 29 Normen mit der amtlichen Nachfassung.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: If83a1f3204cd4599168888f2701db71d560b7bc7
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Was ein Land kostet, entscheidet sein Portal. Für die vier noch nicht erfassten
Länder ist das nun geprüft und festgehalten, damit die nächste Welle nicht wieder
bei der Frage anfängt.
Mecklenburg-Vorpommern gibt sein Gesetzblatt frei und skriptlesbar heraus; das
Portal dagegen ist eine juris-Einseitenanwendung und führt — wie Hamburg — keine
Fassungsliste. Ein voller Belegfall verlangt dort deshalb eine Vorschrift, die
genau einmal geändert worden ist: Dann ist die Vorfassung die Ursprungsfassung aus
dem Gesetzblatt. Der zuerst betrachtete Fall taugt dafür nicht, denn beide
Stammgesetze sind vielfach geändert.
Bremen antwortet einer Skriptabfrage mit gewöhnlichem HTML — das zweite offene
Portal nach BRAVORS. Der Weg ist frei; er ist nur noch zu gehen.
Geprüft: Die Angaben beruhen auf Abrufen vom 26. August 2026; am Quelltext ändert
sich nichts.
Change-Id: Ief07f5110a615fa8140b79557e2b88d6034c0235
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Das hamburgische Gesetzblatt bringt zwei Gliederungen, die im übrigen Landesrecht
nicht vorkommen. Die erste: Ein Sammelheft trägt Verkündungen beider Art
nebeneinander — die eine teilt sich in Artikel, die nächste in Paragraphen. Die
§-Teilung erst dann zu versuchen, wenn ein Heft überhaupt keinen Artikel führt, war
darum zu grob; sie ist auch dann zu versuchen, wenn kein Artikel das Stammgesetz
betrifft. Die zweite: Die Befehle sind dezimal gegliedert (6.1, 7.1.1, 7.2.3), wo
die übrigen Blätter a)/aa) setzen. Die Ebene steht dabei in der Zahl selbst, und
weil das Label seine Herkunft schon trägt, wiederholt der Gliederungspfad sie
nicht.
Dazu drei Funde am Satz des Blattes: Es setzt zwischen Paragraphenzeichen und
Nummer ein schmales Leerzeichen, das Javas \s nicht kennt — ohne dessen
Normalisierung ist „§ 1“ dort kein Normkopf, und das ganze Heft bliebe ungelesen.
Es führt seinen Kolumnentitel im Inhaltsstrom, wo er hinter das Zitat eines
Befehls fällt. Und es lässt das Schlusswort der Eingangsformel in die rechte
Spalte fallen, mitten in einen Absatz; die Spalte folgt deshalb fortan ihrer
Grundlinie statt dem Strom — stabil sortiert, im Regelfall folgenlos.
Drei Funde an der Anwendung: Ein Satzzeichen, das an die Stelle eines Wortes
tritt, nimmt dessen Zwischenraum mit (die Umkehrung der schon geregelten Fuge).
Ein Satz, der an eine Aufzählung angefügt wird, gehört dem Absatz und nicht dem
letzten Glied — er tritt auf eine eigene Zeile, und zwar in der Einrückung des
Blockes, denn bündig gesetzt beendete er ihn. Und eine Neufassung, deren
Bezeichnung eine aufsteigende Umnummerierung räumt, tritt hinter diese zurück:
Sonst verlöre die bisherige Nummer 3 ihren Wortlaut und die Umnummerierung
benennte alsdann die neue — ein stiller Verlust.
Zwei Befehle des Heftes bleiben unerkannt, und das ist richtig so: Sie schreiben
„wir die Textstelle … ersetzt“ statt „wird“. Ein Werkzeug, das das errät, läse
morgen auch anderes, was dort nicht steht.
Geprüft: mvnw verify, 425 Tests (zuvor 415), reuse lint 200/200. Hamburg: 21
Befehle gelesen, 17 angewandt, 10 von 14 Normen gleich der amtlichen Nachfassung;
drei der vier Abweichungen liegen an der Vorlage.
Change-Id: Ibc61b4a38d5df5604b8c8efe2d69b7b6d27512d6
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Der Abgleich mit der amtlichen Nachfassung verwendete für seine abweichenden
Normen dieselbe Auszeichnung wie die Gegenüberstellung und erbte damit deren
fortlaufende Randziffer. Sie behauptete dort eine Ordnung, die es nicht gibt:
Jede abweichende Norm steht für sich. Die Auszeichnung wird geschieden.
Ferner werden das Verzeichnis der Fassungen und das Verzeichnis der
Landesrecht-Beispiele fortgeschrieben. In letzterem entfällt der Punkt „Noch
offen“ zu den Anlagen-Nummern im gii-XML — die Frage war falsch gestellt.
Geprüft: 388 Tests, reuse lint 190/190. Die Browserfassung ist gebaut und
örtlich durchgespielt: Berlin gibt „171 von 171 Normen gleich“ nebst beiden
Verweisen aus, Baden-Württemberg „91 von 93“ mit den zwei benannten
Abweichungen, deren Wortunterschied die Synopse zeigt.
Change-Id: I9e6af0b398ffedc7c0691c7947960a78bf99f137
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Jede eigene Datei trug bislang den Vermerk "2020" — das Jahr, in dem das
Verzeichnis angelegt wurde. Von den neunundachtzig eigenen Dateien sind aber
vierundachtzig erst 2026 entstanden. Der Vermerk sagte damit nicht, wann das
Werk geschaffen wurde, sondern wann jemand zum ersten Mal etwas eincheckte; das
ist nicht dasselbe, und für die Schutzfristberechnung ist es die falsche Angabe.
Erhoben wird das Jahr nunmehr je Datei aus der Entstehungs- und der letzten
Änderungsbuchung. Neunundsiebzig Dateien tragen "2026". Fünf reichen wirklich bis
2020 zurück und werden bis heute fortgeschrieben (.gitignore, README.md, pom.xml,
AendGgner.java, logging.properties); sie tragen "2020-2026". Eine einzige Datei
ist seit 2020 unberührt geblieben, .mvn/maven.config, und behält ihren Vermerk
unverändert — sie war die einzige, bei der er von Anfang an stimmte.
Die Zuordnungsdatei wird entsprechend geschieden. Der Block, der maven.config mit
den drei übrigen kommentarlosen eigenen Dateien zusammenfasste, wird geteilt,
weil deren Jahre auseinanderfallen; die abgeleiteten Textfassungen und die
Herkunftsnachweise tragen 2026.
Damit der Bau die Berichtigung nicht sogleich wieder zunichte macht, tritt im
Kopfzeilenvordruck des Formatierers der Platzhalter "$YEAR" an die Stelle des
festen Jahres. Er nimmt hin, was in der Datei steht, statt allen Java-Dateien
dasselbe Jahr aufzunötigen.
Geprüft: 350 Tests, REUSE 188/188, spotless:check ohne Beanstandung und
spotless:apply ohne Änderung.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I876adf0a4ce63c198e0e549d7c976310e2a3a3ee
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Die Erste Landesverordnung zur Änderung der Ausbildungs- und Prüfungsordnung der
Unfallkasse (GVBl. 2026 Nr. 21) kommt als Erkennungsfall in den Bestand — nicht
als Akzeptanzfall, und der Grund liegt in der Quelle: Das rheinland-pfälzische
Landesrechtsportal führt keine früheren Gesamtausgaben, ebensowenig das
saarländische und das sachsen-anhaltische. Die Fassungsliste, über die Hessen,
Schleswig-Holstein, Berlin und Baden-Württemberg jede Fassung datierbar ausgeben,
gibt es dort nicht. Ohne Vorfassung kein Vergleich; der Stamm ist hier die
Nachfassung, und die neun „Zieltext nicht vorhanden“ sind gerade der Beleg dafür,
dass die Befehle dort bereits vollzogen sind.
Zwei allgemeine Funde hat der Fall trotzdem gebracht. Das Land schreibt „die
Worte“, wo das Handbuch der Rechtsförmlichkeit „die Wörter“ setzt — der Erkenner
nimmt die Nebenform jetzt überall an, ohne sie blieben sieben der 23 Befehle
unerkannt. Und der Seitenfuß des dortigen Gesetzblattes steht im Inhaltsstrom und
zerschneidet das Zitat einer Neufassung („§ 18 erhält folgende Fassung:“ /
Fußzeile / „„§ 18 …““); er wird nun herausgeschnitten wie die Füße der
Gesetzblätter Berlins, Thüringens und Baden-Württembergs.
Drei Idiome bleiben benannt offen: die Satzzeichen-Ersetzung im Verbund mit einer
Halbsatz-Anfügung („durch einen Strichpunkt ersetzt und folgender Halbsatz
angefügt“), „In der Einleitung“ als Ziel, und die Verweisung auf einen anderen
Punkt („entsprechend der vorstehenden Nummer 8 Buchst. a“).
Nebenbei ein besserer Beschaffungsweg, in RheinlandPfalz/SOURCES festgehalten:
Der Portaltext wird im Browser als Blob zum Herunterladen angeboten und landet
unmittelbar als Datei im Dateisystem, statt stückweise durch die Textausgabe der
Browsersteuerung zu gehen. Der PDF-Verweis der Dokumentansicht taugt dafür nicht
— er ist an die Sitzung gebunden.
Geprüft: 350 Tests, REUSE 188/188.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I317f2d368b734c1152cd47cc09356de60f5dfb35
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Brandenburg ist das erste Land, dessen Portal keine juris-Einseitenanwendung ist:
BRAVORS gibt seine Vorschriften als gewöhnliches HTML aus und führt unter
„Änderungshistorie“ jede Fassung einzeln. Vor- und Nachfassung entstammen damit
derselben Quelle — kein Wayback, keine Browsersteuerung, nur zwei Adressen. Die
Hefte lassen sich am Dokumententitel des PDF einordnen; „FraktG-1AendG“ verrät
mehr als jede Volltextsuche.
Der Belegfall ist das Erste Gesetz zur Änderung des Fraktionsgesetzes (GVBl. I
2026 Nr. 12): vier Befehle, vier angewandt, alle 24 Normen gleich der amtlichen
Nachfassung — auf Anhieb, ohne einen einzigen Eingriff am Parser. Zugleich ist er
die Gegenprobe zum Inkrafttreten: Artikel 2 ordnet es schlicht an („am Tag nach
der Verkündung“), also darf keine Staffelung gerügt und kein Datum erfunden
werden.
Drei Eigenheiten fürs Aufbereiten stehen in Brandenburg/SOURCES: Die
Abschnittsbezeichnung steht im Kopfelement vor der Überschrift; die Aufzählungen
sind echte Listen, deren Marken erst das Stilblatt erzeugt; und an ehemaligen
Trennstellen führt das Portal vereinzelt Steuerzeichen mit (U+0002 in
„Mitglie<STX>der“), die kein Textbestand sind.
Ein allgemeiner Fund kam doch dazu: Die Überschrift des Schlussartikels geriet in
den Wortlaut der Inkrafttretens-Anordnung, weil ein Artikel ohne Absatz-
bezeichnungen im ganzen ein Absatz ist. Auf das bloße Vorkommen von „tritt“ ist
dabei kein Verlass — das Wort „Inkrafttreten“ trägt es selbst.
Geprüft: 349 Tests, REUSE 185/185.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I17660864fdf589d280024c9ba310e23902781515
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Das Berliner Gesetz- und Verordnungsblatt zeichnet den ganzseitenbreiten
Titelblock des Gesetzes zuletzt — nach beiden Spalten, obgleich er über ihnen
steht. Im Inhaltsstrom stand er damit mitten in einem Zitat, das über den
Seitenwechsel läuft: „… zur Sicherung des Be-“, Titelblock, „triebs von
Unterkünften …“. Der Wortlaut der Anlage Nummer 31 trug den Titel des
Änderungsgesetzes in sich, und die Nummer wich als einzige aus einem Grunde von
der amtlichen Nachfassung ab, der weder in der Erkennung noch in der Anwendung lag.
Maßgeblich ist fortan das Satzbild in der einfachen Gestalt, die die
Gesetzblätter durchweg haben: zwei Spalten, dazwischen eine Rinne, und darüber
oder dazwischen einzelne ganzseitenbreite Zeilen. Gesucht wird die Rinne — die
senkrechte Linie, die möglichst wenige Zeilen überschreiten, die nahe der Mitte
des Satzspiegels liegt und zu deren beiden Seiten je eine Spalte von
nennenswerter Breite steht. Die wenigen Zeilen, die sie gleichwohl
überschreiten, sind die breiten; sie zerlegen die Seite in Bänder. Gelesen wird
Band für Band von oben nach unten, in jedem Band erst die linke, dann die rechte
Spalte.
Der übliche XY-Schnitt der Literatur leistet das nicht, und der erste Versuch
danach hat es bewiesen: Teilt man erst waagerecht am weitesten Weißraumband,
so zerfällt eine zweispaltige Seite mit Kolumnentitel in oben und unten, ehe sie
in links und rechts zerfällt; gelesen wird links oben, rechts oben, links unten,
rechts unten. Im Infektionsschutzgesetz zerriss das eine Aufzählung mitten
entzwei und ließ von fünfundsiebzig Befehlen einundvierzig übrig. Die Spalte hat
deshalb den Vorrang vor dem Band.
Zwei Vorsichtsmaßregeln begrenzen den Eingriff, der sonst jeden Extraktionslauf
berührte: Innerhalb einer Spalte bleibt es bei der Reihenfolge des
Inhaltsstroms, und findet sich keine Rinne, so bleibt die Seite unangetastet.
Der Eingriff kann Spalten und breite Zeilen gegeneinander versetzen, niemals
aber den Satz einer Spalte durcheinanderbringen, deren Strom schon stimmte.
Ausgezählt über den ganzen Beispielbestand ändern fünfzehn der fünfundvierzig
PDF-Dateien ihren Auszug; nachgesehen sind sie sämtlich, und wo sie den
Fließtext betreffen, rücken sie einen Vorspann an die Stelle, an der er im Satz
steht (Berlin, Thüringen, die Beispielsynopse zum Produkthaftungsrecht). Die
Anlage Nummer 31 gleicht nunmehr der amtlichen Nachfassung; es verbleiben zwei
benannte Abweichungen, keine davon in der Anwendung begründet. Alle
dreihundertneununddreißig Prüfungen laufen durch, darunter jede gepinnte Zahl
des Bestandes; REUSE meldet 176/176.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I80f100bba2b8e48d0d292fb310f4a9c98fc519ec
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Baden-Württemberg war das letzte Land mit einem Änderungsdokument, aber ohne
Belegfall. Es hat vier Funde des Satzbildes und einen der Anwendung gebracht.
Der Seitenfuß des Gesetzblatts steht im Inhaltsstrom mitten im Befehlstext und
trennt dort den Zieltext eines Befehls von seinem Verb — „… die Wörter
‚Telegramm, Fernschreiben,‘“, Fußzeile, „gestrichen.“; die Blattzählung steht
mitunter für sich allein zwischen zwei Gliederungspunkten. Beides wird nun
herausgeschnitten. Dazu zwei Idiome: Der Dativ einer Anfügung darf seinen
Artikel verlieren („Absatz 2 wird folgender Satz angefügt“), und hinter einer
Anlagenbezeichnung darf ein beschreibender Klammerzusatz stehen.
Der Anwendungsfund betrifft den Halbsatz: Wird der zweite gestrichen, so nimmt
er sein Semikolon mit, und der Satz behält seinen Schlusspunkt. „A; B.“ ohne B
ist „A.“ und nicht „A;“.
Bei der Gelegenheit fiel eine Ordnungsfrage auf, die allgemein ist: Die Glieder
einer Fundstelle werden jetzt in der Reihenfolge aufgelöst, in der die Stelle
sie nennt, und jedes verengt den Suchbereich des nächsten. „Absatz 2 Nummer 1
Satz 2“ meint den zweiten Satz der Nummer 1, „Satz 1 Nummer 3“ dagegen die
dritte Nummer des ersten Satzes; wer stets zuerst den Satz oder stets zuerst die
Nummer suchte, träfe in einem der beiden Fälle die falsche Einheit.
Einunddreißig der siebenunddreißig Befehle werden angewandt, und einundneunzig
der dreiundneunzig Normen gleichen danach der amtlichen Fassung. Die sechs
liegengebliebenen ändern sämtlich die Muster der Anlagen — den Wahlschein, die
Merkblätter, deren Fußnoten und Spiegelstriche. Sie sind nicht anwendbar, weil
das Landesrechtsportal die Muster nicht als Text ausliefert: Die Anlagen 2 bis 14
bestehen dort nur aus Kopf und Fundstelle. Das ist eine Grenze der Quelle, nicht
des Werkzeugs, und sie ist als solche benannt.
Damit trägt jedes Land, von dem ein Änderungsdokument vorliegt, einen Belegfall
bis zur Anwendung.
Geprüft mit „mvnw verify“: 334 Prüfungen, kein Fehlschlag; keine gepinnte Zahl
eines anderen Belegfalls hat sich geändert. REUSE 174/174.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: If1709f0c037195a510febb7f8a21396ed0133d45
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Der Zuständigkeitskatalog des Berliner Sicherheits- und Ordnungsgesetzes zählt
seine Einheiten nicht als Aufzählungsglieder, sondern führt sie als „Nummer 6“,
„Nummer 23“, „Nummer 31“ — jede mit eigener Absatzzählung, jede im Portal eine
eigene Einzelnorm. Der Stellenauflöser suchte dagegen eine Marke „6.“ im
Wortlaut der Anlage und fand dort vielerlei; von sechs Befehlen des Artikels 1
wurden zwei angewandt.
Sie werden nunmehr geführt, wie sie sind: als eigene Normen, deren Bezeichnung
die Anlage voranstellt. Damit trägt die vorhandene Absatz-Maschinerie ihre
Befehle unverändert, und es braucht keinen neuen Rang im Modell. Wo ein Gesetz
solche Normen nicht führt — im gii-XML des Bundes stehen die Nummern einer
Anlage als Marken im Wortlaut —, bleibt es beim bisherigen Weg.
Dabei kamen drei Mängel ans Licht. Ob die feinste Komponente einer Fundstelle
ein Absatz ist, entschied das bloße Vorkommen einer feineren Komponente; die
Nummer einer Anlage steht aber vor der Absatzangabe und gehört zur Bezeichnung
der Norm. Die Umnummerierung eines solchen Absatzes galt deshalb als die einer
Aufzählungseinheit, tauschte eine Marke, die es nicht gab, hieß angewandt und
bewirkte nichts. Ein Absatz, der „vor den Wörtern …“ eingefügt wird, wurde eine
Zeile im Nachbarabsatz statt eines Absatzes. Und die Bezeichnung eines so
eingefügten Absatzes verlor die Nummer der Anlage, weshalb die Schritt-Ordnung
nicht sah, dass eine Umnummerierung ihm den Platz erst räumt.
Beigelegt sind die beiden Fassungen des ASOG, über die Browsersteuerung
beschafft. Der Auszug ist dort bei fünfzigtausend Zeichen gekappt und verschluckt
einzelne Leerzeichen; base64-kodierte Stücke kamen zeichengenau herüber.
Fünf der sechs Befehle werden angewandt, und 168 der 171 Normen gleichen danach
der amtlichen Nachfassung. Die drei Abweichungen sind benannt und liegen nicht
in der Anwendung — eine von ihnen belegt erstmals, was die geometrische
Lesereihenfolge kosten würde: Der Titelblock des Änderungsgesetzes steht im
Inhaltsstrom mitten in einem Zitat.
Geprüft mit „mvnw verify“: 333 Prüfungen, kein Fehlschlag; keine gepinnte Zahl
eines anderen Belegfalls hat sich geändert. REUSE 171/171.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I24b94cb96e6728b1ff1b1fcb5bb4b8433594e240
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Die beiden größten Restzahlen des Prüfbestands — GEG einundfünfzig, IfSG
siebenundzwanzig manuell zu prüfende Befehle — waren nie gepinnt, und niemand
hatte sie je gegen ein Sollergebnis gehalten. Der Verdacht stand im Raum, sie
seien kein Mangel des Werkzeugs, sondern ein Altersunterschied: Das gii-XML ist
die heutige konsolidierte Fassung, während das Änderungsgesetz von 2023 bzw.
2020 auf die damalige zielt. Der Verdacht trifft zu, aber nicht ganz.
Beschafft sind die zeitrichtigen Fassungen aus dem Wayback-Schnappschuss des
amtlichen Archivs „xml.zip“ — dasselbe Format, das der Loader ohnehin liest.
Maßgeblich für die Wahl ist der Einleitungssatz des Änderungsgesetzes; beide
Schnappschüsse tragen genau den dort genannten Stand.
Gegen sie gerechnet, blieben zunächst fünf und sieben Reste. Diese zwölf sind
erstmals echte Befunde gewesen, und neun von ihnen benannten vier allgemeine
Mängel, die alle behoben sind: Eine Wortersetzung griff in längere Wörter
hinein und verbrauchte mit „schwerwiegende“ auch „schwerwiegender“; eine
eingerückte Aufzählungsmarke galt als Satzende, weshalb ein Absatz mit
Aufzählung mehr Sätze zählte als das Gesetzblatt; eine Ordnungszahl vor einem
Gliederungswort ebenso; eine Nummer wurde im ganzen Absatz gesucht statt im
benannten Satz; und eine Gliederungseinheit, die Rahmen und Befehl beide
nennen, suchte sich innerhalb ihrer selbst.
Übrig bleiben drei Reste im GEG, jeder im Test einzeln begründet: zweimal
dieselbe Kaskade des § 108 — die Aufhebung einer „bisherigen“ Nummer, deren
Bezeichnung ein anderer Punkt gerade neu vergibt, und eine Begleitklausel ohne
eigene Ortsangabe — und einmal die Überschrift einer Nummer der Anlage 8. Das
letzte ist dieselbe offene Modellfrage wie bei Berlins Anlage.
Vier gepinnte Zahlen sind dadurch gestiegen; der Grund steht jeweils im Test.
Das WDR-Gesetz trägt seither keinen Rest mehr.
Geprüft mit „mvnw verify“: 330 Prüfungen, kein Fehlschlag; REUSE 167/167.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I338e78ec3d46e0d0d8e57e77831ebae34497ae7b
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Der Klartext-Parser trägt fortan Anlagen: „Anlage“, „Anlage 2“ und „Anhang“
eröffnen eine eigene Norm, deren Bezeichnung genau so lautet wie im gii-XML, und
vom ersten Anlagenkopf an gehört alles Folgende zu ihr — ihre inneren
Überschriften gliedern nicht mehr das Gesetz, und ein Paragraph, den sie
zitieren, eröffnet keine Norm.
Berlin ist damit zur Hälfte belegt. Artikel 2 des Änderungsgesetzes schreibt das
LAF-Errichtungsgesetz vollständig fort; alle fünf Normen gleichen danach der
amtlichen Fassung vom 12. Juni 2026. Artikel 1 bleibt bei der Erkennung, und der
Grund ist benannt statt umgangen: Fünf seiner sechs Befehle zielen auf Einheiten
der Anlage, die dort als Überschriften stehen — „Nummer 6“, „Nummer 23“,
„Nummer 31“ —, während der Stellenauflöser eine Aufzählungsmarke „6.“ sucht, die
im Text der Anlage vielfach vorkommt. Die Gegenprobe belegt es: Werden die
Überschriften versuchsweise in Marken umgeschrieben, steigt die Zahl der
angewandten Befehle von zwei auf drei, mehrdeutig bleibt der Rest. Die Nummern
einer Anlage brauchen einen eigenen Rang zwischen Norm und Absatz.
Solange er fehlt, bringt die Beilage von zweimal 380 kB Stammfassung keinen
Prüfgewinn; ihr Bezugsweg steht in „Berlin/SOURCES“ und führt in zwei Abrufen
wieder dorthin. Dort ist auch der zweite Berliner Befund festgehalten: Das Portal
setzt die amtlichen Satznummern als angeklebte Ziffern statt als Superskripte.
Geprüft durch „mvnw verify“: 328 Tests, keine bestehende gepinnte Zahl bewegt,
REUSE-Konformität 165 von 165.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: Ifdda599a8c641ce66d0370b2a027f556adb4d86d
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Schleswig-Holstein ändert mit einem Gesetz die Gemeindeordnung und die
Kreisordnung zugleich, jede in ihrem eigenen Artikel. Beide Stammfassungen sind
nun über die Browsersteuerung beschafft — Vor- wie Nachfassung —, und beide
werden vollständig fortgeschrieben: je ein Neufassungsbefehl, kein Rest, und
danach gleicht die Gemeindeordnung in allen 167, die Kreisordnung in allen 86
Normen der amtlichen Fassung vom 31. März 2026. Der dritte Artikel ändert ein
anderes Änderungsgesetz und bleibt zu Recht unbeachtet.
Der Portalsatz hat zwei Eigenheiten. Er trennt die Sachnummer ab („§ 57 c“
statt „§ 57c“); zusammengezogen gehört das zur Aufbereitung, ohne den Handgriff
wären zehn Paragraphen der Gemeindeordnung dem Gesetz entgangen. Und er setzt im
Klammerzusatz „(Gemeindeordnung - GO -)“ einen Bindestrich, wo das Gesetzblatt
einen Gedankenstrich führt. Daran scheiterte die Trennung von Kurztitel und
Abkürzung, der Einleitungssatz fand sein Ziel nicht, und es wurde kein Artikel
gewählt. Der Parser nimmt den Strich fortan in beiden Gestalten an, sofern
Leerraum ihn umgibt — innerhalb eines Namens steht ein Bindestrich stets ohne.
Geprüft durch „mvnw verify“: 327 Tests, keine bestehende gepinnte Zahl bewegt,
REUSE-Konformität 162 von 162.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I11e8e84436c9b4b0e1729f5e4be012cc35335a0c
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Die Landesrechtsportale, die auf der juris-Anwendung beruhen, galten als
Sackgasse: Jede Skriptabfrage erhält nur ihre leere Anwendungshülle, gleich
unter welcher Adresse. Sie geben ihren Wortlaut aber jedem Browser, und über
eine Browsersteuerung ist er Werk für Werk auszulesen. Damit ist die hessische
Verkehrsrechts-Zuständigkeitsverordnung in beiden maßgeblichen Fassungen
beschafft — der vom 1. Januar 2026 und der vom 4. Februar 2026 — und Hessen ist
kein bloßer Erkennungsfall mehr, sondern ein voller Belegfall: einundzwanzig
Befehle, kein Rest, und alle zweiundfünfzig Normen gleichen zeichengenau der
amtlichen Nachfassung.
Der Weg dorthin hat fünf allgemeine Lücken aufgedeckt. Der Klartext-Parser
verlangte für jeden Normkopf eine Überschrift, die eine Verordnung nicht führt,
und kannte die ausgeschriebene Gliederung nicht („Erster Teil“); ein
Aufzählungsglied, das auf „und“ endet, galt ihm als Unter-Überschrift. Der
Anwender behandelte die Streichung einer Absatzbezeichnung wie die Aufhebung des
Absatzes, setzte Platzhalter auch dort, wo kein Platz zu halten war, und ließ
ein Wort, das an die Stelle eines Satzzeichens tritt, am Vorwort kleben.
Zwei stille Mängel kamen unverhofft mit: „List.remove“ war zweimal ein geboxter
Index übergeben, sodass der Aufruf an die suchende Überladung band, nichts fand
und nichts meldete. Betroffen war neben der Aufhebung eines Absatzes auch dessen
Neufassung durch mehrere — der alte Absatz blieb neben den neuen stehen.
Geprüft durch „mvnw verify“: 327 Tests, keine bestehende gepinnte Zahl bewegt,
REUSE-Konformität 157 von 157.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I20ac8a7bc66357cd66daa167184b06b8c419f843
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Das Erzeugnis steht seit seinem ersten Tage unter der GNU Affero General Public
License. Ausgesprochen war das indes nur an drei verstreuten Stellen: im
Lizenzvolltext „COPYING“, in einem Satz des Impressums und in einer Bemerkung der
Datei „.gitattributes“. Keine einzige Quelldatei nannte ihren Urheber oder ihre
Lizenz. Wer eine Datei für sich betrachtet — und so betrachtet sie jeder, der sie
übernimmt —, fand daran nichts.
Maßstab ist die REUSE-Spezifikation in der Fassung 3.3. Das Verzeichnis
„LICENSES“ nimmt die Wortlaute auf: die AGPL in der Fassung 3 oder später, die
Apache-Lizenz für den unverändert mitgelieferten Maven-Wrapper und
„LicenseRef-AmtlichesWerk.txt“. „COPYING“ bleibt an seiner Stelle, tritt aber als
symbolische Verknüpfung auf; der gewohnte Pfad trägt damit fort, ohne dass zwei
Wortlaute nebeneinander zu pflegen wären, und die Prüfung übergeht Verknüpfungen,
sodass für den Lizenztext selbst keine sachfremde Lizenzangabe zu erfinden war.
Die dritte Datei bezeichnet keine erteilte Lizenz, sondern hält die gesetzliche
Rechtslage des Prüfbestandes fest. Fünfundvierzig PDF-Dateien, fünf EPUB-Dateien
und die XML-Fassungen sind fremde Werke: Verkündungsblätter, Drucksachen,
Plenarprotokolle und Entwürfe des Bundes und der Länder. Sie sind nach § 5 Abs. 1
UrhG gemeinfrei, die ministeriellen Entwürfe und Synopsen nach § 5 Abs. 2, und
gleichwohl gebunden an Änderungsverbot und Quellenangabe nach §§ 62 und 63.
Ausdrücklich festgehalten ist, dass die technische Aufbereitung durch die
Rechtsportale kein eigenes Recht am Text begründet und dass der Bestand kein
„Corresponding Source“ im Sinne der AGPL ist — gebaut wird ohne ihn.
„REUSE.toml“ ordnet zu, was keinen Kommentar verträgt, und scheidet den
Prüfbestand nach Herkunft: Bund in Verkündung und Parlament, Bund in den
ministeriellen Entwürfen, gesetze-im-internet.de nebst der Aufbereitung durch die
juris GmbH, sodann neun Länder je einzeln. Die selbst abgeleiteten Textfassungen
tragen „AGPL-3.0-or-later AND LicenseRef-AmtlichesWerk“, denn der Wortlaut ist
amtlich, die Aufbereitung — Einrückung, Superskript-Satznummern,
Gliederungsüberschriften — eigene Arbeit. Maßgeblich für die Fundstelle der
einzelnen Datei bleibt die Datei „SOURCES“ des jeweiligen Verzeichnisses; die
Lizenzdatei nimmt sie in Bezug, wie es § 63 UrhG verlangt.
Die übrigen Dateien tragen ihre Angabe in sich, im jeweils üblichen
Kommentarstil, vor dem vorhandenen erläuternden Text und ohne diesen anzutasten.
„mini-gii.xml“ und „.mvn/maven.config“ bleiben bewusst unberührt und erhalten
stattdessen einen Eintrag: Ersteres liest der GiiXmlLoader, Letzteres Maven vor
jedem Bau. Ein Ausrollwerkzeug hinterließ mit „.wrangler“ ein Zwischenverzeichnis
im Arbeitsbaum; es ist fortan übergangen.
Die Java-Dateien und die Angleichung der Lizenzaussage folgen gesondert. An
diesem Stand bestehen dreihundertfünfundzwanzig Testfälle unverändert; am
Verhalten des Erzeugnisses ändert sich nichts.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: Id08e26d8e15545b2d00dd3d4fa7ffca86cf14944
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The percentile-based right-margin estimate from the previous commit
misclassified two real-world layouts: at the column switch of the
two-column old-BGBl format a window contains both column margins, so the
90th percentile returned the right column's margin and marked every
left-column soft wrap as deliberate (vetoing hyphen mending, IfSG 2020:
"Impf- surveillance"); and series of equally wide centered "Artikel N"
headings in draft bills formed the top of their window's distribution,
so they counted as full-width and were reflowed into the following line,
breaking teileInArtikel's line anchor (ProdHaftG RegE). Classify against
alignment clusters instead: a line end is soft when at least five window
lines end within 4 pt of it (the justified block's own margin), hard when
such a cluster runs at least 10 pt above it, unclassified otherwise.
Structure anchors ("Artikel 2", "§ 19", bare Gliederung labels) are
always exempt from reflow since equal-width heading series still form
sham clusters. Also flush the pending line end-X at page ends — without
it, the first line of the next page inherited the previous page's footer
geometry and was misclassified (UWG: "Artikel 2" swallowed the closing
provisions).
Markerless joins additionally never cross into a following enumeration
marker line ("...vorgesehen und" + "d) die Überwachung" no longer glues
to "undd)"), a text-level veto that also works without geometry.
On the base-law side, ContentFlattener now separates sibling <LA>
elements within a <DD> — the short-label/definition pairs of the UWG
Anhang and § 2 IfSG were previously glued without any separator
("Irreführung über Unternehmereigenschaftdie unwahre Angabe...") in both
synopsis columns. The continuation line is indented two spaces deeper
than its enumeration line so StellenAufloeser.zeilenBlock keeps it inside
the unit's block ("Anhang Nummer 31 Buchstabe b"). BefehlAnwender writes
the same canonical shape when inserting or recasting quoted units
(rueckeZitatEin), so XML-derived and PDF-derived items agree:
" 2a. Stichwort" + " Definitionstext".
Verified by mvnw verify (179 tests, 7 new) and a before/after sweep of
all 21 sample law/amendment combinations: applied/manual counts are
unchanged throughout (UWG 19/0, GEG-BGBl 66/53, GModG-RegE 77/20,
IfSG-0645 42/24, ...), no marker characters leak into the HTML output.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Change-Id: Ib7faae1bc5c59bda83f648a579af16a4c77e4285
|
|
|
Unit tests for the gii-norm loader, text cleanup, quote extraction,
command recognition (literal sentences from the sample amendment act),
sentence splitting, and command application on a synthetic mini law;
an HTML renderer test including escaping; and an end-to-end smoke test
on the IfSG sample data that skips itself when the (untracked) sample
files are absent. The README gains a German usage section.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Change-Id: I7f02ff349f9c3bd34fa90a2a84678b9e6fad697d
|