From 22f19c3afc4d51d7714647c5635bb068cf32d433 Mon Sep 17 00:00:00 2001 From: Matthias Andreas Benkard Date: Tue, 25 Aug 2026 22:25:21 +0200 Subject: =?UTF-8?q?Das=20Erzeugnis=20gibt=20seine=20Fassung=20heraus=20und?= =?UTF-8?q?=20pr=C3=BCft=20sie=20selbst?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- .../java/eu/mulk/aendggner/wasm/BrowserMain.java | 26 ++++++++++++++++------ 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'src/wasm') diff --git a/src/wasm/java/eu/mulk/aendggner/wasm/BrowserMain.java b/src/wasm/java/eu/mulk/aendggner/wasm/BrowserMain.java index a1fc180..a7a26b6 100644 --- a/src/wasm/java/eu/mulk/aendggner/wasm/BrowserMain.java +++ b/src/wasm/java/eu/mulk/aendggner/wasm/BrowserMain.java @@ -23,8 +23,9 @@ import org.graalvm.webimage.api.JSValue; * damit dieselbe {@link Pipeline} auf wie Befehlszeile und Tests. * *

Erwartet ein JS-Objekt {stamm: {name, base64}, patches: [{name, base64}], artikel, - * stichtag, vollstaendig, nurText} und liefert {html, angewandt, manuell, - * normen} — bei nurText stattdessen {text} — oder {fehler} + * stichtag, vollstaendig, nachfassung, nurText} und liefert {html, angewandt, + * manuell, normen, neufassung, abgleich} — bei nurText stattdessen {text} + * — oder {fehler} * zurück. Geworfen wird nichts: Eine Ausnahme im Wasm hinterlässt auf der JS-Seite nur * einen unlesbaren Stapel, also wird jeder Fehler als Text zurückgereicht. * @@ -73,6 +74,8 @@ public final class BrowserMain { var artikel = text(eingabe.get("artikel")); var stichtag = text(eingabe.get("stichtag")); var vollstaendig = Boolean.TRUE.equals(wahrheitswert(eingabe.get("vollstaendig"))); + var nachfassungsDatei = eingabe.get("nachfassung"); + var nachfassung = nachfassungsDatei == null ? null : quelle(nachfassungsDatei); if (Boolean.TRUE.equals(wahrheitswert(eingabe.get("nurText")))) { // Der Notausgang der Befehlszeile (--extract-only) steht auch hier offen: Wer einem Rest @@ -84,11 +87,14 @@ public final class BrowserMain { var ergebnis = Pipeline.erzeugeSynopse( - stamm, - List.copyOf(patches), - artikel == null || artikel.isBlank() ? null : artikel, - vollstaendig, - stichtag == null || stichtag.isBlank() ? null : LocalDate.parse(stichtag.strip())); + Pipeline.Auftrag.von(stamm, List.copyOf(patches)) + .mitArtikel(artikel == null || artikel.isBlank() ? null : artikel) + .mitVollstaendig(vollstaendig) + .mitStichtag( + stichtag == null || stichtag.isBlank() + ? null + : LocalDate.parse(stichtag.strip())) + .mitNachfassung(nachfassung)); // Java-Werte kämen auf der JS-Seite als undurchsichtige Proxys an; JSString/JSNumber // erzeugen echte JS-Werte. @@ -96,6 +102,12 @@ public final class BrowserMain { antwort.set("angewandt", JSNumber.of(ergebnis.anzahlAngewandt())); antwort.set("manuell", JSNumber.of(ergebnis.anzahlManuell())); antwort.set("normen", JSNumber.of(ergebnis.anzahlGeaenderteNormen())); + // Die fortgeschriebene Fassung geht stets mit heraus; die Seite bietet sie zum Sichern an. + // Wer im Browser arbeitet, hat sonst keinen Weg, die Kette Heft auf Heft zu schließen. + antwort.set("neufassung", JSString.of(ergebnis.neufassung())); + if (ergebnis.abgleich() != null) { + antwort.set("abgleich", JSString.of(ergebnis.abgleich().kurzbericht())); + } } catch (Throwable e) { e.printStackTrace(); var meldung = e.getMessage(); -- cgit v1.2.1