aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Die Browserfassung baut auf Ubuntu 26.04Matthias Andreas Benkard2026-09-011-1/+1
| | | | | | | | | | | | | Der Wasm-Lauf scheiterte, ehe er begonnen hatte: native-image --tool:svm-wasm übersetzt zu Beginn eine Probe im Textformat, und das Binaryen aus dem apt-Bestand von ubuntu-latest (24.04) liest sie nicht mehr — „unknown heaptype kind“. Der Läufer 26.04 führt eine neuere Fassung; von Hand gebaut wird ohnehin mit 132. Geprüft: der Auftrag „browserfassung“ läuft beim nächsten Push von selbst; die beiden anderen Aufträge sind unberührt. Change-Id: I6e6262a931b67b5dba05efe1ffd888e73f43b0a9
* Der Bausatz setzt fortan die Sprachfassung 25 vorausMatthias Andreas Benkard2026-09-013-5/+63
| | | | | | | | | | | | | | | | | | | | | | | | Die selbsttätige Prüfung baut seit ihrer Einführung auf einem JDK 25, der Quellstand blieb mit „release 21“ jedoch hinter dieser Grundlage zurück. Beides fällt nunmehr zusammen: Die Eigenschaft „maven.compiler.release“ lautet „25“, und im Profil „wasm“ folgen ihr „source“ und „target“ samt dem erläuternden Vermerk. Die dortige Abkehr von „release“ bleibt bestehen, denn die Web-Image-API des GraalVM liegt außerhalb der dokumentierten JDK-API. Damit ein zu alter Bausatz nicht erst den Übersetzer zu einer schwer deutbaren Meldung nötigt, tritt der Regel „requireMavenVersion“ die Regel „requireJavaVersion“ zur Seite, gespeist aus der neuen Eigenschaft „enforced.java-version“. Das Handbuch setzt in § 5 Absatz 3 fortan die Fassung 25 voraus; § 14 Absatz 3 bleibt unberührt, denn der Wasm-Bau verlangt weiterhin Oracle GraalVM 25.1 oder neuer. Geprüft auf einem Oracle GraalVM 25.0.4: „./mvnw verify“ meldet BUILD SUCCESS mit 456 von 456 Tests, Spotless beanstandet nichts, der Enforcer lässt die neue Regel durchgehen, und auch das Profil „wasm“ übersetzt („target 25“). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GuVaax1nzPPH9Xk73JugUw Change-Id: Ib4b4015e3b4d6660f41231bd965c617078de8838
* Die Prüfung läuft fortan bei jedem Push von selbstMatthias Andreas Benkard2026-08-313-0/+181
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Gebaut und geprüft wurde bislang von Hand: „./mvnw verify“ und, seltener, „./mvnw -Pwasm package“ nebst „reuse lint“. Ein Bruch fiel damit erst dem auf, der zufällig baute — und gerade der Wasm-Bau, der eine andere Java-Fassung voraussetzt als der gewöhnliche, wird am seltensten angefaßt. Der neue Arbeitsablauf .github/workflows/ci.yml fährt bei jedem Push nach master und bei jedem Pull Request drei Läufe nebeneinander: Bau und sämtliche Tests auf einem Temurin-JDK 25 (Spotless und Enforcer laufen mit, weil sie an die Phase „verify“ hängen), die Herstellung der Browserfassung auf Oracle GraalVM — die Community Edition trägt Web Image nicht — samt deploy/webpaket.sh, und die Lizenzauszeichnung nach REUSE. Binaryen wird dem Wasm-Lauf vorab eingerichtet, damit wasm-opt tatsächlich läuft und die 25-MiB-Grenze an dem gemessen wird, was ausgeliefert würde. Das Webpaket und die ausführbare Archivdatei bleiben als Artefakte abrufbar, die Testberichte nur im Fehlerfall. Nachzuladen ist nichts: Der Beispielkorpus liegt im Repository und ist allein von „git archive“ ausgenommen. § 17 des Handbuchs erhält hierzu die Absätze 4 und 5; das Fassungsverzeichnis führt den Tag fort. Geprüft: „./mvnw --batch-mode verify“ geht auf (58 s); der Wasm-Befehl des Laufes ergibt örtlich „target/web ist auslieferbar“ (wasm-opt: 19 845 039 -> 17 392 218 Bytes); „reuse lint“ weist 224 von 224 Dateien als vollständig ausgezeichnet aus. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019asn2GWjyjGotivHpYchfi Change-Id: Ib9a7f676859529cc7c1253234ce7cc0175267b51
* Die Weboberfläche öffnet ihr Ergebnis unmittelbar und wechselt die DomäneMatthias Andreas Benkard2026-08-295-11/+40
| | | | | | | | | | | | | | | | Zwei Verbesserungen an der Browserfassung: Erstens wird die Browserfassung künftig unter https://aendggner.kellertomaten.de/ betrieben. Der kanonische Verweis in index.html, die Erwähnungen im Handbuch (README.md) und der Kommentar der Nginx-Konfigurationsvorlage sind entsprechend angepasst. Zweitens öffnet das Formularskript (app.js) nach abgeschlossener Auswertung die Synopse (bzw. bei Nur-Text-Ausgabe den gelesenen Text) unmittelbar per window.open in einem neuen Reiter. Der Verweis unter „Verfügung der Zentralstelle“ bleibt als Hilfsmittel und für die fortgeschriebene Fassung erhalten. Change-Id: I961773b9bb1035613b4adf7b5f7101671cd44bc8
* Der Länderkreis schließt sich mit Saarland und Sachsen-AnhaltMatthias Andreas Benkard2026-08-2923-23/+1384
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 Vordruck nennt seinen Stand und eine zweite BezugsquelleMatthias Andreas Benkard2026-08-295-6/+135
| | | | | | | | | | | | | | | | | | | | | | | | Die Fußzeile der Startseite und der Hinweis im Impressum verwiesen allein auf die eigene Git-Stelle; neben sie tritt nun das Spiegelbild auf GitHub. Unter dem Titel des Vordrucks steht fortan „in der Fassung vom …“ nebst einem <time>-Element, dazu im Stilblatt die Regel „.fassung“ nach dem Vorbild von „.stelle“. Das Datum setzt das Paketierskript beim Bau ein, damit die Angabe nicht stillschweigend veraltet: aus „git log -1 --format=%cs“, ohne date(1) in die deutsche Langform gebracht (Parameterexpansion und Fallunterscheidung, weil BSD und GNU sich über die Schalter nicht einig sind), geschrieben in eine Nebendatei und umbenannt statt „sed -i“. Fehlt die Marke, bricht der Bau ab; eine falsch datierte Fassung wäre schlimmer als ein fehlgeschlagener Bau. Der Fassungsnachweis im Paket führt das Datum künftig neben dem Commit. Das im Quelltext stehende Datum bleibt der Rückfall für den Blick auf die Seiten ohne Paketierlauf. Die Prüfung geht auf: „sh -n“ beanstandet nichts; ein Trockenlauf auf einer Kopie der Seiten setzt „28. August 2026“ ein, was dem Stand von HEAD entspricht; wird die Marke entfernt, bricht das Skript mit der vorgesehenen Meldung ab; „reuse lint“ weist 214 von 214 Dateien als vollständig ausgezeichnet aus. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Change-Id: I3e7a303cba8f9a213dcd19e809a542b7fe8c1426
* Die Anlage gliedert sich nach eigener WahlMatthias Andreas Benkard2026-08-2814-26/+362
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 Korpus sagt, woran die Reste im Ganzen liegenMatthias Andreas Benkard2026-08-2810-11/+1031
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Jeder Befehl nennt fortan seine Seite im HeftMatthias Andreas Benkard2026-08-2811-29/+508
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Die Synopse wies bislang Artikel und Gliederungspunkt aus. Wer einem liegengebliebenen Befehl nachgehen wollte, musste ihn in einem Heft von achtzig Seiten selbst suchen; die eigentliche Arbeit lag damit beim Leser. Fortan trägt jeder Befehl seine Fundstelle: „Artikel 1 23. b) (S. 8)“. Gezählt wird die Seite nicht, sondern am Wortlaut wiedergefunden. Eine Marke, die im Textstrom mitreiste, kam dafür nicht in Betracht: Der Bereiniger zieht weiche Umbrüche zusammen, entfernt Kolumnentitel und schneidet Seitenfüße heraus; die Marke geriete entweder vor einen Zeilenanfangs-Anker und nähme jedem Normkopf-Muster seine Grundlage, oder sie verschwände mit der Zeile, die sie trug. Stattdessen hält der Auszug seinen Wortbestand seitenweise fest (Seitenkonkordanz) — nur Buchstaben und Ziffern, kleingeschrieben — und der Befehlstext wird darin gesucht, ebenso heruntergebrochen. Silbentrennung, Anführungszeichen, Leerraum und Satzzeichen, also gerade das, woran die Aufbereitung arbeitet, stören den Vergleich dann nicht. Der Fontgrößenfilter erhebt die Konkordanz aus denselben Zeilen, aus denen er den Text fügt; ein zweiter Lauf über das Druckwerk unterbleibt. Gesucht wird von einem fortschreitenden Leser aus, der sich merkt, wie weit die Erschließung gediehen ist. Ohne ihn träfe ein mehrfach vorkommender Wortlaut („Absatz 3 wird aufgehoben“ steht in einem Heft dutzendfach) stets dessen erstes Vorkommen. Was kürzer ist als acht Zeichen, ist keine Wortfolge, sondern eine Marke; was sich nicht wiederfinden lässt, bleibt ohne Seitenangabe. Eine falsche Seite wäre schlimmer als keine. Ohne Angabe bleiben aus demselben Grund die Klartexteingabe, die kein Satzbild hat, und die beschlossene Fassung einer Beschlussempfehlung, die aus zwei Spalten zusammengesetzt ist und so auf keiner Seite des Heftes steht. Die Anzeige der Herkunft (Provenienz) hängt die Seite an; Synopse, Abschnitt „Manuell prüfen“ und „--dump-befehle“ tragen sie damit, ohne dass an ihnen etwas zu ändern gewesen wäre. Geprüft: mvnw verify (438 Testfälle) und reuse lint (209/209) gehen durch. Sechs Fälle prüfen die Konkordanz für sich, zwei am Druckwerk — dass jeder der neunzehn Befehle des Heftes BGBl. 2026 I Nr. 43 eine Seite zwischen eins und fünf trägt, dass die Seiten in der Reihenfolge der Erschließung steigen und dass eine Klartexteingabe keine trägt. Die Fundstelle „Artikel 1 23. b) (S. 8)“ des Gesetzes vom 16. Oktober 2023 ist am Druckbild nachgeschlagen und für richtig befunden. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Change-Id: If9a9008311aaabf49b007d82f9c1aaaca495878a
* Mecklenburg-Vorpommern wählt seinen Artikel aus sechzigMatthias Andreas Benkard2026-08-279-17/+486
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 öffnet seine Fassungen, und zwei Zitate bleiben offenMatthias Andreas Benkard2026-08-2714-33/+1084
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Die Wege zu den vier übrigen Ländern sind erkundetMatthias Andreas Benkard2026-08-261-6/+22
| | | | | | | | | | | | | | | | | | | | | 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
* Hamburg zählt in Dezimalen und gliedert sein Heft in ParagraphenMatthias Andreas Benkard2026-08-2616-53/+847
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Die Eingabe darf eine Anschrift seinMatthias Andreas Benkard2026-08-265-24/+453
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Das Handbuch verlangte, jede Eingabe als Datei bereitzuhalten. Für das Bundesrecht war das eine Zumutung: Die Anschrift des Norm-XML folgt aus der Abkürzung des Gesetzes, und wer sie von Hand herunterlädt, verrichtet eine Arbeit, die das Erzeugnis selbst verrichten kann. Der neue Bezug nimmt einen Dateipfad, eine Anschrift oder die Kurzform „gii:<Kennung>“ und gibt eine Quelle zurück. Die Kennung ist die klein geschriebene Abkürzung, in der jedes andere Zeichen als Buchstabe, Ziffer und Bindestrich zum Unterstrich wird; führt sie ins Leere, so wird im Verzeichnis des Portals nachgeschlagen, denn dass das UWG dort „uwg_2004“ heißt, kann niemand wissen. Bleibt es mehrdeutig, so wird nicht geraten, sondern aufgezählt. Die vorhandene Datei behält den Vorrang: Wer eine Datei „gii:etwas“ nennt, meint sie. Zwei Kleinigkeiten, die das Werkzeug erst brauchbar machen: Der Zwischenspeicher ist eine Bequemlichkeit und keine Bedingung — ist das Heimatverzeichnis schreibgeschützt, so wird eben jedes Mal geladen. Und ein Vermittler wird aus HTTPS_PROXY samt Kennung übernommen; die Laufzeit liest das nicht von sich aus, obgleich es auf der Kommandozeile die gewohnte Angabe ist und in einer Behörde jeder Weg darüber führt. Der Bezug gehört allein der Befehlszeile. Die Pipeline kennt weiterhin nur Name und Bytes, und die Browserfassung rührt ihn nicht an. Geprüft: mvnw verify, 415 Tests (zuvor 406), reuse lint 196/196. Von Hand belegt ist der Lauf ganz ohne Datei — „gii:UWG 2004“ nebst der Drucksache 21/1855 von dserver.bundestag.de, zwanzig Befehle angewandt; die Synopse aus „gii:UWG 2004“ gleicht bis auf den Quellennamen zeichengenau der aus der örtlichen XML-Datei. Change-Id: I935efb19a5777fc8dd08c96ff44376b65fb7211b
* Die Verweisung wird vollzogen, und die Übersicht wird geprüftMatthias Andreas Benkard2026-08-2611-83/+722
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Der verweisende Befehl galt als Grenze: „Die Inhaltsübersicht wird entsprechend der vorstehenden Nummer 8 Buchst. a geändert“ wurde gelesen und liegengelassen. Die Grenze bestand nicht in der Sache. Zu übertragen ist nicht der Wortlaut jenes Punktes, sondern sein Ergebnis — er ändert die Überschrift eines Paragraphen, und die Angabe wird auf den Titel gesetzt, den der Paragraph danach trägt. Das trifft, was „entsprechend“ meint, und erspart es, jede Befehlsform ein zweites Mal auf dem Zeilenmodell der Übersicht nachzubilden. Ausgeführt wird der Befehl dort, wo die Befehlsliste vorliegt: in der Schleife des Anwenders, nicht in der Weiche. Hinzu tritt eine Prüfung, die es bisher nicht gab. Wer Paragraphen einfügt oder ihre Überschriften neu fasst, muss die Angaben eigens mitändern; unterbleibt das, so bleibt die Übersicht hinter dem Text zurück, ohne dass ein einziger Befehl liegenbliebe. Geprüft wird allein der Unterschied, den der Lauf bewirkt hat — was die Quelle von sich aus ungenau führt, ist ein Befund über die Quelle. Geheilt wird nichts; die Übersicht ist eine Norm wie jede andere. Die Probe hat sich sogleich bewährt und drei Mängel aufgedeckt, die keine Zahl des Protokolls angezeigt hatte: Ein Zitat, das mit einer Gliederungsmarke beginnt, wurde nicht in Zeilen zerlegt, sondern blieb eine einzige; ein Querverweis mitten im Satz („… nach § 71a Projektunterlagen … vorzulegen“) erzeugte einen Paragraphen mit einem halben Satz als Überschrift, weil ein Normkopf nicht an seine Stellung gebunden war; und ein am Spaltenrand umbrochener Titel verlor seinen zweiten Teil, weil eine Zeile, die auf „und“ endet, als vollendet galt. Geprüft: mvnw verify, 406 Tests (zuvor 397), reuse lint 194/194. Das GEG-Heft bleibt bei 119 von 119 angewandten Befehlen; die Probe rügt dort nur noch, was die amtliche Fassung selbst verschieden führt. Change-Id: I24aabefc33406beaf7b1f1fca80d3212a7620f71
* Die Fassung merkt sich, welche Hefte sie schon trägtMatthias Andreas Benkard2026-08-2615-49/+598
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Die Kette führte kein Gedächtnis, und der Grund lag tiefer als die Warnung des Handbuchs besagte. Der Textausgeber schrieb die Standzeile sehr wohl aus; der Textparser aber verwarf alles, was vor dem ersten Normkopf steht. Was das Erzeugnis errechnet hatte, kam mithin standlos zurück, und die Altersrüge konnte auf der eigenen Ausgabe niemals anschlagen — ein stiller Verlust, den erst der Blick auf die Kette sichtbar machte. Das Gesetz führt nunmehr seine Fortschreibungen mit: jedes Heft, das auf seinen Wortlaut angewandt worden ist, mit Bezeichnung und Ausfertigungsdatum. Der Ausgeber schreibt sie als „Fortgeschrieben durch: …“ hinter die Standzeile, der Parser liest beides zurück, und der Rundlauf prüft, dass nichts dabei verloren geht. Trifft ein Heft ein zweites Mal auf dieselbe Fassung, so wird das gerügt; abgebrochen wird nicht, denn ein Befehl bleibt anwendbar, auch wo er sinnlos ist, und verworfen wird hier nichts. Damit ein Heft wiedererkennbar ist, muss es sich nennen können. Der Erkenner erhebt dafür das Ausfertigungsdatum aus der Zeile „Vom …“ — aber nur, wenn das ganze Dokument genau eine solche führt. Ein Sammelheft stellt mehrere Verkündungen nebeneinander, und welche von ihnen es ausmacht, sagt es nicht; ein falsch bezeichnetes Heft wäre schlimmer als ein unbezeichnetes. Aus demselben Datum ergibt sich nebenher die Reihenfolge, in der mehrere Hefte eines Laufes anzuwenden sind, und die Fortwirkung der Altersrüge über die Kette hinweg. Geprüft: mvnw verify, 397 Tests (zuvor 388), reuse lint 191/191. Change-Id: Ice3af51eaec777961dafc997e34391d2fa6d6031
* Die Kette meint verschiedene HefteMatthias Andreas Benkard2026-08-251-1/+9
| | | | | | | | | | | | | | | | | | | | Beim Durchspielen der Kette von Hand hat sich eine Falle gezeigt, die zu benennen ist: Dasselbe Heft ein zweites Mal auf seine eigene Ausgabe anzuwenden ist keine Wiederholung ohne Folgen. Sämtliche neunzehn Befehle des UWG-Heftes greifen auch auf der Zwischenfassung — das ist gerade der Beleg, dass die Kette trägt —, aber der Absatz, den einer von ihnen anfügt, steht danach zweimal da. Ein Befehl ist keine Zustandsbeschreibung, sondern eine Anordnung, und wer zweimal anfügt, fügt zweimal an. Das Erzeugnis führt kein Gedächtnis darüber, was es bereits getan hat; der Wortlaut allein sagt es ihm, und der sagt es nur dort, wo die Anordnung einen Zieltext voraussetzt, den es nicht mehr gibt. § 6a Absatz 3 sagt dies und verweist auf den Abgleich als das Mittel, mit dem sich prüfen lässt, ob eine Fassung ein Heft schon trägt. Geprüft: mvnw verify, 388 Tests. Change-Id: I07f284600767ada9ea52bd8c5fcc9fc18b0265dc
* Die Randziffer zählt die Gegenüberstellung, nicht den AbgleichMatthias Andreas Benkard2026-08-253-8/+158
| | | | | | | | | | | | | | | | | | 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
* Wer verweist, wird gelesen, auch wenn ihm nicht gefolgt wirdMatthias Andreas Benkard2026-08-256-12/+109
| | | | | | | | | | | | | | | | | | | | | | | | | | | | „Die Inhaltsübersicht wird entsprechend der vorstehenden Nummer 8 Buchst. a geändert.“ Ein Befehl, der seinen Inhalt nicht nennt, sondern auf einen anderen Punkt desselben Artikels verweist. Er galt bislang als nicht erkannt. Zwei Prüfungen haben ergeben, dass die naheliegende Abhilfe nicht trägt. Die Inhaltsübersicht wird nicht selbsttätig mitgeführt — der Anwender rührt sie bei einer Umnummerierung oder Neufassung nicht an —, und das rheinland-pfälzische Stammgesetz führt überhaupt keine Inhaltsübersicht. Den Befehl als „bereits bewirkt“ zu quittieren wäre also aktenwidrig; ihn auszuführen verlangte, dass der Anwender die Befehlsliste zurückliest und das Ziel umdeutet („Überschrift des § 13“ wird zur Titelspalte einer Übersichtszeile). Das ist ein eigenes Vorhaben. Er wird deshalb gelesen und ausdrücklich als Grenze gerügt. Der Unterschied ist kein kosmetischer: Der Rest wandert von „Befehl nicht erkannt“ zu „Nicht unterstützt“ und damit in die Gruppe, die das Handbuch für die bewusst gezogenen Grenzen führt. Die Synopse sagt fortan, dass hier das Erzeugnis die Grenze zieht, und nennt dabei den Verweis; sie sagt nicht mehr, die Vorlage sei unverständlich. Das Muster ist auf den ganzen Satz verankert, damit ein bloß adverbiales „entsprechend“ nicht mitgerissen wird. Damit sind sämtliche 23 Befehle des rheinland-pfälzischen Heftes erschlossen. Geprüft: 388 Tests (zuvor 386). Change-Id: I70d5ac52676310bf9bc2c95ab921bd74155a16b7
* Rheinland-Pfalz kennt den Strichpunkt und die EinleitungMatthias Andreas Benkard2026-08-259-28/+229
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Von den drei benannten Idiom-Grenzen des rheinland-pfälzischen Falles fallen zwei. Die erste: „In Satz 2 wird der Punkt durch einen Strichpunkt ersetzt und folgender Halbsatz angefügt: „…““. Zwei Neuerungen in einem Satz. „Strichpunkt“ ist die deutsche Nebenform des Semikolons und tritt zu den Satzzeichen-Mustern hinzu — als Subjekt wie als Ziel, ohne eine einzige neue Gruppe, damit die hartkodierten Gruppennummern des Erkenners unberührt bleiben. Der Halbsatz wird eine eigene Ebene der Anfügung. Er beginnt keinen neuen Satz, sondern setzt den bestehenden hinter dem Strichpunkt fort; angefügt wird er deshalb nur, wenn der Zieltext tatsächlich auf einen Strichpunkt endet. Sonst stünde er hinter einem Punkt und wäre gerade kein Halbsatz. Als Ziel einer Struktur-Einfügung oder -Ersetzung bleibt er ausgeschlossen: Welche Hälfte eines Satzes gemeint wäre, sagt keine Bezeichnung. Die Verbundmechanik selbst brauchte keinen Eingriff. Die zweite: „In der Einleitung werden die Worte „…“ durch die Angabe „…“ ersetzt.“ Das ist ein Chapeau-Lokator wie „im Satzteil vor Nummer 1“, nur ohne Bezugspunkt; er tritt als zweite Alternative zum vorhandenen Muster. Eine echte Verengung auf den Satzteil vor der ersten Marke wäre eine eigene Stellenkomponente und ist es nicht: Kommt der Zieltext außer im Chapeau auch in einer Nummer vor, so meldet die Auflösung Mehrdeutigkeit — der richtige Ausgang. Dass beide Befehle am rheinland-pfälzischen Stamm gleichwohl nicht greifen, liegt an der Quelle und nicht am Werkzeug: Das Portal führt keine früheren Gesamtausgaben, der Stamm ist hier die Nachfassung, und ihr Wortlaut trägt die Änderung bereits. Offen bleibt die dritte Grenze, die Verweisung auf einen anderen Punkt desselben Artikels. Geprüft: 386 Tests (zuvor 381). Change-Id: I993d8645fba1c933ad8497ca175cef265df2c0b0
* Die weite Suche behält den Vorrang, die Mehrdeutigkeit entscheidet der VerbundMatthias Andreas Benkard2026-08-256-19/+257
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | „Die bisherige Nummer 18 wird Nummer 29 und nach der Angabe „Absatz 1“ werden die Wörter „oder Absatz 4“ eingefügt.“ Der Bußgeldkatalog des § 108 führt zweiunddreißig Nummern, und beinahe jede nennt einen „Absatz 1“; norm-weit aufgelöst trifft der Anker einundzwanzig Vorkommen. Der Befehl blieb deshalb liegen — zu Recht, aber unnötig: Gemeint war ersichtlich die soeben umnummerierte Einheit. Für eine Satzzeichen-Operation galt diese Auslegung schon, für eine Wortoperation ausdrücklich nicht. Das war keine Nachlässigkeit, sondern eine bewusste Entscheidung: Nicht jede Begleitklausel meint die umnummerierte Einheit, und wer sie stets dorthin zwänge, verlöre die Fälle, in denen sie anderswo greift. Die Regel ist deshalb nicht umzukehren, sondern zu verfeinern. Die weite Suche behält den Vorrang; erst wenn sie mehrere Fundstellen findet, entscheidet der engere Skopus. Findet sie gar keine, so meint der Befehl etwas anderes und bleibt liegen — der Rückfall greift allein bei Mehrdeutigkeit. Bleibt der Anker auch in der umnummerierten Einheit mehrdeutig, so steht die Mehrdeutigkeit im Protokoll und nicht die Begründung des zweiten Versuchs. Die Regel gehört zur Anwendung und nicht zur Erkennung. Ob ein Anker mehrdeutig ist, steht erst nach den neununddreißig vorangegangenen Punkten fest; der Erkenner sieht nur das Ausgangsgesetz, in dem es die Nummer 29 noch gar nicht gibt. Der Schritt trägt darum eine Rückfallstelle, die das Auffalten des Verbunds mitgibt — vorwärts und nur innerhalb desselben Verbunds. Nennt die Klausel eine Einheit derselben Art, wie die Umnummerierung sie vergibt, so wird nicht geraten. Damit ist der ganze Artikel 1 der GEG-Novelle selbsttätig angewandt: 119 von 119 Befehlen, kein Rest. Der Wortlaut der Nummer 29 gleicht der amtlichen Fassung (BJNR172810020.xml). Geprüft: 381 Tests (zuvor 378), darunter die drei Grenzen der Regel — Rückfall bei Mehrdeutigkeit, kein Rückfall bei fehlendem Zieltext, und Mehrdeutigkeit bleibt Mehrdeutigkeit. Change-Id: Id0d7080ba93ebad73fbcad42fe41c434b9a67e05
* Die Überschrift einer Nummer ist die Kopfzeile ihres BlocksMatthias Andreas Benkard2026-08-253-35/+252
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Für die Anlagen-Nummern des Bundesrechts war eine offene Modellfrage vermerkt: Ob die Nummern einer Anlage im gii-XML ebenso zu eigenen Normen zu zerlegen seien wie im Landesrecht. Sie war falsch gestellt. Der Stellenaufloeser probiert längst beide Wege — die Nummer als eigene Norm und, wenn es die nicht gibt, als Marke im Wortlaut —, und beide tragen. Der Fehler saß anderswo, und er war schlimmer als eine Lücke. Der Überschrift-Zweig verzweigte bei jeder Stelle, die eine Überschrift nennt, unbedingt auf den Titel der Norm und verwarf dabei jede feinere Komponente schweigend. „In der Überschrift der Nummer 1 der Anlage 8 werden die Wörter … gestrichen“ arbeitete deshalb am Titel der Anlage 8. Dass es hier beim Rest blieb, lag allein daran, dass der Zieltext dort zufällig nicht stand; stünde er dort, so hätte das Werkzeug die falsche Einheit geändert, ohne dass es jemand erfahren hätte. Welche Überschrift gemeint ist, entscheidet fortan nicht der Wortlaut des Befehls, sondern die Auflösung der Stelle ohne die Überschrift-Komponente. Löst sie auf eine ganze Norm auf, so ist deren Titel gemeint — der Regelfall, und ebenso dort, wo die Nummer einer Anlage eine eigene Norm ist. Löst sie auf einen Textbereich auf, so ist dessen Kopfzeile gemeint: Sie trägt Marke und Überschrift, die Kindzeilen sind ihr Inhalt. Ein Block aus einer einzigen Zeile hat keine Überschrift, sondern nur Text; dort wird gerügt statt angewandt. Die Neufassung einer solchen Kopfzeile bleibt eine bewusst gezogene Grenze und wird nunmehr als solche gerügt: Die Kopfzeile trägt zugleich die Aufzählungsmarke, die eine Neufassung nicht mitliefert. Bisher bog dieser Zweig still auf den Normtitel um. Geprüft: 378 Tests (zuvor 375). GEG 118 von 119 Befehlen (zuvor 117); die Überschrift der Nummer 1 der Anlage 8 ist gestutzt, der Titel der Anlage und der gleichlautende Buchstabe a) darunter sind es nicht. Change-Id: I2b8a714b1e721d01053e314f52700ca95966fc4e
* Das Erzeugnis gibt seine Fassung heraus und prüft sie selbstMatthias Andreas Benkard2026-08-2513-115/+644
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Zwei Leistungen fehlten, die das Werkzeug längst erbringen konnte, aber nicht herausgab. Die erste ist die fortgeschriebene Fassung. Der Schalter --neufassung schreibt sie als kanonischen Klartext; damit steht die Kette: Die Ausgabe des ersten Laufes ist das Stammgesetz des zweiten, und eine konsolidierte Fassung lässt sich aus dem Stammheft und den Änderungsheften zusammensetzen, wo kein Portal sie fertig liefert. Für Thüringen ist das von Hand geschehen. Die zweite ist der Abgleich. Ob ein Lauf gelungen ist, entscheidet nicht die Zahl der angewandten Befehle, sondern der Wortlaut hinterher — und dieser Maßstab stand bislang allein im Testcode. Wer ein Land erschloss, musste die Prüfung ein zweites Mal schreiben. Der Schalter --nachfassung nimmt die amtliche Fassung entgegen, weist fehlende, überzählige und abweichende Normen aus, zeigt die Abweichung in der Synopse wortweise und endet bei einem Fehlschlag mit dem Rückgabewert 3. Denselben Abgleich fahren fortan die Akzeptanzprüfungen; vier handgeschriebene Vergleichsschleifen weichen ihm. Die Überschrift zählt dabei zum Wortlaut, denn auf sie zielen eigene Befehle — der Korpus trägt diese Verschärfung ohne einen einzigen Rückfall. Statt einer sechsten und siebten Fassung der Signatur tritt ein Auftrags-Record an die Stelle der Überladungsleiter der Pipeline. Die Browserfassung bekommt beides: ein Dateifeld für die Nachfassung und ein Ankreuzfeld für die Textausgabe, beide hinter der Klappe „Weitere Angaben“. Der Rundlauf hat dabei einen zweiten Mangel des Lesers zutage gefördert. Das Bundesrecht führt aufgehobene Paragraphen unter einer Sammelbezeichnung („§§ 17 u. 18“, Titel „(weggefallen)“, im gii-XML mit der Platzhalterkennung „(XXXX)“). Der kanonische Klartext kannte diese Kopfzeile nicht; sie wäre in den Wortlaut der Vornorm gefallen und hätte ihn verfälscht. Ohne sie könnte der Klartext kein Bundesgesetz tragen, und die Kette endete beim Bund. Geprüft: 375 Tests (zuvor 373); Berlin gibt 171 von 171 Normen gleich aus, und die für das UWG ausgegebene Fassung ergibt wieder eingelesen dieselbe. Change-Id: Ie3c45e18b561175fe6dd0033c46d3bed69e415bc
* Das Werkzeug schreibt fortan die Sprache, die es liestMatthias Andreas Benkard2026-08-253-0/+216
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Der Klartext des Landesrechts war Eingabeformat und kein Ausgabeformat. Das Erzeugnis kannte die fortgeschriebene Fassung — sie steht als vollständiges Gesetz in der Anwendung —, gab sie aber nur als halbe Spalte einer Synopse heraus. Damit fehlte dreierlei: die Kette (Heft auf Heft), die Prüfbarkeit von außen (wer gegen die amtliche Nachfassung hält, braucht Text, nicht Auszeichnung) und der Rückfluss. Der LandesRechtTextAusgeber kehrt den LandesRechtTextParser um. Er erfindet nichts: Die Abkürzungszeile tritt nur auf, wenn die Quelle eine geführt hat; das doppelte Leerzeichen zwischen Bezeichnung und Überschrift ist kanonisch, weil an ihm der Lader den Normkopf vom angeklebten Querverweis scheidet; die Nummer einer Anlage erscheint als „Nummer 6“, weil die vorangehende Anlagen-Norm den Bezug schon herstellt. Zwei Grenzen des Formats sind im Quelltext benannt: Der Normkopf einer Anlage nimmt keinen Titel auf, und eine Gliederungseinheit hinter der letzten Norm des Textteils hat keinen anderen Ort als eben diesen. Der Beleg ist nicht der Augenschein, sondern der Rundlauf: Was der Ausgeber schreibt, muss der Lader wieder zu demselben Gesetz lesen. Geprüft wird das an sämtlichen dreiundzwanzig Klartext-Stammfassungen des Beispielkorpus. Der Rundlauf hat sogleich einen Mangel des Lesers aufgedeckt. Eine nummerierte Zeile gilt als Unter-Überschrift, wenn ihr eine weitere Überschrift folgt — als solche zählten aber nur drei der fünf Formen. Der sächsischen Katalogzeile „1. Januar 2023 …“ folgt „Unterabschnitt 12 …“, und das ist ebenso eine Überschrift wie ein Normkopf. Die arabische und die ordinalwörtliche Form treten hinzu. Geprüft: 373 Tests (zuvor 350), darunter dreiundzwanzig Rundläufe; kein Akzeptanzfall ist zurückgefallen. Change-Id: I6bdacae8638a894ca9ba0a01f1865e0c93e9718c
* Die selten gebrauchten Angaben treten hinter eine KlappeMatthias Andreas Benkard2026-08-255-19/+140
| | | | | | | | | | | | | | | | | | | | | | | | | Der Vordruck der Browserfassung führte fünf Eintragungen untereinander auf, von denen drei im Regelfall leer bleiben: der anzuwendende Artikel, der Stichtag und die reine Textausgabe. Sie stehen nun hinter der zugeklappten Aufschrift „Weitere Angaben“, die an die Stelle der Leitspalte tritt und über die volle Breite läuft — dieselbe Form, die die Leitspalte auf schmalem Schirm ohnehin annimmt. Weil ein geschlossenes „details“ seinen Inhalt nicht druckt, ein Vordruck aber vollständig aufs Papier gehört, klappt der Abschnitt vor dem Druck selbsttätig auf und nimmt danach seinen vorherigen Zustand wieder ein. Das Ankreuzfeld für die unveränderten Vorschriften ist vorangekreuzt: Wer eine Synopse ansieht, will in aller Regel das ganze Gesetz vor sich haben. Damit wurde die Verfügung der Zentralstelle unrichtig, die die Zahl der Einträge als „geänderte Normen“ auswies; sind die unveränderten mit aufgenommen, so heißen sie fortan „Normen in der Synopse“. Die Befehlszeile bleibt unberührt. Die Prüfung geht auf: Am UWG mit dem Dritten Gesetz zu seiner Änderung ergeben sich vorangekreuzt 19 Befehle, nichts manuell zu prüfen und 31 Normen in der Synopse, ohne Ankreuzung dieselben 19 Befehle und 6 geänderte Normen; der Abschnitt klappt auf Druckanforderung auf und danach wieder zu. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Change-Id: I68897f8ab0b51eb4e475982d38b914dac93748d7
* Die Auslieferung wird eine Phase des BauesMatthias Andreas Benkard2026-08-244-46/+87
| | | | | | | | | | | | | | | | | | | | | | | | | | Die Browserfassung ging bisher über ein eigenes Skript nach Cloudflare: deploy/cloudflare.sh rief erst „mvnw -Pwasm package“ und dann „wrangler deploy“. Maven selbst wußte davon nichts. Seine gleichnamige Phase stand leer und hätte, gerufen, den Bau angehalten, denn das Erzeugnis benennt kein Empfangsverzeichnis. Also wird das Ziel deploy:deploy stillgelegt — das Erzeugnis ist eine Anwendung, keine Bibliothek, und seine Fassungsbezeichnung ergäbe in einem Maven-Verzeichnis ohnehin kein brauchbares Modell —, und die freigewordene Phase nimmt im Profil „wasm“ den Aufruf von wrangler auf. Ein einziger Lauf baut und liefert nun aus. Die Prüfungen aus webpaket.sh, sauberer Arbeitsbaum und 25-MiB-Grenze, liegen dabei vor dem Hochladen und halten den Lauf an, ehe etwas hinausgeht. Das Skript entfällt; es wäre nur noch die Doppelung dreier Aufrufe. Geprüft: „mvnw deploy“ ohne Profil vermerkt „Skipping artifact deployment“ und läuft durch; mit „-Pwasm“ erscheint die Ausführung „cloudflare“ an der Phase „deploy“; „wrangler deploy --dry-run“ liest die dreizehn Dateien von target/web, ohne auszuliefern; „mvnw verify“ besteht mit dreihundertfünfzig Prüfungen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Change-Id: Ic0ff3b4aa6dc399e253421183e60871efd65e5ed
* Das Jahr der Urheberschaft ist das der Datei, nicht das des VerzeichnissesMatthias Andreas Benkard2026-08-2486-89/+123
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Rheinland-Pfalz schreibt Worte, nicht WörterMatthias Andreas Benkard2026-08-2410-21/+345
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Nicht jedes Landesportal versteckt seinen TextMatthias Andreas Benkard2026-08-2410-11/+1955
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Drei benannte Reste, drei allgemeine MängelMatthias Andreas Benkard2026-08-246-40/+265
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sie standen als begründete Kommentare in den Prüfungen, jeder mit seinem Belegfall — und jeder war allgemein, nicht die Eigenheit seines Falls. Erstens räumt auch eine Aufhebung eine Bezeichnung. Die Schritt-Ordnung kannte bisher nur Umnummerierungen als Räumende. Im GEG macht ein Punkt der Kaskade des § 108 Absatz 1 aus den bisherigen Nummern 4 bis 6 die Nummern 8 bis 10, während ein anderer die bisherige Nummer 9 aufhebt; die Aufhebung suchte danach eine Nummer 9, die inzwischen eine andere Einheit war. Dass eine Aufhebung mitunter einen Platzhalter hinterlässt und dann nichts freigibt, steht erst am Bestand fest und schadet nicht: Vorrang erhält sie nur gegenüber Schritten, die dieselbe Bezeichnung neu vergeben, und eine zugleich weggefallene und neu vergebene Bezeichnung gibt es nicht. Zweitens ist ein Zwischentitel kein Teil des vorangehenden Absatzes. „Aus dem Bereich Verkehr:“ trägt keine Absatzbezeichnung und wurde deshalb angehängt — der Absatz endete dann nicht auf den Punkt, den „In Absatz 4a wird der Punkt am Ende durch ein Semikolon ersetzt“ meint. Er ist jetzt ein eigener, bezeichnungsloser Absatz, wie ihn der Vorspann einer Norm ohnehin bildet. Drittens erbt neu eingesetzter Wortlaut die amtliche Satzzählung. Führt das Stammgesetz sie, so trägt der aus dem Gesetzblatt zitierte Text sie gleichwohl nicht: Sie gehört zur Fassung, nicht zum Verkündungstext. Angefasst wird nur ein geänderter, einzeiliger, mehrsätziger Absatz ohne Zählung — die Mehrzeiligkeit hält Aufzählungen heraus. Geprüft: 348 Tests, REUSE 180/180. GEG 117/2 (war 116/3), dessen Beschlussempfehlung 70 (war 69), § 108 Absatz 1 mit lückenloser Nummernfolge 1 bis 32. Berlin ASOG 6/6 und alle 171 Normen gleich der amtlichen Nachfassung — die beiden benannten Abweichungen sind fort. Bayern, Niedersachsen und die übrigen Belegfälle unverändert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Change-Id: I47d3f9f150cb628ba5a298e95f2c647dac6ffa45
* Ein Gesetz tritt nicht notwendig auf einen Schlag in KraftMatthias Andreas Benkard2026-08-2419-58/+934
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Das Dritte UWG-Änderungsgesetz lässt seinen Artikel 1 Nummer 2 Buchstabe c am 19. Juni 2026 wirksam werden und alles Übrige erst am 27. September; das Infektionsschutz-Änderungsgesetz von 2020 ändert dasselbe Stammgesetz in zwei Artikeln zu zwei Zeitpunkten. Wer alle Befehle zugleich anwendet, erhält dort eine Fassung, die an keinem einzigen Tag gegolten hat. Genau das tat ÄndGgner bisher, und zwar schweigend — die auffälligste Stelle, an der ein Werkzeug, das nie stillschweigend verwerfen will, doch etwas verschwieg. Der Schlussartikel wird jetzt gelesen. Die Artikelwahl erfasst ihn nicht, denn er trägt weder Änderungsformel noch Stammgesetz; maßgeblich ist der erste Artikel hinter dem letzten ändernden, damit in einem Gesetzblatt mit mehreren Gesetzen jedes seine eigene Schlussvorschrift bekommt. Erkannt werden die Grundregel, der Vorbehalt zugunsten späterer Absätze, die abweichende Anordnung für Artikel, Nummern, Buchstaben und Doppelbuchstaben sowie die Rückwirkung („mit Wirkung vom“). Nennt der Wortlaut kein Datum, sondern die Verkündung, so wird keines erfunden: Der Verkündungstag steht nicht im Gesetzestext. Zugeordnet wird über die Herkunft des Befehls — Artikel und Gliederungspfad —, und es gewinnt die besonderste Anordnung. Mit --stichtag (im Vordruck: „Stichtag“) ergibt sich die an jenem Tag geltende Fassung; was noch nicht galt, bleibt unangewandt und steht für sich, nicht unter den Gründen des Scheiterns. Ohne Stichtag bleibt es beim vollen Bestand, aber die Staffelung wird gerügt. Geprüft: 348 Tests (339 + 6 Einheitstests des Lesers + 3 Belegfälle), REUSE 180/180. UWG 1/19 Befehle am 19. Juni gegen 19/19 am 27. September, GEG 115 gegen 116, IfSG 65 gegen 75 — jeweils ohne Zuwachs an manuellen Resten. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Change-Id: I887f233c72a4e49b69f9ede3154dcadd704fb0c3
* Gelesen wird, was im Satz steht, nicht was zuerst gezeichnet wurdeMatthias Andreas Benkard2026-08-247-44/+461
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Der Browser bekommt den Notausgang, den die Befehlszeile schon hatteMatthias Andreas Benkard2026-08-2410-28/+221
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Die Browserfassung galt als die vollwertige zweite Fassung des Erzeugnisses. Zwei Angaben der Befehlszeile fehlten ihr aber: die Beschränkung auf einen einzelnen Artikel und die Ausgabe des maschinell gelesenen Textes. Die erste war im Vordruck nicht vorgesehen, obwohl Arbeiter und Rechenwerk den Wert längst durchreichten — das Formular sandte an ihrer Stelle hart einen leeren Wert. Die zweite war überhaupt nicht erreichbar. Das Fehlende wiegt ungleich. Die Artikelangabe erspart Mühe; die Textausgabe dagegen ist der einzige Weg, einem unerklärlich unangewandten Befehl auf den Grund zu gehen. Wer im Browser arbeitete, stand vor einem Ergebnis, das er nicht nachprüfen konnte, und war auf die Befehlszeile verwiesen — also gerade auf das, was die Browserfassung entbehrlich machen sollte. Die Textgewinnung wandert deshalb aus der Befehlszeilenklasse in den gemeinsamen Kern (Pipeline.extrahiereText); beide Fassungen nehmen fortan denselben Weg. Der Vordruck erhält das Feld „Anzuwendender Artikel“ und das Ankreuzfeld „Statt der Synopse nur den maschinell gelesenen Text der Änderungsdokumente ausgeben“; das Ergebnis kommt wie die Synopse als Verweis zum Öffnen und Sichern. Nebenbei verträgt die Umsetzung nach Wahrheitswerten nun ein nicht gesetztes Feld, das als „undefined“ herüberkommt. Das Handbuch zählt die Absätze des § 14 wieder fortlaufend — es führte (6) und (7) zweimal — und stellt die Angaben des Vordrucks den Schaltern des § 6 Absatz 2 gegenüber. Eine neue Prüfung hält die Ausgabe des Notausgangs gegen den Text, den der Parser bekommt: Führte sie einen anderen vor, so wiese sie in die Irre. Der Prüfbestand umfasst hiernach 335 Prüfungen, sämtlich grün; REUSE meldet 174/174. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Change-Id: I2a9aee042b6454f8d591bc415a5c6f1c1e7b40b6
* Was nicht vorliegt, lässt sich nicht ändernMatthias Andreas Benkard2026-08-2312-58/+1669
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Die Nummer einer Anlage ist eine Norm, kein AufzählungsgliedMatthias Andreas Benkard2026-08-2312-74/+4004
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Der Rest sagt fortan, welcher Art er istMatthias Andreas Benkard2026-08-2315-144/+763
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Eine Synopse mit fünfzig liegengebliebenen Befehlen war bisher eine unsortierte Liste von achtundsechzig verschiedenen Sätzen. Wer sie las, erfuhr über jeden einzelnen Befehl das Genaue und über das Ganze nichts — namentlich nicht, ob eine Vorlage am Werkzeug scheitert, am Wortlaut des Änderungsgesetzes oder am falschen Stand des Stammgesetzes. Neben den ausformulierten Grund tritt deshalb seine Art. Vergeben wird sie dort, wo der Grund entsteht: Die Stellenauflösung, die Textoperation und die Zeilensuche in der Inhaltsübersicht führen sie mit ihrem Wortlaut, weil allein die erzeugende Stelle sie kennt. Der Wortlaut bleibt unberührt und maßgeblich — der Grundsatz der Nichtverwerfung verlangt die genaue Auskunft im Einzelfall; gebündelt wird nur, was ohne Ordnung eine bloße Liste wäre. Den größten Ertrag trägt die Auszählung sofort: Von den fünfzig Resten des Gebäudeenergiegesetzes gegen den heutigen Stamm sind einundvierzig von einer einzigen Art, nämlich „Zieltext nicht vorhanden“ — die Handschrift eines Stammgesetzes, das jünger ist als das Änderungsgesetz. Diese Lage rügt das Werkzeug nunmehr eigens. Dazu liest es die Standangabe der Quelle, und zwar nicht die Standzeile allein: Das gii-XML führt daneben Hinweise der Form „Änderung durch Art. 1 G v. 18.11.2020 … textlich nachgewiesen“, die bezeugen, dass der Wortlaut die Änderung längst trägt, während die Standzeile noch die vorige nennt. Genau daran scheiterten im Infektionsschutzgesetz siebenundzwanzig Befehle, ohne dass jemand den Grund benennen konnte. Verglichen wird das späteste genannte Datum mit der Fassung, die der Einleitungssatz fortschreibt; ist der Stamm der jüngere, ergeht die Rüge einmal je Dokument. Fehlt eine Angabe, schweigt die Prüfung. Zwei Anwendungslücken sind daneben geschlossen: Das ankerlose Anfügen ganzer Paragraphen wird angewandt statt gemeldet, und die Zurückweisung des Einfügeankers „am Ende“ ist als bewusst gezogene Grenze kenntlich gemacht — die Verbindung kommt im gesamten Prüfbestand kein einziges Mal vor, und Vorschriften auf Verdacht werden nicht geschrieben. Geprüft mit „mvnw verify“: 332 Prüfungen, kein Fehlschlag; keine gepinnte Zahl hat sich geändert. REUSE 168/168. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Change-Id: I042c4389034f728c4b66f8161dc15e05938185ba
* Der Stamm bekommt das Alter, das der Einleitungssatz nenntMatthias Andreas Benkard2026-08-2311-26/+657
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Die Anlage wird eine Norm, ihre Nummern noch nichtMatthias Andreas Benkard2026-08-2310-33/+357
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Ein Änderungsgesetz schreibt zwei Stammgesetze fortMatthias Andreas Benkard2026-08-2311-83/+3137
| | | | | | | | | | | | | | | | | | | | | | | | | 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
* Der Browser bekommt, was dem Skript verwehrt bleibtMatthias Andreas Benkard2026-08-2313-63/+1126
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Die fortlaufende Quelltextquelle zieht umMatthias Andreas Benkard2026-08-236-5/+24
| | | | | | | | | | | | | | | | | | Gerrit (gerrit.benkard.de/plugins/gitiles/aendggner) weicht https://git.benkard.de/mulk/aendggner. Nachgezogen ist die Anschrift an allen fünf Stellen: im Handbuch (§ 3 Abs. 2), im Feld SPDX-PackageDownloadLocation der REUSE.toml, in der Zeile „Fortlaufend“ des beigelegten quelltext-fassung.txt (deploy/webpaket.sh) sowie in den Fußzeilen der Startseite und des Impressums. Dort trug der Verweis die Beschriftung „Gerrit“; sie lautet fortan „Git“, denn sie benennt keine bestimmte Oberfläche mehr. Damit bleibt die Nennung nach AGPLv3 § 13 erreichbar. Die REUSE-Prüfung meldet unverändert Konformität mit der Spezifikation 3.3 (154/154). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Change-Id: I52f5fadfece4b0fb7e8c09c097835b90a701a449
* Die AsciiDoc-Fassung des Handbuchs entfälltMatthias Andreas Benkard2026-08-234-696/+9
| | | | | | | | | | | | | | | | | Zwei Wortlaute desselben Handbuchs nebeneinander zu pflegen wäre eine Fehlerquelle; seit der Übersetzung trägt README.md den vollständigen Text. Die beiden Verweise des Bauwerks sind nachgezogen: die Bauanleitung im beigelegten Quelltextarchiv (deploy/webpaket.sh) und der Hinweis auf den Abschnitt „Ausrollen“ (deploy/nginx-aendggner.conf). Die Fundstellen im Verzeichnis der Fassungen bleiben als geschichtliche Angabe stehen. Die REUSE-Prüfung meldet unverändert Konformität mit der Spezifikation 3.3; einhundertvierundfünfzig von einhundertvierundfünfzig Dateien tragen Urheber- und Lizenzangabe. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Change-Id: I6198be600b9d8df38a791163708a2c17ba4328a6
* Das Handbuch liegt auch in Markdown vorMatthias Andreas Benkard2026-08-232-0/+703
| | | | | | | | | | | | | | | | | | | Das Handbuch stand allein als AsciiDoc; wer den Quelltext über ein Verzeichnis betrachtet, das nur Markdown darstellt, sah es als Rohtext. Die Übersetzung gibt den Wortlaut unverändert wieder. Übersetzt sind allein die Auszeichnungen: Überschriften, Quelltextblöcke, Verweise, Aufzählungen und die Begriffsverzeichnisse. Der Attributkopf des AsciiDoc entfällt; an seine Stelle tritt ein Inhaltsverzeichnis über die siebzehn Paragraphen und den Lizenzabschnitt. Die REUSE-Angaben stehen als HTML-Kommentar im Kopf. Die Folge der Absatzziffern ist gegen die AsciiDoc-Fassung abgeglichen und stimmt überein, einschließlich der dort vorgefundenen doppelten Zählung der Absätze 6 und 7 des § 14, die unangetastet bleibt. Die Prüfung meldet unverändert Konformität mit der REUSE-Spezifikation 3.3 (155/155). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Change-Id: Ie930a0f5d847a66522a5f2193ef8524c0cd24487
* Korrektur der öffentlichen WebadresseMatthias Andreas Benkard2026-08-233-5/+5
| | | | Change-Id: Ie5a1dfb641d40b88669dd4a44ec336aaaaea1fa1
* index.html: Ausfüllhilfe wieder über dem EingabeformularMatthias Andreas Benkard2026-08-231-46/+46
| | | | Change-Id: I11dcd6e8b1ae2f5410dc780e56a819d5c5199205
* Die Hinterlegung der Änderungen trägt alleinMatthias Andreas Benkard2026-08-232-24/+84
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Die Unterstreichung der Einfügungen zerschnitt die Unterlängen der Antiqua und ließ eingefügte Wortstücke wie Verweise aussehen. Sie entfällt. Damit fällt aber die Stütze weg, auf der das Farbgerüst bei Farbfehlsichtigkeit ruhte, und diese Stütze war nicht entbehrlich: Rot gegen Grün ist gerade das Paar, das bei Protanopie und Deuteranopie zusammenfällt. Die Messung bestätigt es — der Farbabstand der beiden bisherigen Hinterlegungen betrug bei Deuteranopie ΔE = 4,8 im hellen und ΔE = 4,4 im dunklen Gerüst; sie waren dort ununterscheidbar. An die Stelle des Grüns tritt deshalb ein Blau: Blau bleibt Blau, wo Rot zu Beige wird, und ist zugleich merklich dunkler. Das neue Paar hält in allen drei Formen der Dichromasie ΔE zwischen 24 und 58 und dazu ein Helligkeitsverhältnis von 1,10 bis 1,44; der Text steht überall über 4,5 zu 1. Die Unterstreichung ausdrücklich abzustellen ist geboten: Sie steht im Stilblatt des Browsers und bliebe sonst stehen — ein Mangel, der erst der Ansicht des Erzeugnisses anzusehen war, nicht dem Quelltext. Die Durchstreichung der Streichungen bleibt; sie trägt allein den Schwarzweiß-Ausdruck. Alte und neue Fassung stehen ferner auf demselben weißen Feld. Der Durchschlag-Raster unter der alten Spalte wiederholte nur, was der Spaltenkopf ohnehin sagt, und mindert den Abstand der Hinterlegungen zum Grund. Geprüft an der erzeugten Datei und nicht am Quelltext: Für die Synopse des Bayerischen Jagdgesetzes ist im hellen, im dunklen und im Druckgerüst erhoben, dass keine der achthundertachtzig Einfügungen unterstrichen ist und beide Spalten denselben Grund tragen; dreihundertsiebenundzwanzig Testfälle bestehen, mvnw verify läuft durch. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Change-Id: Iee91db7eb8ec13b5b51d8ad140691bba084971cc
* Der Vordruck richtet sich nach einem wirklichen VordruckMatthias Andreas Benkard2026-08-238-742/+794
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Die bisherige Gestaltung hatte sich am Begriff des amtlichen Formulars orientiert, nicht an einem solchen. Der Abgleich mit einem wirklichen Bundesvordruck — dem Antrag auf Erteilung einer Bescheinigung für den Lohnsteuerabzug bei erweiterter unbeschränkter Einkommensteuerpflicht — hat ergeben, dass sie in fast jedem Merkmal danebenlag. Maßgeblich ist eine einzige Regel, und sie steht im Muster ausgeschrieben: „Weiße Felder bitte ausfüllen“. Grau ist, was die Stelle gedruckt hat — Beschriftungen, Leitspalten, Abschnittsköpfe, die Verfügung am Ende; weiß ist, was der Antragsteller beiträgt. Bisher war es umgekehrt. Diese Regel trägt nun die gesamte Gestaltung und ist im Vordruck selbst benannt. Alles Übrige folgt daraus. Die Zellen stoßen aneinander, ohne Abstand und ohne Rundung, verbunden durch schwarze Haarlinien; die Rahmen sind halbiert, damit zwischen zwei Zellen eine einzige Linie steht. Die Beschriftung sitzt klein im Feld oben links, die Erläuterung in Klammern dahinter. Links läuft die Leitspalte mit den Abschnittsbezeichnungen. Das Ankreuzfeld wird angekreuzt, nicht angehakt. Der Abschnitt „Zur Beachtung:“ nimmt auf, was bisher über Tagline, Haftungsabsatz und noscript-Kasten verstreut war. Und die Meldung wird zur „Verfügung der Zentralstelle“, die auch dann schon dasteht, wenn sie noch leer ist — ein Vordruck zeigt seine Abschnitte, bevor sie ausgefüllt sind. Die Schmuckfarbe entfällt ersatzlos: Das Amtsrot war erfunden, wirkliche Bundesvordrucke führen keine. Rot und Grün bleiben allein dort, wo sie etwas bedeuten. Die Kennung wandert aus dem gerahmten Verzeichnis oben rechts in die Fußecken, links die Vordrucknummer, rechts der Ausgabestand. Die Synopse folgt demselben Gerüst. Ein weiterer Mangel ist dabei zutage getreten: Der Grund der Leitspalte hing am Block statt an der Zelle. Im Druck fällt die Fläche des Blocks weg, sodass die Leitspalte weiß herausgekommen wäre — und das Grau ist keine Zier, es sagt, welche Felder auszufüllen sind. Geprüft an allen drei Seiten und an zwei wirklichen Synopsen (UWG 19/0/6, AGG 23/1/14 als Entwurfsfassung), hell und dunkel, breit und schmal, dazu die Druckvorschau; reuse lint meldet 154/154, mvnw test dreihundertsiebenundzwanzig Testfälle ohne Fehler. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Change-Id: Ie0303f71baf5905fc8255f15ff375015a1de483e
* Die Synopse ergeht fortan als Formblatt ÄG-2Matthias Andreas Benkard2026-08-234-50/+389
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Seit die Aufgabeseite das Gewand eines amtlichen Formblatts trägt, sah man beim Öffnen der Synopse zwei Dokumente zweier Häuser: dort Groteske, Briefkopf und Amtsrot, hier Antiqua auf Weiß ohne Kopf und ohne Fuß. Sie treten nunmehr als Vorgang und Erzeugnis desselben Hauses auf — der Antrag als ÄG-1, die darauf ergehende Synopse als ÄG-2. Der Kopf trägt denselben Aufbau: links die ausstellende Stelle, rechts die Kennung mit Formblatt, Stammgesetz, Erstellungstag und Geltung, bei Entwürfen zusätzlich der Stand. Die Felder des Spaltenkopfes und die Überschriften der beiden Sonderabschnitte treten als schwarze Balken auf wie die Legende des Feldblocks. Jede Norm trägt im Steg links eine Randziffer, wie der Vordruck die Feldziffer; sie macht die Abschnitte zugleich zitierbar. Die alte Fassung liegt auf dem Kastenton wie ein Durchschlag, die neue auf Bogenweiß. Die Schrift bleibt geteilt: Der Vordruck steht in der Groteske, der Wortlaut der Normen in der Antiqua. Amtskopf und Vorschrift sind zweierlei, im Gesetzblatt wie hier. Dass das Farbgerüst zweimal geführt wird, ist unvermeidlich und nun an beiden Stellen vermerkt — die Synopse wird aus einem blob:-Verweis geöffnet und kann kein fremdes Stilblatt einbinden. Drei Mängel traten dabei zutage. Der Spaltenkopf klebte innerhalb des Kopfblocks und verschwand deshalb beim Blättern alsbald; er steht jetzt mit der Gegenüberstellung in einem eigenen Block. Auf schmalen Geräten standen zwei Spalten Gesetzestext nebeneinander; unterhalb von sechzig Halbgevierten wird gestapelt, und jede Spalte beschriftet sich dort selbst. Und die Druckblöcke beider Stilblätter setzten nur einen Teil des Farbgerüstes zurück — aus einem dunkel eingestellten Browser heraus wäre die alte Spalte als schwarzer Block aus dem Drucker gekommen. Geprüft an zwei wirklichen Läufen der Befehlszeilenfassung: UWG mit dem Dritten Änderungsgesetz (19 Befehle, 0 manuell, 6 Normen) und AGG mit dem Regierungsentwurf (23 Befehle, 1 manuell, 14 Normen, Entwurfsfassung), beide hell und dunkel, breit und schmal, dazu die Druckvorschau; reuse lint meldet 154/154, mvnw test dreihundertsiebenundzwanzig Testfälle ohne Fehler. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Change-Id: I76d1f5f14638700d695a7ffe7a6a5933bee10611
* Die Startseite tritt fortan als amtliches Formblatt aufMatthias Andreas Benkard2026-08-236-126/+561
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Die Browserfassung trug ein schmuckloses Kleid: Antiqua auf Weiß, eine Spalte, drei dünn gerahmte Kästen. Sauber, aber austauschbar — es sah aus wie ein Aufsatz und nicht wie das, was das Erzeugnis ist: eine Stelle, die Änderungsbefehle abarbeitet und darüber Rechenschaft ablegt. Der Satzspiegel liegt nunmehr als umrandeter Bogen auf einer Unterlage. Oben steht ein Briefkopf: links die ausstellende Stelle, rechts die Kennung des Vordrucks als Verzeichnis — Formblatt ÄG-1, Vorgang oder Anlage, Geltung nichtamtlich. Die Kennung steht im Text und nicht im Stilblatt, damit sie sich auswählen und vorlesen lässt; der Zusatz „nichtamtlich“ hält fest, dass die amtliche Anmutung keine amtliche Herkunft behauptet. Darunter die Doppellinie, kräftig in Amtsrot über dünn in Rasterfarbe. Das Formular ist ein Feldblock mit der Legende „Antrag auf Erstellung einer Synopse“ als schwarzem Balken im Rahmen. Die Feldziffern entstehen aus einem Zähler des Stilblattes und stehen im Steg links, sodass die Auszeichnung der Felder unangetastet bleibt. Die Meldung führt ihr Zeichen mit — ✓ und ! —, damit der Zustand auch ohne Farbe erkennbar ist; es setzt das Stilblatt, weil die Textverarbeitung den Text ersetzt. Zwei Dinge treten hinzu, die gänzlich fehlten: eine sichtbare Fokusanzeige und ein Druckbild. Sämtliche Angriffspunkte der Textverarbeitung bleiben wörtlich erhalten; app.js, worker.js und der Java-Teil sind nicht angetastet. Aufgenommen sind ferner aria-describedby für die Erläuterungssätze der Felder und aria-live für die Meldung, die ihren Text bislang stumm wechselte. Geprüft an allen drei Seiten in hellem und dunklem Gewand, in schmaler Breite und in der Druckvorschau, ferner mit den drei Zuständen der Meldung; reuse lint meldet 154/154, mvnw test dreihundertfünfundzwanzig Testfälle ohne Fehler. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Change-Id: Icc469062e28966384f25598750e198df2fbb29f7
* Die Lizenzaussage lautet überall gleich und wird geprüftMatthias Andreas Benkard2026-08-235-3/+192
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Das Impressum sprach von der „Version 3“ ohne Nachfolgeklausel, der Fußzeilenverweis der Startseite von „AGPLv3“, die „pom.xml“ von gar nichts. Drei Stellen, drei Genauigkeitsgrade — und in der Auszeichnung, die soeben entstanden ist, steht „AGPL-3.0-or-later“. Eine Lizenz, die je nach Fundstelle anders lautet, ist keine gewählte, sondern eine offengelassene. Sie lautet fortan überall auf die Version 3 oder, nach Wahl des Empfängers, eine spätere Fassung: im Impressum ausgeschrieben, im Fußzeilenverweis kurz, in der „pom.xml“ als „licenses“-Block mit Verweis auf den Wortlaut im Quelltext. Das Handbuch erhält einen Abschnitt „Lizenz“, der die drei vorkommenden Lizenzen nennt, die Sonderstellung des Prüfbestandes erklärt und den Prüfbefehl angibt. Geprüft wird zweifach. Der Lauf von „spotless:check“ ist an die Phase „verify“ gebunden und hält den Bau an, sobald eine Quelldatei ohne Kopfzeile oder ohne die vereinbarte Formatierung hinzukommt — die Kopfzeilen sind damit nicht bloß gesetzt, sondern gehalten. Für alles Übrige gilt „uvx reuse lint“; ein Fortlaufwerk gibt es in diesem Repositorium nicht, weshalb der Befehl im Handbuch steht und nicht in einer Baueinstellung. Die Prüfung meldet Konformität mit der Fassung 3.3 der Spezifikation: einhundertvierundfünfzig von einhundertvierundfünfzig Dateien tragen Urheber- und Lizenzangabe, keine Lizenz bleibt ungenutzt, keine fehlt. Der Bau läuft samt der nunmehr scharfen Formatprüfung durch, dreihundertfünfundzwanzig Testfälle bestehen. Das ausgelieferte Quelltextarchiv ist von sich aus konform, denn „.gitattributes“ nimmt den Prüfbestand von ihm aus. „FASSUNGEN.txt“ führt die Fassung vom 23. August 2026. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Change-Id: Ief8a247b359ed34d8598fbc76f6d86a84575b094