aboutsummaryrefslogtreecommitdiff
path: root/src/wasm/java/eu
Commit message (Collapse)AuthorAgeFilesLines
* Der Browser bekommt den Notausgang, den die Befehlszeile schon hatteMatthias Andreas Benkard33 hours1-4/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Der Formatierer setzt die Kopfzeilen, nicht die HandMatthias Andreas Benkard2 days2-14/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Achtundfünfzig Java-Dateien brauchen dieselben zwei Zeilen, und jede künftige braucht sie ebenfalls. Von Hand gesetzt, hielte das keinen Monat: Die eine Datei, die man vergisst, ist genau die, an der es später auffällt. Spotless führt daher fortan einen „licenseHeader“ mit dem Wortlaut, den die übrigen Dateien schon tragen. Der voreingestellte Trenner für Java ist das Schlüsselwort „package“; die Kopfzeilen treten also über die Paketangabe, und Spotless prüft und ergänzt sie bei jedem Lauf. Dabei hat sich ergeben, dass „src/wasm/java“ der Formatprüfung bislang verborgen war. Das Verzeichnis tritt dem Quellbaum erst im Profil „wasm“ bei, und zwar durch das Build-Helper-Plugin; im gewöhnlichen Bau sah Spotless es nie. Die Quellverzeichnisse sind deshalb ausdrücklich benannt („src/*/java/**/*.java“), was zugleich die doppelte Erfassung unter dem Profil vermeidet. Als Folge sind „BrowserMain“ und „InflaterErsatz“ erstmals umformatiert worden. Es geht dabei allein um das Satzbild — ein umbrochener Kommentarsatz und vier Annotationen, die nunmehr je auf eigener Zeile stehen; am Sinn ändert sich nichts. Sie stehen hier bewusst neben den Kopfzeilen und nicht in einem eigenen Commit, denn beides folgt aus derselben Einstellung und wäre getrennt nicht nachvollziehbar. Der Lauf von „spotless:apply“ hält achtundfünfzig Dateien sauber. Dreihundertfünfundzwanzig Testfälle bestehen unverändert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Change-Id: I3a41b93108ad13ed16f78385d6272e5c10a255a1
* Die Web-App rechnet im Browser statt auf dem ServerMatthias Andreas Benkard10 days2-0/+301
Bisher lief die Weboberfläche auf einem JDK-HttpServer: Uploads landeten als temporäre Dateien auf dem Server, die Synopse entstand dort. Das kostete Betrieb (systemd, Reverse Proxy, Rate-Limiting, Timeouts) und verlangte ein Datenschutzversprechen, das nur zusicherbar, nicht nachprüfbar war — gerade Entwurfstexte verließen den Rechner der Nutzer:innen. Neu übersetzt `./mvnw -Pwasm package` dieselbe Pipeline mit GraalVM Web Image (`native-image --tool:svm-wasm`) nach WebAssembly, PDFBox eingeschlossen. Ausgeliefert werden nur noch statische Dateien; gerechnet wird im Browser. Die erzeugte Synopse ist byteweise identisch mit der der Befehlszeile (SHA-256 verglichen für IfSG 48/27/21 und BayJG 151/3/54). Die Befehlszeile bleibt unberührt: `./mvnw package` erzeugt unverändert das JAR, alle Optionen und Meldungstexte sind gleich, das Wasm-Profil ist rein additiv und verlangt Oracle GraalVM 25.1+ (die CE hat kein Web Image). Portabilitätsschnitt (nützt beiden Fassungen): * `Quelle` (Name + Bytes) ersetzt `Path` in der Pipeline; nur die Befehlszeile kennt noch ein Dateisystem. Der Name trägt genau den bisherigen `getFileName()`-Text, damit Warnungen und Quellenzeile wortgleich bleiben. * `DateiTyp` erkennt PDF/XML/Klartext an den Signaturbytes. Tika entfällt — eine schwergewichtige Abhängigkeit samt ServiceLoader- und XML-Konfiguration weniger, was der Wasm-Übersetzung unmittelbar zugutekommt. Vier Eigenheiten von Web Image, die der Quelltext jeweils an Ort und Stelle vermerkt: * `java.util.zip.Inflater` ist nicht angebunden (GR-65205), ohne Inflate ist kein PDF lesbar. `InflaterErsatz` substituiert ihn durch jzlib. * Typisierte JS-Felder lassen sich nicht nach `byte[]` umsetzen („byteArrayHub is not defined“); der Dateiinhalt wandert als Base64. * JULs Standardformatter ruft `StackWalker`, den es dort nicht gibt. * Im Worker fehlt `document.currentScript`, worauf die Laufzeit das Wasm-Modul neben `worker.js` sucht; die VM wird deshalb mit ausdrücklichem Pfad ein zweites Mal gestartet. Die Reachability-Metadaten stammen aus einem Lauf des Tracing-Agents über die Pipeline; die PDFBox- und FontBox-Ressourcen sind als Globs ergänzt, sonst scheitern PDFs an „Could not find referenced cmap stream Identity-H“. Entfallen: WebMain, UploadHandler, StaticHandler, Multipart und die systemd-Unit. Die nginx-Vorlage liefert jetzt statische Dateien aus, und die Datenschutzseite sagt, was nun stimmt: Die Dateien verlassen den Rechner nicht. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Change-Id: I38faf2ac0f764d601f080d4276babe4747773683