From 9feaf3b9eebd79a37a252c2ffdf241f4190b2637 Mon Sep 17 00:00:00 2001 From: Matthias Andreas Benkard Date: Mon, 24 Aug 2026 07:37:17 +0200 Subject: Der Browser bekommt den Notausgang, den die Befehlszeile schon hatte MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Change-Id: I2a9aee042b6454f8d591bc415a5c6f1c1e7b40b6 --- README.md | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) (limited to 'README.md') diff --git a/README.md b/README.md index 3d69818..3341f47 100644 --- a/README.md +++ b/README.md @@ -157,7 +157,7 @@ Fassungen (`FASSUNGEN.txt`) geführt. `mvnw` abweichend bestimmt wird. (3) Vorausgesetzt wird ein Java-Entwicklungsbausatz der Fassung 21 oder neuer. -Für die Herstellung der Browserfassung gilt abweichend § 14 Absatz 3. +Für die Herstellung der Browserfassung gilt abweichend § 14 Absatz 4. ## § 5 Zulässige Eingaben @@ -476,7 +476,18 @@ Pipeline (`eu.mulk.aendggner.Pipeline`, § 16 Absatz 1) über ein Upload-Formular zugänglich macht: Stammgesetz- und Änderungsgesetz-Datei(en) wählen, Synopse erhalten. -(2) Über dem Formular steht ein zugeklappter Einführungsblock, der zwei +(2) Der Vordruck stellt außer den beiden Dateifeldern dieselben Angaben zur +Verfügung wie die Befehlszeile nach § 6 Absatz 2, nämlich das Feld +„Anzuwendender Artikel“ (`--artikel`), das Ankreuzfeld „Unveränderte +Vorschriften mit in die Synopse aufnehmen“ (`--vollstaendig`) und das +Ankreuzfeld „Statt der Synopse nur den maschinell gelesenen Text der +Änderungsdokumente ausgeben“ (`--extract-only`). Das letztgenannte ist kein +Zierat: Ohne es hätte, wer im Browser arbeitet, keine Möglichkeit, einem +unerklärlich unangewandten Befehl auf den Grund zu gehen. Der ausgegebene Text +ist derselbe, den der Parser bekommt; er lässt sich sichern, von Hand +berichtigen und als Klartextdatei wieder einreichen. + +(3) Über dem Formular steht ein zugeklappter Einführungsblock, der zwei durchgerechnete Fälle mit Verweisen auf die amtlichen Fundstellen anbietet, nämlich das UWG (`gesetze-im-internet.de/uwg_2004/xml.zip`) mit dem Dritten Gesetz zu seiner Änderung (BGBl. 2026 I Nr. 43) und das AGG @@ -484,7 +495,7 @@ zu seiner Änderung (BGBl. 2026 I Nr. 43) und das AGG Mitausgeliefert wird nichts; die Seite ruft die Dateien auch nicht selbst ab, sie verweist nur darauf. -(3) Ein Server ist nicht erforderlich: Die vollständige Verarbeitung — +(4) Ein Server ist nicht erforderlich: Die vollständige Verarbeitung — PDF-Textgewinnung mit PDFBox eingeschlossen — läuft als WebAssembly-Modul im Browser, übersetzt mit GraalVM Web Image aus demselben Java-Quelltext. Ausgeliefert werden nur statische Dateien; die gewählten Dokumente verlassen den @@ -496,7 +507,7 @@ nicht in der Community Edition: JAVA_HOME=/pfad/zu/oracle-graalvm ./mvnw -Pwasm package ``` -(4) Ergebnis ist `target/web/` mit `index.html`, `app.js`, `worker.js`, +(5) Ergebnis ist `target/web/` mit `index.html`, `app.js`, `worker.js`, `style.css`, `favicon.svg`, `aendggner.js` und `aendggner.js.wasm` (rund 17 MB, komprimiert etwa 5 MB). Das Verzeichnis ist so, wie es dasteht, auslieferbar: `deploy/webpaket.sh` läuft am Ende desselben Befehls, wirft den mehrere hundert @@ -504,7 +515,7 @@ Megabyte großen Textzwischenschritt `aendggner.js.wat` fort, schickt das Modul durch `wasm-opt -Oz` und legt den Quelltext der gebauten Fassung als `aendggner-quelltext.tar.gz` samt `quelltext-fassung.txt` bei. -(5) Die Größe des Moduls beruht auf vier Vorkehrungen; wer eine davon zurücknimmt, +(6) Die Größe des Moduls beruht auf vier Vorkehrungen; wer eine davon zurücknimmt, handelt sich die Megabyte wieder ein: 1. `-Os` beim Übersetzen statt der auf Durchsatz gerichteten Voreinstellung; @@ -522,7 +533,7 @@ handelt sich die Megabyte wieder ein: nutzt Binaryen auch Vorschläge, die noch kein Browser annimmt, und das Modul scheitert erst beim Instanziieren. -(6) Im Quelltextarchiv fehlt der Beispielkorpus; `.gitattributes` nimmt +(7) Im Quelltextarchiv fehlt der Beispielkorpus; `.gitattributes` nimmt `src/test/resources/sampledata` von `git archive` aus. Es sind Gesetzes- und Drucksachentexte fremder Urheberschaft, an denen allein die Tests messen — Quelltext im Sinne der AGPLv3 sind sie nicht, gebaut wird ohne sie, und sie @@ -532,18 +543,18 @@ die Anschrift nach § 3 Absatz 2. Wächst das Archiv wieder über 8 MiB, so bric `webpaket.sh` ab; alsdann sind Massendaten ins Repository geraten, die dort nicht hingehören. -(7) Trägt der Arbeitsbaum uneingecheckte Änderungen, so bricht die Herstellung -nach Absatz 3 ab, denn der beigelegte Quelltext wäre alsdann nicht der gebaute. +(8) Trägt der Arbeitsbaum uneingecheckte Änderungen, so bricht die Herstellung +nach Absatz 4 ab, denn der beigelegte Quelltext wäre alsdann nicht der gebaute. Für einen Probelauf hilft `QUELLTEXT_UNGEPRUEFT=1`. -(6) Zur örtlichen Ansicht genügt `file://` nicht; Browser laden Wasm-Module und +(9) Zur örtlichen Ansicht genügt `file://` nicht; Browser laden Wasm-Module und Worker nur über HTTP (): ```shell jwebserver -d target/web ``` -(7) Die Befehlszeilenfassung (§ 6) bleibt hiervon unberührt und ist weiterhin der +(10) Die Befehlszeilenfassung (§ 6) bleibt hiervon unberührt und ist weiterhin der Weg für Massenläufe. ## § 15 Ausrollen -- cgit v1.2.1